/*
* ImPduFile.cpp
*
* Created on: 2013-12-9
* Author: ziteng@mogujie.com
*/
#include "ImPduFile.h"
CImPduClientFileLoginReq::CImPduClientFileLoginReq(uchar_t* buf, uint32_t len)
{
ReadPduHeader(buf, IM_PDU_HEADER_LEN, &m_pdu_header);
CByteStream is(buf + IM_PDU_HEADER_LEN, len - IM_PDU_HEADER_LEN);
m_user_id = is.ReadString(m_user_id_len);
m_token = is.ReadString(m_token_len);
m_task_id = is.ReadString(m_task_id_len);
is >> m_client_mode;
PARSE_PACKET_ASSERT
}
CImPduClientFileLoginReq::CImPduClientFileLoginReq(const char* user_id, const char* token, const char* task_id, uint32_t client_mode)
{
m_pdu_header.module_id = SID_FILE;
m_pdu_header.command_id = CID_FILE_LOGIN_REQ;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os.WriteString(user_id);
os.WriteString(token);
os.WriteString(task_id);
os > m_result;
m_task_id = is.ReadString(m_task_id_len);
PARSE_PACKET_ASSERT
}
CImPduClientFileLoginRes::CImPduClientFileLoginRes(uint32_t result, const char* task_id)
{
m_pdu_header.module_id = SID_FILE;
m_pdu_header.command_id = CID_FILE_LOGIN_RES;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os > m_file_size;
is >> m_trans_mode;
PARSE_PACKET_ASSERT
}
CImPduClientFileRequest::CImPduClientFileRequest(const char* from_id, const char* to_id,
const char* file_name, uint32_t file_size, uint32_t trans_mode)
{
m_pdu_header.module_id = SID_FILE;
m_pdu_header.command_id = CID_FILE_REQUEST;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os.WriteString(from_id);
os.WriteString(to_id);
os.WriteString(file_name);
os m_result;
m_from_id = is.ReadString(m_from_id_len);
m_to_id = is.ReadString(m_to_id_len);
m_file_name = is.ReadString(m_file_name_len);
m_task_id = is.ReadString(m_task_id_len);
is >> m_ip_addr_cnt;
if (m_ip_addr_cnt > 0)
{
m_ip_addr_list = new ip_addr_t [m_ip_addr_cnt];
ALLOC_FAIL_ASSERT(m_ip_addr_list);
for (uint32_t i = 0; i < m_ip_addr_cnt; i++) {
m_ip_addr_list[i].ip = is.ReadString(m_ip_addr_list[i].ip_len);
is >> m_ip_addr_list[i].port;
}
}
is >> m_trans_mode;
PARSE_PACKET_ASSERT
}
CImPduClientFileResponse::CImPduClientFileResponse(uint32_t result, const char* from_id,
const char* to_id, const char* file_name, const char* task_id,
const list* ip_addr_list , uint32_t trans_mode)
{
m_pdu_header.module_id = SID_FILE;
m_pdu_header.command_id = CID_FILE_RESPONSE;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os size();
os begin(); it != ip_addr_list->end(); it++)
{
const svr_ip_addr_t& ip_addr = *it;
os.WriteString(ip_addr.ip.c_str(), ip_addr.ip.length());
os > m_ip_addr_cnt;
if (m_ip_addr_cnt > 0)
{
m_ip_addr_list = new ip_addr_t [m_ip_addr_cnt];
ALLOC_FAIL_ASSERT(m_ip_addr_list);
for (uint32_t i = 0; i < m_ip_addr_cnt; i++) {
m_ip_addr_list[i].ip = is.ReadString(m_ip_addr_list[i].ip_len);
is >> m_ip_addr_list[i].port;
}
}
is >> m_trans_mode;
is >> m_offline_ready;
PARSE_PACKET_ASSERT
}
CImPduClientFileNotify::CImPduClientFileNotify(const char* from_id, const char* to_id,
const char* file_name, uint32_t file_size, const char* task_id,
const list* ip_addr_list, uint32_t trans_mode, uint32_t offline_ready)
{
m_pdu_header.module_id = SID_FILE;
m_pdu_header.command_id = CID_FILE_NOTIFY;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os.WriteString(from_id);
os.WriteString(to_id);
os.WriteString(file_name);
os size();
os begin(); it != ip_addr_list->end(); it++)
{
const svr_ip_addr_t& ip_addr = *it;
os.WriteString(ip_addr.ip.c_str(), ip_addr.ip.length());
os > m_file_list[i].file_size;
}
}
is >> m_ip_addr_cnt;
if (m_ip_addr_cnt > 0)
{
m_ip_addr_list = new ip_addr_t [m_ip_addr_cnt];
ALLOC_FAIL_ASSERT(m_ip_addr_list);
for (uint32_t i = 0; i < m_ip_addr_cnt; i++) {
m_ip_addr_list[i].ip = is.ReadString(m_ip_addr_list[i].ip_len);
is >> m_ip_addr_list[i].port;
}
}
PARSE_PACKET_ASSERT
}
CImPduClientFileHasOfflineRes::CImPduClientFileHasOfflineRes(uint32_t file_cnt, offline_file_t* serv_file_list, const list* ip_addr_list)
{
m_file_list = NULL;
m_ip_addr_list = NULL;
m_pdu_header.module_id = SID_FILE;
m_pdu_header.command_id = CID_FILE_HAS_OFFLINE_RES;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os end(); it++)
{
const svr_ip_addr_t& ip_addr = *it;
os.WriteString(ip_addr.ip.c_str(), ip_addr.ip.length());
os m_file_size;
PARSE_PACKET_ASSERT
}
CImPduClientFileAddOfflineReq::CImPduClientFileAddOfflineReq(const char* from_id, const char* to_id,
const char* task_id, const char* file_name, uint32_t file_size)
{
m_pdu_header.module_id = SID_FILE;
m_pdu_header.command_id = CID_FILE_ADD_OFFLINE_REQ;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os.WriteString(from_id);
os.WriteString(to_id);
os.WriteString(task_id);
os.WriteString(file_name);
os > m_from_id;
is >> m_to_id;
m_file_name = is.ReadString(m_file_name_len);
is >> m_file_length;
is >> m_transfer_mode;
m_attach_data = is.ReadData(m_attach_len);
PARSE_PACKET_ASSERT
}
CImPduMsgFileTransferReq::CImPduMsgFileTransferReq(uint32_t from_id, uint32_t to_id, const char* file_name, uint32_t file_length, uint32_t mode, uint32_t attach_len, uchar_t* attach_data)
{
m_pdu_header.module_id = SID_FILE;
m_pdu_header.command_id = IM_PDU_TYPE_MSG_FILE_TRANSFER_REQ;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os m_from_id;
is >> m_to_id;
m_file_name = is.ReadString(m_file_name_len);
is >> m_file_length;
m_task_id = is.ReadString(m_task_id_len);
is >> m_trans_mode;
m_attach_data = is.ReadData(m_attach_len);
PARSE_PACKET_ASSERT
}
CImPduMsgFileTransferRsp::CImPduMsgFileTransferRsp(uint32_t result, uint32_t from_id, uint32_t to_id, uint32_t attach_len, uchar_t* attach_data)
{
m_pdu_header.module_id = SID_OTHER;
m_pdu_header.command_id = IM_PDU_TYPE_MSG_FILE_TRANSFER_RSP;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os size();
os 0) {
for (list::iterator it = ip_list->begin(); it != ip_list->end(); it++)
{
svr_ip_addr_t& ip_addr = *it;
os.WriteString(ip_addr.ip.c_str(), ip_addr.ip.length());
os m_from_id;
is >> m_to_id;
m_file_name = is.ReadString(m_file_name_len);
is >> m_file_size;
m_task_id = is.ReadString(m_task_id_len);
is >> m_ip_addr_cnt;
if (m_ip_addr_cnt > 0)
{
m_ip_addr_list = new ip_addr_t [m_ip_addr_cnt];
ALLOC_FAIL_ASSERT(m_ip_addr_list);
for (uint32_t i = 0; i < m_ip_addr_cnt; i++) {
m_ip_addr_list[i].ip = is.ReadString(m_ip_addr_list[i].ip_len);
is >> m_ip_addr_list[i].port;
}
}
is >> m_trans_mode;
is >> m_offline_ready;
PARSE_PACKET_ASSERT
}
CImPduFileNotify::CImPduFileNotify(uint32_t from_id, uint32_t to_id, const char* file_name,
uint32_t file_size, const char* task_id, const list* ip_addr_list,
uint32_t trans_mode, uint32_t offline_ready)
{
m_pdu_header.module_id = SID_OTHER;
m_pdu_header.command_id = IM_PDU_TYPE_FILE_NOTIFY;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os > m_file_list[i].from_id;
m_file_list[i].task_id = is.ReadString(m_file_list[i].task_id_len);
m_file_list[i].file_name = is.ReadString(m_file_list[i].file_name_len);
is >> m_file_list[i].file_size;
}
}
m_attach_data = is.ReadData(m_attach_len);
PARSE_PACKET_ASSERT
}
CImPduFileHasOfflineRes::~CImPduFileHasOfflineRes()
{
if (m_file_list) {
delete [] m_file_list;
m_file_list = NULL;
}
}
CImPduFileAddOfflineReq::CImPduFileAddOfflineReq(uint32_t req_user_id, uint32_t from_id,
uint32_t to_id, const char* task_id, const char* file_name, uint32_t file_size)
{
m_pdu_header.command_id = IM_PDU_TYPE_FILE_ADD_OFFLINE_REQ;
CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
m_buf.Write(NULL, IM_PDU_HEADER_LEN);
os