X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=f7455aece18886d75acf9ae1b3fbd295135767ee;hb=6a3ef5467490a46dd5df8862912218a3f68f2e10;hp=350255e70bbf9d5341548a2eb11140c63d6896cb;hpb=bfc261fe3242649af8897624b0b4f71f6d5cb1f8;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index 350255e..f7455ae 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -945,7 +945,7 @@ static void cmd_myinfo(struct socket *sk, struct fnetnode *fn, char *cmd, char * *p2 = 0; if((buf = icmbstowcs(p, DCCHARSET)) == NULL) return; - if((wcslen(buf) > 0) && (buf[wcslen(buf) - 1] == L'>') && ((wp = wcschr(buf, L'<')) != NULL)) + if((wcslen(buf) > 0) && (buf[wcslen(buf) - 1] == L'>') && ((wp = wcsrchr(buf, L'<')) != NULL)) { buf[wcslen(buf) - 1] = L'\0'; *(wp++) = L'\0'; @@ -2456,10 +2456,10 @@ static int hubsearch(struct fnetnode *fn, struct search *srch, struct srchfnnlis if(minsize != 0) { sizebuf2(sstr, sstrdata + 32, 1); - snprintf(sstr + sstrdata, sstrsize - sstrdata, "T?F?%i?1?", minsize); + sstrdata += snprintf(sstr + sstrdata, sstrsize - sstrdata, "T?F?%i?1?", minsize); } else if(maxsize != -1) { sizebuf2(sstr, sstrdata + 32, 1); - snprintf(sstr + sstrdata, sstrsize - sstrdata, "T?T?%i?1?", maxsize); + sstrdata += snprintf(sstr + sstrdata, sstrsize - sstrdata, "T?T?%i?1?", maxsize); } else { bufcat(sstr, "F?F?0?1?", 8); } @@ -2724,6 +2724,7 @@ static void udpread(struct socket *sk, void *data) char *buf, *p, *p2, *hashbuf; size_t buflen, hashlen; char *nick, *filename, *hubname; + struct sockaddr_in hubaddr; int size, slots; struct fnetnode *fn, *myfn; struct dchub *hub; @@ -2783,6 +2784,27 @@ static void udpread(struct socket *sk, void *data) return; } *p2 = 0; + p = p2 + 2; + if((p2 = strchr(p, ':')) == NULL) + { + free(buf); + return; + } + *(p2++) = 0; + hubaddr.sin_family = AF_INET; + if(!inet_aton(p, &hubaddr.sin_addr)) + { + free(buf); + return; + } + p = p2; + if((p2 = strchr(p, ')')) == NULL) + { + free(buf); + return; + } + *p2 = 0; + hubaddr.sin_port = htons(atoi(p)); if((wnick = icmbstowcs(nick, DCCHARSET)) == NULL) { free(buf); @@ -2822,6 +2844,17 @@ static void udpread(struct socket *sk, void *data) } } } + if(myfn == NULL) + { + for(fn = fnetnodes; fn != NULL; fn = fn->next) + { + if((fn->fnet == &dcnet) && (fn->sk != NULL) && addreq(fn->sk->remote, (struct sockaddr *)&hubaddr)) + { + myfn = fn; + break; + } + } + } sr = newsrchres(&dcnet, wfile, wnick); if(sr->peernick != NULL) free(sr->peernick);