Dolda2000 GitWeb
/
doldaconnect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Quote data properly in lspeers.
[doldaconnect.git]
/
daemon
/
fnet-dc.c
diff --git
a/daemon/fnet-dc.c
b/daemon/fnet-dc.c
index
82081a8
..
0179223
100644
(file)
--- a/
daemon/fnet-dc.c
+++ b/
daemon/fnet-dc.c
@@
-158,6
+158,7
@@
static struct dcexppeer *expected = NULL;
static char *hmlistname = NULL;
static char *xmllistname = NULL;
static char *xmlbz2listname = NULL;
static char *hmlistname = NULL;
static char *xmllistname = NULL;
static char *xmlbz2listname = NULL;
+static struct timer *listwritetimer = NULL;
static void peerconnect(struct socket *sk, int err, struct fnetnode *fn);
static void freedcpeer(struct dcpeer *peer);
static void peerconnect(struct socket *sk, int err, struct fnetnode *fn);
static void freedcpeer(struct dcpeer *peer);
@@
-168,6
+169,7
@@
static void updatehmlist(void);
static void updatexmllist(void);
static void updatexmlbz2list(void);
static void requestfile(struct dcpeer *peer);
static void updatexmllist(void);
static void updatexmlbz2list(void);
static void requestfile(struct dcpeer *peer);
+static void updatelists(int now);
static int reservedchar(unsigned char c)
{
static int reservedchar(unsigned char c)
{
@@
-1017,7
+1019,7
@@
static void cmd_forcemove(struct socket *sk, struct fnetnode *fn, char *cmd, cha
} else {
freeargs = 0;
}
} else {
freeargs = 0;
}
- if((newfn = fnetinitconnect(L"dc", args, NULL)) != NULL)
+ if((newfn = fnetinitconnect(L"dc",
fn->owner,
args, NULL)) != NULL)
{
linkfnetnode(newfn);
putfnetnode(newfn);
{
linkfnetnode(newfn);
putfnetnode(newfn);
@@
-1083,7
+1085,8
@@
static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char *
struct sockaddr_in addr;
struct sharecache *node;
int minsize, maxsize;
struct sockaddr_in addr;
struct sharecache *node;
int minsize, maxsize;
- int dotth, buflen;
+ int dotth;
+ size_t buflen;
int termnum, satisfied, skipcheck;
int level, tersat[32];
wchar_t *terms[32];
int termnum, satisfied, skipcheck;
int level, tersat[32];
wchar_t *terms[32];
@@
-1166,10
+1169,11
@@
static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char *
if(!dotth && !strncmp(p, "TTH:", 4))
{
dotth = 1;
if(!dotth && !strncmp(p, "TTH:", 4))
{
dotth = 1;
- if((
buf = base32decode(p + 4, &buflen)) == NULL
)
- goto out;
- if(buflen != 24)
+ if((
(buf = base32decode(p + 4, &buflen)) == NULL) || (buflen != 24)
)
+ {
+ free(buf);
goto out;
goto out;
+ }
memcpy(hashtth, buf, 24);
free(buf);
} else {
memcpy(hashtth, buf, 24);
free(buf);
} else {
@@
-1308,7
+1312,7
@@
static void sendctm(struct socket *sk, char *nick)
if(tcpsock == NULL)
return;
if(tcpsock == NULL)
return;
- if(sockgetremotename
(tcpsoc
k, &addr, &addrlen) < 0)
+ if(sockgetremotename
2(tcpsock, s
k, &addr, &addrlen) < 0)
return;
if(addr->sa_family == AF_INET)
qstrf(sk, "$ConnectToMe %s %s|", nick, formataddress(addr, addrlen));
return;
if(addr->sa_family == AF_INET)
qstrf(sk, "$ConnectToMe %s %s|", nick, formataddress(addr, addrlen));
@@
-1543,6
+1547,11
@@
static void cmd_direction(struct socket *sk, struct dcpeer *peer, char *cmd, cha
peer->direction = mydir;
if(peer->direction == TRNSD_UP)
{
peer->direction = mydir;
if(peer->direction == TRNSD_UP)
{
+ if(confgetint("transfer", "ulquota") && hasupload(&dcnet, peer->wcsname))
+ {
+ freedcpeer(peer);
+ return;
+ }
transfer = newupload(peer->fn, &dcnet, peer->wcsname, &dctransfer, peer);
} else {
if((transfer = finddownload(peer->wcsname)) == NULL)
transfer = newupload(peer->fn, &dcnet, peer->wcsname, &dctransfer, peer);
} else {
if((transfer = finddownload(peer->wcsname)) == NULL)
@@
-1589,6
+1598,11
@@
static void cmd_peerlock(struct socket *sk, struct dcpeer *peer, char *cmd, char
sendsupports(peer);
if((transfer = finddownload(peer->wcsname)) == NULL)
{
sendsupports(peer);
if((transfer = finddownload(peer->wcsname)) == NULL)
{
+ if(confgetint("transfer", "ulquota") && hasupload(&dcnet, peer->wcsname))
+ {
+ freedcpeer(peer);
+ return;
+ }
peer->direction = TRNSD_UP;
transfer = newupload(peer->fn, &dcnet, peer->wcsname, &dctransfer, peer);
} else {
peer->direction = TRNSD_UP;
transfer = newupload(peer->fn, &dcnet, peer->wcsname, &dctransfer, peer);
} else {
@@
-2517,7
+2531,7
@@
static int hubsearch(struct fnetnode *fn, struct search *srch, struct srchfnnlis
addtobuf(sstr, 0);
if(tcpsock != NULL)
{
addtobuf(sstr, 0);
if(tcpsock != NULL)
{
- if(sockgetremotename
(udpsoc
k, &name, &namelen) < 0)
+ if(sockgetremotename
2(udpsock, fn->s
k, &name, &namelen) < 0)
{
flog(LOG_WARNING, "cannot get address of UDP socket");
} else {
{
flog(LOG_WARNING, "cannot get address of UDP socket");
} else {
@@
-2538,7
+2552,7
@@
static int hubsearch(struct fnetnode *fn, struct search *srch, struct srchfnnlis
#undef qstrf
#define cc(c) ((void (*)(struct socket *, void *, char *, char *))(c))
#undef qstrf
#define cc(c) ((void (*)(struct socket *, void *, char *, char *))(c))
-struct command hubcmds[] =
+st
atic st
ruct command hubcmds[] =
{
{"$Lock", cc(cmd_lock)},
{"$HubName", cc(cmd_hubname)},
{
{"$Lock", cc(cmd_lock)},
{"$HubName", cc(cmd_hubname)},
@@
-2561,7
+2575,7
@@
struct command hubcmds[] =
{NULL, NULL}
};
{NULL, NULL}
};
-struct command peercmds[] =
+st
atic st
ruct command peercmds[] =
{
{"$MyNick", cc(cmd_mynick)},
{"$Lock", cc(cmd_peerlock)},
{
{"$MyNick", cc(cmd_mynick)},
{"$Lock", cc(cmd_peerlock)},
@@
-2597,7
+2611,7
@@
static void dctransgotdata(struct transfer *transfer, struct dcpeer *peer)
{
int ret;
void *buf;
{
int ret;
void *buf;
- char outbuf[1024];
+
unsigned
char outbuf[1024];
z_stream *cstr;
size_t bufsize;
z_stream *cstr;
size_t bufsize;
@@
-3500,11
+3514,31
@@
static void updatexmlbz2list(void)
fclose(real);
}
fclose(real);
}
-static int shareupdate(unsigned long long uusharesize, void *data)
+static void listtimercb(int cancelled, void *uudata)
+{
+ listwritetimer = NULL;
+ if(!cancelled)
+ updatelists(1);
+}
+
+static void updatelists(int now)
{
{
+ if(!now)
+ {
+ if(listwritetimer == NULL)
+ listwritetimer = timercallback(ntime() + 300, listtimercb, NULL);
+ return;
+ }
+ if(listwritetimer != NULL)
+ canceltimer(listwritetimer);
updatehmlist();
updatexmllist();
updatexmlbz2list();
updatehmlist();
updatexmllist();
updatexmlbz2list();
+}
+
+static int shareupdate(unsigned long long uusharesize, void *data)
+{
+ updatelists(0);
return(0);
}
return(0);
}