void file_message(LwqqClient* lc,LwqqMsgFileMessage* file) { qq_account* ac = lwqq_client_userdata(lc); if(file->mode == MODE_RECV) { PurpleAccount* account = ac->account; LwqqClient* lc = ac->qq; //for(i=0;i<file->file_count;i++){ LwqqBuddy* buddy = lc->find_buddy_by_uin(lc,file->from); if(buddy == NULL ) return; const char* key = try_get(buddy->qqnumber,buddy->uin); PurpleXfer* xfer = purple_xfer_new(account,PURPLE_XFER_RECEIVE,key); purple_xfer_set_filename(xfer,file->recv.name); purple_xfer_set_init_fnc(xfer,recv_file_init); purple_xfer_set_request_denied_fnc(xfer,recv_file_request_denied); purple_xfer_set_cancel_recv_fnc(xfer,recv_file_cancel); LwqqMsgFileMessage* fdup = s_malloc(sizeof(*fdup)); memcpy(fdup,file,sizeof(*fdup)); file->from = file->to = file->reply_ip = file->recv.name = NULL; xfer->data = fdup; purple_xfer_request(xfer); } else if(file->mode == MODE_REFUSE) { if(file->refuse.cancel_type == CANCEL_BY_USER) { qq_sys_msg_write(ac, LWQQ_MT_BUDDY_MSG, file->from, "对方取消文件传输", PURPLE_MESSAGE_SYSTEM, time(NULL)); } else if(file->refuse.cancel_type == CANCEL_BY_OVERTIME) { qq_sys_msg_write(ac, LWQQ_MT_BUDDY_MSG, file->from, "文件传输超时", PURPLE_MESSAGE_SYSTEM, time(NULL)); } } }
//the entrience for recv file messages void file_message(LwqqClient* lc,LwqqMsgFileMessage* file) { qq_account* ac = lwqq_client_userdata(lc); if(file->mode == MODE_RECV) { PurpleAccount* account = ac->account; LwqqClient* lc = ac->qq; LwqqBuddy* buddy = lc->find_buddy_by_uin(lc,file->super.from); if(buddy == NULL ) return; const char* key = try_get(buddy->qqnumber,buddy->uin); PurpleXfer* xfer = purple_xfer_new(account,PURPLE_XFER_RECEIVE,key); purple_xfer_set_filename(xfer,file->recv.name); purple_xfer_set_init_fnc(xfer,recv_file_init); purple_xfer_set_request_denied_fnc(xfer,recv_file_request_denied); purple_xfer_set_cancel_recv_fnc(xfer,recv_file_cancel); LwqqMsgFileMessage* fdup = s_malloc0(sizeof(*fdup)); lwqq_msg_move(fdup,file); xfer->data = fdup; purple_xfer_request(xfer); } else if(file->mode == MODE_REFUSE) { if(file->refuse.cancel_type == CANCEL_BY_USER) qq_sys_msg_write(ac, LWQQ_MS_BUDDY_MSG, file->super.from, _("Other canceled file transport"), PURPLE_MESSAGE_SYSTEM, time(NULL)); else if(file->refuse.cancel_type == CANCEL_BY_OVERTIME) qq_sys_msg_write(ac, LWQQ_MS_BUDDY_MSG, file->super.from, _("File transport timeout"), PURPLE_MESSAGE_SYSTEM, time(NULL)); } }
static void send_offline_file_receipt(LwqqAsyncEvent* ev,PurpleXfer* xfer) { int errno = lwqq_async_event_get_result(ev); qq_account* ac = purple_connection_get_protocol_data(purple_account_get_connection(xfer->account)); LwqqMsgOffFile* file = xfer->data; if(errno == 0){ qq_sys_msg_write(ac, LWQQ_MT_BUDDY_MSG, file->to, "发送离线文件成功", PURPLE_MESSAGE_SYSTEM, time(NULL)); }else{ qq_sys_msg_write(ac, LWQQ_MT_BUDDY_MSG, file->to, "发送离线文件失败", PURPLE_MESSAGE_ERROR, time(NULL)); } lwqq_msg_offfile_free(file); purple_xfer_set_completed(xfer,1); }
static void send_offline_file_receipt(LwqqAsyncEvent* ev,PurpleXfer* xfer) { int err = lwqq_async_event_get_result(ev); qq_account* ac = purple_connection_get_protocol_data(purple_account_get_connection(xfer->account)); LwqqMsgOffFile* file = xfer->data; if(err == 0){ qq_sys_msg_write(ac, LWQQ_MS_BUDDY_MSG, file->super.to, _("Send offline file successful"), PURPLE_MESSAGE_SYSTEM, time(NULL)); }else{ char buf[512]; snprintf(buf,sizeof(buf),_("Send offline file failed,Error Code:%d"),err); qq_sys_msg_write(ac, LWQQ_MS_BUDDY_MSG, file->super.to, buf, PURPLE_MESSAGE_ERROR, time(NULL)); } lwqq_msg_free((LwqqMsg*)file); purple_xfer_set_completed(xfer,1); }
static void send_file(LwqqAsyncEvent* event,PurpleXfer *xfer) { qq_account* ac = purple_connection_get_protocol_data(purple_account_get_connection(xfer->account)); LwqqClient* lc = ac->qq; long errno = 0; if(lwqq_async_event_get_code(event)==LWQQ_CALLBACK_FAILED){ s_free(xfer->data); return; } errno = lwqq_async_event_get_result(event); LwqqMsgOffFile* file = xfer->data; //purple_xfer_unref(xfer); if(errno) { qq_sys_msg_write(ac,LWQQ_MT_BUDDY_MSG, file->to,"上传空间不足",PURPLE_MESSAGE_ERROR,time(NULL)); lwqq_msg_offfile_free(file); s_free(xfer->data); purple_xfer_set_completed(xfer,1); } else { LwqqAsyncEvent* ev = lwqq_msg_send_offfile(lc,file); lwqq_async_add_event_listener(ev,_C_(2p,send_offline_file_receipt,ev,xfer)); } }
static void send_file(LwqqAsyncEvent* event,PurpleXfer *xfer) { //now xfer is not valid. if(event->failcode != LWQQ_CALLBACK_VALID) return; qq_account* ac = purple_connection_get_protocol_data(purple_account_get_connection(xfer->account)); LwqqClient* lc = ac->qq; long errno = 0; if(event->failcode==LWQQ_CALLBACK_FAILED) { lwqq_msg_free((LwqqMsg*)xfer->data); return; } errno = lwqq_async_event_get_result(event); LwqqMsgOffFile* file = xfer->data; if(errno) { qq_sys_msg_write(ac,LWQQ_MS_BUDDY_MSG, file->super.to,"发送离线文件失败",PURPLE_MESSAGE_ERROR,time(NULL)); lwqq_msg_free((LwqqMsg*)file); purple_xfer_set_completed(xfer,1); } else { LwqqAsyncEvent* ev = lwqq_msg_send_offfile(lc,file); lwqq_async_add_event_listener(ev,_C_(2p,send_offline_file_receipt,ev,xfer)); } }