X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ftransfer.h;h=5a0bea113216a935bd4bb6b5503367881e1fbf16;hb=284e199aabf3b1149ec24f1aa16e9bed06ec7e91;hp=af50310d99218ac4b2b3b87d4727ac1d078fd189;hpb=d3372da97568d5e1f35fa19787c8ec8af93a0435;p=doldaconnect.git diff --git a/daemon/transfer.h b/daemon/transfer.h index af50310..5a0bea1 100644 --- a/daemon/transfer.h +++ b/daemon/transfer.h @@ -1,6 +1,6 @@ /* * Dolda Connect - Modular multiuser Direct Connect-style client - * Copyright (C) 2004 Fredrik Tolf (fredrik@dolda2000.com) + * Copyright (C) 2004 Fredrik Tolf * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,23 +40,6 @@ #define TRNSE_NOTFOUND 1 #define TRNSE_NOSLOTS 2 -struct transfer; - -struct transferiface -{ - void (*detach)(struct transfer *transfer, void *data); - void (*gotdata)(struct transfer *transfer, void *data); - void (*endofdata)(struct transfer *transfer, void *data); - void (*wantdata)(struct transfer *transfer, void *data); -}; - -struct transarg -{ - struct transarg *next; - wchar_t *rec; - wchar_t *val; -}; - struct transfer { struct transfer *next, *prev; @@ -75,21 +58,21 @@ struct transfer time_t timeout, activity, lastreq; wchar_t *actdesc; struct fnet *fnet; - struct transferiface *iface; wchar_t *peerid, *peernick; wchar_t *path; uid_t owner; int state, dir, error; - size_t size, curpos, endpos; + off_t size, curpos, endpos, localpos; struct fnetnode *fn; - void *ifacedata; - struct socket *localend; - struct transarg *args; + struct socket *localend, *datapipe; + struct wcspair *args; pid_t filter; struct authhandle *auth; struct socket *filterout; char *filterbuf; + struct hash *hash; size_t filterbufsize, filterbufdata; + wchar_t *exitstatus; CBCHAIN(trans_ac, struct transfer *transfer, wchar_t *attrib); CBCHAIN(trans_p, struct transfer *transfer); CBCHAIN(trans_act, struct transfer *transfer); @@ -103,27 +86,29 @@ void linktransfer(struct transfer *transfer); int slotsleft(void); void bumptransfer(struct transfer *transfer); struct transfer *findtransfer(int id); -struct transfer *newupload(struct fnetnode *fn, struct fnet *fnet, wchar_t *nickid, struct transferiface *iface, void *data); +struct transfer *hasupload(struct fnet *fnet, wchar_t *peerid); +struct transfer *newupload(struct fnetnode *fn, struct fnet *fnet, wchar_t *nickid, struct socket *dpipe); void transfersetnick(struct transfer *transfer, wchar_t *newnick); void transfersetpath(struct transfer *transfer, wchar_t *newpath); void transfersetstate(struct transfer *transfer, int newstate); -void transfersetsize(struct transfer *transfer, int newsize); +void transfersetsize(struct transfer *transfer, off_t newsize); void transferseterror(struct transfer *transfer, int error); void transfersetactivity(struct transfer *transfer, wchar_t *desc); -void transferattach(struct transfer *transfer, struct transferiface *iface, void *data); +void transferattach(struct transfer *transfer, struct socket *dpipe); void transferdetach(struct transfer *transfer); void resettransfer(struct transfer *transfer); void transfersetlocalend(struct transfer *transfer, struct socket *sk); -void *transfergetdata(struct transfer *transfer, size_t *size); -void transferaddarg(struct transfer *transfer, wchar_t *rec, wchar_t *val); int forkfilter(struct transfer *transfer); -void transferputdata(struct transfer *transfer, void *buf, size_t size); -size_t transferdatasize(struct transfer *transfer); -void transferendofdata(struct transfer *transfer); -void transferprepul(struct transfer *transfer, size_t size, size_t start, size_t end, struct socket *lesk); +void transferprepul(struct transfer *transfer, off_t size, off_t start, off_t end, struct socket *lesk); void transferstartul(struct transfer *transfer, struct socket *sk); +void transfersethash(struct transfer *transfer, struct hash *hash); +struct transfer *finddownload(wchar_t *peerid); +void transferstartdl(struct transfer *transfer, struct socket *sk); +void trytransferbypeer(struct fnet *fnet, wchar_t *peerid); extern struct transfer *transfers; +extern unsigned long long bytesupload; +extern unsigned long long bytesdownload; EGCBCHAIN(newtransfercb, struct transfer *); #endif