/** * 广播文件信息. * @param plist 好友链表 * @param opttype 命令字选项 * @param filist 文件信息链表 */ void SendFile::BcstFileInfo(GSList *plist, uint32_t opttype, GSList *filist) { AnalogFS afs; Command cmd; char buf[MAX_UDPLEN]; size_t len; char *ptr, *name; GSList *tlist,*pallist,*filelist; FileInfo *file; /* 初始化 */ len = 0; ptr = buf; buf[0] = '\0'; pallist = plist; /* 将文件信息写入缓冲区 */ while (pallist) { filelist = filist; while (filelist) { file = (FileInfo *)filelist->data; if(file->fileown == (PalInfo *)pallist->data) { if (access(file->filepath, F_OK) == -1) { filelist = g_slist_next(filelist); continue; } file->waitFlag = 1; name = ipmsg_get_filename_pal(file->filepath); //获取面向好友的文件名 file->filesize = afs.ftwsize(file->filepath); //不得不计算文件长度了 file->packetn = cmd.Packetn(); snprintf(ptr, MAX_UDPLEN - len, "%" PRIu32 ":%s:%" PRIx64 ":%" PRIx32 ":%" PRIx32 ":\a:", file->fileid, name, file->filesize, file->filectime, file->fileattr); g_free(name); len += strlen(ptr); ptr = buf + len; } filelist = g_slist_next(filelist); } cmd.SendFileInfo(cthrd.UdpSockQuote(), (PalInfo *)pallist->data, opttype, buf); pallist = g_slist_next(pallist); } g_slist_free(filelist); }
/** * 发送文件信息. * @param pal class PalInfo * @param opttype 命令字选项 * @param filist 文件信息链表 */ void SendFile::SendFileInfo(PalInfo *pal, uint32_t opttype, GSList *filist) { AnalogFS afs; Command cmd; char buf[MAX_UDPLEN]; size_t len; char *ptr, *name; GSList *tlist; FileInfo *file; /* 初始化 */ len = 0; ptr = buf; buf[0] = '\0'; /* 将文件信息写入缓冲区 */ tlist = filist; while (tlist) { file = (FileInfo *)tlist->data; if (access(file->filepath, F_OK) == -1) { tlist = g_slist_next(tlist); continue; } name = ipmsg_get_filename_pal(file->filepath); //获取面向好友的文件名 file->packetn = cmd.Packetn(); snprintf(ptr, MAX_UDPLEN - len, "%" PRIu32 ":%s:%" PRIx64 ":%" PRIx32 ":%" PRIx32 ":\a", file->fileid, name, file->filesize, file->filectime, file->fileattr); g_free(name); len += strlen(ptr); ptr = buf + len; tlist = g_slist_next(tlist); } /* 发送文件信息 */ cmd.SendFileInfo(cthrd.UdpSockQuote(), pal, opttype, buf); }