From d86b7a9f0bd3660078110bdcd07bc0b4cda2596e Mon Sep 17 00:00:00 2001 From: fredrik Date: Sun, 16 Oct 2005 03:08:47 +0000 Subject: [PATCH] Return hashes in SRs. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@371 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/fnet-dc.c | 46 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index 4afd0c0..056c3d1 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -1402,9 +1402,10 @@ static void cmd_to(struct socket *sk, struct fnetnode *fn, char *cmd, char *args static void cmd_sr(struct socket *sk, struct fnetnode *fn, char *cmd, char *args) { struct dchub *hub; - char *p, *p2; + char *p, *p2, *buf; char *nick, *filename, *hubname; int size, slots; + size_t buflen; struct srchres *sr; wchar_t *wnick, *wfile; @@ -1451,6 +1452,15 @@ static void cmd_sr(struct socket *sk, struct fnetnode *fn, char *cmd, char *args sr->slots = slots; free(wfile); free(wnick); + if(!strncmp(hubname, "TTH:", 4)) + { + if((buf = base32decode(hubname + 4, &buflen)) != NULL) + { + if(buflen == 24) + sr->hash = newhash(L"TTH", 24, buf); + free(buf); + } + } getfnetnode(sr->fn = fn); submitsrchres(sr); freesrchres(sr); @@ -2448,14 +2458,15 @@ static void transwrite(struct socket *sk, struct dcpeer *peer) static void udpread(struct socket *sk, void *data) { - char *buf, *p, *p2; - size_t buflen; + char *buf, *p, *p2, *hashbuf; + size_t buflen, hashlen; char *nick, *filename, *hubname; int size, slots; struct fnetnode *fn, *myfn; struct dchub *hub; struct srchres *sr; wchar_t *wnick, *wfile; + struct hash *hash; if((buf = sockgetinbuf(sk, &buflen)) == NULL) return; @@ -2521,18 +2532,29 @@ static void udpread(struct socket *sk, void *data) return; } myfn = NULL; - for(fn = fnetnodes; fn != NULL; fn = fn->next) + hash = NULL; + if(!strncmp(hubname, "TTH:", 4)) { - if((fn->fnet == &dcnet) && ((hub = fn->data) != NULL)) + if((hashbuf = base32decode(hubname + 4, &hashlen)) != NULL) + { + if(hashlen == 24) + hash = newhash(L"TTH", 24, hashbuf); + free(hashbuf); + } + } else { + for(fn = fnetnodes; fn != NULL; fn = fn->next) { - if((hub->nativename != NULL) && !strcmp(hub->nativename, hubname)) + if((fn->fnet == &dcnet) && ((hub = fn->data) != NULL)) { - if(myfn == NULL) + if((hub->nativename != NULL) && !strcmp(hub->nativename, hubname)) { - myfn = fn; - } else { - myfn = NULL; - break; + if(myfn == NULL) + { + myfn = fn; + } else { + myfn = NULL; + break; + } } } } @@ -2547,6 +2569,8 @@ static void udpread(struct socket *sk, void *data) free(wnick); if(myfn != NULL) getfnetnode(sr->fn = myfn); + if(hash != NULL) + sr->hash = hash; submitsrchres(sr); freesrchres(sr); } -- 2.11.0