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 (*request_file)(GaimXfer *xfer);
00071 void (*ask_cancel)(GaimXfer *xfer);
00072 void (*add_xfer)(GaimXfer *xfer);
00073 void (*update_progress)(GaimXfer *xfer, double percent);
00074 void (*cancel_local)(GaimXfer *xfer);
00075 void (*cancel_remote)(GaimXfer *xfer);
00076
00077 } GaimXferUiOps;
00078
00082 struct _GaimXfer
00083 {
00084 guint ref;
00085 GaimXferType type;
00087 GaimAccount *account;
00089 char *who;
00092 char *filename;
00093 char *local_filename;
00094 size_t size;
00096 FILE *dest_fp;
00098 char *remote_ip;
00099 int local_port;
00100 int remote_port;
00102 int fd;
00103 int watcher;
00105 size_t bytes_sent;
00106 size_t bytes_remaining;
00108 GaimXferStatusType status;
00110
00111 struct
00112 {
00113 void (*init)(GaimXfer *xfer);
00114 void (*request_denied)(GaimXfer *xfer);
00115 void (*start)(GaimXfer *xfer);
00116 void (*end)(GaimXfer *xfer);
00117 void (*cancel_send)(GaimXfer *xfer);
00118 void (*cancel_recv)(GaimXfer *xfer);
00119 ssize_t (*read)(char **buffer, GaimXfer *xfer);
00120 ssize_t (*write)(const char *buffer, size_t size, GaimXfer *xfer);
00121 void (*ack)(GaimXfer *xfer, const char *buffer, size_t size);
00122
00123 } ops;
00124
00125 GaimXferUiOps *ui_ops;
00126 void *ui_data;
00128 void *data;
00129 };
00130
00131 #ifdef __cplusplus
00132 extern "C" {
00133 #endif
00134
00135
00137
00153 GaimXfer *gaim_xfer_new(GaimAccount *account,
00154 GaimXferType type, const char *who);
00155
00162 void gaim_xfer_ref(GaimXfer *xfer);
00163
00173 void gaim_xfer_unref(GaimXfer *xfer);
00174
00184 void gaim_xfer_request(GaimXfer *xfer);
00185
00192 void gaim_xfer_request_accepted(GaimXfer *xfer, const char *filename);
00193
00199 void gaim_xfer_request_denied(GaimXfer *xfer);
00200
00208 GaimXferType gaim_xfer_get_type(const GaimXfer *xfer);
00209
00217 GaimAccount *gaim_xfer_get_account(const GaimXfer *xfer);
00218
00226 GaimXferStatusType gaim_xfer_get_status(const GaimXfer *xfer);
00227
00235 gboolean gaim_xfer_is_canceled(const GaimXfer *xfer);
00236
00244 gboolean gaim_xfer_is_completed(const GaimXfer *xfer);
00245
00253 const char *gaim_xfer_get_filename(const GaimXfer *xfer);
00254
00262 const char *gaim_xfer_get_local_filename(const GaimXfer *xfer);
00263
00271 size_t gaim_xfer_get_bytes_sent(const GaimXfer *xfer);
00272
00280 size_t gaim_xfer_get_bytes_remaining(const GaimXfer *xfer);
00281
00289 size_t gaim_xfer_get_size(const GaimXfer *xfer);
00290
00300 double gaim_xfer_get_progress(const GaimXfer *xfer);
00301
00309 unsigned int gaim_xfer_get_local_port(const GaimXfer *xfer);
00310
00318 const char *gaim_xfer_get_remote_ip(const GaimXfer *xfer);
00319
00327 unsigned int gaim_xfer_get_remote_port(const GaimXfer *xfer);
00328
00335 void gaim_xfer_set_completed(GaimXfer *xfer, gboolean completed);
00336
00343 void gaim_xfer_set_filename(GaimXfer *xfer, const char *filename);
00344
00351 void gaim_xfer_set_local_filename(GaimXfer *xfer, const char *filename);
00352
00359 void gaim_xfer_set_size(GaimXfer *xfer, size_t size);
00360
00368 GaimXferUiOps *gaim_xfer_get_ui_ops(const GaimXfer *xfer);
00369
00376 void gaim_xfer_set_read_fnc(GaimXfer *xfer,
00377 ssize_t (*fnc)(char **, GaimXfer *));
00378
00385 void gaim_xfer_set_write_fnc(GaimXfer *xfer,
00386 ssize_t (*fnc)(const char *, size_t, GaimXfer *));
00387
00394 void gaim_xfer_set_ack_fnc(GaimXfer *xfer,
00395 void (*fnc)(GaimXfer *, const char *, size_t));
00396
00403 void gaim_xfer_set_request_denied_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00404
00415 void gaim_xfer_set_init_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00416
00423 void gaim_xfer_set_start_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00424
00431 void gaim_xfer_set_end_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00432
00439 void gaim_xfer_set_cancel_send_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00440
00447 void gaim_xfer_set_cancel_recv_fnc(GaimXfer *xfer, void (*fnc)(GaimXfer *));
00448
00457 ssize_t gaim_xfer_read(GaimXfer *xfer, char **buffer);
00458
00468 ssize_t gaim_xfer_write(GaimXfer *xfer, const char *buffer, size_t size);
00469
00482 void gaim_xfer_start(GaimXfer *xfer, int fd, const char *ip,
00483 unsigned int port);
00484
00490 void gaim_xfer_end(GaimXfer *xfer);
00491
00498 void gaim_xfer_add(GaimXfer *xfer);
00499
00505 void gaim_xfer_cancel_local(GaimXfer *xfer);
00506
00512 void gaim_xfer_cancel_remote(GaimXfer *xfer);
00513
00525 void gaim_xfer_error(GaimXferType type, const char *who, const char *msg);
00526
00532 void gaim_xfer_update_progress(GaimXfer *xfer);
00533
00536
00538
00546 void gaim_xfers_set_ui_ops(GaimXferUiOps *ops);
00547
00553 GaimXferUiOps *gaim_xfers_get_ui_ops(void);
00554
00557 #ifdef __cplusplus
00558 }
00559 #endif
00560
00561 #endif