SmppLibCliTest.cpp
上传用户:hkcoast
上传日期:2007-01-12
资源大小:979k
文件大小:5k
源码类别:

手机短信编程

开发平台:

Visual C++

  1. // SmppLibCliTest.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include "SmppLibCliTest.h"
  5. #include "winsock2.h"
  6. #include "..common.h"
  7. #include "..EsmeTransceiver.h"
  8. #include "..SmppUtil.h"
  9. #include "..smpppacket.h"
  10. #include "..smpp.h"
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////
  17. // The one and only application object
  18. CWinApp theApp;
  19. using namespace std;
  20. class CSmppLibTest
  21. {
  22. protected:
  23. CEsmeTransceiver trans;
  24. public:
  25. //starting point of the testing
  26. void initialize(CString svrip, int svrport)
  27. {
  28. //set the ip, port of the server
  29. trans.init(svrip, svrport);
  30. //setup call back procedure for the transceiver
  31. trans.registerProcessPacket(processPacketProc, this);
  32. //my address (ton, npi, addr) to connect to SMSC
  33. CSmppAddress src_range(0, 0, "85292355321");
  34. //connects and sends bind transceiver to the server
  35. trans.bind("TESTACC", "kt43ls", "TEST", src_range);
  36. //okay, when we receive packets, it will be handled in
  37. //the callback function.
  38. }
  39. //registered callback to handle SMPP packets sent from SMSC
  40. //(must be static class method or global procedure)
  41. static void __stdcall processPacketProc(CPacketBase *pak, LPVOID param)
  42. {
  43. CSmppLibTest *pTest = (CSmppLibTest *) param;
  44. //route to instance method, so it can access instance attributes
  45. pTest->processPacket(pak);
  46. }
  47. //actuallly SMPP packets are in turns handled here 
  48. void processPacket(CPacketBase *pak)
  49. {
  50. switch (pak->getCommandId())
  51. {
  52. //Bind Trnasmitter Response
  53. case SMPP_BIND_TRANSMITTER_RESP:
  54. {
  55. CBindTransmitterResp *pPak;
  56. pPak = static_cast<CBindTransmitterResp *>(pak);
  57. TRACE("Packet is casted to CBindTransmitterRespn");
  58. TRACE1("%sn", pPak->getSystemId());
  59. TRACE("Sending a SMS outn");
  60. trans.submitMessage("Hiya, this is my message", "85261210229", 2, 0);
  61. }
  62. break;
  63. //Bind Receiver Response
  64. case SMPP_BIND_RECEIVER_RESP:
  65. {
  66. CBindReceiverResp *pPak;
  67. pPak = static_cast<CBindReceiverResp *>(pak);
  68. TRACE("Packet is casted to CBindReceiverRespn");
  69. TRACE1("%sn", pPak->getSystemId());
  70. TRACE("Sending a SMS outn");
  71. trans.submitMessage("Hiya, this is my message", "85261210229", 2, 0);
  72. }
  73. break;
  74. //Bind Transceiver Response
  75. case SMPP_BIND_TRANSCEIVER_RESP:
  76. {
  77. CBindTransceiverResp *pPak;
  78. pPak = static_cast<CBindTransceiverResp *>(pak);
  79. TRACE("Packet is casted to CBindTransceiverRespn");
  80. TRACE1("%sn", pPak->getSystemId());
  81. CSmppAddress dst(2,3, "942532535");
  82. TRACE("Sending a SMS outn");
  83. trans.submitMessage("Hiya, good", dst);
  84. }
  85. break;
  86. //Deliver Short Message
  87. case SMPP_DELIVER_SM:
  88. {
  89. CDeliverSM *pPak;
  90. pPak = static_cast<CDeliverSM *>(pak);
  91. TRACE("Packet is casted to CDeliverSMnn");
  92. }
  93. break;
  94. //Submit Short Message Response
  95. case SMPP_SUBMIT_SM_RESP:
  96. {
  97. CSubmitSMResp *pPak;
  98. pPak = static_cast<CSubmitSMResp *>(pak);
  99. TRACE("Packet is casted to CSubmitSMRespn");
  100. TRACE1("%sn", pPak->getMessageId());
  101. trans.enquireLink();
  102. }
  103. break;
  104. //Unbind Response
  105. case SMPP_UNBIND_RESP:
  106. {
  107. CUnbindResp *pPak;
  108. pPak = static_cast<CUnbindResp *>(pak);
  109. TRACE("Packet is casted to CUnbindRespnn");
  110. }
  111. break;
  112. case SMPP_ENQUIRE_LINK:
  113. {
  114. CEnquireLink *pPak;
  115. pPak = static_cast<CEnquireLink *>(pak);
  116. TRACE("Packet is casted to CEnquireLinknn");
  117. }
  118. break;
  119. case SMPP_ENQUIRE_LINK_RESP:
  120. {
  121. CEnquireLinkResp *pPak;
  122. pPak = static_cast<CEnquireLinkResp *>(pak);
  123. TRACE("Packet is casted to CEnquireLinkRespnn");
  124. CQuerySM qsm;
  125. qsm.setMessageId("AACCDD1233");
  126. trans.sendPacket(qsm);
  127. }
  128. break;
  129. case SMPP_QUERY_SM:
  130. {
  131. CQuerySM *pPak;
  132. pPak = static_cast<CQuerySM *>(pak);
  133. TRACE("Packet is casted to CQuerySMnn");
  134. }
  135. break;
  136. case SMPP_QUERY_SM_RESP:
  137. {
  138. CQuerySMResp *pPak;
  139. pPak = static_cast<CQuerySMResp *>(pak);
  140. TRACE("Packet is casted to CQuerySMRespnn");
  141. TRACE1("MessageId: %sn", pPak->getMessageId());
  142. TRACE1("ErrorCode: %dn", pPak->getErrorCode());
  143. TRACE("Going to unbindn");
  144. trans.unbind();
  145. }
  146. break;
  147. case SMPP_SPECIAL_LINKCLOSE:
  148. {
  149. TRACE("Link close is detectedn");
  150. }
  151. break;
  152. default:
  153. {
  154. TRACE("Unhandled packet receivedn");
  155. }
  156. break;
  157. } //switch case end
  158. } //processPacket end
  159. }; //class CSmppLibTest end
  160. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  161. {
  162. int nRetCode = 0;
  163. // initialize winsock2
  164. WSADATA wsaData;
  165. WSAStartup(MAKEWORD(2,2), &wsaData);
  166. // initialize MFC and print and error on failure
  167. if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
  168. {
  169. // TODO: change error code to suit your needs
  170. cerr << _T("Fatal Error: MFC initialization failed") << endl;
  171. nRetCode = 1;
  172. }
  173. else
  174. {
  175. // TODO: code your application's behavior here.
  176. CSmppLibTest smpplib_test;
  177. smpplib_test.initialize("127.0.0.1", 8152);
  178. //block the main thread
  179. while (getchar() != 'n')
  180. {
  181. Sleep(100);
  182. }
  183. }
  184. WSACleanup();
  185. return nRetCode;
  186. }