ft.h

Go to the documentation of this file.
00001 
00006 /* purple
00007  *
00008  * Purple is the legal property of its developers, whose names are too numerous
00009  * to list here.  Please refer to the COPYRIGHT file distributed with this
00010  * source distribution.
00011  *
00012  * This program is free software; you can redistribute it and/or modify
00013  * it under the terms of the GNU General Public License as published by
00014  * the Free Software Foundation; either version 2 of the License, or
00015  * (at your option) any later version.
00016  *
00017  * This program is distributed in the hope that it will be useful,
00018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020  * GNU General Public License for more details.
00021  *
00022  * You should have received a copy of the GNU General Public License
00023  * along with this program; if not, write to the Free Software
00024  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
00025  *
00026  * @see @ref xfer-signals
00027  */
00028 #ifndef _PURPLE_FT_H_
00029 #define _PURPLE_FT_H_
00030 
00031 /**************************************************************************/
00033 /**************************************************************************/
00034 typedef struct _PurpleXfer PurpleXfer;
00035 
00036 #include <glib.h>
00037 #include <stdio.h>
00038 
00039 #include "account.h"
00040 
00044 typedef enum
00045 {
00046     PURPLE_XFER_UNKNOWN = 0,  
00047     PURPLE_XFER_SEND,         
00048     PURPLE_XFER_RECEIVE       
00050 } PurpleXferType;
00051 
00055 typedef enum
00056 {
00057     PURPLE_XFER_STATUS_UNKNOWN = 0,   
00058     PURPLE_XFER_STATUS_NOT_STARTED,   
00059     PURPLE_XFER_STATUS_ACCEPTED,      
00060     PURPLE_XFER_STATUS_STARTED,       
00061     PURPLE_XFER_STATUS_DONE,          
00062     PURPLE_XFER_STATUS_CANCEL_LOCAL,  
00063     PURPLE_XFER_STATUS_CANCEL_REMOTE  
00064 } PurpleXferStatusType;
00065 
00072 typedef struct
00073 {
00074     void (*new_xfer)(PurpleXfer *xfer);
00075     void (*destroy)(PurpleXfer *xfer);
00076     void (*add_xfer)(PurpleXfer *xfer);
00077     void (*update_progress)(PurpleXfer *xfer, double percent);
00078     void (*cancel_local)(PurpleXfer *xfer);
00079     void (*cancel_remote)(PurpleXfer *xfer);
00080 
00081     void (*_purple_reserved1)(void);
00082     void (*_purple_reserved2)(void);
00083     void (*_purple_reserved3)(void);
00084     void (*_purple_reserved4)(void);
00085 } PurpleXferUiOps;
00086 
00090 struct _PurpleXfer
00091 {
00092     guint ref;                    
00093     PurpleXferType type;            
00095     PurpleAccount *account;         
00097     char *who;                    
00100     char *message;                
00101     char *filename;               
00102     char *local_filename;         
00103     size_t size;                  
00105     FILE *dest_fp;                
00107     char *remote_ip;              
00108     int local_port;               
00109     int remote_port;              
00111     int fd;                       
00112     int watcher;                  
00114     size_t bytes_sent;            
00115     size_t bytes_remaining;       
00116     time_t start_time;            
00117     time_t end_time;              
00119     size_t current_buffer_size;   
00122     PurpleXferStatusType status;    
00124     /* I/O operations. */
00125     struct
00126     {
00127         void (*init)(PurpleXfer *xfer);
00128         void (*request_denied)(PurpleXfer *xfer);
00129         void (*start)(PurpleXfer *xfer);
00130         void (*end)(PurpleXfer *xfer);
00131         void (*cancel_send)(PurpleXfer *xfer);
00132         void (*cancel_recv)(PurpleXfer *xfer);
00133         gssize (*read)(guchar **buffer, PurpleXfer *xfer);
00134         gssize (*write)(const guchar *buffer, size_t size, PurpleXfer *xfer);
00135         void (*ack)(PurpleXfer *xfer, const guchar *buffer, size_t size);
00136 
00137     } ops;
00138 
00139     PurpleXferUiOps *ui_ops;            
00140     void *ui_data;                    
00142     void *data;                       
00143 };
00144 
00145 #ifdef __cplusplus
00146 extern "C" {
00147 #endif
00148 
00149 /**************************************************************************/
00151 /**************************************************************************/
00167 PurpleXfer *purple_xfer_new(PurpleAccount *account,
00168                                 PurpleXferType type, const char *who);
00169 
00175 GList *purple_xfers_get_all(void);
00176 
00183 void purple_xfer_ref(PurpleXfer *xfer);
00184 
00194 void purple_xfer_unref(PurpleXfer *xfer);
00195 
00205 void purple_xfer_request(PurpleXfer *xfer);
00206 
00213 void purple_xfer_request_accepted(PurpleXfer *xfer, const char *filename);
00214 
00220 void purple_xfer_request_denied(PurpleXfer *xfer);
00221 
00229 PurpleXferType purple_xfer_get_type(const PurpleXfer *xfer);
00230 
00238 PurpleAccount *purple_xfer_get_account(const PurpleXfer *xfer);
00239 
00247 const char *purple_xfer_get_remote_user(const PurpleXfer *xfer);
00248 
00256 PurpleXferStatusType purple_xfer_get_status(const PurpleXfer *xfer);
00257 
00265 gboolean purple_xfer_is_canceled(const PurpleXfer *xfer);
00266 
00274 gboolean purple_xfer_is_completed(const PurpleXfer *xfer);
00275 
00283 const char *purple_xfer_get_filename(const PurpleXfer *xfer);
00284 
00292 const char *purple_xfer_get_local_filename(const PurpleXfer *xfer);
00293 
00301 size_t purple_xfer_get_bytes_sent(const PurpleXfer *xfer);
00302 
00310 size_t purple_xfer_get_bytes_remaining(const PurpleXfer *xfer);
00311 
00319 size_t purple_xfer_get_size(const PurpleXfer *xfer);
00320 
00330 double purple_xfer_get_progress(const PurpleXfer *xfer);
00331 
00339 unsigned int purple_xfer_get_local_port(const PurpleXfer *xfer);
00340 
00348 const char *purple_xfer_get_remote_ip(const PurpleXfer *xfer);
00349 
00357 unsigned int purple_xfer_get_remote_port(const PurpleXfer *xfer);
00358 
00365 void purple_xfer_set_completed(PurpleXfer *xfer, gboolean completed);
00366 
00373 void purple_xfer_set_message(PurpleXfer *xfer, const char *message);
00374 
00381 void purple_xfer_set_filename(PurpleXfer *xfer, const char *filename);
00382 
00389 void purple_xfer_set_local_filename(PurpleXfer *xfer, const char *filename);
00390 
00397 void purple_xfer_set_size(PurpleXfer *xfer, size_t size);
00398 
00412 void purple_xfer_set_bytes_sent(PurpleXfer *xfer, size_t bytes_sent);
00413 
00421 PurpleXferUiOps *purple_xfer_get_ui_ops(const PurpleXfer *xfer);
00422 
00429 void purple_xfer_set_read_fnc(PurpleXfer *xfer,
00430         gssize (*fnc)(guchar **, PurpleXfer *));
00431 
00438 void purple_xfer_set_write_fnc(PurpleXfer *xfer,
00439         gssize (*fnc)(const guchar *, size_t, PurpleXfer *));
00440 
00447 void purple_xfer_set_ack_fnc(PurpleXfer *xfer,
00448         void (*fnc)(PurpleXfer *, const guchar *, size_t));
00449 
00456 void purple_xfer_set_request_denied_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *));
00457 
00468 void purple_xfer_set_init_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *));
00469 
00476 void purple_xfer_set_start_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *));
00477 
00484 void purple_xfer_set_end_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *));
00485 
00492 void purple_xfer_set_cancel_send_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *));
00493 
00500 void purple_xfer_set_cancel_recv_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *));
00501 
00510 gssize purple_xfer_read(PurpleXfer *xfer, guchar **buffer);
00511 
00521 gssize purple_xfer_write(PurpleXfer *xfer, const guchar *buffer, gsize size);
00522 
00535 void purple_xfer_start(PurpleXfer *xfer, int fd, const char *ip,
00536                      unsigned int port);
00537 
00543 void purple_xfer_end(PurpleXfer *xfer);
00544 
00551 void purple_xfer_add(PurpleXfer *xfer);
00552 
00558 void purple_xfer_cancel_local(PurpleXfer *xfer);
00559 
00565 void purple_xfer_cancel_remote(PurpleXfer *xfer);
00566 
00579 void purple_xfer_error(PurpleXferType type, PurpleAccount *account, const char *who, const char *msg);
00580 
00586 void purple_xfer_update_progress(PurpleXfer *xfer);
00587 
00597 void purple_xfer_conversation_write(PurpleXfer *xfer, char *message, gboolean is_error);
00598 
00601 /**************************************************************************/
00603 /**************************************************************************/
00611 void *purple_xfers_get_handle(void);
00612 
00616 void purple_xfers_init(void);
00617 
00621 void purple_xfers_uninit(void);
00622 
00628 void purple_xfers_set_ui_ops(PurpleXferUiOps *ops);
00629 
00635 PurpleXferUiOps *purple_xfers_get_ui_ops(void);
00636 
00639 #ifdef __cplusplus
00640 }
00641 #endif
00642 
00643 #endif /* _PURPLE_FT_H_ */