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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? emimsg.c

?? gnu的專業(yè)網(wǎng)關(guān)smpp協(xié)議支持源代碼。
?? C
字號(hào):
/* * emimsg.c * * Functions for working with EMI messages * Uoti Urpala 2001 */#include "emimsg.h"/* Return an error string corresponding to the number. */static char *emi_strerror(int errnum){    switch (errnum) {    case  1: return "Checksum error";    case  2: return "Syntax error";    case  3: return "Operation not supported by system";    case  4: return "Operation not allowed";    case  5: return "Call barring active";    case  6: return "AdC invalid";    case  7: return "Authentication failure";    case  8: return "Legitimisation code for all calls, failure";    case  9: return "GA not valid";    case 10: return "Repetition not allowed";    case 11: return "Legitimisation code for repetition, failure";    case 12: return "Priority call not allowed";    case 13: return "Legitimisation code for priority call, failure";    case 14: return "Urgent message not allowed";    case 15: return "Legitimisation code for urgent message, failure";    case 16: return "Reverse charging not allowed";    case 17: return "Legitimisation code for reverse charging, failure";    case 18: return "Deferred delivery not allowed";    case 19: return "New AC not valid";    case 20: return "New legitimisation code not valid";    case 21: return "Standard text not valid";    case 22: return "Time period not valid";    case 23: return "Message type not supported by system";    case 24: return "Message too long";    case 25: return "Requested standard text not valid";    case 26: return "Message type not valid for the pager type";    case 27: return "Message not found in smsc";    case 30: return "Subscriber hang-up";    case 31: return "Fax group not supported";    case 32: return "Fax message type not supported";    case 33: return "Address already in list (60 series)";    case 34: return "Address not in list (60 series)";    case 35: return "List full, cannot add address to list (60 series)";    case 36: return "RPID already in use";    case 37: return "Delivery in progress";    case 38: return "Message forwarded";    default: return "!UNRECOGNIZED ERROR CODE!";    }}static int field_count_op(int ot, Octstr *whoami){    switch (ot) {    case 01:	return SZ01;    case 31:	return 2;    case 51:    case 52:    case 53:	return SZ50;    case 60:	return SZ60;    default:	error(0, "EMI2[%s]: Unsupported EMI operation request type %d", 	      octstr_get_cstr(whoami), ot);	return -1;    }}static int field_count_reply(int ot, int posit, Octstr *whoami){    switch(ot) {    case 01:	return posit ? 2 : 3;    case 31:	return posit ? 2 : 3;    case 51:    case 52:    case 53:	return 3;    case 60:	return posit ? 2 : 3;    default:	error(0, "EMI2[%s]: Unsupported EMI operation reply type %d", 	      octstr_get_cstr(whoami), ot);	return -1;    }}static struct emimsg *emimsg_create_withlen(int len){    struct emimsg *ret;    ret = gw_malloc(sizeof(struct emimsg));    ret->fields = gw_malloc(len * sizeof(Octstr *));    ret->num_fields = len;    while (--len >= 0)	ret->fields[len] = NULL;    return ret;}struct emimsg *emimsg_create_op(int ot, int trn, Octstr *whoami){    int len;    struct emimsg *ret;    len = field_count_op(ot, whoami);    if (len < 0)	return NULL;    ret = emimsg_create_withlen(len);    ret->ot = ot;    ret->or = 'O';    ret->trn = trn;    return ret;}static struct emimsg *emimsg_create_reply_s(int ot, int trn, int positive,		Octstr *whoami){    int len;    struct emimsg *ret;    len = field_count_reply(ot, positive, whoami);    if (len < 0)	return NULL;    ret = emimsg_create_withlen(len);    ret->ot = ot;    ret->or = 'R';    ret->trn = trn;    return ret;}struct emimsg *emimsg_create_reply(int ot, int trn, int positive, 		Octstr *whoami){    struct emimsg *ret;    ret = emimsg_create_reply_s(ot, trn, positive, whoami);    if (ret) {	if (positive)	    ret->fields[0] = octstr_create("A");	else	    ret->fields[0] = octstr_create("N");    }    return ret;}void emimsg_destroy(struct emimsg *emimsg){    int len;    len = emimsg->num_fields;    while (--len >= 0)	octstr_destroy(emimsg->fields[len]);  /* octstr_destroy(NULL) is ok */    gw_free(emimsg->fields);    gw_free(emimsg);}/* The argument can be either the whole message (with the stx/etx start/end   characters), or miss the last 3 characters (checksum digits and etx) */static int calculate_checksum(Octstr *message){    int end, i, checksum;    end = octstr_len(message);    if (octstr_get_char(message, end - 1) == 3)  /* etx, whole message */	end -= 3;    checksum = 0;    for (i = 1; i < end; i++)	checksum += octstr_get_char(message, i);    return checksum & 0xff;}static Octstr *emimsg_tostring(struct emimsg *emimsg){    int i, checksum;    Octstr *result, *data;    char *hexits = "0123456789ABCDEF";    data = octstr_create("");    for (i = 0; i < emimsg->num_fields; i++) {	if (emimsg->fields[i])	    octstr_append(data, emimsg->fields[i]);	octstr_append_char(data, '/');    }    result = octstr_format("\02%02d/%05d/%c/%02d/%S", emimsg->trn,		octstr_len(data) + 16, emimsg->or, emimsg->ot, data);    checksum = calculate_checksum(result);    octstr_append_char(result, hexits[checksum >> 4 & 15]);    octstr_append_char(result, hexits[checksum & 15]);    octstr_append_char(result, 3);    octstr_destroy(data);    return result;}/* Doesn't check that the string is strictly according to format */struct emimsg *get_fields(Octstr *message, Octstr *whoami){    long trn, len, ot, checksum; /* because of Octstr_parse_long... */    char or, posit;    long fieldno, pos, pos2;    struct emimsg *result = NULL;    debug("smsc.emi2", 0, "EMI2[%s]: emi2 parsing packet: <%s>",	  octstr_get_cstr(whoami), octstr_get_cstr(message));    if (octstr_get_char(message, 0) != 2 ||	octstr_get_char(message, octstr_len(message) - 1) != 3)	goto error;    if (octstr_parse_long(&trn, message, 1, 10) != 3)	goto error;    if (octstr_parse_long(&len, message, 4, 10) != 9)	goto error;    if (octstr_len(message) != len + 2)     /* +2 for start/end markers */	goto error;    if ( (or = octstr_get_char(message, 10)) != 'O' && or != 'R')	goto error;    if (octstr_parse_long(&ot, message, 12, 10) != 14)	goto error;    if (or == 'O')	result = emimsg_create_op(ot, trn, whoami);    else {	posit = octstr_get_char(message, 15);	if (posit == 'A')	    result = emimsg_create_reply_s(ot, trn, 1, whoami);	else if (posit == 'N')	    result = emimsg_create_reply_s(ot, trn, 0, whoami);	else	    goto error;    }    if (result == NULL)	goto error;    pos2 = 14;    for (fieldno = 0; fieldno < result->num_fields; fieldno++) {	pos = pos2 + 1;	if ( (pos2 = octstr_search_char(message, '/', pos)) == -1)	    goto error;	if (pos2 > pos)	    result->fields[fieldno] = octstr_copy(message, pos, pos2 - pos);    }    if (octstr_search_char(message, '/', pos2 + 1) != -1) {	int extrafields = 0;	pos = pos2;	while ((pos = octstr_search_char(message, '/', pos + 1)) != -1) {	    extrafields++;	    pos2 = pos;	}	/* The extra fields are ignored */	warning(0, "get_fields: EMI message of type %d/%c has %d more fields "		"than expected.", result->ot, result->or, extrafields);    }    if (octstr_parse_long(&checksum, message, pos2 + 1, 16) !=	octstr_len(message) - 1 || checksum != calculate_checksum(message))	goto error;    if (result->or == 'R' && octstr_get_char(result->fields[0], 0) == 'N') {	long errcode;	if (!result->fields[1] ||	    octstr_parse_long(&errcode, result->fields[1], 0, 10) != 2)	    goto error;	error(0, "EMI2[%s]: Got negative ack. op:%d, trn:%d, error:%ld (%s), message:%s",	      octstr_get_cstr(whoami),	      result->ot, result->trn, errcode, emi_strerror(errcode),	      result->fields[2] ? octstr_get_cstr(result->fields[2]) : "");    }    return result;error:    error(0, "EMI2[%s]: Invalid EMI packet: %s", octstr_get_cstr(whoami),	  octstr_get_cstr(message));    if (result)	emimsg_destroy(result);    return NULL;}int emimsg_send(Connection *conn, struct emimsg *emimsg, Octstr *whoami){    Octstr *string;    string = emimsg_tostring(emimsg);    if (!string) {	error(0, "EMI2[%s]: emimsg_send: conversion to string failed",	      octstr_get_cstr(whoami));	return -1;    }    if (emimsg->ot == 60)	debug("smsc.emi2", 0, "EMI2[%s]: Sending operation type 60, message with "	      "password not shown in log file.", octstr_get_cstr(whoami));    else	debug("smsc.emi2", 0, "EMI2[%s]: emi2 sending packet: <%s>",	      octstr_get_cstr(whoami), octstr_get_cstr(string));    if (conn_write(conn, string) == -1) {	octstr_destroy(string);	error(0, "EMI2[%s]: emimsg_send: write failed",	      octstr_get_cstr(whoami));	return -1;    }    octstr_destroy(string);    return 1;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图清纯唯美| 另类欧美日韩国产在线| 欧美一区三区四区| 成人aaaa免费全部观看| 日本三级韩国三级欧美三级| 国产精品三级电影| 91精品国产综合久久久久久久久久 | 丁香网亚洲国际| 日日摸夜夜添夜夜添国产精品| 日本一区二区三区国色天香| 欧美美女直播网站| 99久久伊人久久99| 国内成人免费视频| 日本美女一区二区三区| 亚洲精品国产无套在线观| 久久久久久久综合日本| 欧美精品丝袜久久久中文字幕| gogogo免费视频观看亚洲一| 狠狠色伊人亚洲综合成人| 视频一区在线播放| 一区二区三区四区乱视频| 国产精品系列在线| 久久综合av免费| 91精品国产综合久久婷婷香蕉| 欧美系列在线观看| 一本久久a久久精品亚洲| 成人一区二区三区| 国精品**一区二区三区在线蜜桃| 日韩电影免费在线观看网站| 亚洲自拍偷拍av| 伊人开心综合网| 最新不卡av在线| 中文字幕一区二区三区在线播放| 久久久久久久久久久久久久久99| 日韩一卡二卡三卡| 欧美一级专区免费大片| 91麻豆精品国产| 欧美精品在线一区二区| 欧美巨大另类极品videosbest| 欧美日韩一区二区三区在线| 欧美三片在线视频观看| 欧美三级电影精品| 51久久夜色精品国产麻豆| 欧美顶级少妇做爰| 91精品国产91热久久久做人人| 在线不卡a资源高清| 6080午夜不卡| 欧美一级理论片| 26uuu另类欧美| 国产亚洲欧美在线| 国产精品你懂的在线| 国产精品青草综合久久久久99| 国产精品九色蝌蚪自拍| 亚洲欧洲国产专区| 亚洲影视资源网| 偷拍亚洲欧洲综合| 美女被吸乳得到大胸91| 国产真实精品久久二三区| 成人午夜电影小说| 一本一道综合狠狠老| 欧美日韩一级视频| 日韩欧美一区电影| 国产精品久久三| 亚洲成av人影院在线观看网| 欧美aaaaaa午夜精品| 国产高清无密码一区二区三区| 99精品在线观看视频| 欧美午夜影院一区| 日韩欧美123| 国产精品久久久久毛片软件| 亚洲制服欧美中文字幕中文字幕| 日韩一区欧美二区| 国产98色在线|日韩| 91蝌蚪porny| 欧美精选午夜久久久乱码6080| 久久蜜桃一区二区| 国产精品精品国产色婷婷| 午夜av区久久| 懂色一区二区三区免费观看| 在线免费精品视频| 精品国产免费一区二区三区四区| 国产精品久久久久久久蜜臀| 天天影视涩香欲综合网| 国产老肥熟一区二区三区| 色综合久久综合网欧美综合网| 欧美一区二区三区在| 国产精品久久久久久久蜜臀| 日本美女一区二区| 91丨porny丨中文| 日韩欧美国产午夜精品| 亚洲欧美偷拍另类a∨色屁股| 日本欧美在线观看| 91毛片在线观看| 久久久久国产精品厨房| 天堂成人国产精品一区| 成人av网站在线观看| 91精品国产91久久久久久一区二区 | 色综合一区二区三区| 欧美一二三区在线观看| 亚洲欧洲中文日韩久久av乱码| 精品中文字幕一区二区| 欧美亚洲国产怡红院影院| 久久精品视频一区| 日韩高清不卡一区二区三区| 99re视频这里只有精品| 亚洲精品一区二区三区在线观看| 亚洲一区在线看| www.久久久久久久久| 精品欧美一区二区在线观看| 亚洲国产三级在线| 91日韩在线专区| 久久精品人人爽人人爽| 奇米在线7777在线精品 | 91捆绑美女网站| 欧美激情在线一区二区| 精品一区二区三区免费观看| 欧美日韩亚洲国产综合| 亚洲免费看黄网站| 成人免费高清视频| 欧美成人精品福利| 日本不卡免费在线视频| 欧美日韩你懂得| 一区二区三区四区在线免费观看 | 亚洲美女精品一区| 成人精品在线视频观看| 国产嫩草影院久久久久| 国产精选一区二区三区| 精品黑人一区二区三区久久| 日韩国产高清在线| 欧美日韩免费观看一区三区| 亚洲电影一区二区| 欧美日韩精品免费观看视频| 亚洲国产日日夜夜| 欧美日本在线播放| 午夜婷婷国产麻豆精品| 欧美日韩精品三区| 五月天视频一区| 91精品国产综合久久精品app| 亚洲国产成人av网| 欧美日韩一二区| 日本 国产 欧美色综合| 日韩午夜电影av| 精品系列免费在线观看| 久久香蕉国产线看观看99| 国产又黄又大久久| 国产欧美日韩视频在线观看| 成人午夜又粗又硬又大| 国产精品免费aⅴ片在线观看| 不卡大黄网站免费看| 中文字幕制服丝袜一区二区三区| www.性欧美| 亚洲图片欧美视频| 欧美一区二区在线播放| 久久精品国产一区二区三区免费看 | 欧美国产成人在线| 97国产一区二区| 洋洋av久久久久久久一区| 欧美日韩小视频| 麻豆精品一区二区av白丝在线| 精品国产3级a| 91丨porny丨中文| 日韩精品成人一区二区三区| 精品国产3级a| 91丝袜美腿高跟国产极品老师| 综合av第一页| 337p亚洲精品色噜噜狠狠| 韩国在线一区二区| 欧美激情中文不卡| 欧美三区免费完整视频在线观看| 美女免费视频一区| 国产精品传媒视频| 欧美丰满高潮xxxx喷水动漫| 国产一区二区导航在线播放| 亚洲免费观看高清在线观看| 69p69国产精品| 成人性视频网站| 亚洲成在人线在线播放| 久久天天做天天爱综合色| 91丝袜美腿高跟国产极品老师 | 99re热视频这里只精品| 亚洲国产精品久久久久婷婷884 | 99精品一区二区三区| 日韩国产精品久久久久久亚洲| 欧美国产1区2区| 91精品国产一区二区三区蜜臀| 国产精品18久久久久| 亚洲电影一级片| 国产精品久久一卡二卡| 日韩一二三区视频| 91免费国产在线| 韩国一区二区视频| 亚洲v精品v日韩v欧美v专区| 欧美韩国日本不卡| 日韩精品中文字幕在线一区| 91免费国产在线观看| 国产精品888| 日产精品久久久久久久性色| 国产精品进线69影院| 精品国产91久久久久久久妲己| 欧美日韩亚洲综合|