Dolda2000 GitWeb
/
doldaconnect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't fail transfer on TTHL failure.
[doldaconnect.git]
/
daemon
/
fnet-dc.c
diff --git
a/daemon/fnet-dc.c
b/daemon/fnet-dc.c
index
ed01d06
..
df04b59
100644
(file)
--- a/
daemon/fnet-dc.c
+++ b/
daemon/fnet-dc.c
@@
-136,7
+136,7
@@
struct dcpeer
int extended;
int direction; /* Using the constants from transfer.h */
int compress;
int extended;
int direction; /* Using the constants from transfer.h */
int compress;
- int hascurpos, notthl;
+ int hascurpos,
fetchingtthl,
notthl;
struct tigertreehash tth;
void *cprsdata;
char *key;
struct tigertreehash tth;
void *cprsdata;
char *key;
@@
-676,6
+676,7
@@
static void requestfile(struct dcpeer *peer)
sendadc(peer->sk, "0");
sendadc(peer->sk, "-1");
qstr(peer->sk, "|");
sendadc(peer->sk, "0");
sendadc(peer->sk, "-1");
qstr(peer->sk, "|");
+ peer->fetchingtthl = 1;
return;
}
}
return;
}
}
@@
-729,23
+730,30
@@
static void sendmyinfo(struct socket *sk, struct fnetnode *fn)
struct dchub *hub;
char *buf;
struct fnetnode *cfn;
struct dchub *hub;
char *buf;
struct fnetnode *cfn;
- int
numhubs
;
+ int
hn1, hn2, hn3
;
hub = fn->data;
qstrf(sk, "$MyINFO $ALL %s ", hub->nativenick);
buf = tr(icswcstombs(confgetstr("dc", "desc"), DCCHARSET, "Charset_conv_failure"), "$_|_");
qstrf(sk, "%s", buf);
hub = fn->data;
qstrf(sk, "$MyINFO $ALL %s ", hub->nativenick);
buf = tr(icswcstombs(confgetstr("dc", "desc"), DCCHARSET, "Charset_conv_failure"), "$_|_");
qstrf(sk, "%s", buf);
-
numhubs
= 0;
+
hn1 = hn2 = hn3
= 0;
for(cfn = fnetnodes; cfn != NULL; cfn = cfn->next)
{
if((cfn->state == FNN_EST) || (cfn->state == FNN_HS))
for(cfn = fnetnodes; cfn != NULL; cfn = cfn->next)
{
if((cfn->state == FNN_EST) || (cfn->state == FNN_HS))
- numhubs++;
+ {
+ if(cfn->regstatus == FNNS_OP)
+ hn3++;
+ else if(cfn->regstatus == FNNS_REG)
+ hn2++;
+ else
+ hn1++;
+ }
}
}
- qstrf(sk, "<%s V:%s,M:%c,H:%i/
0/0
,S:%i>",
+ qstrf(sk, "<%s V:%s,M:%c,H:%i/
%i/%i
,S:%i>",
DCIDTAG,
DCIDTAGV,
(tcpsock == NULL)?'P':'A',
DCIDTAG,
DCIDTAGV,
(tcpsock == NULL)?'P':'A',
-
numhubs
,
+
hn1, hn2, hn3
,
confgetint("transfer", "slots")
);
qstrf(sk, "$ $");
confgetint("transfer", "slots")
);
qstrf(sk, "$ $");
@@
-1445,6
+1453,16
@@
static void cmd_getpass(struct socket *sk, struct fnetnode *fn, char *cmd, char
}
qstrf(sk, "$MyPass %s|", mbspw);
free(mbspw);
}
qstrf(sk, "$MyPass %s|", mbspw);
free(mbspw);
+ fn->regstatus = FNNS_REG;
+ hubhandleaction(sk, fn, cmd, args);
+}
+
+static void cmd_logedin(struct socket *sk, struct fnetnode *fn, char *cmd, char *args)
+{
+ struct dchub *hub;
+
+ hub = fn->data;
+ fn->regstatus = FNNS_OP;
hubhandleaction(sk, fn, cmd, args);
}
hubhandleaction(sk, fn, cmd, args);
}
@@
-1598,6
+1616,7
@@
static void startul(struct dcpeer *peer)
static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
int size;
static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
int size;
+ struct transfer *transfer;
if(peer->transfer == NULL)
{
if(peer->transfer == NULL)
{
@@
-1608,7
+1627,9
@@
static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, ch
if(peer->transfer->size != size)
{
transfersetsize(peer->transfer, size);
if(peer->transfer->size != size)
{
transfersetsize(peer->transfer, size);
+ transfer = peer->transfer;
freedcpeer(peer);
freedcpeer(peer);
+ trytransferbypeer(transfer->fnet, transfer->peerid);
return;
}
startdl(peer);
return;
}
startdl(peer);
@@
-1617,6
+1638,13
@@
static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, ch
static void cmd_error(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
static void cmd_error(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
+ if(peer->fetchingtthl)
+ {
+ peer->fetchingtthl = 0;
+ peer->notthl = 1;
+ requestfile(peer);
+ return;
+ }
if((peer->transfer != NULL) && (peer->transfer->dir == TRNSD_DOWN))
{
transferseterror(peer->transfer, TRNSE_NOTFOUND);
if((peer->transfer != NULL) && (peer->transfer->dir == TRNSD_DOWN))
{
transferseterror(peer->transfer, TRNSE_NOTFOUND);
@@
-2124,6
+2152,7
@@
static void cmd_adcsnd(struct socket *sk, struct dcpeer *peer, char *cmd, char *
peer->state = PEER_TTHL;
peer->totalsize = numbytes;
peer->curread = 0;
peer->state = PEER_TTHL;
peer->totalsize = numbytes;
peer->curread = 0;
+ peer->fetchingtthl = 0;
inittigertree(&peer->tth);
handletthl(peer);
} else if(!strcmp(argv[0], "file")) {
inittigertree(&peer->tth);
handletthl(peer);
} else if(!strcmp(argv[0], "file")) {
@@
-2494,6
+2523,7
@@
struct command hubcmds[] =
{"$SR", cc(cmd_sr)},
{"$UserCommand", cc(cmd_usercommand)},
{"$GetPass", cc(cmd_getpass)},
{"$SR", cc(cmd_sr)},
{"$UserCommand", cc(cmd_usercommand)},
{"$GetPass", cc(cmd_getpass)},
+ {"$LogedIn", cc(cmd_logedin)}, /* sic */
{NULL, NULL}
};
{NULL, NULL}
};