00001
00025 #ifndef _GAIM_FT_H_
00026 #define _GAIM_FT_H_
00027
00028
00030
00031 typedef struct _GaimXfer GaimXfer;
00032
00033 #include "account.h"
00034
00038 typedef enum
00039 {
00040 GAIM_XFER_UNKNOWN = 0,
00041 GAIM_XFER_SEND,
00042 GAIM_XFER_RECEIVE
00044 } GaimXferType;
00045
00049 typedef enum
00050 {
00051 GAIM_XFER_STATUS_UNKNOWN = 0,
00052 GAIM_XFER_STATUS_NOT_STARTED,
00053 GAIM_XFER_STATUS_ACCEPTED,
00054 GAIM_XFER_STATUS_STARTED,
00055 GAIM_XFER_STATUS_DONE,
00056 GAIM_XFER_STATUS_CANCEL_LOCAL,
00057 GAIM_XFER_STATUS_CANCEL_REMOTE
00058 } GaimXferStatusType;
00059
00066 typedef struct
00067 {
00068 void (*new_xfer)(GaimXfer *xfer);
00069 void (*destroy)(GaimXfer *xfer);
00070 void (*add_xfer)(GaimXfer *xfer);
00071 void (*update_progress)(GaimXfer *xfer, double percent);
00072 void (*cancel_local)(GaimXfer *xfer);
00073 void (*cancel_remote)(GaimXfer *xfer);
00074
00075 } GaimXferUiOps;
00076
00080 struct _GaimXfer
00081 {
00082 guint ref;
00083 GaimXferType type;
00085 GaimAccount *account;
00087 char *who;
00090 char *message;
00091 char *filename;
00092 char *local_filename;
00093 size_t size;
00095 FILE *dest_fp;
00097 char *remote_ip;
00098 int local_port;
00099 int remote_port;
00101 int fd;
00102 int watcher;
00104 size_t bytes_sent;
00105 size_t bytes_remaining;
00107 GaimXferStatusType status;
00109
00110 struct
00111 {
00112 void (*init)(GaimXfer *xfer);
00113 void (*request_denied)(GaimXfer *xfer);
00114 void (*start)(GaimXfer *xfer);
00115 void (*end)(GaimXfer *xfer);
00116 void (*cancel_send)(GaimXfer *xfer);
00117 void (*cancel_recv)(GaimXfer *xfer);
00118 ssize_t (*read)(char **buffer, GaimXfer *xfer);
00119 ssize_t (*write)(const char *buffer, size_t size, GaimXfer *xfer);
00120 void (*ack)(GaimXfer *xfer, const char *buffer, size_t size);
00121
00122 } ops;
00123
00124 GaimXferUiOps *ui_ops;
00125 void *ui_data;
00127 void *data;
00128 };
00129
00130 #ifdef __cplusplus
00131 extern "C" {
00132 #endif
00133
00134
00136
00152 GaimXfer *gaim_xfer_new(GaimAccount *account,
00153 GaimXferType type, const char *who);
00154
00161 void gaim_xfer_ref(GaimXfer *xfer);
00162
00172 void gaim_xfer_unref(GaimXfer *xfer);
00173
00183 void gaim_xfer_request(GaimXfer *xfer);
00184
00191 void gaim_xfer_request_accepted(GaimXfer *xfer, const char *filename);
00192
00198 void gaim_xfer_request_denied(GaimXfer *xfer);
00199
00207 GaimXferType gaim_xfer_get_type(const GaimXfer *xfer);
00208
00216 GaimAccount *gaim_xfer_get_account(const GaimXfer *xfer);
00217
00225 GaimXferStatusType gaim_xfer_get_status(const GaimXfer *xfer);
00226
00234 gboolean gaim_xfer_is_canceled(const GaimXfer *xfer);
00235
00243 gboolean gaim_xfer_is_completed(const GaimXfer *xfer);
00244
00252 const char *gaim_xfer_get_filename(const GaimXfer *xfer);
00253
00261 const char *gaim_xfer_get_local_filename(const GaimXfer *xfer);
00262
00270 size_t gaim_xfer_get_bytes_sent(const GaimXfer *xfer);
00271
00279 size_t gaim_xfer_get_bytes_remaining(const GaimXfer *xfer);
00280
00288 size_t gaim_xfer_get_size(const GaimXfer *xfer);
00289
00299 double gaim_xfer_get_progress(const GaimXfer *xfer);
00300
00308 unsigned int gaim_xfer_get_local_port(const GaimXfer *xfer);
00309
00317 const char *gaim_xfer_get_remote_ip(const GaimXfer *xfer);
00318
00326 unsigned int gaim_xfer_get_remote_port(const GaimXfer *xfer);
00327
00334 void gaim_xfer_set_completed(GaimXfer *xfer, gboolean completed);
00335
00342 void gaim_xfer_set_message(GaimXfer *xfer, const char *message);
00343
00350 void gaim_xfer_set_filename(GaimXfer *xfer, const char *filename);
00351
00358 void gaim_xfer_set_local_filename(GaimXfer *xfer, const char *filename);
00359
00366 void gaim_xfer_set_size(GaimXfer *xfer, size_t size);
00367
00375 GaimXferUiOps *gaim_xfer_get_ui_ops(const GaimXfer *xfer);
00376
00383 void gaim_xfer_set_read_fnc(GaimXfer *xfer,
00384 ssize_t (*fnc)(char **, GaimXfer *));
00385
00392 void gaim_xfer_set_write_fnc(GaimXfer *xfer,
00393 ssize_t (*fnc)(const char *, size_t, GaimXfer *));
00394
00401 void gaim_xfer_set_ack_fnc(GaimXfer *xfer,
00402 void (*fnc)(GaimXfer *, const char *, size_t));
00403
00410 void gaim_xfer_set_request_denied_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00411
00422 void gaim_xfer_set_init_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00423
00430 void gaim_xfer_set_start_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00431
00438 void gaim_xfer_set_end_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00439
00446 void gaim_xfer_set_cancel_send_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00447
00454 void gaim_xfer_set_cancel_recv_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00455
00464 ssize_t gaim_xfer_read(GaimXfer *xfer, char **buffer);
00465
00475 ssize_t gaim_xfer_write(GaimXfer *xfer, const char *buffer, size_t size);
00476
00489 void gaim_xfer_start(GaimXfer *xfer, int fd, const char *ip,
00490 unsigned int port);
00491
00497 void gaim_xfer_end(GaimXfer *xfer);
00498
00505 void gaim_xfer_add(GaimXfer *xfer);
00506
00512 void gaim_xfer_cancel_local(GaimXfer *xfer);
00513
00519 void gaim_xfer_cancel_remote(GaimXfer *xfer);
00520
00532 void gaim_xfer_error(GaimXferType type, const char *who, const char *msg);
00533
00539 void gaim_xfer_update_progress(GaimXfer *xfer);
00540
00550 void gaim_xfer_conversation_write(GaimXfer *xfer, char *message, gboolean is_error);
00553
00555
00563 void gaim_xfers_set_ui_ops(GaimXferUiOps *ops);
00564
00570 GaimXferUiOps *gaim_xfers_get_ui_ops(void);
00571
00574 #ifdef __cplusplus
00575 }
00576 #endif
00577
00578 #endif