Fixed buffer eating bug in transfer system.
[doldaconnect.git] / daemon / transfer.h
index 082d409..4678254 100644 (file)
@@ -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 <fredrik@dolda2000.com>
  *  
  *  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
@@ -50,13 +50,6 @@ struct transferiface
     void (*wantdata)(struct transfer *transfer, void *data);
 };
 
-struct transarg
-{
-    struct transarg *next;
-    wchar_t *rec;
-    wchar_t *val;
-};
-
 struct transfer
 {
     struct transfer *next, *prev;
@@ -80,17 +73,18 @@ struct transfer
     wchar_t *path;
     uid_t owner;
     int state, dir, error;
-    size_t size, curpos, endpos;
+    off_t size, curpos, endpos;
     struct fnetnode *fn;
     void *ifacedata;
     struct socket *localend;
-    struct transarg *args;
+    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);
@@ -104,11 +98,12 @@ void linktransfer(struct transfer *transfer);
 int slotsleft(void);
 void bumptransfer(struct transfer *transfer);
 struct transfer *findtransfer(int id);
+struct transfer *hasupload(struct fnet *fnet, wchar_t *peerid);
 struct transfer *newupload(struct fnetnode *fn, struct fnet *fnet, wchar_t *nickid, struct transferiface *iface, void *data);
 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);
@@ -116,15 +111,20 @@ 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);
+ssize_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