X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=ebfea28d830ecb119510c6214f205cd654662ad2;hb=f945525047ca6dff44f4eb947d0238e259a436e8;hp=0e035fed7090914b45d8c226f589169492e55775;hpb=9c161e776f0aa97d4cea5af7a0de070a6cc428d7;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index 0e035fe..ebfea28 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -30,6 +30,7 @@ #include #include #include +#include #ifdef HAVE_CONFIG_H #include @@ -59,24 +60,6 @@ * considering it was developed without i18n support under Windows */ #define DCCHARSET "windows-1252" -#ifdef DCPP_MASQUERADE -/* - * I honestly don't want to pretend being a client that I'm not, but - * there are so many hubs that simply do not accept any clients - * outside their whitelists, for no obvious reasons, so I feel that I - * am left with little choice. Anyhow, as long as I actually support - * all the features that my faked DC++ version does, there should be - * very little harm done. - */ -#define DCIDTAG "++" -#define DCIDTAGV "0.674" -#define DCIDFULL "DC++ 0.674" -#else -#define DCIDTAG "Dolda" -#define DCIDTAGV VERSION -#define DCIDFULL "DoldaConnect " VERSION -#endif - #define PEER_CMD 0 #define PEER_STOP 1 #define PEER_TRNS 2 @@ -1141,7 +1124,7 @@ static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char * size_t buflen; int termnum, satisfied, skipcheck; int level, tersat[32]; - wchar_t *terms[32]; + wchar_t *terms[32], *lname; char hashtth[24]; hub = fn->data; @@ -1229,8 +1212,10 @@ static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char * memcpy(hashtth, buf, 24); free(buf); } else { - if((terms[termnum] = icmbstowcs(p, hub->charset)) != NULL) + if((terms[termnum] = icmbstowcs(p, hub->charset)) != NULL) { + wcslower(terms[termnum]); termnum++; + } } } p = p2 + 1; @@ -1262,11 +1247,12 @@ static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char * } if(!skipcheck) { + lname = wcslower(swcsdup(node->name)); for(i = 0; i < termnum; i++) { if(tersat[i] >= 0) continue; - if(wcsexists(node->name, terms[i])) + if(wcsstr(lname, terms[i])) { tersat[i] = level; satisfied++; @@ -1274,6 +1260,7 @@ static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char * break; } } + free(lname); } if(!skipcheck && (satisfied == termnum)) { @@ -3014,7 +3001,7 @@ static void hubread(struct socket *sk, struct fnetnode *fn) free(newbuf); p = hub->inbuf; hub->inbufdata += datalen; - while((datalen > 0) && ((p2 = memchr(p, '|', datalen)) != NULL)) + while((p - hub->inbuf < hub->inbufdata) && ((p2 = memchr(p, '|', hub->inbufdata - (p - hub->inbuf))) != NULL)) { *(p2++) = 0; for(cmd = hubcmds; cmd->handler != NULL; cmd++) @@ -3025,7 +3012,6 @@ static void hubread(struct socket *sk, struct fnetnode *fn) } if((cmd->limit == 0) || (hub->queue.size < cmd->limit)) newqcmd(&hub->queue, p); - datalen -= p2 - p; p = p2; } memmove(hub->inbuf, p, hub->inbufdata -= p - hub->inbuf); @@ -3140,7 +3126,6 @@ static void freedcpeer(struct dcpeer *peer) peer->transfer->close = 1; if(peer->transfer->dir == TRNSD_DOWN) resettransfer(peer->transfer); - transferdetach(peer->transfer); } if(peer->timeout != NULL) canceltimer(peer->timeout);