smsc_sema.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:8k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. #ifndef SMSC_SEMA_H
  2. #define SMSC_SEMA_H
  3. #include "gwlib/gwlib.h"
  4. #include "smsc.h"
  5. #include "smsc_p.h"
  6. #define SM_RESULT_SUCCESS 0
  7. #define SM_RESULT_FAIL_ARGS 1
  8. #define SM_RESLUT_FAIL_SMSC_DB 2
  9. #define SM_RESULT_FAIL_SMSC_BUSY 3
  10. #define SM_RESULT_FAIL_SM_NOTFOUND 4
  11. #define SM_RESULT_FAIL_SM_DUPLICATE 5
  12. #define SME_RESULT_SUCCESS 0
  13. #define SME_RESULT_INVALIDDATA 1
  14. #define SME_RESULT_DBFULL 2
  15. #define SME_RESULT_SMEBUSY 3
  16. #define SME_RESULT_NOTUSED 4
  17. #define SME_RESULT_DUPLICATESM 5
  18. #define SME_RESULT_DESTUNAVAILABLE 6
  19. #define SME_RESULT_CALLBARREDUSER 7
  20. #define SME_RESULT_TRANSMISSION 21
  21. #define SME_RESULT_FACILITYNOTSUPPORT 22
  22. #define SME_RESULT_ERRORINSME 23
  23. #define SME_RESULT_UNKNOWNSUBSCRIBER 24
  24. #define SME_RESULT_CALLBARREDOPERATOR 25
  25. #define SME_RESULT_CUGVIOLATION 26
  26. #define SME_RESULT_NETWORKFAIL 120
  27. #define ENCODE_IA5 15
  28. #define ENCODE_GSM 0
  29. /*internal definition*/
  30. #define LINE_ENCODE_IA5 1
  31. #define LINE_ENCODE_HEX 2
  32. #define LINE_ENCODE_BIN 3
  33. #define X28_COMMAND_MODE 0
  34. #define X28_MT_DATA_MODE 1
  35. #define X28_MO_DATA_MODE 2
  36. #define INTERNAL_DISCONNECT_TIMEVAL 3
  37. #define INTERNAL_READFD_TIMEVAL 1
  38. #define INTERNAL_CONNECT_TIMEVAL 5
  39. #define INTERNAL_SESSION_MT_TIMEVAL 20
  40. #define SESSION_MT_RECEIVE_ERR 0
  41. #define SESSION_MT_RECEIVE_TIMEOUT 1
  42. #define SESSION_MT_RECEIVE_SUCCESS 2
  43. typedef struct msg_hash{
  44.   int key;
  45.   Octstr* content;
  46. } msg_hash;
  47. typedef struct sema_msg{
  48.   unsigned char type; /*1 byte */
  49.   unsigned char continuebyte; /* 1 byte */
  50.   unsigned char optref[4]; /*4 byte int */
  51.   int encodetype; /* 1 byte ,0 is IA5, 1 is hex, 2 is bin */
  52.   time_t logtime;
  53.   void** msgbody; /* the actual message structure */ 
  54.  
  55.   struct sema_msg *prev, *next; 
  56. } sema_msg;
  57. typedef struct sema_msglist{
  58. int count;
  59. sema_msg* first;
  60. sema_msg* last;
  61. }sema_msglist;
  62. typedef struct sm_statusreport_result{
  63. unsigned int smeresult; /*see spec*/
  64. }sm_statusreport_result;
  65. typedef struct sm_statusreport_invoke{
  66. unsigned int msisdnlen; /*1 byte*/
  67. Octstr* msisdn; /* string */
  68. unsigned int smetype; /* 1byte, 0-sme, 1-smsc */
  69. unsigned char smerefnum[4]; /* 4 byte integer */
  70. unsigned char smscrefnum[4]; /* 4 byte int */
  71. char accepttime[14]; /*absolute format*/
  72. unsigned int status; 
  73. char completetime[14]; /*absolute format*/
  74. char intermediatime[14]; /*absolute format*/
  75. unsigned int failreason; /*see spec*/
  76. unsigned int origaddlen; /*1 byte;*/
  77. Octstr* origadd; /*1 byte; */
  78. char invoketime[14]; /*absolute format */
  79. }sm_statusreport_invoke;
  80. typedef struct sm_submit_result{ 
  81. unsigned int smeresult; 
  82.   /*0- ok, 1-reject for rg problem, 2-db is full or db crash
  83.   3-fail for smsc busy, 4- sm is not in db. 5- fail for already
  84.   there(smsc ref or {sme ref, msdnid */
  85. unsigned char smscrefnum[4]; /* 4 byte int*/
  86. char accepttime[14]; /*YYMMDDHHMMSSZZ*/
  87. } sm_submit_result;
  88. typedef struct sm_submit_invoke{
  89. unsigned int msisdnlen; /*1 byte*/
  90. Octstr* msisdn; /* string */
  91. unsigned int smereftype; /* 1btype 1 key, 0 not key */
  92. unsigned char smerefnum[4]; /* 4 byte integer */
  93. unsigned int priority; /* 1 byte, 0 means high, 2normal */
  94. unsigned int origaddlen; /* 1 byte; */
  95. Octstr* origadd; /* in X25 it will b overwritten by NUA,
  96.     if user login, it will home NUA */
  97. unsigned int validperiodtype; /* 0-none, 1-absolute, 2-relative */
  98. char validperiodabs[14]; 
  99. unsigned int validperiodrela; /*1 byte ,usage see sema spec.*/
  100. unsigned int DCS; /* 1 byte */
  101. unsigned int statusreportrequest; 
  102.     /* 1 byte, 0-failed(abondon), 1-expire, 2-delivered, 3-delete by sme,
  103.        4-delete by smsc operator 5 retry*/
  104. unsigned int protocal; /*1 byte */
  105. unsigned int replypath; /* 0 mean can not use sender smsc, 1 means can*/
  106. unsigned int textsizeseptet; /*1byte, in gsm format, it's 7 bits*/
  107. unsigned int textsizeoctect; /* 1 byte in 8 bits */
  108. Octstr* shortmsg;
  109.   
  110.         unsigned char smscrefnum[4];
  111. }sm_submit_invoke;
  112. typedef struct sm_deliver_result{ /* if ok, must return */
  113. unsigned int smeresult; /* 0- ok, 1-reject for rg problem, 2-db is
  114.    full or db crash*/
  115. } sm_deliver_result;
  116. typedef struct sm_deliver_invoke{
  117. unsigned int destaddlen; /*1 byte*/
  118. Octstr* destadd; /*string*/
  119. unsigned char smscrefnum[4]; /*4 byte integer*/
  120. unsigned int origaddlen; /*1 byte*/
  121. Octstr* origadd; /* note, in X25 it will b overwritten by NUA,
  122.     if user login, it will home NUA*/
  123. unsigned int DCS; /*1 byte*/
  124. unsigned int protocal; /*1 byte*/
  125. unsigned int replypath; /* 0 mean can not use sender smsc, 1 means can*/
  126. unsigned int textsizeseptet; /* 1byte, in gsm format, it's 7 bits */
  127. unsigned int textsizeoctect; /* 1 byte in 8 bits */
  128. Octstr* shortmsg;
  129. char accepttime[14];
  130. char invoketime[14];
  131.    
  132.   /*note in X25 sublogical number is omit*/
  133. }sm_deliver_invoke;
  134. /********************** unimplemted msg here
  135. typedef struct sm_login_result{ 
  136. unsigned int result; 
  137. } sm_login_result;
  138. typedef struct sm_login{
  139. unsigned int homenualen;
  140. Octstr* homenua;
  141. unsigned char pim[2]; 
  142. unsigned int result;
  143. } sm_login;
  144. typedef struct sm_delete_invoke_result{
  145. unsigned int result; 
  146. } sm_delete_invoke_result;
  147. typedef struct sm_delete_invoke{
  148. unsigned int smtype;
  149. unsigned char smscrefnum[4];
  150. unsigned char smerefnum[4]; 
  151. unsigned int msisdnlen; 
  152. Octstr* msisdn; 
  153. unsigned int origaddlen; 
  154. Octstr* origadd;
  155. }sm_delete_invoke;
  156. typedef struct sm_deleteall_invoke{
  157. unsigned int msisdnlen;
  158. Octstr* msisdn; 
  159. unsigned int origaddlen; 
  160. Octstr* origadd;
  161. unsigned int nostatusreport;
  162. }sm_deleteall_invoke;
  163. typedef struct sm_replace_result{
  164. unsigned int delete_result;
  165. unsigned int add_result;
  166. unsigned char smscrefnum[4];
  167. char accepttime[14];
  168. } sm_replace_result;
  169. typedef struct sm_replace_invoke{
  170. unsigned int smtype; 
  171. unsigned char smscrefnum[4];
  172. unsigned char smerefnum[4];
  173. unsigned int msisdnlen;
  174. Octstr* msisdn;
  175. unsigned int new_smereftype;
  176. unsigned char new_smerefnum[4];
  177. unsigned int new_priority;
  178. unsigned int new_origaddlen;
  179. Octstr* new_origadd;
  180. unsigned int new_validperiodtype;
  181. unsigned char new_validperiodabs[14];
  182. unsigned int new_validperiodrela;
  183. unsigned int new_DCS;
  184. unsigned int new_statusreportrequest;
  185. unsigned int new_protocal;
  186. unsigned int new_replypath;
  187. unsigned int new_textsizechar;
  188. unsigned int new_textsizebyte;
  189. Octstr* new_shortmsg;
  190. }sm_replace_invoke;
  191. typedef struct 2K_ENQUIRE_INVOKE{
  192. int smtype;
  193. int smscrefnum;
  194. int smerefnum;
  195. int msisdnlen;
  196. Octstrr* msisdn;
  197. int origaddlen;
  198. Octstr* origadd;
  199. int enquiretype;
  200. }sm_enqire_invoke;
  201. typedef struct 2K_ENQUIRE_RESULT{
  202. int result;
  203. int enquiretype;
  204. int status;
  205. char[15] completetime;
  206. int failreason;
  207. int priority;
  208. int origaddlen;
  209. char* origadd;
  210. char[15] accepttime;
  211. char[15] exipretime;
  212. int DCS;
  213. int statusreportrequest;
  214. int protocalid;
  215. int replypath;
  216. int textsizechar;
  217. int textsizebyte;
  218. char* shortmsg;
  219. }sm_enqire_result;
  220. other msg type ...******************************
  221. */
  222. /* function definition */
  223. static int sema_submit_result(SMSCenter*, sema_msg*, int);
  224. static int X28_open_data_link(char*);
  225. static int X28_reopen_data_link(int,char*);
  226. static int X28_close_send_link(int);
  227. static int X28_open_send_link(int,char*);
  228. static int X28_data_read(int, char*);
  229. static int X28_data_send(int, char*, int);
  230. static int X28_msg_pop(char *, char *);
  231. static int sema_msg_session_mt(SMSCenter*, sema_msg*);
  232. static int sema_msg_session_mo(SMSCenter*, char*);
  233. static sema_msg* sema_msg_new(void);
  234. static int sema_msg_free(sema_msg *msg);
  235. static sema_msglist* sema_msglist_new(void);
  236. static void sema_msglist_free(sema_msglist*);
  237. static int sema_msglist_push(sema_msglist*, sema_msg*);
  238. static int sema_msglist_pop(sema_msglist*, sema_msg**);
  239. /* static int sema_msgbuffer_pop(Octstr *, Octstr **); */
  240. static int sema_decode_msg(sema_msg**, char*);
  241. static int sema_encode_msg(sema_msg*, char*);
  242. static int line_append_hex_IA5(Octstr* , unsigned char*, int);
  243. static int line_scan_IA5_hex(unsigned char*, int, unsigned char*);
  244. static int line_scan_hex_GSM7(unsigned char*,int,int,unsigned char*);
  245. static int internal_char_IA5_to_hex(unsigned char *, unsigned char *);
  246. static int internal_char_hex_to_IA5(unsigned char, unsigned char *);
  247. static unsigned char internal_char_hex_to_gsm(unsigned char from);
  248. static int unpack_continous_byte(unsigned char, int *, int * , int *);
  249. static unsigned char pack_continous_byte(int, int, int);
  250. static void increment_counter(void);
  251. #endif