diff -burN srchybrid-original/ServerList.cpp srchybrid/ServerList.cpp --- srchybrid-original/ServerList.cpp 2004-04-07 13:11:06.000000000 +0200 +++ srchybrid/ServerList.cpp 2004-05-07 02:47:22.000000000 +0200 @@ -582,7 +582,7 @@ const CServer* nextserver = GetServerAt(j); sbuffer.ip = nextserver->GetIP(); - sbuffer.port = nextserver->GetPort(); + sbuffer.port = nextserver->GetConnPort(); uint16 tagcount = 11; if (nextserver->GetListName() && nextserver->GetListName()[0] != '\0') tagcount++; @@ -590,6 +590,8 @@ tagcount++; if (nextserver->GetDescription() && nextserver->GetDescription()[0] != '\0') tagcount++; + if (nextserver->GetPort() != nextserver->GetConnPort()) + tagcount++; sbuffer.tagcount = tagcount; servermet.Write(&sbuffer, sizeof sbuffer); @@ -613,6 +615,12 @@ serveruser.WriteTagToFile(&servermet); CTag serverfiles("files", nextserver->GetFiles() ); serverfiles.WriteTagToFile(&servermet); + if (nextserver->GetPort() != nextserver->GetConnPort()) { + char temp[64] ; + sprintf(temp, "%d", nextserver->GetPort()) ; + CTag auxportslist("auxportslist", temp); + auxportslist.WriteTagToFile(&servermet); + } CTag serverping(ST_PING, nextserver->GetPing() ); serverping.WriteTagToFile(&servermet); CTag serverlastp(ST_LASTPING, nextserver->GetLastPingedTime() ); diff -burN srchybrid-original/ServerListCtrl.cpp srchybrid/ServerListCtrl.cpp --- srchybrid-original/ServerListCtrl.cpp 2004-04-21 14:08:52.000000000 +0200 +++ srchybrid/ServerListCtrl.cpp 2004-05-07 02:48:58.000000000 +0200 @@ -61,7 +61,7 @@ InsertColumn(10,GetResString(IDS_SOFTFILES), LVCFMT_RIGHT, 50); InsertColumn(11,GetResString(IDS_HARDFILES), LVCFMT_RIGHT, 50); InsertColumn(12,GetResString(IDS_VERSION), LVCFMT_LEFT, 50); - + InsertColumn(13, GetResString(IDS_AUXPORTS), LVCFMT_LEFT, 50); SetAllIcons(); Localize(); LoadSettings(CPreferences::tableServer); @@ -169,6 +169,11 @@ hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(12, &hdi); strRes.ReleaseBuffer(); + + strRes = GetResString(IDS_AUXPORTS); + hdi.pszText = strRes.GetBuffer(); + pHeaderCtrl->SetItem(13, &hdi); + strRes.ReleaseBuffer(); } void CServerListCtrl::RemoveServer(CServer* todel) @@ -231,13 +236,16 @@ if (theApp.serverconnect->IsConnected() && (cur_srv = theApp.serverconnect->GetCurrentServer()) != NULL && cur_srv->GetPort() == server->GetPort() + && cur_srv->GetConnPort() == server->GetConnPort() && stricmp(cur_srv->GetAddress(), server->GetAddress()) == 0) SetItemState(itemnr,LVIS_GLOW,LVIS_GLOW); else SetItemState(itemnr, 0, LVIS_GLOW); CString temp; - temp.Format(_T("%s : %i"), server->GetAddress(), server->GetPort()); + if (server->GetConnPort() != server->GetPort()) + temp.Format(_T("%s : %i/%i"), server->GetAddress(), server->GetPort(), server->GetConnPort()); + else temp.Format(_T("%s : %i"), server->GetAddress(), server->GetPort()); SetItemText(itemnr, 1, temp); SetItemText(itemnr,0,server->GetListName()?(LPCTSTR)server->GetListName():_T("")); SetItemText(itemnr,2,server->GetDescription()?(LPCTSTR)server->GetDescription():_T("")); @@ -320,6 +328,13 @@ } } SetItemText(itemnr,12,temp); + // Soft Files + if(server->GetConnPort() != server->GetPort()){ + temp.Format(_T("%i"), server->GetConnPort()); + SetItemText(itemnr, 13, temp); + } + else + SetItemText(itemnr,13,_T("")); } BEGIN_MESSAGE_MAP(CServerListCtrl, CMuleListCtrl) diff -burN srchybrid-original/ServerSocket.cpp srchybrid/ServerSocket.cpp --- srchybrid-original/ServerSocket.cpp 2004-04-25 11:47:26.000000000 +0200 +++ srchybrid/ServerSocket.cpp 2004-05-07 02:52:46.000000000 +0200 @@ -198,19 +198,30 @@ // save TCP flags in 'cur_server' ASSERT( cur_server ); + uint32 ConnPort = 0 ; + uint32 rport = cur_server->GetConnPort() ; if (cur_server){ if (size >= sizeof(LoginAnswer_Struct)+4){ if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(" Flags=%08x\n", *((uint32*)(packet + sizeof(LoginAnswer_Struct)))); cur_server->SetTCPFlags(*((uint32*)(packet + sizeof(LoginAnswer_Struct)))); + if (size >= sizeof(LoginAnswer_Struct)+8) { + // aux port login : we should use the 'standard' port of this server to advertize to other clients + ConnPort = *((uint32*)(packet + sizeof(LoginAnswer_Struct) + 4)) ; + cur_server->SetPort(ConnPort) ; + } } else cur_server->SetTCPFlags(0); // copy TCP flags into the server in the server list - CServer* pServer = theApp.serverlist->GetServerByAddress(cur_server->GetAddress(), cur_server->GetPort()); - if (pServer) + CServer* pServer = theApp.serverlist->GetServerByAddress(cur_server->GetAddress(), rport); + if (pServer) { pServer->SetTCPFlags(cur_server->GetTCPFlags()); + if (ConnPort) pServer->SetPort(ConnPort); + theApp.emuledlg->serverwnd->serverlistctrl.RefreshServer(pServer); + theApp.emuledlg->serverwnd->UpdateMyInfo(); + } } if (la->clientid == 0){ @@ -518,7 +529,7 @@ } SetConnectionState(CS_CONNECTING); - if (!this->Connect(server->GetAddress(),server->GetPort())){ + if (!this->Connect(server->GetAddress(),server->GetConnPort())){ int error = this->GetLastError(); if ( error != WSAEWOULDBLOCK){ AddLogLine(false,GetResString(IDS_ERR_CONNECTIONERROR),cur_server->GetListName(),cur_server->GetFullIP(),cur_server->GetPort(), GetErrorMessage(error, 1)); diff -burN srchybrid-original/ServerWnd.cpp srchybrid/ServerWnd.cpp --- srchybrid-original/ServerWnd.cpp 2004-04-11 14:52:44.000000000 +0200 +++ srchybrid/ServerWnd.cpp 2004-05-07 02:53:48.000000000 +0200 @@ -644,6 +644,8 @@ m_MyInfo << GetResString(IDS_SW_NAME) << ":\t" << srv->GetListName() << "\r\n"; m_MyInfo << GetResString(IDS_DESCRIPTION) << ":\t" << srv->GetDescription() << "\r\n"; m_MyInfo << GetResString(IDS_IP) << ":\t" << srv->GetAddress() << ":" << srv->GetPort() << "\r\n"; +// if (srv->GetConnPort() != srv->GetPort()) + m_MyInfo << GetResString(IDS_AUXPORTS) << ":\t" << srv->GetConnPort() << "\r\n"; m_MyInfo << GetResString(IDS_VERSION) << ":\t" << srv->GetVersion() << "\r\n"; m_MyInfo << GetResString(IDS_UUSERS) << ":\t" << GetFormatedUInt(srv->GetUsers()) << "\r\n"; m_MyInfo << GetResString(IDS_PW_FILES) << ":\t" << GetFormatedUInt(srv->GetFiles()) << "\r\n"; diff -burN srchybrid-original/emule.rc srchybrid/emule.rc --- srchybrid-original/emule.rc 2004-04-30 13:45:02.000000000 +0200 +++ srchybrid/emule.rc 2004-05-07 02:54:36.000000000 +0200 @@ -2992,6 +2992,7 @@ BEGIN IDS_ERR_NOTCONNECTEDKAD "You are currently not connected to the Kad network!" IDS_IRC_NOSFS "No Shared File Selected" + IDS_AUXPORTS "Aux Ports" IDS_RESETLABEL "Auto completion (history function)" IDS_IRC_IGNOREMISCMESSAGE "Ignore Misc info messages" IDS_KNOWN "Known" diff -burN srchybrid-original/resource.h srchybrid/resource.h --- srchybrid-original/resource.h 2004-04-30 13:45:04.000000000 +0200 +++ srchybrid/resource.h 2004-05-07 02:56:10.000000000 +0200 @@ -1300,6 +1300,7 @@ #define IDI_ICON1 1351 #define IDS_KADCONTACTSREAD 1351 #define IDS_ERR_KADCONTACTS 1352 +#define IDS_AUXPORTS 1353 #define IDC_ANIMATE1 2000 #define IDC_STATUS 2001 #define IDC_FILESTATUS 2002 diff -burN srchybrid-original/server.cpp srchybrid/server.cpp --- srchybrid-original/server.cpp 2004-03-29 22:19:08.000000000 +0200 +++ srchybrid/server.cpp 2004-05-07 02:57:56.000000000 +0200 @@ -32,6 +32,7 @@ { taglist = new CTypedPtrList; port = in_data->port; + realport = 0 ; tagcount = 0; ip = in_data->ip; in_addr host; @@ -60,7 +61,7 @@ CServer::CServer(uint16 in_port, LPCSTR i_addr) { port = in_port; - + realport = 0 ; taglist = new CTypedPtrList; tagcount = 0; @@ -109,6 +110,7 @@ strcpy(ipfull,pOld->ipfull); files = pOld->files; users = pOld->users; + realport = pOld->realport; preferences = pOld->preferences; ping = pOld->ping; failedcount = pOld->failedcount; @@ -226,6 +228,10 @@ users = tag->tag.intvalue; delete tag; } + else if (!strcmp(tag->tag.tagname,"auxportslist")){ + if (tag->tag.type == 2) realport = atoi(tag->tag.stringvalue); + delete tag; + } else AddTag(tag); } diff -burN srchybrid-original/server.h srchybrid/server.h --- srchybrid-original/server.h 2004-04-10 15:52:26.000000000 +0200 +++ srchybrid/server.h 2004-05-07 03:05:44.000000000 +0200 @@ -51,7 +51,11 @@ LPCSTR GetListName() const {return listname;} LPCSTR GetFullIP() const {return ipfull;} LPCSTR GetAddress() const; - uint16 GetPort() const {return port;} + // the official port + uint16 GetPort() const {return realport ? realport : port;} + // the connection port + uint16 GetConnPort() const {return port;} + void SetPort(uint32 val) { realport = val;} bool AddTagFromFile(CFileDataIO* servermet); void SetListName(LPCSTR newname); void SetDescription(LPCSTR newdescription); @@ -117,6 +121,7 @@ CHAR ipfull[3+1+3+1+3+1+3+1]; // 16 uint32 ip; uint16 port; + uint16 realport ; uint8 staticservermember; uint32 failedcount; CTypedPtrList* taglist; diff -burN srchybrid-original/sockets.cpp srchybrid/sockets.cpp --- srchybrid-original/sockets.cpp 2004-04-25 11:47:24.000000000 +0200 +++ srchybrid/sockets.cpp 2004-05-07 02:59:52.000000000 +0200 @@ -208,7 +208,7 @@ CTag tagPort(CT_PORT,thePrefs.GetPort()); tagPort.WriteTagToFile(&data); - CTag tagFlags(CT_SERVER_FLAGS,SRVCAP_ZLIB | SRVCAP_NEWTAGS); + CTag tagFlags(CT_SERVER_FLAGS,SRVCAP_ZLIB | SRVCAP_NEWTAGS | SRVCAP_AUXPORT); // aux port compatable client tagFlags.WriteTagToFile(&data); // eMule Version (14-Mar-2004: requested by lugdunummaster (need for LowID clients which have no chance