⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packetbase.cpp

📁 一个短信smpp协议开发包源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
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 + -