www.pudn.com > smpplib.zip > packetbase.h


 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include "common.h" 
#include "buffer.h" 
#include "smpputil.h" 
#include "smpp.h" 
 
#include  
using namespace std; 
 
#ifdef SMPPAPI_GOLD			//GOLD 
 
template  
class SMPPLIB_DECLSPEC COptionalParamList 
{ 
public: 
 
	vector m_list; 
 
	COptionalParamList() 
	{ 
	} 
 
	~COptionalParamList() 
	{ 
		clear(); 
	} 
 
	uint32 getCount()	 
	{ 
		return m_list.size(); 
	} 
 
	void encodePacket(PBYTE &pby, int &nsz) 
	{ 
		int pos = 0; 
		PBYTE psub = pby; 
 
		vector::iterator itr; 
		for (itr = m_list.begin(); itr != m_list.end(); itr++) 
		{ 
			psub = psub+pos; 
			pos = ((T*) (*itr))->encodePacket(psub, nsz); 
		} 
	} 
 
	bool loadPacket(PBYTE pby, int nsz) 
	{ 
		int pos = 0; 
		int pksz = 0; 
 
		while (nsz > 0) 
		{ 
			T* pContent = new T; 
			pksz = pContent->loadPacket(pby+pos, nsz); 
			nsz -= pksz; 
			pos += pksz; 
 
			m_list.push_back(pContent); 
		} 
		return true; 
	} 
 
	uint32 getPacketLength() 
	{ 
		int len = 0; 
 
		vector::iterator itr; 
		for (itr = m_list.begin(); itr != m_list.end(); itr++) 
		{ 
			len += ((T*) (*itr))->getPacketLength(); 
		} 
		return len; 
	} 
 
	void add(T* pcon) 
	{ 
		m_list.push_back(pcon); 
	} 
 
	void clear() 
	{ 
		vector::iterator itr; 
		for (itr = m_list.begin(); itr != m_list.end(); itr++) 
		{ 
			delete (*itr); 
		} 
		m_list.clear(); 
	} 
 
}; 
 
class SMPPLIB_DECLSPEC COptionalParameter 
{ 
public: 
	COptionalParameter(); 
	~COptionalParameter(); 
 
protected: 
	OPTIONAL_PARAMETER m_parameter_tag; 
	uint32 m_length; 
	PBYTE m_value; 
 
public: 
	OPTIONAL_PARAMETER getParameterTag(); 
 
	uint32 getLength(); 
	void getValue(PBYTE &val, uint32 &nsz); 
 
	void setParameterTag(OPTIONAL_PARAMETER pt); 
	void setValue(PBYTE val, uint32 nsz); 
	 
	uint32 encodePacket(PBYTE &pby, int &nsz); 
	uint32 loadPacket(PBYTE pby, int nsz); 
}; 
 
#endif		//GOLD 
 
 
class CPacketBase;			//forward declaration 
 
//CPacketBaseInitializer 
class SMPPLIB_DECLSPEC CPacketBaseInitializer 
{ 
	friend CPacketBase; 
 
public: 
	CPacketBaseInitializer(); 
	~CPacketBaseInitializer(); 
 
protected: 
	static uint32 m_seqnum_counter; 
	static CRITICAL_SECTION m_cs_seqnum; 
 
	static uint32 getNewSeqNum(); 
}; 
 
 
//CPacketBase 
 
class SMPPLIB_DECLSPEC CPacketBase 
{ 
 
public: 
	CPacketBase(); 
	CPacketBase(uint32 seqnum); 
	virtual ~CPacketBase(); 
 
protected: 
 
	CBuffer m_buffer; 
 
    uint32 m_command_length; 
    uint32 m_command_id; 
 
    uint32 m_command_status; 
    uint32 m_sequence_number; 
 
	uint32 getHeaderLength(); 
 
	static uint32 getNewSeqNum(); 
 
public: 
 
#ifdef SMPPAPI_GOLD 
	COptionalParamList	m_optional_parameters; 
#endif 
 
public: 
 
	//getter 
	uint32 getCommandId(); 
	uint32 getCommandStatus(); 
	uint32 getSequenceNumber(); 
 
	//setter 
	void setCommandId(uint32 cmid); 
	void setCommandStatus(uint32 cmst); 
	void setSequenceNumber(uint32 seqn); 
 
	virtual void encodeBody(PBYTE &pby, int &nsz); 
	virtual bool loadPacket(PBYTE pby, int nsz); 
	virtual uint32 getCommandLength(); 
 
}; 
 
//CPacketBase end 
 
//CBindPacketBase 
class SMPPLIB_DECLSPEC CBindPacketBase : public CPacketBase 
{ 
public: 
	CBindPacketBase(); 
	virtual ~CBindPacketBase(); 
 
protected: 
 
	CString m_system_id; 
	CString m_password; 
	CString m_system_type; 
 
	uint32 m_interface_version; 
 
	CSmppAddress m_address_range; 
 
public: 
 
	//getter 
	CString getSystemId(); 
	CString getPassword(); 
	CString getSystemType(); 
	 
	CSmppAddress& getSourceRange(); 
 
	//setter 
	void setSystemId(CString sid); 
	void setPassword(CString pwd); 
	void setSystemType(CString stype); 
	void setSourceRange(CSmppAddress &addr); 
 
	void setInterfaceVersion(uint32 iver); 
 
	virtual void encodeBody(PBYTE &pby, int &nsz); 
	virtual bool loadPacket(PBYTE pby, int nsz); 
	virtual uint32 getCommandLength(); 
}; 
 
//CBindPacketBase end 
 
