--- a/libpurple/protocols/mxit/filexfer.c Fri Sep 06 00:39:40 2013 +0530 +++ b/libpurple/protocols/mxit/filexfer.c Fri Sep 06 01:08:25 2013 +0530 @@ -167,7 +167,7 @@ filesize = purple_xfer_get_bytes_remaining( xfer ); buffer = g_malloc( filesize ); - if ( fread( buffer, filesize, 1, xfer->dest_fp ) > 0 ) { + if ( purple_xfer_read_file( xfer, buffer, filesize ) > 0 ) { /* send data */ wrote = purple_xfer_write( xfer, buffer, filesize ); if ( wrote > 0 ) @@ -282,6 +282,21 @@ * Callbacks from libPurple */ + +static PurpleXferIoOps send_ops = +{ + mxit_xfer_init, /* init */ + NULL, /* request_denied */ + mxit_xfer_start, /* start */ + mxit_xfer_end, /* end */ + mxit_xfer_cancel_send, /* cancel_send */ + NULL, /* cancel_recv */ + NULL, /* read */ + mxit_xfer_write, /* write */ + NULL, /* ack */ +}; + + /*------------------------------------------------------------------------ * Indicate if file transfers are supported to this contact. * For MXit file transfers are always supported. @@ -315,13 +330,7 @@ mx = g_new0( struct mxitxfer, 1 ); mx->session = session; purple_xfer_set_protocol_data( xfer, mx ); - - /* configure callbacks (reference: "libpurple/xfer.h") */ - purple_xfer_set_init_fnc( xfer, mxit_xfer_init ); - purple_xfer_set_start_fnc( xfer, mxit_xfer_start ); - purple_xfer_set_end_fnc( xfer, mxit_xfer_end ); - purple_xfer_set_cancel_send_fnc( xfer, mxit_xfer_cancel_send ); - purple_xfer_set_write_fnc( xfer, mxit_xfer_write ); + purple_xfer_set_io_ops( xfer, &send_ops ); return xfer; } @@ -349,6 +358,21 @@ * Calls from the MXit Protocol layer */ + +static PurpleXferIoOps recieve_ops = +{ + mxit_xfer_init, /* init */ + mxit_xfer_request_denied, /* request_denied */ + NULL, /* start */ + mxit_xfer_end, /* end */ + NULL, /* cancel_send */ + mxit_xfer_cancel_recv, /* cancel_recv */ + NULL, /* read */ + NULL, /* write */ + NULL, /* ack */ +}; + + /*------------------------------------------------------------------------ * A file transfer offer has been received from the MXit server. * @@ -377,11 +401,7 @@ if( filesize > 0 ) purple_xfer_set_size( xfer, filesize ); - /* register file transfer callback functions */ - purple_xfer_set_init_fnc( xfer, mxit_xfer_init ); - purple_xfer_set_request_denied_fnc( xfer, mxit_xfer_request_denied ); - purple_xfer_set_cancel_recv_fnc( xfer, mxit_xfer_cancel_recv ); - purple_xfer_set_end_fnc( xfer, mxit_xfer_end ); + purple_xfer_set_io_ops( xfer, &recieve_ops ); /* give the request to the user to accept/deny */ purple_xfer_request( xfer ); @@ -443,7 +463,7 @@ g_object_ref( xfer ); purple_xfer_start( xfer, -1, NULL, 0 ); - if ( fwrite( data, datalen, 1, xfer->dest_fp ) > 0 ) { + if ( purple_xfer_write_file( xfer, (const guchar *)data, datalen ) ) { g_object_unref( xfer ); purple_xfer_set_completed( xfer, TRUE ); purple_xfer_end( xfer );