Dolda2000 GitWeb
/
doldaconnect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed a bug in btreenext.
[doldaconnect.git]
/
daemon
/
fnet-dc.c
diff --git
a/daemon/fnet-dc.c
b/daemon/fnet-dc.c
index
01592c6
..
87671aa
100644
(file)
--- a/
daemon/fnet-dc.c
+++ b/
daemon/fnet-dc.c
@@
-99,12
+99,17
@@
struct qcommand
char *string;
};
char *string;
};
+struct qcmdqueue
+{
+ struct qcommand *f, *l;
+};
+
struct dchub
{
struct socket *sk;
char *inbuf;
size_t inbufdata, inbufsize;
struct dchub
{
struct socket *sk;
char *inbuf;
size_t inbufdata, inbufsize;
- struct qc
ommand *
queue;
+ struct qc
mdqueue
queue;
int extended, dcppemu;
char *charset;
char *nativename;
int extended, dcppemu;
char *charset;
char *nativename;
@@
-127,10
+132,10
@@
struct dcpeer
struct fnetnode *fn;
char *inbuf;
size_t inbufdata, inbufsize;
struct fnetnode *fn;
char *inbuf;
size_t inbufdata, inbufsize;
-
size
_t curread, totalsize;
+
off
_t curread, totalsize;
int freeing;
struct timer *timeout;
int freeing;
struct timer *timeout;
- struct qc
ommand *
queue;
+ struct qc
mdqueue
queue;
struct transfer *transfer;
int state;
int ptclose; /* Close after transfer is complete */
struct transfer *transfer;
int state;
int ptclose; /* Close after transfer is complete */
@@
-376,26
+381,29
@@
static struct dcexppeer *expectpeer(char *nick, struct fnetnode *fn)
return(ep);
}
return(ep);
}
-static struct qcommand *newqcmd(struct qc
ommand *
*queue, char *string)
+static struct qcommand *newqcmd(struct qc
mdqueue
*queue, char *string)
{
struct qcommand *new;
{
struct qcommand *new;
- while(*queue != NULL)
- queue = &(*queue)->next;
new = smalloc(sizeof(*new));
new->string = sstrdup(string);
new = smalloc(sizeof(*new));
new->string = sstrdup(string);
- new->next = *queue;
- *queue = new;
+ new->next = NULL;
+ if(queue->l == NULL)
+ queue->f = new;
+ else
+ queue->l->next = new;
+ queue->l = new;
return(new);
}
return(new);
}
-static struct qcommand *ulqcmd(struct qc
ommand *
*queue)
+static struct qcommand *ulqcmd(struct qc
mdqueue
*queue)
{
struct qcommand *qcmd;
{
struct qcommand *qcmd;
- if((qcmd =
*queue
) == NULL)
+ if((qcmd =
queue->f
) == NULL)
return(NULL);
return(NULL);
- *queue = qcmd->next;
+ if((queue->f = qcmd->next) == NULL)
+ queue->l = NULL;
return(qcmd);
}
return(qcmd);
}
@@
-502,7
+510,11
@@
static void sendadc(struct socket *sk, char *arg)
free(buf);
}
free(buf);
}
-static void sendadcf(struct socket *sk, char *arg, ...)
+#if defined(__GNUC__)
+static void __attribute__ ((format (printf, 2, 3))) sendadcf(struct socket *sk, char *arg, ...)
+#else
+static void sendadcf(struct socket *sk, char *arg, ...)
+#endif
{
char *buf;
va_list args;
{
char *buf;
va_list args;
@@
-637,7
+649,7
@@
static int trresumecb(struct transfer *transfer, wchar_t *cmd, wchar_t *arg, str
flog(LOG_WARNING, "filter returned no position for \"resume\" on transfer %i", transfer->id);
freedcpeer(peer);
} else {
flog(LOG_WARNING, "filter returned no position for \"resume\" on transfer %i", transfer->id);
freedcpeer(peer);
} else {
- transfer->curpos = wcstol(arg, NULL, 10);
+ transfer->curpos = wcstol
l
(arg, NULL, 10);
peer->hascurpos = 1;
requestfile(peer);
}
peer->hascurpos = 1;
requestfile(peer);
}
@@
-740,8
+752,8
@@
static void requestfile(struct dcpeer *peer)
}
sendadc(peer->sk, buf);
free(buf);
}
sendadc(peer->sk, buf);
free(buf);
- sendadcf(peer->sk, "%
i",
peer->transfer->curpos);
- sendadcf(peer->sk, "%
i", peer->transfer->size - peer->transfer->curpos
);
+ sendadcf(peer->sk, "%
ji", (intmax_t)
peer->transfer->curpos);
+ sendadcf(peer->sk, "%
ji", (intmax_t)(peer->transfer->size - peer->transfer->curpos)
);
qstr(peer->sk, "|");
} else if(supports(peer, "xmlbzlist")) {
if((buf = icswcstombs(peer->transfer->path, "UTF-8", NULL)) == NULL)
qstr(peer->sk, "|");
} else if(supports(peer, "xmlbzlist")) {
if((buf = icswcstombs(peer->transfer->path, "UTF-8", NULL)) == NULL)
@@
-750,7
+762,7
@@
static void requestfile(struct dcpeer *peer)
freedcpeer(peer);
return;
}
freedcpeer(peer);
return;
}
- qstrf(peer->sk, "$UGetBlock %
zi %zi %s|", peer->transfer->curpos, peer->transfer->size - peer->transfer->curpos
, buf);
+ qstrf(peer->sk, "$UGetBlock %
ji %ji %s|", (intmax_t)peer->transfer->curpos, (intmax_t)(peer->transfer->size - peer->transfer->curpos)
, buf);
} else {
/* Use DCCHARSET for $Get paths until further researched... */
if((buf = icswcstombs(peer->transfer->path, DCCHARSET, NULL)) == NULL)
} else {
/* Use DCCHARSET for $Get paths until further researched... */
if((buf = icswcstombs(peer->transfer->path, DCCHARSET, NULL)) == NULL)
@@
-759,7
+771,7
@@
static void requestfile(struct dcpeer *peer)
freedcpeer(peer);
return;
}
freedcpeer(peer);
return;
}
- qstrf(peer->sk, "$Get %s$%
zi|", buf,
peer->transfer->curpos + 1);
+ qstrf(peer->sk, "$Get %s$%
ji|", buf, (intmax_t)
peer->transfer->curpos + 1);
}
}
}
}
@@
-901,10
+913,10
@@
static void cmd_nicklist(struct socket *sk, struct fnetnode *fn, char *cmd, char
struct dchub *hub;
char *p;
wchar_t *buf;
struct dchub *hub;
char *p;
wchar_t *buf;
- struct fnetpeer *peer
, *npeer
;
+ struct fnetpeer *peer;
hub = fn->data;
hub = fn->data;
- for(peer =
fn->peers; peer != NULL; peer = peer->next
)
+ for(peer =
btreeiter(fn->peers); peer != NULL; peer = btreeiter(NULL)
)
peer->flags.b.delete = 1;
while((p = strstr(args, "$$")) != NULL)
{
peer->flags.b.delete = 1;
while((p = strstr(args, "$$")) != NULL)
{
@@
-920,12
+932,7
@@
static void cmd_nicklist(struct socket *sk, struct fnetnode *fn, char *cmd, char
}
args = p + 2;
}
}
args = p + 2;
}
- for(peer = fn->peers; peer != NULL; peer = npeer)
- {
- npeer = peer->next;
- if(peer->flags.b.delete)
- fnetdelpeer(peer);
- }
+ fnetpeerdm(fn);
hubhandleaction(sk, fn, cmd, args);
}
hubhandleaction(sk, fn, cmd, args);
}
@@
-937,7
+944,7
@@
static void cmd_oplist(struct socket *sk, struct fnetnode *fn, char *cmd, char *
struct fnetpeer *peer;
hub = fn->data;
struct fnetpeer *peer;
hub = fn->data;
- for(peer =
fn->peers; peer != NULL; peer = peer->next
)
+ for(peer =
btreeiter(fn->peers); peer != NULL; peer = btreeiter(NULL)
)
peer->flags.b.op = 0;
while((p = strstr(args, "$$")) != NULL)
{
peer->flags.b.op = 0;
while((p = strstr(args, "$$")) != NULL)
{
@@
-1257,10
+1264,10
@@
static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char *
if(node->f.b.hastth)
{
buf2 = base32encode(node->hashtth, 24);
if(node->f.b.hastth)
{
buf2 = base32encode(node->hashtth, 24);
- qstrf(dsk, "%s%s\005%
zi%sTTH:%.39s%s", prefix, buf,
node->size, infix, buf2, postfix);
+ qstrf(dsk, "%s%s\005%
ji%sTTH:%.39s%s", prefix, buf, (intmax_t)
node->size, infix, buf2, postfix);
free(buf2);
} else {
free(buf2);
} else {
- qstrf(dsk, "%s%s\005%
zi%s%s%s", prefix, buf,
node->size, infix, hub->nativename, postfix);
+ qstrf(dsk, "%s%s\005%
ji%s%s%s", prefix, buf, (intmax_t)
node->size, infix, hub->nativename, postfix);
}
free(buf);
}
}
free(buf);
}
@@
-1410,7
+1417,8
@@
static void cmd_sr(struct socket *sk, struct fnetnode *fn, char *cmd, char *args
struct dchub *hub;
char *p, *p2, *buf;
char *nick, *filename, *hubname;
struct dchub *hub;
char *p, *p2, *buf;
char *nick, *filename, *hubname;
- int size, slots;
+ off_t size;
+ int slots;
size_t buflen;
struct srchres *sr;
wchar_t *wnick, *wfile;
size_t buflen;
struct srchres *sr;
wchar_t *wnick, *wfile;
@@
-1429,7
+1437,7
@@
static void cmd_sr(struct socket *sk, struct fnetnode *fn, char *cmd, char *args
if((p2 = strchr(p, ' ')) == NULL)
return;
*p2 = 0;
if((p2 = strchr(p, ' ')) == NULL)
return;
*p2 = 0;
- size =
atoi(p
);
+ size =
strtoll(p, NULL, 10
);
p = p2 + 1;
if((p2 = strchr(p, '/')) == NULL)
return;
p = p2 + 1;
if((p2 = strchr(p, '/')) == NULL)
return;
@@
-1704,7
+1712,7
@@
static void startul(struct dcpeer *peer)
static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
-
in
t size;
+
off_
t size;
struct transfer *transfer;
if(peer->transfer == NULL)
struct transfer *transfer;
if(peer->transfer == NULL)
@@
-1712,7
+1720,7
@@
static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, ch
freedcpeer(peer);
return;
}
freedcpeer(peer);
return;
}
- size =
atoi(args
);
+ size =
strtoll(args, NULL, 10
);
if(peer->transfer->size != size)
{
transfersetsize(peer->transfer, size);
if(peer->transfer->size != size)
{
transfersetsize(peer->transfer, size);
@@
-1835,7
+1843,7
@@
static struct sharecache *resdcpath(char *path, char *charset, char sep)
static void cmd_get(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
static void cmd_get(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
-
in
t offset;
+
off_
t offset;
char *p, *buf;
wchar_t *buf2;
struct sharecache *node;
char *p, *buf;
wchar_t *buf2;
struct sharecache *node;
@@
-1854,7
+1862,7
@@
static void cmd_get(struct socket *sk, struct dcpeer *peer, char *cmd, char *arg
return;
}
*(p++) = 0;
return;
}
*(p++) = 0;
- if((offset = (
atoi(p
) - 1)) < 0)
+ if((offset = (
strtoll(p, NULL, 10
) - 1)) < 0)
{
freedcpeer(peer);
return;
{
freedcpeer(peer);
return;
@@
-1917,7
+1925,7
@@
static void cmd_get(struct socket *sk, struct dcpeer *peer, char *cmd, char *arg
lesk = wrapsock(fd);
transferprepul(peer->transfer, sb.st_size, offset, -1, lesk);
putsock(lesk);
lesk = wrapsock(fd);
transferprepul(peer->transfer, sb.st_size, offset, -1, lesk);
putsock(lesk);
- qstrf(sk, "$FileLength %
zi|",
peer->transfer->size);
+ qstrf(sk, "$FileLength %
ji|", (intmax_t)
peer->transfer->size);
}
static void cmd_send(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
}
static void cmd_send(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
@@
-1968,7
+1976,7
@@
static void cmd_getblock(struct socket *sk, struct dcpeer *peer, char *cmd, char
{
int fd;
char *p, *p2;
{
int fd;
char *p, *p2;
-
in
t start, numbytes;
+
off_
t start, numbytes;
char *charset, *buf;
wchar_t *buf2;
struct sharecache *node;
char *charset, *buf;
wchar_t *buf2;
struct sharecache *node;
@@
-1987,7
+1995,7
@@
static void cmd_getblock(struct socket *sk, struct dcpeer *peer, char *cmd, char
return;
}
*(p2++) = 0;
return;
}
*(p2++) = 0;
- start =
atoi(p
);
+ start =
strtoll(p, NULL, 10
);
p = p2;
if((p2 = strchr(p, ' ')) == NULL)
{
p = p2;
if((p2 = strchr(p, ' ')) == NULL)
{
@@
-1995,7
+2003,7
@@
static void cmd_getblock(struct socket *sk, struct dcpeer *peer, char *cmd, char
return;
}
*(p2++) = 0;
return;
}
*(p2++) = 0;
- numbytes =
atoi(p
);
+ numbytes =
strtoll(p, NULL, 10
);
p = p2;
if(!strcmp(cmd, "$UGetBlock") || !strcmp(cmd, "$UGetZBlock"))
charset = "UTF-8";
p = p2;
if(!strcmp(cmd, "$UGetBlock") || !strcmp(cmd, "$UGetZBlock"))
charset = "UTF-8";
@@
-2057,7
+2065,7
@@
static void cmd_getblock(struct socket *sk, struct dcpeer *peer, char *cmd, char
lesk = wrapsock(fd);
transferprepul(peer->transfer, sb.st_size, start, start + numbytes, lesk);
putsock(lesk);
lesk = wrapsock(fd);
transferprepul(peer->transfer, sb.st_size, start, start + numbytes, lesk);
putsock(lesk);
- qstrf(sk, "$Sending %
i|",
numbytes);
+ qstrf(sk, "$Sending %
ji|", (intmax_t)
numbytes);
startul(peer);
}
startul(peer);
}
@@
-2065,7
+2073,7
@@
static void cmd_adcget(struct socket *sk, struct dcpeer *peer, char *cmd, char *
{
int i;
char **argv, *buf;
{
int i;
char **argv, *buf;
-
in
t start, numbytes;
+
off_
t start, numbytes;
struct sharecache *node;
struct stat sb;
struct socket *lesk;
struct sharecache *node;
struct stat sb;
struct socket *lesk;
@@
-2087,8
+2095,8
@@
static void cmd_adcget(struct socket *sk, struct dcpeer *peer, char *cmd, char *
freedcpeer(peer);
goto out;
}
freedcpeer(peer);
goto out;
}
- start =
atoi(argv[2]
);
- numbytes =
atoi(argv[3]
);
+ start =
strtoll(argv[2], NULL, 10
);
+ numbytes =
strtoll(argv[3], NULL, 10
);
node = NULL;
fd = -1;
if(((fd = openfilelist(argv[1])) < 0) && (errno != 0))
node = NULL;
fd = -1;
if(((fd = openfilelist(argv[1])) < 0) && (errno != 0))
@@
-2161,8
+2169,8
@@
static void cmd_adcget(struct socket *sk, struct dcpeer *peer, char *cmd, char *
qstr(sk, "$ADCSND");
sendadc(sk, "file");
sendadc(sk, argv[1]);
qstr(sk, "$ADCSND");
sendadc(sk, "file");
sendadc(sk, argv[1]);
- sendadcf(sk, "%
i",
start);
- sendadcf(sk, "%
i",
numbytes);
+ sendadcf(sk, "%
ji", (intmax_t)
start);
+ sendadcf(sk, "%
ji", (intmax_t)
numbytes);
if(peer->compress == CPRS_ZLIB)
sendadc(sk, "ZL1");
qstr(sk, "|");
if(peer->compress == CPRS_ZLIB)
sendadc(sk, "ZL1");
qstr(sk, "|");
@@
-2223,7
+2231,7
@@
static void handletthl(struct dcpeer *peer)
static void cmd_adcsnd(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
char **argv;
static void cmd_adcsnd(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
char **argv;
-
in
t start, numbytes;
+
off_
t start, numbytes;
if(peer->transfer == NULL)
{
if(peer->transfer == NULL)
{
@@
-2240,8
+2248,8
@@
static void cmd_adcsnd(struct socket *sk, struct dcpeer *peer, char *cmd, char *
freedcpeer(peer);
goto out;
}
freedcpeer(peer);
goto out;
}
- start =
atoi(argv[2]
);
- numbytes =
atoi(argv[3]
);
+ start =
strtoll(argv[2], NULL, 10
);
+ numbytes =
strtoll(argv[3], NULL, 10
);
if(!strcmp(argv[0], "tthl"))
{
if((start != 0) || (numbytes % 24 != 0))
if(!strcmp(argv[0], "tthl"))
{
if((start != 0) || (numbytes % 24 != 0))
@@
-2289,14
+2297,14
@@
static void cmd_adcsnd(struct socket *sk, struct dcpeer *peer, char *cmd, char *
static void cmd_sending(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
static void cmd_sending(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
-
in
t numbytes;
+
off_
t numbytes;
if(peer->transfer == NULL)
{
freedcpeer(peer);
return;
}
if(peer->transfer == NULL)
{
freedcpeer(peer);
return;
}
- numbytes =
atoi(args
);
+ numbytes =
strtoll(args, NULL, 10
);
if(peer->transfer->size - peer->transfer->curpos != numbytes)
{
transfersetsize(peer->transfer, peer->transfer->curpos + numbytes);
if(peer->transfer->size - peer->transfer->curpos != numbytes)
{
transfersetsize(peer->transfer, peer->transfer->curpos + numbytes);
@@
-2811,7
+2819,8
@@
static void udpread(struct socket *sk, void *data)
size_t buflen, hashlen;
char *nick, *filename, *hubname;
struct sockaddr_in hubaddr;
size_t buflen, hashlen;
char *nick, *filename, *hubname;
struct sockaddr_in hubaddr;
- int size, slots;
+ off_t size;
+ int slots;
struct fnetnode *fn, *myfn;
struct dchub *hub;
struct srchres *sr;
struct fnetnode *fn, *myfn;
struct dchub *hub;
struct srchres *sr;
@@
-2847,7
+2856,7
@@
static void udpread(struct socket *sk, void *data)
return;
}
*p2 = 0;
return;
}
*p2 = 0;
- size =
atoi(p
);
+ size =
strtoll(p, NULL, 10
);
p = p2 + 1;
if((p2 = strchr(p, '/')) == NULL)
{
p = p2 + 1;
if((p2 = strchr(p, '/')) == NULL)
{
@@
-3317,7
+3326,7
@@
static void updatehmlist(void)
if(node->f.b.type == FILE_REG)
{
addtobuf(buf, '|');
if(node->f.b.type == FILE_REG)
{
addtobuf(buf, '|');
- sprintf(numbuf, "%
zi",
node->size);
+ sprintf(numbuf, "%
ji", (intmax_t)
node->size);
bufcat(buf, numbuf, strlen(numbuf));
}
addtobuf(buf, 13);
bufcat(buf, numbuf, strlen(numbuf));
}
addtobuf(buf, 13);
@@
-3492,7
+3501,7
@@
static void updatexmllist(void)
lev++;
continue;
} else {
lev++;
continue;
} else {
- fprintf(fs, "<File Name=\"%s\" Size=\"%
zi\"", namebuf,
node->size);
+ fprintf(fs, "<File Name=\"%s\" Size=\"%
ji\"", namebuf, (intmax_t)
node->size);
if(node->f.b.hastth)
{
hashbuf = base32encode(node->hashtth, 24);
if(node->f.b.hastth)
{
hashbuf = base32encode(node->hashtth, 24);