X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ftransfer.c;h=56b237d46a5cbd5777d866c9168dd6dc561a0937;hb=175c86de77cd5e6d447cfba50dc8f755db87eb16;hp=066febca6905662b51b2f941453e6cabec8cb77d;hpb=0309b83d648174d93dc52c11e8c8a243e0bd3e8b;p=doldaconnect.git diff --git a/daemon/transfer.c b/daemon/transfer.c index 066febc..56b237d 100644 --- a/daemon/transfer.c +++ b/daemon/transfer.c @@ -155,6 +155,18 @@ struct transfer *finddownload(wchar_t *peerid) return(transfer); } +struct transfer *hasupload(struct fnet *fnet, wchar_t *peerid) +{ + struct transfer *transfer; + + for(transfer = transfers; transfer != NULL; transfer = transfer->next) + { + if((transfer->dir == TRNSD_UP) && (transfer->fnet == fnet) && !wcscmp(transfer->peerid, peerid)) + break; + } + return(transfer); +} + struct transfer *newupload(struct fnetnode *fn, struct fnet *fnet, wchar_t *nickid, struct transferiface *iface, void *data) { struct transfer *transfer; @@ -617,6 +629,8 @@ static void filterread(struct socket *sk, struct transfer *transfer) static void filterexit(pid_t pid, int status, void *data) { struct transfer *transfer; + struct fnet *fnet; + wchar_t *peerid; for(transfer = transfers; transfer != NULL; transfer = transfer->next) { @@ -624,13 +638,14 @@ static void filterexit(pid_t pid, int status, void *data) { transfer->filter = -1; killfilter(transfer); + fnet = transfer->fnet; + peerid = swcsdup(transfer->peerid); if(WEXITSTATUS(status)) - { resettransfer(transfer); - } else { + else freetransfer(transfer); - } - trytransferbypeer(transfer->fnet, transfer->peerid); + trytransferbypeer(fnet, peerid); + free(peerid); break; } } @@ -787,6 +802,7 @@ static struct configvar myvars[] = {CONF_VAR_INT, "ultos", {.num = SOCK_TOS_MAXTP}}, {CONF_VAR_INT, "dltos", {.num = SOCK_TOS_MAXTP}}, {CONF_VAR_STRING, "filter", {.str = L"dc-filter"}}, + {CONF_VAR_BOOL, "ulquota", {.num = 0}}, {CONF_VAR_END} };