Exemple #1
0
/**
 * 广播文件信息.
 * @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);
}
Exemple #2
0
/**
 * 发送文件信息.
 * @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);
}