📄 packetbase.cpp
字号:
void CMessagePacketBase::setReplaceIfPresent(uint32 rip)
{
m_replace_if_present = rip;
}
void CMessagePacketBase::setDataCoding(uint32 enc)
{
m_data_coding = enc;
}
void CMessagePacketBase::setSmDefaultMsgId(uint32 mdefid)
{
m_sm_default_msg_id = mdefid;
}
void CMessagePacketBase::setSmLength(uint32 smlen)
{
m_sm_length = smlen;
}
void CMessagePacketBase::setMessage(PBYTE msg, uint32 nsz)
{
if (m_message != NULL)
delete m_message;
m_sm_length = nsz;
m_message = new BYTE[nsz];
memcpy(m_message, msg, nsz);
}
void CMessagePacketBase::encodeBody(PBYTE &pby, int &nsz)
{
BYTE by;
CPacketBase::encodeBody(pby, nsz);
m_buffer.Write(m_service_type);
m_buffer.WriteNULL();
by = static_cast<byte>(m_source.m_addr_ton);
m_buffer.Write(&by, 1);
by = static_cast<byte>(m_source.m_addr_npi);
m_buffer.Write(&by, 1);
m_buffer.Write(m_source.m_addr);
m_buffer.WriteNULL();
by = static_cast<byte>(m_destination.m_addr_ton);
m_buffer.Write(&by, 1);
by = static_cast<byte>(m_destination.m_addr_npi);
m_buffer.Write(&by, 1);
m_buffer.Write(m_destination.m_addr);
m_buffer.WriteNULL();
by = static_cast<byte>(m_esm_class);
m_buffer.Write(&by, 1);
by = static_cast<byte>(m_protocol_id);
m_buffer.Write(&by, 1);
by = static_cast<byte>(m_priority_flag);
m_buffer.Write(&by, 1);
m_buffer.Write(m_scheduled_delivery.toString());
m_buffer.WriteNULL();
m_buffer.Write(m_validity_period.toString());
m_buffer.WriteNULL();
m_registered_delivery ? by = 1 : by = 0;
m_buffer.Write(&by, 1);
m_replace_if_present ? by = 1 : by = 0;
m_buffer.Write(&by, 1);
by = static_cast<byte>(m_data_coding);
m_buffer.Write(&by, 1);
by = static_cast<byte>(m_sm_default_msg_id);
m_buffer.Write(&by, 1);
by = static_cast<byte>(m_sm_length);
m_buffer.Write(&by, 1);
if (m_sm_length > 0)
{
m_buffer.Write(m_message, m_sm_length);
}
nsz = m_buffer.GetBufferLen();
pby = new byte[nsz];
int test = getCommandLength();
ASSERT( getCommandLength() == static_cast<uint32>(nsz));
memcpy(pby, m_buffer.GetBuffer(), nsz);
}
bool CMessagePacketBase::loadPacket(PBYTE pby, int nsz)
{
if (!CPacketBase::loadPacket(pby, nsz))
return false;
if (getCommandStatus() != 0)
return false;
int pos = 12;
int smLength = 0;
CString delivery, valid;
// First the service type
m_service_type = (LPTSTR) pby+pos;
pos += m_service_type.GetLength() + 1;
m_source.setAddrTon(*(pby+pos));
pos += 1;
m_source.setAddrNpi(*(pby+pos));
pos += 1;
m_source.m_addr = (LPTSTR) pby+pos;
pos += m_source.m_addr.GetLength() + 1;
m_destination.setAddrTon(*(pby+pos));
pos += 1;
m_destination.setAddrNpi(*(pby+pos));
pos += 1;
m_destination.m_addr = (LPTSTR) pby+pos;
pos += m_destination.m_addr.GetLength() + 1;
// ESM class, protocol Id, priorityFlag...
m_esm_class = static_cast<uint32>(*(pby+pos));
pos += 1;
m_protocol_id = static_cast<uint32>(*(pby+pos));
pos += 1;
m_priority_flag = static_cast<uint32>(*(pby+pos));
pos += 1;
delivery = (LPTSTR) pby+pos;
pos += delivery.GetLength() + 1;
valid = (LPTSTR) pby+pos;
pos += valid.GetLength() + 1;
if (!delivery.IsEmpty())
m_scheduled_delivery.setDate(delivery);
if (!valid.IsEmpty())
m_validity_period.setDate(valid);
// Registered delivery, replace if present, data coding, default msg
// and message length
m_registered_delivery = (*(pby+pos) == 0) ? false : true;
pos += 1;
m_replace_if_present = (*(pby+pos) == 0) ? false : true;
pos += 1;
m_data_coding = *(pby+pos);
pos += 1;
m_sm_default_msg_id = *(pby+pos);
pos += 1;
m_sm_length = *(pby+pos);
pos += 1;
if (m_sm_length > 0) {
m_message = new byte[m_sm_length];
memcpy(m_message, pby+pos, m_sm_length);
pos += m_sm_length;
}
return true;
}
uint32 CMessagePacketBase::getCommandLength()
{
int len = (CPacketBase::getCommandLength()
+ ((!m_service_type.IsEmpty()) ? m_service_type.GetLength() : 0)
+ (m_source.getLength())
+ (m_destination.getLength())
+ (m_scheduled_delivery.getLength())
+ (m_validity_period.getLength())
+ (m_sm_length) );
return (len + 8 + 3);
}
//CMessagePacketBase
//CDataPacketBase
CDataPacketBase::CDataPacketBase()
{
m_service_type = "";
m_esm_class = 0;
m_registered_delivery = 0;
m_data_coding = 0;
}
CDataPacketBase::~CDataPacketBase()
{
}
//getter
CString CDataPacketBase::getServiceType()
{
return m_service_type;
}
CSmppAddress CDataPacketBase::getSource()
{
return m_source;
}
CSmppAddress CDataPacketBase::getDestination()
{
return m_destination;
}
uint32 CDataPacketBase::getEsmClass()
{
return m_esm_class;
}
uint32 CDataPacketBase::getRegisteredDelivery()
{
return m_registered_delivery;
}
uint32 CDataPacketBase::getDataCoding()
{
return m_data_coding;
}
//setter
void CDataPacketBase::setServiceType(CString stype)
{
m_service_type = stype;
}
void CDataPacketBase::setSource(CSmppAddress &src)
{
m_source = src;
}
void CDataPacketBase::setDestination(CSmppAddress &dest)
{
m_destination = dest;
}
void CDataPacketBase::setEsmClass(uint32 esm)
{
m_esm_class = esm;
}
void CDataPacketBase::setRegisteredDelivery(uint32 reg)
{
m_registered_delivery = reg;
}
void CDataPacketBase::setDataCoding(uint32 enc)
{
m_data_coding = enc;
}
void CDataPacketBase::encodeBody(PBYTE &pby, int &nsz)
{
BYTE by;
CPacketBase::encodeBody(pby, nsz);
m_buffer.Write(m_service_type);
m_buffer.WriteNULL();
by = static_cast<byte>(m_source.m_addr_ton);
m_buffer.Write(&by, 1);
by = static_cast<byte>(m_source.m_addr_npi);
m_buffer.Write(&by, 1);
m_buffer.Write(m_source.m_addr);
m_buffer.WriteNULL();
by = static_cast<byte>(m_destination.m_addr_ton);
m_buffer.Write(&by, 1);
by = static_cast<byte>(m_destination.m_addr_npi);
m_buffer.Write(&by, 1);
m_buffer.Write(m_destination.m_addr);
m_buffer.WriteNULL();
by = static_cast<byte>(m_esm_class);
m_buffer.Write(&by, 1);
m_registered_delivery ? by = 1 : by = 0;
m_buffer.Write(&by, 1);
by = static_cast<byte>(m_data_coding);
m_buffer.Write(&by, 1);
nsz = m_buffer.GetBufferLen();
pby = new byte[nsz];
ASSERT( getCommandLength() == static_cast<uint32>(nsz));
memcpy(pby, m_buffer.GetBuffer(), nsz);
}
bool CDataPacketBase::loadPacket(PBYTE pby, int nsz)
{
if (!CPacketBase::loadPacket(pby, nsz))
return false;
if (getCommandStatus() != 0)
return false;
int pos = 12;
// First the service type
m_service_type = (LPTSTR) pby+pos;
pos += m_service_type.GetLength() + 1;
m_source.setAddrTon(*(pby+pos));
pos += 1;
m_source.setAddrNpi(*(pby+pos));
pos += 1;
m_source.m_addr = (LPTSTR) pby+pos;
pos += m_source.m_addr.GetLength() + 1;
m_destination.setAddrTon(*(pby+pos));
pos += 1;
m_destination.setAddrNpi(*(pby+pos));
pos += 1;
m_destination.m_addr = (LPTSTR) pby+pos;
pos += m_destination.m_addr.GetLength() + 1;
// ESM class, protocol Id, priorityFlag...
m_esm_class = static_cast<uint32>(*(pby+pos));
pos += 1;
// Registered delivery, replace if present, data coding, default msg
// and message length
m_registered_delivery = (*(pby+pos) == 0) ? false : true;
pos += 1;
m_data_coding = *(pby+pos);
pos += 1;
return true;
}
uint32 CDataPacketBase::getCommandLength()
{
int len = (CPacketBase::getCommandLength()
+ ((!m_service_type.IsEmpty()) ? m_service_type.GetLength() : 0)
+ (m_source.getLength())
+ (m_destination.getLength()));
return (len + 1 + 3);
}
//CDataPacketBase
CDataPacketRespBase::CDataPacketRespBase()
{
m_message_id = "";
}
CDataPacketRespBase::~CDataPacketRespBase()
{
}
CString CDataPacketRespBase::getMessageId()
{
return m_message_id;
}
//setter
void CDataPacketRespBase::setMessageId(CString msgid)
{
m_message_id = msgid;
}
void CDataPacketRespBase::encodeBody(PBYTE &pby, int &nsz)
{
CPacketBase::encodeBody(pby, nsz);
m_buffer.Write(m_message_id);
m_buffer.WriteNULL();
nsz = m_buffer.GetBufferLen();
pby = new byte[nsz];
ASSERT( getCommandLength() == static_cast<uint32>(nsz));
memcpy(pby, m_buffer.GetBuffer(), nsz);
}
bool CDataPacketRespBase::loadPacket(PBYTE pby, int nsz)
{
if (!CPacketBase::loadPacket(pby, nsz))
return false;
if (getCommandStatus() != 0)
return false;
int pos = 12;
m_message_id = (LPTSTR) pby+pos;
pos += m_message_id.GetLength() + 1;
return true;
}
uint32 CDataPacketRespBase::getCommandLength()
{
int len = (CPacketBase::getCommandLength()
+ m_message_id.GetLength());
return (len + 1);
}
//CDataPacketRespBase
//CBindRespBase
CBindRespBase::CBindRespBase()
{
m_system_id = "";
}
CBindRespBase::~CBindRespBase()
{
}
void CBindRespBase::encodeBody(PBYTE &pby, int &nsz)
{
CPacketBase::encodeBody(pby, nsz);
m_buffer.Write(m_system_id);
m_buffer.WriteNULL();
nsz = m_buffer.GetBufferLen();
pby = new byte[nsz];
memcpy(pby, m_buffer.GetBuffer(), nsz);
}
bool CBindRespBase::loadPacket(PBYTE pby, int nsz)
{
if (!CPacketBase::loadPacket(pby, nsz))
return false;
if (getCommandStatus() != 0)
return false;
int pos = 12;
m_system_id = (LPTSTR) pby+pos;
pos += m_system_id.GetLength() + 1;
return true;
}
uint32 CBindRespBase::getCommandLength()
{
int len = ( CPacketBase::getCommandLength()
+ m_system_id.GetLength() );
return (len + 1);
}
void CBindRespBase::setSystemId(CString sid)
{
m_system_id = sid;
}
CString CBindRespBase::getSystemId()
{
return m_system_id;
}
//CBindRespBase
//CMessageRespBase
CMessageRespBase::CMessageRespBase()
{
m_message_id = "";
}
CMessageRespBase::~CMessageRespBase()
{
}
CString CMessageRespBase::getMessageId()
{
return m_message_id;
}
void CMessageRespBase::setMessageId(CString msgid)
{
m_message_id = msgid;
}
void CMessageRespBase::encodeBody(PBYTE &pby, int &nsz)
{
CPacketBase::encodeBody(pby, nsz);
m_buffer.Write(m_message_id);
m_buffer.WriteNULL();
nsz = m_buffer.GetBufferLen();
pby = new byte[nsz];
memcpy(pby, m_buffer.GetBuffer(), nsz);
}
bool CMessageRespBase::loadPacket(PBYTE pby, int nsz)
{
if (!CPacketBase::loadPacket(pby, nsz))
return false;
if (getCommandStatus() != 0)
return false;
int pos = 12;
m_message_id = (LPTSTR) pby+pos;
pos += m_message_id.GetLength() + 1;
return true;
}
uint32 CMessageRespBase::getCommandLength()
{
int len = ( CPacketBase::getCommandLength()
+ m_message_id.GetLength() );
return (len + 1);
}
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -