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

📄 smpplibtest.cpp

📁 一个短信smpp协议开发包源码
💻 CPP
字号:
// SmppLibTest.cpp: implementation of the CSmppLibTest class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TestServer.h"
#include "SmppLibTest.h"
#include "IOCPServer.h"

#include "..\common.h"
#include "..\smpp.h"
#include "..\smpppacket.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSmppLibTest::CSmppLibTest(CIOCPServer *pIOCPServer)
{
	m_pIOCPServer = pIOCPServer;
}

CSmppLibTest::~CSmppLibTest()
{

}

//create the packet here, and pass to processpacket
void CSmppLibTest::parsePacket(ClientContext *pContext, PBYTE pby, int nsz)
{
	TRACE1("parse packet %d\n", nsz);

	if (nsz < 16)
		return;

	uint32 cmdId = readInt(pby);
	
	TCHAR buff[100];
	sprintf(buff, "MessageId is %x\n", cmdId);
	TRACE(buff);

	int cmdStatus = readInt(pby+4);
	int seqNum = readInt(pby+8);

	switch (cmdId)
	{
		case SMPP_BIND_TRANSMITTER:
		{
			CBindTransmitter* ppak;
			ppak = new CBindTransmitter();
			ppak->loadPacket(pby, nsz);

			CBindTransmitterResp pak;
			sendPacket(pContext, pak);

			delete ppak;
		}
			break;

		case SMPP_BIND_TRANSMITTER_RESP:
		{
			CBindTransmitterResp* ppak;
			ppak = new CBindTransmitterResp();
			ppak->loadPacket(pby, nsz);

			delete ppak;
		}
			break;

		case SMPP_BIND_RECEIVER:
		{
			CBindReceiver* ppak;
			ppak = new CBindReceiver();
			ppak->loadPacket(pby, nsz);

			CBindReceiverResp pak;
			sendPacket(pContext, pak);

			delete ppak;
		}
			break;

		case SMPP_BIND_RECEIVER_RESP:
		{
			CBindReceiverResp* ppak;
			ppak = new CBindReceiverResp();
			ppak->loadPacket(pby, nsz);

			delete ppak;
		}
			break;

		case SMPP_BIND_TRANSCEIVER:
		{
			CBindTransceiver* ppak;
			ppak = new CBindTransceiver();
			ppak->loadPacket(pby, nsz);

			TRACE(ppak->getSystemId());
			TRACE("\n");
			TRACE(ppak->getSystemType());
			TRACE("\n");
			TRACE(ppak->getPassword());
			TRACE("\n");

			CSmppAddress src_adr;
			src_adr = ppak->getSourceRange();
			TRACE(src_adr.m_addr);
			TRACE("\n");

			//reply
			CBindTransceiverResp pak;
			pak.setSystemId("KOTY-AB");
			pak.setCommandStatus(0);

			sendPacket(pContext, pak);

			delete ppak;
		}
			break;

		case SMPP_BIND_TRANSCEIVER_RESP:
		{
			CBindTransceiverResp* ppak;
			ppak = new CBindTransceiverResp();
			ppak->loadPacket(pby, nsz);

			delete ppak;
		}
			break;

		case SMPP_SUBMIT_SM:
		{
			CSubmitSM* ppak;
			ppak = new CSubmitSM();
			ppak->loadPacket(pby, nsz);

			CSmppAddress src = ppak->getSource();
			CSmppAddress dst = ppak->getDestination();

			TRACE("Source address is:\n");
			TRACE(src.m_addr);
			TRACE("\n");

			TRACE("Destination address is:\n");
			TRACE(dst.m_addr);
			TRACE("\n");

			TRACE("Message is:\n");

			PBYTE msg;
			uint32 nsize;
			ppak->getMessage(msg, nsize);
			LPSTR pmsg = new char[nsize+1];
			memcpy(pmsg, msg, nsize);
			pmsg[nsize] = 0;

			TRACE1("%s\n", pmsg);
			delete pmsg;
			delete msg;

			//reply
			CSubmitSMResp pak;
			pak.setMessageId("EABC3141414521265254562553");
			pak.setCommandStatus(0);

			sendPacket(pContext, pak);

			delete ppak;
		}
			break;

		case SMPP_SUBMIT_SM_RESP:
		{
			CSubmitSMResp* ppak;
			ppak = new CSubmitSMResp();
			ppak->loadPacket(pby, nsz);

			delete ppak;
		}
			break;

		case SMPP_DELIVER_SM:
		{
			CDeliverSM*	ppak;
			ppak = new CDeliverSM();
			ppak->loadPacket(pby, nsz);

			delete ppak;
		}
			break;

		case SMPP_DELIVER_SM_RESP:
		{
			CDeliverSMResp*	ppak;
			ppak = new CDeliverSMResp();
			ppak->loadPacket(pby, nsz);

			delete ppak;
		}
			break;

		case SMPP_UNBIND:
		{
			TRACE("Unbind Received");

			CUnbind* ppak;
			ppak = new CUnbind();
			ppak->loadPacket(pby, nsz);

			//reply
			CUnbindResp pak;
			pak.setCommandStatus(0);

			sendPacket(pContext, pak);

			delete ppak;
		}
			break;

		case SMPP_UNBIND_RESP:
		{
			CUnbindResp* ppak;
			ppak = new CUnbindResp();
			ppak->loadPacket(pby, nsz);

			delete ppak;
		}
			break;


		case SMPP_ENQUIRE_LINK:
		{
			CEnquireLink* ppak;
			ppak = new CEnquireLink();
			ppak->loadPacket(pby, nsz);

			CEnquireLinkResp pak;
			pak.setCommandStatus(0);

			sendPacket(pContext, pak);

			delete ppak;

			//testing deliversm
			CDeliverSM dsm;
			CString msg = "Hello, how are you?";
			CSmppAddress adr(1, 2, "567890");
			dsm.setDataCoding(4);
			dsm.setSource(adr);
			dsm.setDestination(adr);
			dsm.setMessage((PBYTE)msg.GetBuffer(0), msg.GetLength());
			sendPacket(pContext, dsm);
		}
			break;

		case SMPP_QUERY_SM:
		{
			CQuerySM* ppak;
			ppak = new CQuerySM();
			ppak->loadPacket(pby, nsz);

			CQuerySMResp pak;
			pak.setErrorCode(11);
			pak.setMessageId("BCAAA213");

			sendPacket(pContext, pak);
		}
			break;

		default:
			break;

	}	//switch

}	//parse packet

bool CSmppLibTest::sendPacket(ClientContext *pContext, CPacketBase &pak)
{
	bool ret = true;

	PBYTE pby;
	int nsz;

	pak.encodeBody(pby, nsz);
	m_pIOCPServer->Send(pContext, pby, nsz);

	delete [] pby;

	return ret;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -