Fix typo.
[doldaconnect.git] / daemon / fnet-dc.c
index b07a56a..a74be23 100644 (file)
@@ -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);
        }
@@ -2647,6 +2647,7 @@ static void dctransgotdata(struct transfer *transfer, struct dcpeer *peer)
                    endcompress(peer);
                    transfersetstate(transfer, TRNS_HS);
                    socksettos(peer->sk, confgetint("fnet", "fnptos"));
+                   transfer->flags.b.minislot = 0;
                    peer->sk->writecb = NULL;
                }
            }
@@ -2723,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;
@@ -2782,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);
@@ -2821,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);