Changes in dcc.c [17a6ee9:4ed9c8c]
Legend:
- Unmodified
- Added
- Removed
-
dcc.c
r17a6ee9 r4ed9c8c 61 61 unsigned int receivedchunks=0, receiveddata=0; 62 62 63 void dcc_finish( file_transfer_t *file );64 void dcc_close( file_transfer_t *file );63 static void dcc_finish( file_transfer_t *file ); 64 static void dcc_close( file_transfer_t *file ); 65 65 gboolean dccs_send_proto( gpointer data, gint fd, b_input_condition cond ); 66 int dccs_send_request( struct dcc_file_transfer *df, irc_user_t *iu, struct sockaddr_storage *saddr ); 66 int dccs_send_request( struct dcc_file_transfer *df, char *user_nick, struct sockaddr_storage *saddr ); 67 gboolean dccs_recv_start( file_transfer_t *ft ); 67 68 gboolean dccs_recv_proto( gpointer data, gint fd, b_input_condition cond); 68 69 gboolean dccs_recv_write_request( file_transfer_t *ft ); … … 70 71 gboolean dcc_abort( dcc_file_transfer_t *df, char *reason, ... ); 71 72 72 dcc_file_transfer_t *dcc_alloc_transfer( const char *file_name, size_t file_size, struct im_connection *ic ) 73 /* As defined in ft.h */ 74 file_transfer_t *imcb_file_send_start( struct im_connection *ic, char *handle, char *file_name, size_t file_size ) 75 { 76 user_t *u = user_findhandle( ic, handle ); 77 /* one could handle this more intelligent like imcb_buddy_msg. 78 * can't call it directly though cause it does some wrapping. 79 * Maybe give imcb_buddy_msg a parameter NO_WRAPPING? */ 80 if (!u) return NULL; 81 82 return dccs_send_start( ic, u->nick, file_name, file_size ); 83 }; 84 85 /* As defined in ft.h */ 86 void imcb_file_canceled( file_transfer_t *file, char *reason ) 87 { 88 if( file->canceled ) 89 file->canceled( file, reason ); 90 91 dcc_close( file ); 92 } 93 94 /* As defined in ft.h */ 95 gboolean imcb_file_recv_start( file_transfer_t *ft ) 96 { 97 return dccs_recv_start( ft ); 98 } 99 100 /* As defined in ft.h */ 101 void imcb_file_finished( file_transfer_t *file ) 102 { 103 dcc_file_transfer_t *df = file->priv; 104 105 if( file->bytes_transferred >= file->file_size ) 106 dcc_finish( file ); 107 else 108 df->proto_finished = TRUE; 109 } 110 111 dcc_file_transfer_t *dcc_alloc_transfer( char *file_name, size_t file_size, struct im_connection *ic ) 73 112 { 74 113 file_transfer_t *file = g_new0( file_transfer_t, 1 ); … … 85 124 86 125 /* This is where the sending magic starts... */ 87 file_transfer_t *dccs_send_start( struct im_connection *ic, irc_user_t *iu, constchar *file_name, size_t file_size )126 file_transfer_t *dccs_send_start( struct im_connection *ic, char *user_nick, char *file_name, size_t file_size ) 88 127 { 89 128 file_transfer_t *file; 90 129 dcc_file_transfer_t *df; 91 irc_t *irc = (irc_t *) ic->bee->ui_data;92 130 struct sockaddr_storage saddr; 93 131 char *errmsg; … … 112 150 file->status = FT_STATUS_LISTENING; 113 151 114 if( !dccs_send_request( df, iu, &saddr ) )152 if( !dccs_send_request( df, user_nick, &saddr ) ) 115 153 return NULL; 116 154 … … 118 156 df->watch_in = b_input_add( df->fd, GAIM_INPUT_READ, dccs_send_proto, df ); 119 157 120 irc->file_transfers = g_slist_prepend(irc->file_transfers, file );158 df->ic->irc->file_transfers = g_slist_prepend( df->ic->irc->file_transfers, file ); 121 159 122 160 df->progress_timeout = b_timeout_add( DCC_MAX_STALL * 1000, dcc_progress, df ); … … 125 163 "Accept the file transfer if you'd like the file. If you don't, " 126 164 "issue the 'transfers reject' command.", 127 iu->nick, file_name, file_size / 1024 );165 user_nick, file_name, file_size / 1024 ); 128 166 129 167 return file; … … 178 216 179 217 /* Creates the "DCC SEND" line and sends it to the server */ 180 int dccs_send_request( struct dcc_file_transfer *df, irc_user_t *iu, struct sockaddr_storage *saddr )218 int dccs_send_request( struct dcc_file_transfer *df, char *user_nick, struct sockaddr_storage *saddr ) 181 219 { 182 220 char ipaddr[INET6_ADDRSTRLEN]; … … 212 250 df->ft->file_name, ipaddr, port, df->ft->file_size ); 213 251 214 irc_send_msg_raw( iu, "PRIVMSG", iu->irc->user->nick, cmd ); 252 if ( !irc_msgfrom( df->ic->irc, user_nick, cmd ) ) 253 return dcc_abort( df, "Couldn't send `DCC SEND' message to %s.", user_nick ); 215 254 216 255 g_free( cmd ); … … 457 496 * Cleans up after a transfer. 458 497 */ 459 void dcc_close( file_transfer_t *file )498 static void dcc_close( file_transfer_t *file ) 460 499 { 461 500 dcc_file_transfer_t *df = file->priv; 462 irc_t *irc = (irc_t *) df->ic->bee->ui_data;463 501 464 502 if( file->free ) … … 476 514 b_event_remove( df->progress_timeout ); 477 515 478 irc->file_transfers = g_slist_remove(irc->file_transfers, file );516 df->ic->irc->file_transfers = g_slist_remove( df->ic->irc->file_transfers, file ); 479 517 480 518 g_free( df ); … … 506 544 file_transfer_t *dcc_request( struct im_connection *ic, char *line ) 507 545 { 508 irc_t *irc = (irc_t *) ic->bee->ui_data;509 546 char *pattern = "SEND" 510 547 " (([^\"][^ ]*)|\"(([^\"]|\\\")*)\")" … … 590 627 g_free( input ); 591 628 592 irc->file_transfers = g_slist_prepend(irc->file_transfers, ft );629 df->ic->irc->file_transfers = g_slist_prepend( df->ic->irc->file_transfers, ft ); 593 630 594 631 return ft;
Note: See TracChangeset
for help on using the changeset viewer.