X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=f7455aece18886d75acf9ae1b3fbd295135767ee;hb=6a3ef5467490a46dd5df8862912218a3f68f2e10;hp=ed3427269b6480b8f9e1431ebf93d793b5ce7a8f;hpb=316e9a1376008f14d35a8254a8afa0679d399d38;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index ed34272..f7455ae 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -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);