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

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

?? smsc_ois.c

?? 主要包括sms網關和wap網關實現說明和源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
    /* check the (initial) header and trailer */    buflen = strlen(str) - 1;    if (buflen < 7 || str[0] != 'M' || (str[1] & 0x50) != 0x50	|| str[buflen] != EOL) {	goto error;    }    count = str[1] & 0x0f;    while (--count >= 0)    {	/* check the additional header */	sprintf(buffer, "%c%c%c%.4s",		EOL,		'M',                      /* deliver sm invoke */		(char)(0x60|count),       /* ia5 encoding, additional part */		&str[2]);	if (strstr(str, buffer) == NULL) {	    goto error;	}    }    return 0;     error:    return -1;}static int ois_adjust_destination_address(Msg *msg, const char *raw){    int len;    SAY(3, "ois_adjust_destination_address");    len = raw[0] & 0xff;    msg->sms.receiver = octstr_create_from_data(&raw[1+2], len-2);    return 1 + len;}static int ois_ignore_smsc_reference_number(const char *raw){    int value;    SAY(3, "ois_ignore_smsc_reference_number");    value = raw[3] & 0xff;    value <<= 8;    value |= raw[2] & 0xff;    value <<= 8;    value |= raw[1] & 0xff;    value <<= 8;    value |= raw[0] & 0xff;    return 4;}static int ois_adjust_originating_address(Msg *msg, const char *raw){    int len;    SAY(3, "ois_adjust_originating_address");    len = raw[0] & 0xff;    msg->sms.sender = octstr_create_from_data(&raw[1+2], len-2);    return 1 + len;}static int ois_adjust_data_coding_scheme(Msg *msg, const char *raw){    SAY(3, "ois_adjust_data_coding_scheme");    /* we're using this variable temporarily:      * ois_adjust_sm_text will set the correct value */    msg->sms.coding = (raw[0] & 0xff) + 1;    return 1;}static int ois_ignore_protocol_id(const char *raw){    int value;    SAY(3, "ois_ignore_protocol_id");    value = raw[0] & 0xff;    return 1;}static int ois_adjust_additional_information(Msg *msg, const char *raw){    SAY(3, "ois_adjust_additional_information");    /* we're using this variable temporarily:      * ois_adjust_sm_text will set the correct value */    msg->sms.mclass = raw[0] & 0xff;    return 1;}static int ois_adjust_sm_text(Msg *msg, const char *raw){    int msglen7, msglen8;    char buffer[BUFLEN+1];    SAY(3, "ois_adjust_sm_text");    /* calculate lengths */    msglen7 = raw[0] & 0xff;    msglen8 = raw[1] & 0xff;    /* copy text, note: flag contains temporarily the raw type description */    switch ((msg->sms.coding - 1) & 0xff) {     case 0x00: /* gsm7 */	ois_expand_gsm7(buffer, &raw[2], msglen7);	ois_convert_to_iso88591(buffer, msglen7);	if (msg->sms.mclass & 0x02) { /* XXX mclass temporarily */	    msg->sms.msgdata = octstr_create("");	    msg->sms.udhdata = octstr_create_from_data(buffer, msglen7);	} else {	    msg->sms.msgdata = octstr_create_from_data(buffer, msglen7);	    msg->sms.udhdata = octstr_create("");	}	msg->sms.coding = DC_7BIT;	break;    case 0x0f: /* ia5 */	memcpy(buffer, &raw[2], msglen8);	ois_convert_to_iso88591(buffer, msglen8);	if (msg->sms.mclass & 0x02) { /* XXX mclass temporarily */	    msg->sms.msgdata = octstr_create("");	    msg->sms.udhdata = octstr_create_from_data(buffer, msglen8);	} else {	    msg->sms.msgdata = octstr_create_from_data(buffer, msglen8);	    msg->sms.udhdata = octstr_create("");	}	msg->sms.coding = DC_7BIT;	break;    default: /* 0xf4, 0xf5, 0xf6, 0xf7; 8bit to disp, mem, sim or term */ 	if (msg->sms.mclass & 0x02) { /* XXX mclass temporarily */	    msg->sms.msgdata = octstr_create("");	    msg->sms.udhdata = octstr_create_from_data(&raw[2], msglen8);	} else {	    msg->sms.msgdata = octstr_create_from_data(&raw[2], msglen8);	    msg->sms.udhdata = octstr_create("");	}	msg->sms.coding = DC_8BIT;	break;    }    msg->sms.mclass = MC_UNDEF;    if (octstr_len(msg->sms.udhdata)) {	IOTRACE("decoded udh", octstr_get_cstr(msg->sms.udhdata),		octstr_len(msg->sms.udhdata));    } else {	IOTRACE("decoded", octstr_get_cstr(msg->sms.msgdata),		octstr_len(msg->sms.msgdata));    }    return 2 + msglen8;}static int ois_ignore_time(const char *raw){    char str[15];    SAY(3, "ois_ignore_time");    strncpy(str, raw, 14); str[14] = '\0';    return 14;}static int ois_deliver_sm_result(SMSCenter *smsc, int result, const char *str){    char body[BUFLEN+1];    char buffer[BUFLEN+1];    int len;    int ret;    SAY(2, "ois_deliver_sm_result");    /* construct a message */    len = ois_encode_deliver_sm_result(body, result);    /* first and only part */    sprintf(buffer, "%c%c%.4s%.121s%c",	    'm',                              /* deliver sm result */	    (char)(0x50),                     /* ia5 encoding, the only part */	    &str[2],	    &body[0],	    EOL);    IOTRACE("sending", buffer, strlen(buffer));    ret = write_to_socket(smsc->socket, buffer);    if (ret < 0) {	goto error;    }    return 0; error:    return -1;}static int ois_encode_deliver_sm_result(char *str, int result){    char raw[4];    SAY(3, "ois_encode_deliver_sm_result");    /* construct the deliver sm result body content */    raw[0] = (char) result;    return ois_convert_to_ia5(str, raw, 1);}static int ois_expand_gsm7(char *raw8, const char *raw7, int len){    int i;    char bits[8*(BUFLEN+1)];    SAY2(3, "ois_expand_gsm7 len=%d", len);    /* yeah, there are also better algorithms, but... */    /* well, at least this is fairly portable and ok for small messages... */    ois_expand_gsm7_to_bits(bits, raw7, len);    for (i = 0; i < len; ++i) {	raw8[i] = ois_expand_gsm7_from_bits(bits, i);    }    SAY2(5, "ois_expand_gsm7 gave [%s]", ois_debug_str(raw8, i));    return i;}static int ois_expand_gsm7_to_bits(char *bits, const char *raw7, int len){    int i, j, k;    char ch;    SAY(3, "ois_expand_gsm7_to_bits");    len *= 7; /* number of bits in the gms 7-bit msg */    for (j = i = 0; j < len; ++i) {	ch = raw7[i];	for (k = 0; k < 8; ++k) {	    bits[j++] = (char) (ch & 0x01);	    ch >>= 1;	}    }    return j;}static char ois_expand_gsm7_from_bits(const char *bits, int pos){    int i;    char ch;    SAY2(8, "ois_expand_gsm7_from_bits pos=%d", pos);    pos *= 7; /* septet position in bits */    ch = '\0';    for (i = 6; i >= 0; --i) {	ch <<= 1;	ch |= bits[pos+i];    }    return ch;}static int ois_convert_to_ia5(char *str, const char *raw, int len){    int j;    int i;    int ch;    SAY2(3, "ois_convert_to_ia5 len=%d", len);    for (j = i = 0; i < len; ++i) {	ch = raw[i] & 0xff;	if (ch == 0x5c || ch == 0x5e || ch == 0x60 || ch == 0x7e) {  	    str[j++] = (char) 0x5c;  	    str[j++] = (char) ch;	} else if (0x20 <= ch && ch < 0x7f) {	    str[j++] = (char) ch;	} else if (0x00 <= ch && ch < 0x20) {	    str[j++] = (char) 0x5e;	    str[j++] = (char) ch + 0x40;	} else if (0xa0 <= ch && ch < 0xff) {	    str[j++] = (char) 0x60;	    str[j++] = (char) ch - 0x80;	} else if (0x80 <= ch && ch < 0xa0) {	    str[j++] = (char) 0x7e;	    str[j++] = (char) ch - 0x40;	} else if (ch == 0x7f) {	    str[j++] = (char) 0x5e;	    str[j++] = (char) 0x7e;	} else { /* ch == 0xff */	    str[j++] = (char) 0x7e;	    str[j++] = (char) 0x7e;	}    }    str[j] = '\0';    SAY2(5, "ois_convert_to_ia5 gave [%s]", ois_debug_str(str, j));    return j;}static int ois_convert_from_ia5(char *raw, const char *str){    int j;    int i;    int ch;    SAY(3, "ois_convert_from_ia5");    for (j = i = 0; ; ++i) {	ch = str[i] & 0xff;	if (ch < 0x20 || 0x7f <= ch) {	    break;	} else if (ch == 0x5c) {	    ch = str[++i] & 0xff;	    if (ch == 0x5c || ch == 0x5e || ch == 0x60 || ch == 0x7e) {		raw[j++] = (char) ch;	    } else {		break;	    }	} else if (ch == 0x5e) {	    ch = str[++i] & 0xff;	    if (0x40 <= ch && ch < 0x60) {		raw[j++] = (char) ch - 0x40;	    } else if (ch == 0x7e) {		raw[j++] = (char) 0x7f;	    } else {		break;	    }	} else if (ch == 0x60) {	    ch = str[++i] & 0xff;	    if (0x20 <= ch && ch < 0x7f) {		raw[j++] = (char) ch + 0x80;	    } else {		break;	    }	} else if (ch == 0x7e) {	    ch = str[++i] & 0xff;	    if (0x40 <= ch && ch < 0x60) {		raw[j++] = (char) ch + 0x40;	    } else if (ch == 0x7e) {		raw[j++] = (char) 0xff;	    } else {		break;	    }	} else { /* 0x20 <= ch && ch < 0x7f */	    raw[j++] = (char) ch;	}    }    SAY2(5, "ois_convert_from_ia5 gave [%s]", ois_debug_str(raw, j));    return j;}static int ois_convert_to_iso88591(char *raw, int len){    /* a best effort 1-to-1 conversion according to ois appendix a */    static const char gsm_to_iso88591[] = {	'@', 0xa3,'$', 0xa5,0xe8,0xe9,0xf9,0xec, /* 0x00 - 0x07 */	0xf2,0xc7,'\n',0xd8,0xf8,'\r',0xc5,0xe5, /* 0x08 - 0x0f */	'D', ' ', 'F', 'G', 'L', 'W', 'P', 'Y',  /* 0x10 - 0x17, poor! */	'Y', 'S', 'X', ' ', 0xc6,0xe6,'b', 0xc9, /* 0x18 - 0x1f, poor! */	' ', '!', '"', '#', 0xa4, '%', '&', '\'',/* 0x20 - 0x27 */	'(', ')', '*', '+', ',', '-', '.', '/',  /* 0x28 - 0x2f */	'0', '1', '2', '3', '4', '5', '6', '7',  /* 0x30 - 0x37 */	'8', '9', ':', ';', '<', '=', '>', '?',  /* 0x38 - 0x3f */	0xa1,'A', 'B', 'C', 'D', 'E', 'F', 'G',  /* 0x40 - 0x47 */	'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',  /* 0x48 - 0x4f */	'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',  /* 0x50 - 0x57 */	'X', 'Y', 'Z', 0xc4,0xd6,0xd1,0xdc,0xa7, /* 0x58 - 0x5f */	0xbf,'a', 'b', 'c', 'd', 'e', 'f', 'g',  /* 0x60 - 0x67 */	'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',  /* 0x68 - 0x6f */	'p', 'q', 'r', 's', 't', 'u', 'v', 'w',  /* 0x70 - 0x77 */	'x', 'y', 'z', 0xe4,0xf6,0xf1,0xfc,0xe0  /* 0x78 - 0x7f */    };    int i;    SAY2(3, "ois_convert_to_iso88591 len=%d", len);    for (i = 0; i < len; ++i) {	raw[i] = gsm_to_iso88591[raw[i] & 0x7f];    }    SAY2(5, "ois_convert_to_iso88591 gave [%s]", ois_debug_str(raw, i));    return i;}/* * Extract a message from the internal buffer. */static int ois_extract_msg_from_buffer(char *str, SMSCenter *smsc){    int len;    int count;    SAY2(8, "ois_extract_msg_from_buffer buflen=%ld", (long)smsc->buflen);    str[0] = '\0';    if (smsc->buflen < 7) {             /* 7 = 6 + 1 */	return 0;              /* we don't have a message yet */    }    if (strchr("SRDATECQLMPOVsrdatecqlmpov", smsc->buffer[0]) == NULL	|| (smsc->buffer[1] & 0xf0) != 0x50) {	goto error;    }    /* a valid message type, find the end of the message */    count = smsc->buffer[1] & 0x0f;    for (len = 0; (size_t) len < smsc->buflen; ++len) {	if (smsc->buffer[len] == EOL) {	    if (--count < 0) {		++len;		break;	    }	}    }    if (count >= 0) {          /* we don't have all the pieces */	if (len < BUFLEN) {	    return 0;          /* ...but maybe later */	}	goto error;    }    /* the buffer contains a promising message candidate */    memcpy(str, smsc->buffer, len);    str[len] = '\0';    smscenter_remove_from_buffer(smsc, len); /* just the message */    return len; error:    for (len = 0; (size_t) len < smsc->buflen && smsc->buffer[len] != EOL;          ++len) ;    if (len > BUFLEN) len = BUFLEN;    memcpy(str, smsc->buffer, len);    str[len] = '\0';    smscenter_remove_from_buffer(smsc, smsc->buflen); /* everything */    return -len;}/* * Extract a line from the internal buffer. */static int ois_extract_line_from_buffer(char *str, SMSCenter *smsc){    int len;    SAY2(3, "ois_extract_line_from_buffer buflen=%ld", (long)smsc->buflen);    str[0] = '\0';    for (len = 0; (size_t) len < smsc->buflen && smsc->buffer[len] != '\n';          ++len) ;    if ((size_t) len >= smsc->buflen) {	return 0;    } else {	++len;    }    /* the buffer contains a line */    memcpy(str, smsc->buffer, len);    str[len] = '\0';    smscenter_remove_from_buffer(smsc, len); /* just the line */    return len;}static void ois_swap_buffering(SMSCenter *smsc){    time_t alive;    int socket;    char *buffer;    size_t bufsize;    size_t buflen;    SAY(8, "ois_swap_buffering");    if (smsc->ois_bufsize == 0) {	smsc->ois_buflen = 0;	smsc->ois_bufsize = smsc->bufsize;	smsc->ois_buffer = gw_malloc(smsc->ois_bufsize);	memset(smsc->ois_buffer, 0, smsc->ois_bufsize);    }    alive = smsc->ois_alive;    smsc->ois_alive = smsc->ois_alive2;    smsc->ois_alive2 = alive;    socket = smsc->socket;    smsc->socket = smsc->ois_socket;    smsc->ois_socket = socket;    buffer = smsc->buffer;    smsc->buffer = smsc->ois_buffer;    smsc->ois_buffer = buffer;    buflen = smsc->buflen;    smsc->buflen = smsc->ois_buflen;    smsc->ois_buflen = buflen;    bufsize = smsc->bufsize;    smsc->bufsize = smsc->ois_bufsize;    smsc->ois_bufsize = bufsize;    return;}static const char *ois_debug_str(const char *raw, int len){    static const char hex[] = "0123456789abcdef";    static char str[4*(BUFLEN+1)+1];    int pos;    int ch;    int i;    pos = 0;    for (i = 0; i < len; ++i) {	ch = raw[i] & 0xff;	if (0x20 <= ch && ch < 0x7f && ch != 0x5c) {	    str[pos++] = (char) ch;	} else {	    str[pos++] = '\\';	    str[pos++] = 'x';	    str[pos++] = hex[ch/16];	    str[pos++] = hex[ch%16];	}    }    str[pos] = '\0';    return str;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产麻豆精品| 成人97人人超碰人人99| 在线视频一区二区三区| 天天色综合成人网| 欧美另类高清zo欧美| 精品一区二区久久| 最好看的中文字幕久久| 3d成人h动漫网站入口| 国产一区二区三区| 久久只精品国产| 欧美特级限制片免费在线观看| 亚洲精品国产成人久久av盗摄| 91精品国产91久久久久久一区二区 | 久久99国产精品免费| 18欧美亚洲精品| 国产日产欧美精品一区二区三区| 国产乱淫av一区二区三区| 亚洲一区二区三区四区不卡| 精品国精品国产尤物美女| 在线亚洲一区二区| 国产乱淫av一区二区三区| 亚洲国产精品久久久男人的天堂| 日韩手机在线导航| 色婷婷综合久久久中文一区二区| 天堂成人免费av电影一区| 亚洲欧美日韩在线不卡| 久久精品人人做| 欧美一区二区三区四区高清| 日本高清无吗v一区| 91一区二区三区在线播放| 国产美女一区二区| 久久成人免费日本黄色| 日韩成人伦理电影在线观看| 性做久久久久久免费观看欧美| 亚洲欧美欧美一区二区三区| 亚洲婷婷综合色高清在线| 国产精品免费aⅴ片在线观看| 欧美va亚洲va国产综合| 69p69国产精品| 色婷婷国产精品久久包臀| 91亚洲精品一区二区乱码| 99久久99久久久精品齐齐| av电影在线观看完整版一区二区| 成人久久视频在线观看| 成人永久免费视频| 91亚洲精华国产精华精华液| 99麻豆久久久国产精品免费 | 综合久久一区二区三区| 亚洲另类春色校园小说| 三级亚洲高清视频| 狠狠色丁香久久婷婷综合_中| 成人h精品动漫一区二区三区| 欧美综合一区二区| 精品少妇一区二区| 亚洲自拍偷拍网站| 成人小视频在线| 欧美一区二区日韩| 亚洲成年人影院| 99久久精品免费看国产| 久久久国产一区二区三区四区小说 | 国产三级欧美三级| 日韩高清一区在线| 欧美日本在线看| 亚洲午夜精品在线| 欧美视频中文字幕| 一区二区三区四区高清精品免费观看 | 欧美亚洲一区二区在线| 综合电影一区二区三区 | 欧美二区三区的天堂| 欧美一卡二卡在线| 精品成a人在线观看| av在线播放不卡| 欧美精品自拍偷拍| 日韩欧美一级二级三级| 欧美国产一区二区在线观看| 国产精品嫩草影院com| 天天操天天干天天综合网| 成人黄色777网| 久久夜色精品国产噜噜av| 日韩精品欧美精品| 日韩一区二区三区视频在线 | 欧美日韩免费观看一区三区| 亚洲综合av网| 91精品婷婷国产综合久久竹菊| 午夜精品一区二区三区电影天堂 | 日韩精品91亚洲二区在线观看 | 亚洲影视在线播放| 欧美高清www午色夜在线视频| 青青草精品视频| 久久精品日产第一区二区三区高清版| 国产精品自拍三区| 午夜激情一区二区三区| 欧美二区在线观看| 国产乱码精品一区二区三区忘忧草 | 国产一区二区三区久久久| 久久久国际精品| 91小宝寻花一区二区三区| 一区二区三区四区激情| 日韩欧美专区在线| 91国在线观看| 国产伦精一区二区三区| 一级日本不卡的影视| 26uuu亚洲婷婷狠狠天堂| 91在线国产观看| 视频一区二区三区入口| 久久久不卡网国产精品二区| 99精品视频一区二区| 久久国产夜色精品鲁鲁99| 久久精品亚洲精品国产欧美| 777午夜精品视频在线播放| 成人av中文字幕| 激情综合网av| 日本午夜精品一区二区三区电影| 久久免费午夜影院| 欧美高清性hdvideosex| www.亚洲免费av| 国产激情一区二区三区| 理论片日本一区| 首页国产欧美日韩丝袜| 国内精品久久久久影院薰衣草| 天天色综合成人网| 一区二区成人在线视频| 亚洲精品中文在线影院| 国产午夜亚洲精品不卡| 精品福利二区三区| 欧美大片国产精品| 日韩美女视频在线| 5858s免费视频成人| 精品视频在线看| 精品视频在线免费| 日韩三级中文字幕| 久久理论电影网| 国产日韩欧美精品在线| 中文字幕av一区二区三区| 中文字幕av一区二区三区高| 欧美国产丝袜视频| 亚洲女厕所小便bbb| 午夜欧美2019年伦理| 精品系列免费在线观看| 99国产精品久久久久久久久久| 91网站最新地址| 91精品国产欧美一区二区| 精品国产伦一区二区三区免费| 日韩欧美国产三级电影视频| 国产亚洲欧洲一区高清在线观看| 国产精品丝袜在线| 一区二区三区四区高清精品免费观看 | 欧美精品第1页| 国产日韩欧美一区二区三区乱码 | 136国产福利精品导航| 亚洲国产精品尤物yw在线观看| 九九精品一区二区| 一本色道久久综合精品竹菊| 日韩丝袜美女视频| 国产精品美女一区二区| 男女激情视频一区| av综合在线播放| 精品久久久网站| 午夜精品福利在线| av网站免费线看精品| 精品国产一区二区三区久久久蜜月| 中文字幕一区视频| 久久国产精品无码网站| 91丨九色丨黑人外教| 精品成人私密视频| 日韩在线一二三区| 91免费在线看| 中文字幕中文字幕在线一区| 久久狠狠亚洲综合| 91精品国产综合久久久久久久久久| 国产精品久久久久久久岛一牛影视| 久久成人18免费观看| 精品视频在线视频| 午夜成人免费视频| 精品视频在线视频| 亚洲午夜一二三区视频| 欧美色图12p| 视频一区视频二区在线观看| 4438x成人网最大色成网站| 午夜精品爽啪视频| 欧美高清视频不卡网| 三级欧美韩日大片在线看| 在线观看av一区| 亚洲va国产va欧美va观看| 欧美高清视频不卡网| 奇米色777欧美一区二区| 日韩丝袜情趣美女图片| 国产一区二区三区四区五区入口 | 久久精品综合网| 丰满白嫩尤物一区二区| 国产精品视频一二三| 91免费版pro下载短视频| 亚洲一二三区在线观看| 欧美女孩性生活视频| 青青青爽久久午夜综合久久午夜| 欧美tickling挠脚心丨vk| 国产一区二区三区美女| 亚洲免费av在线| 日韩一区二区三区精品视频| 国产精品自拍av|