*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';
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);
}
endcompress(peer);
transfersetstate(transfer, TRNS_HS);
socksettos(peer->sk, confgetint("fnet", "fnptos"));
+ transfer->flags.b.minislot = 0;
peer->sk->writecb = NULL;
}
}
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;
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);
}
}
}
+ 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);