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

📄 smsc_sema.h

📁 gnu的专业网关smpp协议支持源代码。
💻 H
字号:
#ifndef SMSC_SEMA_H#define SMSC_SEMA_H#include "gwlib/gwlib.h"#include "smsc.h"#include "smsc_p.h"#define SM_RESULT_SUCCESS 0#define SM_RESULT_FAIL_ARGS 1#define SM_RESLUT_FAIL_SMSC_DB 2#define SM_RESULT_FAIL_SMSC_BUSY 3#define SM_RESULT_FAIL_SM_NOTFOUND 4#define SM_RESULT_FAIL_SM_DUPLICATE 5#define SME_RESULT_SUCCESS 0#define SME_RESULT_INVALIDDATA 1#define SME_RESULT_DBFULL 2#define SME_RESULT_SMEBUSY 3#define SME_RESULT_NOTUSED 4#define SME_RESULT_DUPLICATESM 5#define SME_RESULT_DESTUNAVAILABLE 6#define SME_RESULT_CALLBARREDUSER 7#define SME_RESULT_TRANSMISSION 21#define SME_RESULT_FACILITYNOTSUPPORT 22#define SME_RESULT_ERRORINSME 23#define SME_RESULT_UNKNOWNSUBSCRIBER 24#define SME_RESULT_CALLBARREDOPERATOR 25#define SME_RESULT_CUGVIOLATION 26#define SME_RESULT_NETWORKFAIL 120#define ENCODE_IA5 15#define ENCODE_GSM 0/*internal definition*/#define LINE_ENCODE_IA5 1#define LINE_ENCODE_HEX 2#define LINE_ENCODE_BIN 3#define X28_COMMAND_MODE 0#define X28_MT_DATA_MODE 1#define X28_MO_DATA_MODE 2#define INTERNAL_DISCONNECT_TIMEVAL 3#define INTERNAL_READFD_TIMEVAL 1#define INTERNAL_CONNECT_TIMEVAL 5#define INTERNAL_SESSION_MT_TIMEVAL 20#define SESSION_MT_RECEIVE_ERR 0#define SESSION_MT_RECEIVE_TIMEOUT 1#define SESSION_MT_RECEIVE_SUCCESS 2typedef struct msg_hash{  int key;  Octstr* content;} msg_hash;typedef struct sema_msg{  unsigned char type; /*1 byte */  unsigned char continuebyte; /* 1 byte */  unsigned char optref[4]; /*4 byte int */  int encodetype; /* 1 byte ,0 is IA5, 1 is hex, 2 is bin */  time_t logtime;  void** msgbody; /* the actual message structure */    struct sema_msg *prev, *next; } sema_msg;typedef struct sema_msglist{	int count;	sema_msg* first;	sema_msg* last;}sema_msglist;typedef struct sm_statusreport_result{	unsigned int smeresult; /*see spec*/}sm_statusreport_result;typedef struct sm_statusreport_invoke{	unsigned int msisdnlen; /*1 byte*/	Octstr* msisdn; /* string */	unsigned int smetype; /* 1byte, 0-sme, 1-smsc */	unsigned char smerefnum[4]; /* 4 byte integer */	unsigned char smscrefnum[4]; /* 4 byte int */	char accepttime[14]; /*absolute format*/	unsigned int status; 	char completetime[14]; /*absolute format*/	char intermediatime[14]; /*absolute format*/	unsigned int failreason; /*see spec*/	unsigned int origaddlen; /*1 byte;*/	Octstr* origadd; /*1 byte; */	char invoketime[14]; /*absolute format */}sm_statusreport_invoke;typedef struct sm_submit_result{ 	unsigned int smeresult;   /*0- ok, 1-reject for rg problem, 2-db is full or db crash  3-fail for smsc busy, 4- sm is not in db. 5- fail for already  there(smsc ref or {sme ref, msdnid */	unsigned char smscrefnum[4]; /* 4 byte int*/	char accepttime[14]; /*YYMMDDHHMMSSZZ*/} sm_submit_result;typedef struct sm_submit_invoke{	unsigned int msisdnlen; /*1 byte*/	Octstr* msisdn; /* string */	unsigned int smereftype; /* 1btype 1 key, 0 not key */	unsigned char smerefnum[4]; /* 4 byte integer */	unsigned int priority; /* 1 byte, 0 means high, 2normal */	unsigned int origaddlen; /* 1 byte; */	Octstr* origadd; /* in X25 it will b overwritten by NUA,			    if user login, it will home NUA */	unsigned int validperiodtype; /* 0-none, 1-absolute, 2-relative */	char validperiodabs[14]; 	unsigned int validperiodrela; /*1 byte ,usage see sema spec.*/	unsigned int DCS; /* 1 byte */	unsigned int statusreportrequest;     /* 1 byte, 0-failed(abondon), 1-expire, 2-delivered, 3-delete by sme,       4-delete by smsc operator 5 retry*/	unsigned int protocal; /*1 byte */	unsigned int replypath; /* 0 mean can not use sender smsc, 1 means can*/	unsigned int textsizeseptet; /*1byte, in gsm format, it's 7 bits*/	unsigned int textsizeoctect; /* 1 byte in 8 bits */	Octstr* shortmsg;          unsigned char smscrefnum[4];}sm_submit_invoke;typedef struct sm_deliver_result{ /* if ok, must return */	unsigned int smeresult; /* 0- ok, 1-reject for rg problem, 2-db is				   full or db crash*/} sm_deliver_result;typedef struct sm_deliver_invoke{	unsigned int destaddlen; /*1 byte*/	Octstr* destadd; /*string*/	unsigned char smscrefnum[4]; /*4 byte integer*/	unsigned int origaddlen; /*1 byte*/	Octstr* origadd; /* note, in X25 it will b overwritten by NUA,			    if user login, it will home NUA*/	unsigned int DCS; /*1 byte*/	unsigned int protocal; /*1 byte*/	unsigned int replypath; /* 0 mean can not use sender smsc, 1 means can*/	unsigned int textsizeseptet; /* 1byte, in gsm format, it's 7 bits */	unsigned int textsizeoctect; /* 1 byte in 8 bits */	Octstr* shortmsg;	char accepttime[14];	char invoketime[14];     /*note in X25 sublogical number is omit*/	}sm_deliver_invoke;/********************** unimplemted msg heretypedef struct sm_login_result{ 	unsigned int result; } sm_login_result;typedef struct sm_login{	unsigned int homenualen;	Octstr* homenua;	unsigned char pim[2]; 	unsigned int result;} sm_login;typedef struct sm_delete_invoke_result{	unsigned int result; } sm_delete_invoke_result;typedef struct sm_delete_invoke{	unsigned int smtype;	unsigned char smscrefnum[4];	unsigned char smerefnum[4]; 	unsigned int msisdnlen; 	Octstr* msisdn; 	unsigned int origaddlen; 	Octstr* origadd;}sm_delete_invoke;typedef struct sm_deleteall_invoke{	unsigned int msisdnlen;	Octstr* msisdn; 	unsigned int origaddlen; 	Octstr* origadd;	unsigned int nostatusreport;}sm_deleteall_invoke;typedef struct sm_replace_result{	unsigned int delete_result;	unsigned int add_result;	unsigned char smscrefnum[4];	char accepttime[14];} sm_replace_result;typedef struct sm_replace_invoke{	unsigned int smtype; 	unsigned char smscrefnum[4];	unsigned char smerefnum[4];	unsigned int msisdnlen;	Octstr* msisdn;	unsigned int new_smereftype;	unsigned char new_smerefnum[4];	unsigned int new_priority;	unsigned int new_origaddlen;	Octstr* new_origadd;	unsigned int new_validperiodtype;	unsigned char new_validperiodabs[14];	unsigned int new_validperiodrela;	unsigned int new_DCS;	unsigned int new_statusreportrequest;	unsigned int new_protocal;	unsigned int new_replypath;	unsigned int new_textsizechar;	unsigned int new_textsizebyte;	Octstr* new_shortmsg;}sm_replace_invoke;typedef struct 2K_ENQUIRE_INVOKE{	int smtype;	int smscrefnum;	int smerefnum;	int msisdnlen;	Octstrr* msisdn;	int origaddlen;	Octstr* origadd;	int enquiretype;}sm_enqire_invoke;typedef struct 2K_ENQUIRE_RESULT{	int result;	int enquiretype;	int status;	char[15] completetime;	int failreason;	int priority;	int origaddlen;	char* origadd;	char[15] accepttime;	char[15] exipretime;	int DCS;	int statusreportrequest;	int protocalid;	int replypath;	int textsizechar;	int textsizebyte;	char* shortmsg;}sm_enqire_result;other msg type ...*******************************//* function definition */static int sema_submit_result(SMSCenter*, sema_msg*, int);static int X28_open_data_link(char*);static int X28_reopen_data_link(int,char*);static int X28_close_send_link(int);static int X28_open_send_link(int,char*);static int X28_data_read(int, char*);static int X28_data_send(int, char*, int);static int X28_msg_pop(char *, char *);static int sema_msg_session_mt(SMSCenter*, sema_msg*);static int sema_msg_session_mo(SMSCenter*, char*);static sema_msg* sema_msg_new(void);static int sema_msg_free(sema_msg *msg);static sema_msglist* sema_msglist_new(void);static void sema_msglist_free(sema_msglist*);static int sema_msglist_push(sema_msglist*, sema_msg*);static int sema_msglist_pop(sema_msglist*, sema_msg**);/* static int sema_msgbuffer_pop(Octstr *, Octstr **); */static int sema_decode_msg(sema_msg**, char*);static int sema_encode_msg(sema_msg*, char*);static int line_append_hex_IA5(Octstr* , unsigned char*, int);static int line_scan_IA5_hex(unsigned char*, int, unsigned char*);static int line_scan_hex_GSM7(unsigned char*,int,int,unsigned char*);static int internal_char_IA5_to_hex(unsigned char *, unsigned char *);static int internal_char_hex_to_IA5(unsigned char, unsigned char *);static unsigned char internal_char_hex_to_gsm(unsigned char from);static int unpack_continous_byte(unsigned char, int *, int * , int *);static unsigned char pack_continous_byte(int, int, int);static void increment_counter(void);#endif

⌨️ 快捷键说明

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