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

手机短信编程

开发平台:

Visual C++

  1. // DeliverSMCom.cpp : Implementation of CDeliverSMCom
  2. #include "stdafx.h"
  3. #include "DeliverSMCom.h"
  4. // CDeliverSMCom
  5. STDMETHODIMP CDeliverSMCom::get_ServiceType(BSTR* pVal)
  6. {
  7. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  8. // TODO: Add your implementation code here
  9. try
  10. {
  11. *pVal = m_service_type.AllocSysString();
  12. }
  13. catch (...)
  14. {
  15. return E_OUTOFMEMORY;
  16. }
  17. return S_OK;
  18. }
  19. STDMETHODIMP CDeliverSMCom::put_ServiceType(BSTR newVal)
  20. {
  21. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  22. // TODO: Add your implementation code here
  23. USES_CONVERSION;
  24. LPSTR stype = OLE2A(newVal);
  25. m_service_type = stype;
  26. return S_OK;
  27. }
  28. STDMETHODIMP CDeliverSMCom::get_Source(ISmppAddressCom** pVal)
  29. {
  30. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  31. // TODO: Add your implementation code here
  32. //create an CSmppAddressCom instance to return
  33. CoCreateInstance( CLSID_SmppAddressCom,
  34. NULL,
  35. CLSCTX_ALL,
  36. IID_ISmppAddressCom,
  37. (void **) pVal);
  38. //sets the values
  39. (*pVal)->put_TON(m_source.m_addr_ton);
  40. (*pVal)->put_NPI(m_source.m_addr_npi);
  41. (*pVal)->put_Address(m_source.m_addr.AllocSysString());
  42. return S_OK;
  43. }
  44. STDMETHODIMP CDeliverSMCom::put_Source(ISmppAddressCom* newVal)
  45. {
  46. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  47. // TODO: Add your implementation code here
  48. SHORT npi;
  49. SHORT ton;
  50. BSTR addr;
  51. newVal->get_NPI(&npi);
  52. newVal->get_TON(&ton);
  53. newVal->get_Address(&addr);
  54. m_source.m_addr_ton = ton;
  55. m_source.m_addr_npi = npi;
  56. USES_CONVERSION;
  57. LPSTR paddr = OLE2A(addr);
  58. m_source.m_addr = paddr;
  59. //clearing up
  60. SysFreeString(addr);
  61. return S_OK;
  62. }
  63. STDMETHODIMP CDeliverSMCom::get_Destination(ISmppAddressCom** pVal)
  64. {
  65. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  66. // TODO: Add your implementation code here
  67. //create an CSmppAddressCom instance to return
  68. CoCreateInstance( CLSID_SmppAddressCom,
  69. NULL,
  70. CLSCTX_ALL,
  71. IID_ISmppAddressCom,
  72. (void **) pVal);
  73. //sets the values
  74. (*pVal)->put_TON(m_destination.m_addr_ton);
  75. (*pVal)->put_NPI(m_destination.m_addr_npi);
  76. (*pVal)->put_Address(m_destination.m_addr.AllocSysString());
  77. return S_OK;
  78. }
  79. STDMETHODIMP CDeliverSMCom::put_Destination(ISmppAddressCom* newVal)
  80. {
  81. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  82. // TODO: Add your implementation code here
  83. SHORT npi;
  84. SHORT ton;
  85. BSTR addr;
  86. newVal->get_NPI(&npi);
  87. newVal->get_TON(&ton);
  88. newVal->get_Address(&addr);
  89. m_destination.m_addr_ton = ton;
  90. m_destination.m_addr_npi = npi;
  91. USES_CONVERSION;
  92. LPSTR paddr = OLE2A(addr);
  93. m_destination.m_addr = paddr;
  94. //clearing up
  95. SysFreeString(addr);
  96. return S_OK;
  97. }
  98. STDMETHODIMP CDeliverSMCom::get_esmClass(SHORT* pVal)
  99. {
  100. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  101. // TODO: Add your implementation code here
  102. *pVal = m_esm_class;
  103. return S_OK;
  104. }
  105. STDMETHODIMP CDeliverSMCom::put_esmClass(SHORT newVal)
  106. {
  107. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  108. // TODO: Add your implementation code here
  109. m_esm_class = newVal;
  110. return S_OK;
  111. }
  112. STDMETHODIMP CDeliverSMCom::get_dataCoding(SHORT* pVal)
  113. {
  114. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  115. // TODO: Add your implementation code here
  116. *pVal = m_data_coding;
  117. return S_OK;
  118. }
  119. STDMETHODIMP CDeliverSMCom::put_dataCoding(SHORT newVal)
  120. {
  121. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  122. // TODO: Add your implementation code here
  123. m_data_coding = newVal;
  124. return S_OK;
  125. }
  126. STDMETHODIMP CDeliverSMCom::get_protocolID(SHORT* pVal)
  127. {
  128. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  129. // TODO: Add your implementation code here
  130. *pVal = m_protocol_id;
  131. return S_OK;
  132. }
  133. STDMETHODIMP CDeliverSMCom::put_protocolID(SHORT newVal)
  134. {
  135. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  136. // TODO: Add your implementation code here
  137. m_protocol_id = newVal;
  138. return S_OK;
  139. }
  140. STDMETHODIMP CDeliverSMCom::get_priorityFlag(SHORT* pVal)
  141. {
  142. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  143. // TODO: Add your implementation code here
  144. *pVal = m_priority_flag;
  145. return S_OK;
  146. }
  147. STDMETHODIMP CDeliverSMCom::put_priorityFlag(SHORT newVal)
  148. {
  149. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  150. // TODO: Add your implementation code here
  151. m_priority_flag = newVal;
  152. return S_OK;
  153. }
  154. STDMETHODIMP CDeliverSMCom::get_scheduledDelivery(ISmppDateCom** pVal)
  155. {
  156. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  157. // TODO: Add your implementation code here
  158. //create an CSmppDateCom instance to return
  159. CoCreateInstance( CLSID_SmppDateCom,
  160. NULL,
  161. CLSCTX_ALL,
  162. IID_ISmppDateCom,
  163. (void **) pVal);
  164. //sets the values
  165. BSTR bstrdt = m_scheduled_delivery.toString().AllocSysString();
  166. (*pVal)->setDate(bstrdt);
  167. SysFreeString(bstrdt);
  168. return S_OK;
  169. }
  170. STDMETHODIMP CDeliverSMCom::put_scheduledDelivery(ISmppDateCom* newVal)
  171. {
  172. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  173. // TODO: Add your implementation code here
  174. BSTR strdt;
  175. newVal->toString(&strdt);
  176. USES_CONVERSION;
  177. LPSTR sdt = OLE2A(strdt);
  178. m_scheduled_delivery.setDate(sdt);
  179. //cleaning
  180. SysFreeString(strdt);
  181. return S_OK;
  182. }
  183. STDMETHODIMP CDeliverSMCom::get_validityPeriod(ISmppDateCom** pVal)
  184. {
  185. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  186. // TODO: Add your implementation code here
  187. //create an CSmppDateCom instance to return
  188. CoCreateInstance( CLSID_SmppDateCom,
  189. NULL,
  190. CLSCTX_ALL,
  191. IID_ISmppDateCom,
  192. (void **) pVal);
  193. //sets the values
  194. BSTR bstrdt = m_validity_period.toString().AllocSysString();
  195. (*pVal)->setDate(bstrdt);
  196. SysFreeString(bstrdt);
  197. return S_OK;
  198. }
  199. STDMETHODIMP CDeliverSMCom::put_validityPeriod(ISmppDateCom* newVal)
  200. {
  201. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  202. // TODO: Add your implementation code here
  203. BSTR strdt;
  204. newVal->toString(&strdt);
  205. USES_CONVERSION;
  206. LPSTR sdt = OLE2A(strdt);
  207. m_validity_period.setDate(sdt);
  208. //cleaning
  209. SysFreeString(strdt);
  210. return S_OK;
  211. }
  212. STDMETHODIMP CDeliverSMCom::get_registeredDelivery(SHORT* pVal)
  213. {
  214. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  215. // TODO: Add your implementation code here
  216. *pVal = m_registered_delivery;
  217. return S_OK;
  218. }
  219. STDMETHODIMP CDeliverSMCom::put_registeredDelivery(SHORT newVal)
  220. {
  221. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  222. // TODO: Add your implementation code here
  223. m_registered_delivery = newVal;
  224. return S_OK;
  225. }
  226. STDMETHODIMP CDeliverSMCom::get_replaceIfPresent(SHORT* pVal)
  227. {
  228. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  229. // TODO: Add your implementation code here
  230. *pVal = m_replace_if_present;
  231. return S_OK;
  232. }
  233. STDMETHODIMP CDeliverSMCom::put_replaceIfPresent(SHORT newVal)
  234. {
  235. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  236. // TODO: Add your implementation code here
  237. m_replace_if_present = newVal;
  238. return S_OK;
  239. }
  240. STDMETHODIMP CDeliverSMCom::get_smDefaultMsgId(SHORT* pVal)
  241. {
  242. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  243. // TODO: Add your implementation code here
  244. *pVal = m_sm_default_msg_id;
  245. return S_OK;
  246. }
  247. STDMETHODIMP CDeliverSMCom::put_smDefaultMsgId(SHORT newVal)
  248. {
  249. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  250. // TODO: Add your implementation code here
  251. m_sm_default_msg_id = newVal;
  252. return S_OK;
  253. }
  254. STDMETHODIMP CDeliverSMCom::get_Message(BSTR* pVal)
  255. {
  256. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  257. // TODO: Add your implementation code here
  258. UINT char_len;
  259. if (m_msg_double_byte)
  260. {
  261. char_len = m_sm_length/2;
  262. *pVal = SysAllocStringLen((OLECHAR *) m_message, char_len);
  263. }
  264. else
  265. {
  266. USES_CONVERSION;
  267. char_len = m_sm_length;
  268. *pVal = SysAllocStringLen(A2W((LPCSTR) m_message), char_len);
  269. }
  270. return S_OK;
  271. }
  272. STDMETHODIMP CDeliverSMCom::put_Message(BSTR newVal)
  273. {
  274. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  275. // TODO: Add your implementation code here
  276. //double byte characters
  277. m_sm_length = SysStringLen(newVal) * 2;
  278. m_msg_double_byte = true;
  279. CDeliverSM::setMessage((PBYTE) newVal, m_sm_length);
  280. return S_OK;
  281. }
  282. STDMETHODIMP CDeliverSMCom::compactMessage(void)
  283. {
  284. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  285. // TODO: Add your implementation code here
  286. if (m_msg_double_byte)
  287. {
  288. USES_CONVERSION;
  289. LPCSTR pstr = W2A((OLECHAR *) m_message);
  290. UINT len = m_sm_length/2;
  291. CDeliverSM::setMessage((PBYTE) pstr, len);
  292. m_msg_double_byte = false;
  293. }
  294. return S_OK;
  295. }
  296. STDMETHODIMP CDeliverSMCom::flipByteOrder(void)
  297. {
  298. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  299. // TODO: Add your implementation code here
  300. int i = 2;
  301. BYTE tmpby;
  302. while (i <= m_sm_length)
  303. {
  304. tmpby = m_message[i-2];
  305. m_message[i-2] = m_message[i-1];
  306. m_message[i-1] = tmpby;
  307. i+=2;
  308. }
  309. return S_OK;
  310. }
  311. STDMETHODIMP CDeliverSMCom::setMessage(VARIANT msgdata)
  312. {
  313. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  314. // TODO: Add your implementation code here
  315. if ((msgdata.vt & VT_ARRAY) == 0)
  316. return E_INVALIDARG;
  317. if ((msgdata.vt & VT_UI1) == 0)
  318. return E_INVALIDARG;
  319. SAFEARRAY *psa = msgdata.parray;
  320. BYTE *padata;
  321. SafeArrayAccessData(psa, (void **) &padata);
  322. //only one directly, no of element is the data length
  323. int nsize = psa->rgsabound->cElements;
  324. CDeliverSM::setMessage(padata, nsize);
  325. SafeArrayUnaccessData(psa);
  326. return S_OK;
  327. }
  328. STDMETHODIMP CDeliverSMCom::getMessage(VARIANT* pmsgdata)
  329. {
  330. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  331. // TODO: Add your implementation code here
  332. VariantInit(pmsgdata);
  333. pmsgdata->vt = VT_ARRAY | VT_UI1;
  334. SAFEARRAY *psa;
  335. SAFEARRAYBOUND bounds = {m_sm_length, 0};
  336. psa = SafeArrayCreate(VT_UI1, 1, &bounds);
  337. BYTE *padata;
  338. SafeArrayAccessData(psa, (void **) &padata);
  339. memcpy(padata, m_message, m_sm_length);
  340. SafeArrayUnaccessData(psa);
  341. pmsgdata->parray = psa;
  342. return S_OK;
  343. }