亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smsc_smpp.c

?? gnu的專業網關smpp協議支持源代碼。
?? C
?? 第 1 頁 / 共 4 頁
字號:
/*  * smsc_smpp.c - SMPP v3.3 and v3.4 implementation  *  * Lars Wirzenius  */   /* XXX check SMSCConn conformance */ /* XXX UDH reception */ /* XXX check UDH sending fields esm_class and data_coding from GSM specs */ /* XXX charset conversions on incoming messages (didn't work earlier,         either) */ /* XXX numbering plans and type of number: check spec */   #include "gwlib/gwlib.h" #include "msg.h" #include "smsc_p.h" #include "smpp_pdu.h" #include "smscconn_p.h" #include "bb_smscconn_cb.h" #include "sms.h" #include "dlr.h"  /*  * Select these based on whether you want to dump SMPP PDUs as they are   * sent and received or not. Not dumping should be the default in at least  * stable releases.  */ #define DEBUG 1#ifndef DEBUG /* This version doesn't dump. */ static void dump_pdu(const char *msg, Octstr *id, SMPP_PDU *pdu) { } #else /* This version does dump. */ static void dump_pdu(const char *msg, Octstr *id, SMPP_PDU *pdu) {     debug("bb.sms.smpp", 0, "SMPP[%s]: %s",           octstr_get_cstr(id), msg);     smpp_pdu_dump(pdu); } #endif   /*   * Some defaults. */  #define SMPP_ENQUIRE_LINK_INTERVAL  30.0 #define SMPP_MAX_PENDING_SUBMITS    10 #define SMPP_RECONNECT_DELAY	    10.0 #define SMPP_DEFAULT_VERSION        0x34#define SMPP_DEFAULT_PRIORITY       0#define SMPP_THROTTLING_SLEEP_TIME  15/* * Some SMPP error messages we come across */enum {    SMPP_ESME_RMSGQFUL   = 0x00000014,    SMPP_ESME_RTHROTTLED = 0x00000058} SMPP_ERROR_MESSAGES;  /***********************************************************************  * Implementation of the actual SMPP protocol: reading and writing  * PDUs in the correct order.  */   typedef struct {     long transmitter;     long receiver;     List *msgs_to_send;     Dict *sent_msgs;     List *received_msgs;     Counter *message_id_counter;     Octstr *host;     Octstr *system_type;     Octstr *username;     Octstr *password;     Octstr *address_range;     Octstr *our_host;     Octstr *my_number;     int source_addr_ton;     int source_addr_npi;     int dest_addr_ton;     int dest_addr_npi;    int alt_dcs;    int transmit_port;     int receive_port;     int quitting;     long enquire_link_interval;    long max_pending_submits;    long reconnect_delay;    int version;    int priority;       /* set default priority for messages */        time_t throttling_err_time;    int smpp_msg_id_type;  /* msg id in C string, hex or decimal */    int autodetect_addr;    SMSCConn *conn; } SMPP;   static SMPP *smpp_create(SMSCConn *conn, Octstr *host, int transmit_port,      	    	    	 int receive_port, Octstr *system_type,                           Octstr *username, Octstr *password,     	    	    	 Octstr *address_range, Octstr *our_host,                           int source_addr_ton, int source_addr_npi,                           int dest_addr_ton, int dest_addr_npi,                          int alt_dcs, int enquire_link_interval,                          int max_pending_submits, int reconnect_delay,                         int version, int priority, Octstr *my_number,                         int smpp_msg_id_type, int autodetect_addr) {     SMPP *smpp;          smpp = gw_malloc(sizeof(*smpp));     smpp->transmitter = -1;     smpp->receiver = -1;     smpp->msgs_to_send = list_create();     smpp->sent_msgs = dict_create(16, NULL);     list_add_producer(smpp->msgs_to_send);     smpp->received_msgs = list_create();     smpp->message_id_counter = counter_create();     smpp->host = octstr_duplicate(host);     smpp->system_type = octstr_duplicate(system_type);     smpp->username = octstr_duplicate(username);     smpp->password = octstr_duplicate(password);     smpp->address_range = octstr_duplicate(address_range);     smpp->source_addr_ton = source_addr_ton;     smpp->source_addr_npi = source_addr_npi;     smpp->dest_addr_ton = dest_addr_ton;     smpp->dest_addr_npi = dest_addr_npi;     smpp->alt_dcs = alt_dcs;    smpp->our_host = octstr_duplicate(our_host);     smpp->my_number = octstr_duplicate(my_number);     smpp->transmit_port = transmit_port;     smpp->receive_port = receive_port;     smpp->enquire_link_interval = enquire_link_interval;    smpp->max_pending_submits = max_pending_submits;     smpp->reconnect_delay = reconnect_delay;    smpp->quitting = 0;     smpp->version = version;    smpp->priority = priority;    smpp->conn = conn;     smpp->throttling_err_time = 0;     smpp->smpp_msg_id_type = smpp_msg_id_type;        smpp->autodetect_addr = autodetect_addr;     return smpp; }   static void smpp_destroy(SMPP *smpp) {     if (smpp != NULL) { 	list_destroy(smpp->msgs_to_send, msg_destroy_item); 	dict_destroy(smpp->sent_msgs); 	list_destroy(smpp->received_msgs, msg_destroy_item); 	counter_destroy(smpp->message_id_counter); 	octstr_destroy(smpp->host); 	octstr_destroy(smpp->username); 	octstr_destroy(smpp->password); 	octstr_destroy(smpp->system_type); 	octstr_destroy(smpp->address_range); 	octstr_destroy(smpp->our_host); 	gw_free(smpp);     } }   /*  * Try to read an SMPP PDU from a Connection. Return -1 for error (caller  * should close the connection), 0 for no PDU to ready yet, or 1 for PDU  * read and unpacked. Return a pointer to the PDU in `*pdu'. Use `*len'  * to store the length of the PDU to read (it may be possible to read the  * length, but not the rest of the PDU - we need to remember the lenght  * for the next call). `*len' should be zero at the first call.  */ static int read_pdu(SMPP *smpp, Connection *conn, long *len, SMPP_PDU **pdu) {     Octstr *os;      if (*len == 0) {         *len = smpp_pdu_read_len(conn);         if (*len == -1) {             error(0, "SMPP[%s]: Server sent garbage, ignored.",                  octstr_get_cstr(smpp->conn->id));             return -1;         } else if (*len == 0) {             if (conn_eof(conn) || conn_read_error(conn))                 return -1;             return 0;         }     }          os = smpp_pdu_read_data(conn, *len);     if (os == NULL) {         if (conn_eof(conn) || conn_read_error(conn))             return -1;         return 0;     }     *len = 0;          *pdu = smpp_pdu_unpack(os);     if (*pdu == NULL) {         error(0, "SMPP[%s]: PDU unpacking failed.",              octstr_get_cstr(smpp->conn->id));         debug("bb.sms.smpp", 0, "SMPP[%s]: Failed PDU follows.",              octstr_get_cstr(smpp->conn->id));         octstr_dump(os, 0);         octstr_destroy(os);         return -1;     }          octstr_destroy(os);     return 1; }   static Msg *pdu_to_msg(SMPP_PDU *pdu) {     Msg *msg;      gw_assert(pdu->type == deliver_sm);          msg = msg_create(sms);     msg->sms.sender = pdu->u.deliver_sm.source_addr;     pdu->u.deliver_sm.source_addr = NULL;     msg->sms.receiver = pdu->u.deliver_sm.destination_addr;     pdu->u.deliver_sm.destination_addr = NULL;     msg->sms.msgdata = pdu->u.deliver_sm.short_message;     pdu->u.deliver_sm.short_message = NULL;     charset_gsm_to_latin1(msg->sms.msgdata);     msg->sms.pid = pdu->u.deliver_sm.protocol_id;     dcs_to_fields(&msg, pdu->u.deliver_sm.data_coding);      return msg; }   static long smpp_status_to_smscconn_failure_reason(long status) {     switch(status) {        case SMPP_ESME_RMSGQFUL:            return SMSCCONN_FAILED_TEMPORARILY;            break;        case SMPP_ESME_RTHROTTLED:            return SMSCCONN_FAILED_TEMPORARILY;             break;        default:            return SMSCCONN_FAILED_REJECTED;     }}   static SMPP_PDU *msg_to_pdu(SMPP *smpp, Msg *msg) {     SMPP_PDU *pdu;     Octstr *buffer;    Octstr *relation_UTC_time = NULL;    struct tm gmtime, localtime, tm;    int gwqdiff;    pdu = smpp_pdu_create(submit_sm,      	    	    	  counter_increase(smpp->message_id_counter));     	    	        pdu->u.submit_sm.source_addr = octstr_duplicate(msg->sms.sender);     pdu->u.submit_sm.destination_addr = octstr_duplicate(msg->sms.receiver);       /* Check for manual override of source ton and npi values */     if(smpp->source_addr_ton > -1 && smpp->source_addr_npi > -1) {         pdu->u.submit_sm.source_addr_ton = smpp->source_addr_ton;         pdu->u.submit_sm.source_addr_npi = smpp->source_addr_npi;         debug("bb.sms.smpp", 0, "SMPP[%s]: Manually forced source addr ton = %d, source add npi = %d",               octstr_get_cstr(smpp->conn->id), smpp->source_addr_ton,               smpp->source_addr_npi);     } else {         /* setup default values */         pdu->u.submit_sm.source_addr_ton = GSM_ADDR_TON_NATIONAL; /* national */         pdu->u.submit_sm.source_addr_npi = GSM_ADDR_NPI_E164; /* ISDN number plan */     }    if (smpp->autodetect_addr) {        /* lets see if its international or alphanumeric sender */         if (octstr_get_char(pdu->u.submit_sm.source_addr,0) == '+') {             if (!octstr_check_range(pdu->u.submit_sm.source_addr, 1, 256, gw_isdigit)) {                 pdu->u.submit_sm.source_addr_ton = GSM_ADDR_TON_ALPHANUMERIC; /* alphanum */                 pdu->u.submit_sm.source_addr_npi = GSM_ADDR_NPI_UNKNOWN;    /* short code */             } else {                /* numeric sender address with + in front -> international (remove the +) */                octstr_delete(pdu->u.submit_sm.source_addr, 0, 1);                pdu->u.submit_sm.source_addr_ton = GSM_ADDR_TON_INTERNATIONAL;     	    }         } else {             if (!octstr_check_range(pdu->u.submit_sm.source_addr,0, 256, gw_isdigit)) {                 pdu->u.submit_sm.source_addr_ton = GSM_ADDR_TON_ALPHANUMERIC;                 pdu->u.submit_sm.source_addr_npi = GSM_ADDR_NPI_UNKNOWN;             }         }     }      /* Check for manual override of destination ton and npi values */     if (smpp->dest_addr_ton > -1 && smpp->dest_addr_npi > -1) {         pdu->u.submit_sm.dest_addr_ton = smpp->dest_addr_ton;         pdu->u.submit_sm.dest_addr_npi = smpp->dest_addr_npi;         debug("bb.sms.smpp", 0, "SMPP[%s]: Manually forced dest addr ton = %d, source add npi = %d",               octstr_get_cstr(smpp->conn->id), smpp->dest_addr_ton,               smpp->dest_addr_npi);     } else {         pdu->u.submit_sm.dest_addr_ton = GSM_ADDR_TON_NATIONAL; /* national */         pdu->u.submit_sm.dest_addr_npi = GSM_ADDR_NPI_E164; /* ISDN number plan */     }      /*      * if its a international number starting with +, lets remove the      * '+' and set number type to international instead       */     if (octstr_get_char(pdu->u.submit_sm.destination_addr,0) == '+') { 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一二三四| 日本一区二区不卡视频| 国产亚洲va综合人人澡精品 | 亚洲成人777| 风间由美一区二区三区在线观看 | 日韩免费观看高清完整版| 亚洲图片另类小说| 国产成人av一区二区三区在线观看| 欧美综合视频在线观看| 国产亚洲综合av| 激情综合色播激情啊| 欧美欧美午夜aⅴ在线观看| 亚洲图片激情小说| 不卡一区二区三区四区| 久久久久久久综合日本| 免费成人在线影院| 69堂国产成人免费视频| 一区二区三区**美女毛片| 91网站黄www| 最新欧美精品一区二区三区| 国产成人av一区二区三区在线| 日韩午夜中文字幕| 美女网站在线免费欧美精品| 69堂成人精品免费视频| 日韩精品一级二级| 日韩一区二区不卡| 激情综合五月天| 精品国产成人系列| 老司机精品视频导航| 日韩欧美成人激情| 国内精品久久久久影院一蜜桃| 欧美一区二区三区日韩| 蜜臀精品久久久久久蜜臀| 欧美不卡123| 国产精品自在欧美一区| 国产调教视频一区| 成人精品视频一区二区三区 | 久久久久久亚洲综合影院红桃| 国产精品资源在线| 中文字幕一区二区在线观看| 成人av在线资源网站| 《视频一区视频二区| 在线日韩一区二区| 视频一区在线播放| 久久久久久毛片| 色综合久久久久综合体| 亚洲成人免费av| 欧美成va人片在线观看| 不卡一区中文字幕| 亚洲午夜一二三区视频| 日韩欧美二区三区| 99久久er热在这里只有精品15 | 欧美日韩国产高清一区二区三区| 亚洲高清免费观看高清完整版在线观看| 欧美日韩一区二区欧美激情| 麻豆精品精品国产自在97香蕉| 久久色中文字幕| aaa欧美色吧激情视频| 亚洲电影一区二区| 久久久综合视频| 在线免费不卡视频| 裸体歌舞表演一区二区| 国产精品无人区| 欧美老人xxxx18| 国产电影一区二区三区| 亚洲一区二区三区中文字幕在线 | 一区二区三区四区中文字幕| 91精品国产综合久久蜜臀| 国产成人av电影| 日韩精品午夜视频| 成人欧美一区二区三区黑人麻豆| 欧美日韩亚洲综合在线| 国产99久久久国产精品| 性做久久久久久久久| 国产精品日韩精品欧美在线| 日韩欧美国产不卡| 91成人国产精品| 成人午夜av在线| 蜜臀久久99精品久久久画质超高清| 国产精品乱码一区二三区小蝌蚪| 91麻豆精品国产综合久久久久久 | 免费精品99久久国产综合精品| 国产欧美精品日韩区二区麻豆天美| 欧美性videosxxxxx| 国产成人午夜视频| 蜜芽一区二区三区| 亚洲bt欧美bt精品777| 国产精品欧美久久久久无广告| 欧美成人高清电影在线| 欧美人狂配大交3d怪物一区| 色综合夜色一区| 福利一区在线观看| 国产精品自拍一区| 精彩视频一区二区三区| 日韩制服丝袜先锋影音| 亚洲综合激情另类小说区| 最新欧美精品一区二区三区| 国产午夜亚洲精品不卡 | 欧美区视频在线观看| 91浏览器入口在线观看| 99精品久久只有精品| 国产成人午夜精品影院观看视频 | 亚洲午夜精品17c| 亚洲色欲色欲www| 自拍偷拍国产亚洲| 亚洲国产精品高清| 国产精品久久久久久久蜜臀| 国产欧美综合在线观看第十页 | 亚洲线精品一区二区三区八戒| 亚洲欧洲美洲综合色网| 中文字幕在线不卡视频| 综合亚洲深深色噜噜狠狠网站| 中文字幕免费不卡| 最新欧美精品一区二区三区| 亚洲男帅同性gay1069| 亚洲女人的天堂| 亚洲午夜一区二区三区| 日韩精品成人一区二区在线| 免费成人在线网站| 久久国产夜色精品鲁鲁99| 久久99国产精品免费网站| 国产乱码字幕精品高清av | 18涩涩午夜精品.www| 亚洲免费观看在线视频| 亚洲超碰97人人做人人爱| 午夜视频在线观看一区二区三区| 午夜免费欧美电影| 另类调教123区| 国产高清精品网站| 91丨porny丨最新| 欧美亚洲精品一区| 精品少妇一区二区| 国产精品天美传媒| 亚洲一区二区三区四区不卡| 视频在线观看91| 国产精品一区二区果冻传媒| 成人av网站在线| 欧美色男人天堂| 2023国产精品视频| 综合激情网...| 日本系列欧美系列| 北条麻妃一区二区三区| 欧美色窝79yyyycom| 欧美va天堂va视频va在线| 欧美高清在线视频| 爽好久久久欧美精品| 国产精品白丝jk黑袜喷水| 欧洲色大大久久| 久久众筹精品私拍模特| 亚洲欧美日韩在线| 国模无码大尺度一区二区三区| 99视频一区二区| 欧美一区二区三区喷汁尤物| 中文字幕成人在线观看| 日本不卡中文字幕| 成人av中文字幕| 精品美女在线播放| 亚洲一区二区三区激情| 国产91精品在线观看| 欧美精品在线观看一区二区| 国产精品久久久久四虎| 久久成人免费日本黄色| 91老司机福利 在线| 国产日韩欧美在线一区| 日韩va亚洲va欧美va久久| 成人久久久精品乱码一区二区三区| 欧美老女人第四色| 亚洲欧美另类在线| 国产91色综合久久免费分享| 日韩欧美精品在线| 午夜欧美视频在线观看| 色综合久久66| 中文字幕第一区综合| 国产一区二区三区不卡在线观看| 在线视频国内一区二区| 成人欧美一区二区三区黑人麻豆| 蜜桃av一区二区| 欧美乱妇20p| 亚洲电影第三页| 色伊人久久综合中文字幕| 亚洲国产精品传媒在线观看| 国产一区二区三区在线观看精品| 3atv在线一区二区三区| 亚洲国产日日夜夜| 欧美调教femdomvk| 亚洲一卡二卡三卡四卡| 日本韩国视频一区二区| 亚洲色图欧洲色图| 色综合久久中文综合久久97| 亚洲欧洲www| 99国产精品久久久久| 国产精品福利av| 99精品国产91久久久久久| 国产精品久久久久久久久免费丝袜| 国产成人免费在线观看| 中文字幕成人在线观看| 97精品国产露脸对白| 亚洲精品成人在线| 91精品1区2区| 无吗不卡中文字幕|