/** * 请求文件数据入口. * @param sock tcp socket * @param fileattr 文件类型 * @param attach 附加数据 */ void SendFile::RequestDataEntry(int sock, uint32_t fileattr, char *attach) { struct sockaddr_in addr; socklen_t len; PalInfo *pal; FileInfo *file; uint32_t fileid; uint32_t filectime; /* 检查文件属性是否匹配 */ fileid = iptux_get_hex_number(attach, ':', 1); file = (FileInfo *)cthrd.GetFileFromAll(fileid); /* 兼容windows版信鸽(IPMSG) ,这里的信鸽不是飞鸽传书(IPMSG)*/ if(!file) { fileid = iptux_get_dec_number(attach, ':', 1); file = (FileInfo *)cthrd.GetFileFromAll(fileid); } /* 兼容adroid版信鸽(IPMSG) */ if(!file) { fileid = iptux_get_hex_number(attach, ':', 0); filectime = iptux_get_dec_number(attach, ':', 1); file = (FileInfo *)cthrd.GetFileFromAllWithPacketN(fileid,filectime); } if (!file || GET_MODE(file->fileattr) != GET_MODE(fileattr)) return; /* 检查好友数据是否存在 */ len = sizeof(addr); getpeername(sock, (struct sockaddr *)&addr, &len); if (!(pal = cthrd.GetPalFromList(addr.sin_addr.s_addr))) return; /* 发送文件数据 */ // /** // *文件信息可能被删除或修改,必须单独复制一份. // */ // file->fileown = pal; ThreadSendFile(sock, file); }