freebsd-ports/net-p2p/verlihub/files/patch-thublink
Pav Lucistnik 8856c55db6 - Update to 0.9.8e-r2
PR:		ports/140704
Submitted by:	Mikle Davidkin <skylord@vt.net.ru> (maintainer)
2010-01-20 21:58:38 +00:00

325 lines
9.3 KiB
Text

Index: casyncconn.cpp
===================================================================
RCS file: /cvsroot/verlihub/verlihub/src/casyncconn.cpp,v
retrieving revision 1.89
diff -u -r1.89 casyncconn.cpp
--- src/casyncconn.cpp 12 Sep 2005 21:28:50 -0000 1.89
+++ src/casyncconn.cpp 17 Jun 2006 21:27:43 -0000
@@ -94,33 +94,13 @@
mType(ct)
{
mMaxBuffer=MAX_SEND_SIZE;
- struct sockaddr saddr;
- struct sockaddr_in *addr_in;
- socklen_t addr_size;
-
- addr_size = sizeof(saddr);
- unsigned int addr;
-
mIp=0;
ClearLine();
mBufEnd = mBufReadPos = 0;
mRegFlag = 0;
if(mSockDesc)
{
- if(0 > getpeername(mSockDesc, &saddr, &addr_size))
- {
- if(Log(2)) LogStream() << "Error getting peername, closing" << endl;
- CloseNow();
- }
- addr_in = (struct sockaddr_in *)&saddr;
- // copy IP
- addr = mIp = addr_in->sin_addr.s_addr;
- // asci ip addr
- mAddrIP = inet_ntoa(addr_in->sin_addr);
- // host name
- if( mxServer && mxServer->mUseDNS ) DNSLookup();
- // port number
- mAddrPort=addr_in->sin_port;
+ FetchSockAddr();
}
memset (&mCloseAfter,0, sizeof(mCloseAfter));
}
@@ -168,6 +148,32 @@
this->Close();
}
+/** Fetch IP addr from socket */
+void cAsyncConn::FetchSockAddr()
+{
+ struct sockaddr saddr;
+ struct sockaddr_in *addr_in;
+ socklen_t addr_size;
+
+ addr_size = sizeof(saddr);
+ unsigned int addr;
+
+ if(0 > getpeername(mSockDesc, &saddr, &addr_size))
+ {
+ if(Log(2)) LogStream() << "Error getting peername, closing" << endl;
+ CloseNow();
+ }
+ addr_in = (struct sockaddr_in *)&saddr;
+ // copy IP
+ addr = mIp = addr_in->sin_addr.s_addr;
+ // asci ip addr
+ mAddrIP = inet_ntoa(addr_in->sin_addr);
+ // host name
+ if( mxServer && mxServer->mUseDNS ) DNSLookup();
+ // port number
+ mAddrPort=addr_in->sin_port;
+}
+
/** close connection to peer */
void cAsyncConn::Close()
{
@@ -270,6 +276,7 @@
/** immediately close the connection */
void cAsyncConn::CloseNow()
{
+ OnCloseNow();
mWritable = false;
ok = false;
if(mxServer) mxServer->mConnChooser.cConnChoose::OptOut((cConnBase*)this, cConnChoose::eCC_ALL);
@@ -483,6 +490,8 @@
return -1;
}
ok=true;
+ /* Fetch socket info */
+ FetchSockAddr();
return 0;
}
else
@@ -849,6 +858,9 @@
/** function called before closing nicely */
int cAsyncConn::OnCloseNice(void) { return 0; }
+/** function called before closing now */
+int cAsyncConn::OnCloseNow(void) { return 0; }
+
cMessageParser *cAsyncConn::CreateParser()
{
if (this->mxProtocol != NULL)
Index: cconndc.cpp
===================================================================
RCS file: /cvsroot/verlihub/verlihub/src/cconndc.cpp,v
retrieving revision 1.63
diff -u -r1.63 cconndc.cpp
--- src/cconndc.cpp 4 Oct 2005 19:47:38 -0000 1.63
+++ src/cconndc.cpp 17 Jun 2006 21:27:43 -0000
@@ -359,7 +359,13 @@
IPMax = cBanList::Ip2Num(mServer->mC.ip_zone6_max);
if( (IPMin <= IPConn) && (IPMax >= IPConn)) conn->mGeoZone = 6;
}
+
conn->mxProtocol = mProtocol;
+
+ conn->mDCIterator =
+ mServer->mDCConnList.insert(mServer->mDCConnList.begin(),
+ conn);
+
return (cAsyncConn*) conn;
}
@@ -386,6 +392,20 @@
mServer->mCallBacks.mOnCloseConn.CallAll(conn);
#endif
}
+
+ cConnDC::tCLIt it = conn->mDCIterator;
+ cAsyncConn *found=(*it);
+ if( (it == mServer->mDCConnList.end()) || (found != conn) )
+ {
+ cout << "not found " << conn << endl;
+ throw "Trying to delete non-existent connection";
+ }
+
+ //cout << "Deleting connection on socket: " << old_conn->mSockDesc << endl;
+ mServer->mDCConnList.erase(it);
+ cConnDC::tCLIt emptyit;
+ conn->mDCIterator = emptyit;
+
cConnFactory::DeleteConn(Conn);
}
Index: cserverdc.cpp
===================================================================
RCS file: /cvsroot/verlihub/verlihub/src/cserverdc.cpp,v
retrieving revision 1.235
diff -u -r1.235 cserverdc.cpp
--- src/cserverdc.cpp 8 Nov 2005 07:51:23 -0000 1.235
+++ src/cserverdc.cpp 17 Jun 2006 21:27:44 -0000
@@ -505,7 +505,7 @@
}
int count=0;
- for(i=mConnList.begin(); i!= mConnList.end(); i++)
+ for(i=mDCConnList.begin(); i!= mDCConnList.end(); i++)
{
conn=(cConnDC *)(*i);
if(conn && conn->ok && conn->mWritable && conn->mpUser && conn->mpUser->mInList)
@@ -529,7 +529,7 @@
cConnDC *conn;
tCLIt i;
int counter = 0;
- for(i=mConnList.begin(); i!= mConnList.end(); i++)
+ for(i=mDCConnList.begin(); i!= mDCConnList.end(); i++)
{
conn=(cConnDC *)(*i);
if(
@@ -555,7 +555,7 @@
cConnDC *conn;
tCLIt i;
int counter = 0;
- for(i=mConnList.begin(); i!= mConnList.end(); i++)
+ for(i=mDCConnList.begin(); i!= mDCConnList.end(); i++)
{
conn=(cConnDC *)(*i);
if(
@@ -579,6 +579,9 @@
/** return negative if conn should be removed */
int cServerDC::OnNewConn(cAsyncConn *nc)
{
+ if(string(nc->mClassName) != string("ConnDC"))
+ return 0;
+
cConnDC *conn = (cConnDC *)nc;
stringstream errmsg,os;
if(!conn) return -1;
@@ -925,7 +928,7 @@
/** return true if accept is allowed - override */
bool cServerDC::AllowNewConn()
{
- return mConnList.size() <= (unsigned) mC.max_users_total + mC.max_extra_regs + mC.max_extra_vips + mC.max_extra_ops + mC.max_extra_cheefs + mC.max_extra_admins + 300;
+ return mDCConnList.size() <= (unsigned) mC.max_users_total + mC.max_extra_regs + mC.max_extra_vips + mC.max_extra_ops + mC.max_extra_cheefs + mC.max_extra_admins + 300;
}
int cServerDC::SaveFile(const string &file, const string &text)
@@ -1280,6 +1283,7 @@
delete work;
return 0;
}
+ return true;
#else
return 0;
#endif
Index: casyncconn.h
===================================================================
RCS file: /cvsroot/verlihub/verlihub/src/casyncconn.h,v
retrieving revision 1.50
diff -u -r1.50 casyncconn.h
--- src/casyncconn.h 4 Sep 2005 19:37:06 -0000 1.50
+++ src/casyncconn.h 17 Jun 2006 21:27:44 -0000
@@ -92,6 +92,8 @@
cAsyncConn(int sd=0, cAsyncSocketServer *s=NULL, tConnType ct= eCT_CLIENT);
cAsyncConn(const string & host, int port, bool udp=false);
virtual ~cAsyncConn();
+ /** fetch IP addr from connection */
+ void FetchSockAddr();
/** close connection to peer */
void Close();
/** flush as much from output buffer as possible to the iochannel */
@@ -115,6 +117,8 @@
/** time to close the connection */
cTime mCloseAfter;
+public:
+ /* Anyone know, why we should do this private ??? */
typedef list<cAsyncConn*> tConnList;
typedef tConnList::iterator tCLIt;
@@ -183,6 +187,8 @@
tSocket AcceptSock();
/** function called before closing nicely */
virtual int OnCloseNice(void);
+ /** function called before closing now */
+ virtual int OnCloseNow(void);
/** for udp */
struct sockaddr_in mAddrIN;
@@ -195,7 +201,7 @@
const string & AddrIP(){return mAddrIP;}
const string & AddrHost(){return mAddrHost;}
const int AddrPort(){return mAddrPort;}
- const unsigned long GetSockAddress() { return mAddrIN.sin_addr.s_addr; }
+ const unsigned long GetSockAddress() { return (mType == eCT_CLIENTUDP)?mAddrIN.sin_addr.s_addr:mIp; }
/** reads all available data from the socket and stores it into a static member buffer */
int ReadAll();
Index: casyncsocketserver.h
===================================================================
RCS file: /cvsroot/verlihub/verlihub/src/casyncsocketserver.h,v
retrieving revision 1.27
diff -u -r1.27 casyncsocketserver.h
--- src/casyncsocketserver.h 21 Dec 2004 12:48:46 -0000 1.27
+++ src/casyncsocketserver.h 17 Jun 2006 21:27:44 -0000
@@ -96,6 +96,12 @@
cTime mTime;
//
cMeanFrequency<unsigned ,21> mFrequency;
+
+ /* I don't know, why we should make this protected */
+ /** add given connection to server */
+ virtual void addConnection(cAsyncConn *);
+ /** remove given connection from server */
+ void delConnection(cAsyncConn * );
protected: // Protected attributes
/** indicates whether the loop should run or not */
bool mbRun;
@@ -117,10 +123,6 @@
static bool WSinitialized;
cConnFactory *mFactory;
protected: // Protected methods
- /** add given connection to server */
- virtual void addConnection(cAsyncConn *);
- /** remove given connection from server */
- void delConnection(cAsyncConn * );
/** perform input operation, read all data from the connection, return number of bytes read, return negative number, if error occured */
virtual int input(cAsyncConn *conn);
/** perform output operation */
Index: cconndc.h
===================================================================
RCS file: /cvsroot/verlihub/verlihub/src/cconndc.h,v
retrieving revision 1.41
diff -u -r1.41 cconndc.h
--- src/cconndc.h 12 Sep 2005 21:28:50 -0000 1.41
+++ src/cconndc.h 17 Jun 2006 21:27:44 -0000
@@ -130,6 +130,7 @@
class cConnDC : public cAsyncConn
{
friend class nProtocol::cDCProto;
+ friend class cDCConnFactory;
public:
cConnDC(int sd=0, cAsyncSocketServer *server=NULL);
virtual ~cConnDC();
@@ -219,6 +220,10 @@
};
sTimes mT;
int mSRCounter;
+
+ // DC++ type connections iterator
+ tCLIt mDCIterator;
+
protected: // Protected methods
/** function called before closing nicely */
int OnCloseNice();
Index: cserverdc.h
===================================================================
RCS file: /cvsroot/verlihub/verlihub/src/cserverdc.h,v
retrieving revision 1.111
diff -u -r1.111 cserverdc.h
--- src/cserverdc.h 14 Sep 2005 20:20:28 -0000 1.111
+++ src/cserverdc.h 17 Jun 2006 21:27:44 -0000
@@ -329,6 +329,11 @@
cTimeOut mHublistTimer;
cTimeOut mReloadcfgTimer;
cVHPluginMgr mPluginManager;
+
+protected:
+ // Protected attributes :D
+ tConnList mDCConnList;
+
private:
struct sCallBacks
{