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

手机短信编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "smpppacket.h"
  3. #include "smpp.h"
  4. CLinkClose::CLinkClose()
  5. {
  6. setCommandId(SMPP_SPECIAL_LINKCLOSE);
  7. }
  8. CLinkClose::~CLinkClose()
  9. {
  10. }
  11. void CLinkClose::encodeBody(PBYTE &pby, int &nsz)
  12. {
  13. CPacketBase::encodeBody(pby, nsz);
  14. nsz = m_buffer.GetBufferLen();
  15. pby = new byte[nsz];
  16. memcpy(pby, m_buffer.GetBuffer(), nsz);
  17. }
  18. CBindTransmitter::CBindTransmitter()
  19. {
  20. setCommandId(SMPP_BIND_TRANSMITTER);
  21. }
  22. CBindTransmitter::~CBindTransmitter()
  23. {
  24. }
  25. CBindReceiver::CBindReceiver()
  26. {
  27. setCommandId(SMPP_BIND_RECEIVER);
  28. }
  29. CBindReceiver::~CBindReceiver()
  30. {
  31. }
  32. CBindTransceiver::CBindTransceiver()
  33. {
  34. setCommandId(SMPP_BIND_TRANSCEIVER);
  35. }
  36. CBindTransceiver::~CBindTransceiver()
  37. {
  38. }
  39. CQuerySM::CQuerySM()
  40. {
  41. m_message_id = "";
  42. setCommandId(SMPP_QUERY_SM);
  43. }
  44. CQuerySM::~CQuerySM()
  45. {
  46. }
  47. CString CQuerySM::getMessageId()
  48. {
  49. return m_message_id;
  50. }
  51. void CQuerySM::setMessageId(CString msgid)
  52. {
  53. m_message_id = msgid;
  54. }
  55. void CQuerySM::encodeBody(PBYTE &pby, int &nsz)
  56. {
  57. CPacketBase::encodeBody(pby, nsz);
  58. BYTE by;
  59. m_buffer.Write(m_message_id);
  60. m_buffer.WriteNULL();
  61. by = static_cast<byte>(m_source.m_addr_ton);
  62. m_buffer.Write(&by, 1);
  63. by = static_cast<byte>(m_source.m_addr_npi);
  64. m_buffer.Write(&by, 1);
  65. m_buffer.Write(m_source.m_addr);
  66. m_buffer.WriteNULL();
  67. nsz = m_buffer.GetBufferLen();
  68. pby = new byte[nsz];
  69. ASSERT( getCommandLength() == static_cast<uint32>(nsz));
  70. memcpy(pby, m_buffer.GetBuffer(), nsz);
  71. }
  72. bool CQuerySM::loadPacket(PBYTE pby, int nsz)
  73. {
  74. if (!CPacketBase::loadPacket(pby, nsz))
  75. return false;
  76. if (getCommandStatus() != 0)
  77. return false;
  78. int pos = 12;
  79. m_message_id = (LPTSTR) pby+pos;
  80. pos += m_message_id.GetLength() + 1;
  81. m_source.setAddrTon(*(pby+pos));
  82. pos += 1;
  83. m_source.setAddrNpi(*(pby+pos));
  84. pos += 1;
  85. m_source.m_addr = (LPTSTR) pby+pos;
  86. pos += m_source.m_addr.GetLength() + 1;
  87. return true;
  88. }
  89. uint32 CQuerySM::getCommandLength()
  90. {
  91. int len = (CPacketBase::getCommandLength()
  92. + ((!m_message_id.IsEmpty()) ? m_message_id.GetLength() : 0)
  93. + (m_source.getLength()) );
  94. return (len + 1);
  95. }
  96. CUnbind::CUnbind()
  97. {
  98. setCommandId(SMPP_UNBIND);
  99. }
  100. CUnbind::~CUnbind()
  101. {
  102. }
  103. void CUnbind::encodeBody(PBYTE &pby, int &nsz)
  104. {
  105. CPacketBase::encodeBody(pby, nsz);
  106. nsz = m_buffer.GetBufferLen();
  107. pby = new byte[nsz];
  108. memcpy(pby, m_buffer.GetBuffer(), nsz);
  109. }
  110. CSubmitSM::CSubmitSM()
  111. {
  112. setCommandId(SMPP_SUBMIT_SM);
  113. }
  114. CSubmitSM::~CSubmitSM()
  115. {
  116. }
  117. CDeliverSM::CDeliverSM()
  118. {
  119. setCommandId(SMPP_DELIVER_SM);
  120. }
  121. CDeliverSM::~CDeliverSM()
  122. {
  123. }
  124. CDataSM::CDataSM()
  125. {
  126. setCommandId(SMPP_DATA_SM);
  127. }
  128. CDataSM::~CDataSM()
  129. {
  130. }
  131. CDataSMResp::CDataSMResp()
  132. {
  133. setCommandId(SMPP_DATA_SM_RESP);
  134. }
  135. CDataSMResp::CDataSMResp(CDataSM &pak)
  136. {
  137. setCommandId(SMPP_DATA_SM_RESP);
  138. setSequenceNumber(pak.getSequenceNumber());
  139. }
  140. CDataSMResp::~CDataSMResp()
  141. {
  142. }
  143. CBindTransmitterResp::CBindTransmitterResp()
  144. {
  145. setCommandId(SMPP_BIND_TRANSMITTER_RESP);
  146. }
  147. CBindTransmitterResp::CBindTransmitterResp(CBindTransmitter &pak)
  148. {
  149. setCommandId(SMPP_BIND_TRANSMITTER_RESP);
  150. setSequenceNumber(pak.getSequenceNumber());
  151. }
  152. CBindTransmitterResp::~CBindTransmitterResp()
  153. {
  154. }
  155. CBindReceiverResp::CBindReceiverResp()
  156. {
  157. setCommandId(SMPP_BIND_RECEIVER_RESP);
  158. }
  159. CBindReceiverResp::CBindReceiverResp(CBindReceiver &pak)
  160. {
  161. setCommandId(SMPP_BIND_RECEIVER_RESP);
  162. setSequenceNumber(pak.getSequenceNumber());
  163. }
  164. CBindReceiverResp::~CBindReceiverResp()
  165. {
  166. }
  167. CBindTransceiverResp::CBindTransceiverResp()
  168. {
  169. setCommandId(SMPP_BIND_TRANSCEIVER_RESP);
  170. }
  171. CBindTransceiverResp::CBindTransceiverResp(CBindTransceiver &pak)
  172. {
  173. setCommandId(SMPP_BIND_TRANSCEIVER_RESP);
  174. setSequenceNumber(pak.getSequenceNumber());
  175. }
  176. CBindTransceiverResp::~CBindTransceiverResp()
  177. {
  178. }
  179. CQuerySMResp::CQuerySMResp()
  180. {
  181. setCommandId(SMPP_QUERY_SM_RESP);
  182. m_message_id = "";
  183. m_error_code = 0;
  184. m_message_state = 0;
  185. }
  186. CQuerySMResp::CQuerySMResp(CQuerySM &pak)
  187. {
  188. setCommandId(SMPP_QUERY_SM_RESP);
  189. m_message_id = "";
  190. m_error_code = 0;
  191. m_message_state = 0;
  192. setSequenceNumber(pak.getSequenceNumber());
  193. }
  194. CQuerySMResp::~CQuerySMResp()
  195. {
  196. }
  197. CString CQuerySMResp::getMessageId()
  198. {
  199. return m_message_id;
  200. }
  201. void CQuerySMResp::setMessageId(CString msgid)
  202. {
  203. m_message_id = msgid;
  204. }
  205. CSmppDate CQuerySMResp::getFinalDate()
  206. {
  207. return m_final_date;
  208. }
  209. void CQuerySMResp::setFinalDate(CSmppDate &fldate)
  210. {
  211. m_final_date = fldate;
  212. }
  213. uint32 CQuerySMResp::getMessageState()
  214. {
  215. return m_message_state;
  216. }
  217. void CQuerySMResp::setMessageState(uint32 msgst)
  218. {
  219. m_message_state = msgst;
  220. }
  221. uint32 CQuerySMResp::getErrorCode()
  222. {
  223. return m_error_code;
  224. }
  225. void CQuerySMResp::setErrorCode(uint32 errcode)
  226. {
  227. m_error_code = errcode;
  228. }
  229. void CQuerySMResp::encodeBody(PBYTE &pby, int &nsz)
  230. {
  231. CPacketBase::encodeBody(pby, nsz);
  232. BYTE by;
  233. m_buffer.Write(m_message_id);
  234. m_buffer.WriteNULL();
  235. m_buffer.Write(m_final_date.toString());
  236. m_buffer.WriteNULL();
  237. by = static_cast<byte>(m_message_state);
  238. m_buffer.Write(&by, 1);
  239. by = static_cast<byte>(m_error_code);
  240. m_buffer.Write(&by, 1);
  241. nsz = m_buffer.GetBufferLen();
  242. pby = new byte[nsz];
  243. ASSERT( getCommandLength() == static_cast<uint32>(nsz));
  244. memcpy(pby, m_buffer.GetBuffer(), nsz);
  245. }
  246. bool CQuerySMResp::loadPacket(PBYTE pby, int nsz)
  247. {
  248. if (!CPacketBase::loadPacket(pby, nsz))
  249. return false;
  250. if (getCommandStatus() != 0)
  251. return false;
  252. int pos = 12;
  253. m_message_id = (LPTSTR) pby+pos;
  254. pos += m_message_id.GetLength() + 1;
  255. CString finaldt = (LPTSTR) pby+pos;
  256. pos += finaldt.GetLength() + 1;
  257. if (!finaldt.IsEmpty())
  258. m_final_date.setDate(finaldt);
  259. m_message_state = static_cast<uint32>(*(pby+pos));
  260. pos += 1;
  261. m_error_code = static_cast<uint32>(*(pby+pos));
  262. pos += 1;
  263. return true;
  264. }
  265. uint32 CQuerySMResp::getCommandLength()
  266. {
  267. int len = (CPacketBase::getCommandLength()
  268. + ((!m_message_id.IsEmpty()) ? m_message_id.GetLength() : 0)
  269. + (m_final_date.getLength()) );
  270. return (len + 2 + 2);
  271. }
  272. CSubmitSMResp::CSubmitSMResp()
  273. {
  274. setCommandId(SMPP_SUBMIT_SM_RESP);
  275. }
  276. CSubmitSMResp::CSubmitSMResp(CSubmitSM &pak)
  277. {
  278. setCommandId(SMPP_SUBMIT_SM_RESP);
  279. setSequenceNumber(pak.getSequenceNumber());
  280. }
  281. CSubmitSMResp::~CSubmitSMResp()
  282. {
  283. }
  284. CDeliverSMResp::CDeliverSMResp()
  285. {
  286. setCommandId(SMPP_DELIVER_SM_RESP);
  287. }
  288. CDeliverSMResp::CDeliverSMResp(CDeliverSM &pak)
  289. {
  290. setCommandId(SMPP_DELIVER_SM_RESP);
  291. setSequenceNumber(pak.getSequenceNumber());
  292. }
  293. CDeliverSMResp::~CDeliverSMResp()
  294. {
  295. }
  296. CUnbindResp::CUnbindResp()
  297. {
  298. setCommandId(SMPP_UNBIND_RESP);
  299. }
  300. CUnbindResp::CUnbindResp(CUnbind &pak)
  301. {
  302. setCommandId(SMPP_UNBIND_RESP);
  303. setSequenceNumber(pak.getSequenceNumber());
  304. }
  305. CUnbindResp::~CUnbindResp()
  306. {
  307. }
  308. void CUnbindResp::encodeBody(PBYTE &pby, int &nsz)
  309. {
  310. CPacketBase::encodeBody(pby, nsz);
  311. nsz = m_buffer.GetBufferLen();
  312. pby = new byte[nsz];
  313. memcpy(pby, m_buffer.GetBuffer(), nsz);
  314. }
  315. CEnquireLink::CEnquireLink()
  316. {
  317. setCommandId(SMPP_ENQUIRE_LINK);
  318. }
  319. CEnquireLink::~CEnquireLink()
  320. {
  321. }
  322. void CEnquireLink::encodeBody(PBYTE &pby, int &nsz)
  323. {
  324. CPacketBase::encodeBody(pby, nsz);
  325. nsz = m_buffer.GetBufferLen();
  326. pby = new byte[nsz];
  327. memcpy(pby, m_buffer.GetBuffer(), nsz);
  328. }
  329. CEnquireLinkResp::CEnquireLinkResp()
  330. {
  331. setCommandId(SMPP_ENQUIRE_LINK_RESP);
  332. }
  333. CEnquireLinkResp::CEnquireLinkResp(CEnquireLink &pak)
  334. {
  335. setCommandId(SMPP_ENQUIRE_LINK_RESP);
  336. setSequenceNumber(pak.getSequenceNumber());
  337. }
  338. CEnquireLinkResp::~CEnquireLinkResp()
  339. {
  340. }
  341. void CEnquireLinkResp::encodeBody(PBYTE &pby, int &nsz)
  342. {
  343. CPacketBase::encodeBody(pby, nsz);
  344. nsz = m_buffer.GetBufferLen();
  345. pby = new byte[nsz];
  346. memcpy(pby, m_buffer.GetBuffer(), nsz);
  347. }
  348. CGenericNack::CGenericNack()
  349. {
  350. setCommandId(SMPP_GENERIC_NACK);
  351. }
  352. CGenericNack::~CGenericNack()
  353. {
  354. }
  355. void CGenericNack::encodeBody(PBYTE &pby, int &nsz)
  356. {
  357. CPacketBase::encodeBody(pby, nsz);
  358. nsz = m_buffer.GetBufferLen();
  359. pby = new byte[nsz];
  360. memcpy(pby, m_buffer.GetBuffer(), nsz);
  361. }
  362. CAlertNotification::CAlertNotification()
  363. {
  364. setCommandId(SMPP_ALERT_NOTIFICATION);
  365. }
  366. CAlertNotification::~CAlertNotification()
  367. {
  368. }
  369. CSmppAddress CAlertNotification::getSource()
  370. {
  371. return m_source;
  372. }
  373. CSmppAddress CAlertNotification::getEsme()
  374. {
  375. return m_esme;
  376. }
  377. void CAlertNotification::setSource(CSmppAddress &src)
  378. {
  379. m_source = src;
  380. }
  381. void CAlertNotification::setEsme(CSmppAddress &esme)
  382. {
  383. m_esme = esme;
  384. }
  385. void CAlertNotification::encodeBody(PBYTE &pby, int &nsz)
  386. {
  387. CPacketBase::encodeBody(pby, nsz);
  388. BYTE by;
  389. by = static_cast<byte>(m_source.m_addr_ton);
  390. m_buffer.Write(&by, 1);
  391. by = static_cast<byte>(m_source.m_addr_npi);
  392. m_buffer.Write(&by, 1);
  393. m_buffer.Write(m_source.m_addr);
  394. m_buffer.WriteNULL();
  395. by = static_cast<byte>(m_esme.m_addr_ton);
  396. m_buffer.Write(&by, 1);
  397. by = static_cast<byte>(m_esme.m_addr_npi);
  398. m_buffer.Write(&by, 1);
  399. m_buffer.Write(m_esme.m_addr);
  400. m_buffer.WriteNULL();
  401. nsz = m_buffer.GetBufferLen();
  402. pby = new byte[nsz];
  403. ASSERT( getCommandLength() == static_cast<uint32>(nsz));
  404. memcpy(pby, m_buffer.GetBuffer(), nsz);
  405. }
  406. bool CAlertNotification::loadPacket(PBYTE pby, int nsz)
  407. {
  408. if (!CPacketBase::loadPacket(pby, nsz))
  409. return false;
  410. if (getCommandStatus() != 0)
  411. return false;
  412. int pos = 12;
  413. m_source.setAddrTon(*(pby+pos));
  414. pos += 1;
  415. m_source.setAddrNpi(*(pby+pos));
  416. pos += 1;
  417. m_source.m_addr = (LPTSTR) pby+pos;
  418. pos += m_source.m_addr.GetLength() + 1;
  419. m_esme.setAddrTon(*(pby+pos));
  420. pos += 1;
  421. m_esme.setAddrNpi(*(pby+pos));
  422. pos += 1;
  423. m_esme.m_addr = (LPTSTR) pby+pos;
  424. pos += m_esme.m_addr.GetLength() + 1;
  425. return true;
  426. }
  427. uint32 CAlertNotification::getCommandLength()
  428. {
  429. int len = (CPacketBase::getCommandLength()
  430. + (m_source.getLength())
  431. + (m_esme.getLength()) );
  432. return (len + 1);
  433. }