半点优化网 http://www.bdxc.net/
当前位置首页 > 网站技术问题> 正文

求一QQ源代码(C++语言版的)

2022-05-15 17:47:36 暂无评论 217 网站技术问题 C++   源代码   语言

return (unsigned char *) send_im_tail; } // 处理普通的 QQ 消息 void MyQQ::qq_process_recv_normal_im(unsigned char * data, unsigned char ** cur sor, int len) { int bytes; qq_recv_normal_im_common *common; qq_recv_normal_im_unprocessed *im_unprocessed; if (*cursor >= (data + len - 1)) { return; } else common = (qq_recv_normal_im_common *)malloc(sizeof(qq_recv_normal_im_commo n)); bytes = qq_normal_im_common_read(data, cursor, len, common); if (bytes < 0) { return; } switch (common->normal_im_type) { case QQ_NORMAL_IM_TEXT: qq_process_recv_normal_im_text (data, cursor, len, common); break; case QQ_NORMAL_IM_FILE_REJECT_UDP: //qq_process_recv_file_reject (data, cursor, len, // common->sender_uid, gc); break; case QQ_NORMAL_IM_FILE_APPROVE_UDP: //qq_process_recv_file_accept (data, cursor, len, // common->sender_uid, gc); break; case QQ_NORMAL_IM_FILE_REQUEST: //qq_process_recv_file_request (data, cursor, len, // common->sender_uid, gc); break; case QQ_NORMAL_IM_FILE_CANCEL: //qq_process_recv_file_cancel (data, cursor, len, // common->sender_uid, gc); break; case QQ_NORMAL_IM_FILE_NOTIFY: //qq_process_recv_file_notify (data, cursor, len, // common->sender_uid, gc); break; default: return; } // normal_im_type g_free (common->session_md5); } void MyQQ::qq_process_recv_normal_im_text(unsigned char * data, unsigned char ** cursor, int len, qq_recv_normal_im_common * common) { short gaim_msg_type; char *name; char *msg_with_gaim_smiley; char *msg_utf8_encoded; qq_recv_normal_im_text *im_text; if (*cursor >= (data + len - 1)) { return; } else im_text = (qq_recv_normal_im_text *)malloc(sizeof(qq_recv_normal_im_text)); im_text->common = common; read_packet_w(data, cursor, len, &(im_text->msg_seq)); read_packet_dw(data, cursor, len, &(im_text->send_time)); read_packet_b(data, cursor, len, &(im_text->unknown1)); read_packet_b(data, cursor, len, &(im_text->sender_icon)); read_packet_data(data, cursor, len, (unsigned char *) & (im_text->unknown2), 3); read_packet_b(data, cursor, len, &(im_text->is_there_font_attr)); read_packet_data(data, cursor, len, (unsigned char *) & (im_text->unknown3), 4); read_packet_b(data, cursor, len, &(im_text->msg_type)); if (im_text->msg_type == QQ_IM_AUTO_REPLY) { im_text->is_there_font_attr = 0x00; im_text->msg = (unsigned char *)malloc(1024); memcpy(im_text->msg,*cursor, data + len - *cursor); } else { if (im_text->is_there_font_attr) { im_text->msg = (unsigned char *)malloc(1500); memcpy(im_text->msg,*cursor, strlen((const char *)*cursor)); im_text->msg[strlen((const char *)*cursor)] = 0; } else { im_text->msg = (unsigned char *)malloc(1024); memcpy(im_text->msg,*cursor, data + len - *cursor); im_text->msg[data + len - *cursor] = 0; } } MessageText = im_text->msg; // 如果需要自动回复 if(Status == 3) { //I_QQAutoReply() 函数获取预先设置的自动回复消息内容,需自己实现 char* MText = I_QQAutoReply(); QQSendTextMessage(common->sender_uid,MText,0x01); } // 在主界面中显示消息 //I_QQReceiveMessage((char *)MessageText,common->sender_uid); } int MyQQ::qq_normal_im_common_read(unsigned char * data, unsigned char ** curs or, int len, qq_recv_normal_im_common * common) { int bytes; bytes = 0; bytes += read_packet_w(data, cursor, len, &(common->sender_ver)); bytes += read_packet_dw(data, cursor, len, &(common->sender_uid)); bytes += read_packet_dw(data, cursor, len, &(common->receiver_uid)); common->session_md5 = (unsigned char *)malloc(QQ_KEY_LENGTH); memcpy(common->session_md5,*cursor, QQ_KEY_LENGTH); bytes += QQ_KEY_LENGTH; *cursor += QQ_KEY_LENGTH; bytes += read_packet_w(data, cursor, len, &(common->normal_im_type)); if (bytes != 28) { return -1; } return bytes; }

猜你喜欢