//CMessagePacketBase 
class SMPPLIB_DECLSPEC CMessagePacketBase : public CPacketBase 
{ 
public: 
	CMessagePacketBase(); 
	virtual ~CMessagePacketBase(); 
 
protected: 
 
	CString m_service_type; 
 
	CSmppAddress m_source; 
	CSmppAddress m_destination; 
 
	uint32 m_esm_class; 
	uint32 m_protocol_id; 
	uint32 m_priority_flag; 
 
	CSmppDate m_scheduled_delivery; 
	CSmppDate m_validity_period; 
 
	uint32 m_registered_delivery; 
	uint32 m_replace_if_present; 
 
	uint32 m_data_coding; 
	uint32 m_sm_default_msg_id; 
 
	uint32 m_sm_length; 
 
	PBYTE m_message; 
 
public: 
 
	//getter 
	CString getServiceType(); 
	CSmppAddress getSource(); 
	CSmppAddress getDestination(); 
 
	uint32 getEsmClass(); 
	uint32 getProtocolId(); 
	uint32 getPriorityFlag(); 
 
	CSmppDate getScheduledDelivery(); 
	CSmppDate getValidityPeriod(); 
 
	uint32 getRegisteredDelivery(); 
	uint32 getReplaceIfPresent(); 
 
	uint32 getSmDefaultMsgId(); 
	uint32 getDataCoding(); 
 
	uint32 getSmLength(); 
 
	void getMessage(PBYTE &msg, uint32 &nsz); 
 
	//setter 
	void setServiceType(CString stype); 
	void setSource(CSmppAddress &src); 
	void setDestination(CSmppAddress &dest); 
 
	void setEsmClass(uint32 esm); 
	void setProtocolId(uint32 pid); 
	void setPriorityFlag(uint32 pflag); 
 
	void setScheduledDelivery(CSmppDate &schdel); 
	void setValidityPeriod(CSmppDate &valprd); 
 
	void setRegisteredDelivery(uint32 reg); 
	void setReplaceIfPresent(uint32 rip); 
	void setDataCoding(uint32 enc); 
 
	void setSmDefaultMsgId(uint32 mdefid); 
 
	void setSmLength(uint32 smlen); 
	void setMessage(PBYTE msg, uint32 nsz); 
 
public: 
	virtual void encodeBody(PBYTE &pby, int &nsz); 
	virtual bool loadPacket(PBYTE pby, int nsz); 
	virtual uint32 getCommandLength(); 
}; 
 
//CMessagePacketBase end 
 
 
//CDataPacketBase 
class SMPPLIB_DECLSPEC CDataPacketBase : public CPacketBase 
{ 
public: 
	CDataPacketBase(); 
	virtual ~CDataPacketBase(); 
 
protected: 
 
	CString m_service_type; 
 
	CSmppAddress m_source; 
	CSmppAddress m_destination; 
 
	uint32 m_esm_class; 
 
	uint32 m_registered_delivery; 
 
	uint32 m_data_coding; 
 
public: 
 
	//getter 
	CString getServiceType(); 
	CSmppAddress getSource(); 
	CSmppAddress getDestination(); 
 
	uint32 getEsmClass(); 
 
	uint32 getRegisteredDelivery(); 
 
	uint32 getDataCoding(); 
 
	//setter 
	void setServiceType(CString stype); 
	void setSource(CSmppAddress &src); 
	void setDestination(CSmppAddress &dest); 
 
	void setEsmClass(uint32 esm); 
 
	void setRegisteredDelivery(uint32 reg); 
 
	void setDataCoding(uint32 enc); 
 
public: 
	virtual void encodeBody(PBYTE &pby, int &nsz); 
	virtual bool loadPacket(PBYTE pby, int nsz); 
	virtual uint32 getCommandLength(); 
}; 
 
//CDataPacketBase end 
 
//CDataPacketRespBase 
class SMPPLIB_DECLSPEC CDataPacketRespBase : public CPacketBase 
{ 
public: 
	CDataPacketRespBase(); 
	virtual ~CDataPacketRespBase(); 
 
protected: 
 
	CString m_message_id; 
 
public: 
 
	//getter 
	CString getMessageId(); 
 
	//setter 
	void setMessageId(CString msgid); 
 
public: 
	virtual void encodeBody(PBYTE &pby, int &nsz); 
	virtual bool loadPacket(PBYTE pby, int nsz); 
	virtual uint32 getCommandLength(); 
}; 
 
//CDataPacketRespBase end 
 
//CBindRespBase 
class SMPPLIB_DECLSPEC CBindRespBase : public CPacketBase 
{ 
public: 
	CBindRespBase(); 
	~CBindRespBase(); 
 
protected: 
	CString m_system_id; 
 
public: 
	void setSystemId(CString sid); 
 
	CString getSystemId(); 
 
	virtual void encodeBody(PBYTE &pby, int &nsz); 
	virtual bool loadPacket(PBYTE pby, int nsz); 
	virtual uint32 getCommandLength(); 
}; 
 
//CBindRespBase end 
 
//CMessageRespBase 
 
class SMPPLIB_DECLSPEC CMessageRespBase : public CPacketBase 
{ 
public: 
	CMessageRespBase(); 
	~CMessageRespBase(); 
 
protected: 
	CString m_message_id; 
 
public: 
 
	CString getMessageId(); 
	void setMessageId(CString msgid); 
 
	virtual void encodeBody(PBYTE &pby, int &nsz); 
	virtual bool loadPacket(PBYTE pby, int nsz); 
	virtual uint32 getCommandLength(); 
}; 
 
//CMessageRespBase end