X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=1e4406c26390a0f67d0489c16d4564d72fd50b3f;hb=99a28d474234a07081ea1beb28bb774169390314;hp=ed3427269b6480b8f9e1431ebf93d793b5ce7a8f;hpb=316e9a1376008f14d35a8254a8afa0679d399d38;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index ed34272..1e4406c 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 + 1) = 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) && addreq(fn->sk->remote, (struct sockaddr *)&hubaddr)) + { + myfn = fn; + break; + } + } + } sr = newsrchres(&dcnet, wfile, wnick); if(sr->peernick != NULL) free(sr->peernick);