Exemple #1
0
/**
 * 请求文件数据入口.
 * @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);
}