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

📄 smsbox.c

📁 The Kannel Open Source WAP and SMS gateway works as both an SMS gateway, for implementing keyword b
💻 C
📖 第 1 页 / 共 5 页
字号:
{    return counter_value(num_outstanding_requests);}/*********************************************************************** * Thread for receiving reply from HTTP query and sending it to phone. */static void strip_prefix_and_suffix(Octstr *html, Octstr *prefix,    	    	    	    	    Octstr *suffix){    long prefix_end, suffix_start;    if (prefix == NULL || suffix == NULL)    	return;    prefix_end = octstr_case_search(html, prefix, 0);    if (prefix_end == -1)        return;    prefix_end += octstr_len(prefix);    suffix_start = octstr_case_search(html, suffix, prefix_end);    if (suffix_start == -1)        return;    octstr_delete(html, 0, prefix_end);    octstr_truncate(html, suffix_start - prefix_end);}static void get_x_kannel_from_headers(List *headers, Octstr **from,				      Octstr **to, Octstr **udh,				      Octstr **user, Octstr **pass,				      Octstr **smsc, int *mclass, int *mwi,				      int *coding, int *compress, 				      int *validity, int *deferred,				      int *dlr_mask, Octstr **dlr_url, 				      Octstr **account, int *pid, int *alt_dcs, 				      int *rpi, Octstr **binfo, int *priority){    Octstr *name, *val;    long l;    for(l=0; l<list_len(headers); l++) {	http_header_get(headers, l, &name, &val);	if (octstr_case_compare(name, octstr_imm("X-Kannel-From")) == 0) {	    *from = octstr_duplicate(val);	    octstr_strip_blanks(*from);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-To")) == 0) {	    *to = octstr_duplicate(val);	    octstr_strip_blanks(*to);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-Username")) == 0) {	    if (user != NULL) {		*user = octstr_duplicate(val);		octstr_strip_blanks(*user);	    }	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-Password")) == 0) {	    if (pass != NULL) {		*pass = octstr_duplicate(val);		octstr_strip_blanks(*pass);	    }	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-SMSC")) == 0) {	    if (smsc != NULL) {		*smsc = octstr_duplicate(val);		octstr_strip_blanks(*smsc);	    }	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-UDH")) == 0) {	    *udh = octstr_duplicate(val);	    octstr_strip_blanks(*udh);	    if (octstr_hex_to_binary(*udh) == -1) {		if (octstr_url_decode(*udh) == -1) {		    warning(0, "Invalid UDH received in X-Kannel-UDH");		    octstr_destroy(*udh);		    *udh = NULL;		}	    }	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-DLR-URL")) == 0) {	    *dlr_url = octstr_duplicate(val);	    octstr_strip_blanks(*dlr_url);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-Account")) == 0) {	    *account = octstr_duplicate(val);	    octstr_strip_blanks(*account);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-BInfo")) == 0) {            *binfo = octstr_duplicate(val);            octstr_strip_blanks(*binfo);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-Coding")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", coding);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-PID")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", pid);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-MWI")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", mwi);        }	else if (octstr_case_compare(name, octstr_imm("X-Kannel-MClass")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", mclass);        }	else if (octstr_case_compare(name, octstr_imm("X-Kannel-Alt-DCS")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", alt_dcs);        }	else if (octstr_case_compare(name, octstr_imm("X-Kannel-Compress")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", compress);        }	else if (octstr_case_compare(name, octstr_imm("X-Kannel-Validity")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", validity);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-Deferred")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", deferred);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-DLR-Mask")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", dlr_mask);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-RPI")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", rpi);	}	else if (octstr_case_compare(name, octstr_imm("X-Kannel-Priority")) == 0) {    	    sscanf(octstr_get_cstr(val),"%d", priority);	}	octstr_destroy(name);	octstr_destroy(val);    }}static long get_tag(Octstr *body, Octstr *tag, Octstr **value, long pos, int nostrip) {    long start, end;    int taglen;    Octstr *tmp;    tmp = octstr_create("<");    octstr_append(tmp, tag);    octstr_append(tmp, octstr_imm(">"));    taglen = octstr_len(tmp);    start = octstr_search(body, tmp, pos);    octstr_destroy(tmp);    if(start != -1) {	tmp = octstr_create("</");	octstr_append(tmp, tag);	octstr_append(tmp, octstr_imm(">"));	end = octstr_search(body, tmp, start);	octstr_destroy(tmp);	if(end != -1) {	    octstr_destroy(*value);	    *value = octstr_copy(body, start + taglen, end - start - taglen);	    if(nostrip == 0) {		octstr_strip_blanks(*value);		debug("sms", 0, "XMLParsing: tag <%s> value <%s>", octstr_get_cstr(tag),			octstr_get_cstr(*value));	    }	    return end + taglen + 1;	} else {	    debug("sms", 0, "XMLParsing: end tag </%s> not found", octstr_get_cstr(tag));	    return -1;	}    } else {	/* debug("sms", 0, "XMLParsing: tag <%s> not found", octstr_get_cstr(tag)); */	return -1;    }}/* requesttype = mt_reply or mt_push. for example, auth is only read on mt_push * parse body and populate fields, including replacing body for <ud> value and * type to text/plain */static void get_x_kannel_from_xml(int requesttype , Octstr **type, Octstr **body,                                   List *headers, Octstr **from,                                  Octstr **to, Octstr **udh,                                  Octstr **user, Octstr **pass,                                  Octstr **smsc, int *mclass, int *mwi,                                  int *coding, int *compress,                                  int *validity, int *deferred,                                  int *dlr_mask, Octstr **dlr_url,                                  Octstr **account, int *pid, int *alt_dcs,                                  int *rpi, List **tolist, Octstr **charset,                                  Octstr **binfo, int *priority){                                        Octstr *text, *tmp, *tmp2;    long tmplong, where;        tmp = tmp2 = text = NULL;    debug("sms", 0, "XMLParsing: XML: <%s>", octstr_get_cstr(*body));    /* auth */    get_tag(*body, octstr_imm("from"), &tmp, 0, 0);    if(tmp) {	if(requesttype == mt_push) {	    /* user */	    get_tag(tmp, octstr_imm("user"), user, 0, 0);	    get_tag(tmp, octstr_imm("username"), user, 0, 0);	    /* pass */	    get_tag(tmp, octstr_imm("pass"), pass, 0, 0);	    get_tag(tmp, octstr_imm("password"), pass, 0, 0);	}	/* account */	get_tag(tmp, octstr_imm("account"), account, 0, 0);	/* binfo */	get_tag(tmp, octstr_imm("binfo"), binfo, 0, 0);	O_DESTROY(tmp);    }    if(requesttype == mt_push) {	/* to (da/number) Multiple tags */ 	*tolist = list_create();	where = get_tag(*body, octstr_imm("da"), &tmp, 0, 0);	if(tmp) {	    get_tag(tmp, octstr_imm("number"), to, 0, 0);	    list_append(*tolist, octstr_duplicate(*to));	    O_DESTROY(*to);	    while(tmp && where != -1) {		O_DESTROY(tmp);		where = get_tag(*body, octstr_imm("da"), &tmp, where, 0);		if(tmp) {		    get_tag(tmp, octstr_imm("number"), &tmp2, 0, 0);		    if(tmp2 != NULL) {			list_append(*tolist, octstr_duplicate(tmp2));			O_DESTROY(tmp2);		    }		}	    }	}    }    /* udh */    get_tag(*body, octstr_imm("udh"), &tmp, 0, 0);    if(tmp) {	O_DESTROY(*udh);	*udh = octstr_duplicate(tmp);	if(octstr_hex_to_binary(*udh) == -1)	    octstr_url_decode(*udh);	O_DESTROY(tmp);    }    /* smsc */    get_tag(*body, octstr_imm("to"), &tmp, 0, 0);    if(tmp) {	get_tag(tmp, octstr_imm("account"), smsc, 0, 0);	O_DESTROY(tmp);    }    /* pid */    get_tag(*body, octstr_imm("pid"), &tmp, 0, 0);    if(tmp) {	if(octstr_parse_long(&tmplong, tmp, 0, 10) != -1)	    *pid = tmplong;	O_DESTROY(tmp);    }    /* rpi */    get_tag(*body, octstr_imm("rpi"), &tmp, 0, 0);    if(tmp) {	if(octstr_parse_long(&tmplong, tmp, 0, 10) != -1)	    *rpi = tmplong;	O_DESTROY(tmp);    }    /* dcs* (dcs/ *) */    get_tag(*body, octstr_imm("dcs"), &tmp, 0, 0);    if(tmp) {	/* mclass (dcs/mclass) */	get_tag(tmp, octstr_imm("mclass"), &tmp2, 0, 0);	if(tmp2) {	    if(octstr_parse_long(&tmplong, tmp2, 0, 10) != -1)		*mclass = tmplong;	    O_DESTROY(tmp2);	}	/* mwi (dcs/mwi) */	get_tag(tmp, octstr_imm("mwi"), &tmp2, 0, 0);	if(tmp2) {	    if(octstr_parse_long(&tmplong, tmp2, 0, 10) != -1)		*mwi = tmplong;	    O_DESTROY(tmp2);	}	/* coding (dcs/coding) */	get_tag(tmp, octstr_imm("coding"), &tmp2, 0, 0);	if(tmp2) {	    if(octstr_parse_long(&tmplong, tmp2, 0, 10) != -1)		*coding = tmplong;	    O_DESTROY(tmp2);	}	/* compress (dcs/compress) */	get_tag(tmp, octstr_imm("compress"), &tmp2, 0, 0);	if(tmp2) {	    if(octstr_parse_long(&tmplong, tmp2, 0, 10) != -1)		*compress = tmplong;	    O_DESTROY(tmp2);	}	/* alt-dcs (dcs/alt-dcs) */	get_tag(tmp, octstr_imm("alt-dcs"), &tmp2, 0, 0);	if(tmp2) {	    if(octstr_parse_long(&tmplong, tmp2, 0, 10) != -1)		*alt_dcs = tmplong;	    O_DESTROY(tmp2);	}	O_DESTROY(tmp);    }    /* statusrequest* (statusrequest/ *) */    get_tag(*body, octstr_imm("statusrequest"), &tmp, 0, 0);    if(tmp) {	/* dlr-mask (statusrequest/dlr-mask) */	get_tag(tmp, octstr_imm("dlr-mask"), &tmp2, 0, 0);	if(tmp2) {	    if(octstr_parse_long(&tmplong, tmp2, 0, 10) != -1)		*dlr_mask = tmplong;	    O_DESTROY(tmp2);	}	get_tag(tmp, octstr_imm("dlr-url"), dlr_url, 0, 0);	O_DESTROY(tmp);    }    /* validity (vp/delay) */    get_tag(*body, octstr_imm("vp"), &tmp, 0, 0);    if(tmp) {	get_tag(tmp, octstr_imm("delay"), &tmp2, 0, 0);	if(tmp2) {	    if(octstr_parse_long(&tmplong, tmp2, 0, 10) != -1)		*validity = tmplong;	    O_DESTROY(tmp2);	}	O_DESTROY(tmp);    }    /* deferred (timing/delay) */    get_tag(*body, octstr_imm("timing"), &tmp, 0, 0);    if(tmp) {	get_tag(tmp, octstr_imm("delay"), &tmp2, 0, 0);	if(tmp2) {	    if(octstr_parse_long(&tmplong, tmp2, 0, 10) != -1)		*deferred = tmplong;	    O_DESTROY(tmp2);	}	O_DESTROY(tmp);    }    /* priority */    get_tag(*body, octstr_imm("priority"), &tmp, 0, 0);    if(tmp) {	if(octstr_parse_long(&tmplong, tmp, 0, 10) != -1)	    *priority = tmplong;	O_DESTROY(tmp);    }        /* charset from <?xml...encoding=?> */    tmp = find_charset_encoding(*body);    O_DESTROY(*charset);    if(tmp) {	*charset = octstr_duplicate(tmp);	O_DESTROY(tmp);    } else {	*charset = octstr_create("UTF-8");    }    /* text */    text = NULL;    get_tag(*body, octstr_imm("ud"), &tmp, 0, 0);    if(tmp) {	O_DESTROY(text);	text = octstr_duplicate(tmp);	if(octstr_hex_to_binary(text) == -1)	    octstr_url_decode(text);	O_DESTROY(tmp);    }    O_DESTROY(*body);    if(text)	*body = text;    else	*body = octstr_create("");    O_DESTROY(*type);    *type = octstr_create("text/plain");}static void fill_message(Msg *msg, URLTranslation *trans,			 Octstr *replytext, int octet_stream,			 Octstr *from, Octstr *to, Octstr *udh,			 int mclass, int mwi, int coding, int compress,			 int validity, int deferred,			 Octstr *dlr_url, int dlr_mask, int pid, int alt_dcs,			 int rpi, Octstr *smsc, Octstr *account,			 Octstr *charset, Octstr *binfo, int priority){    msg->sms.msgdata = replytext;    msg->sms.time = time(NULL);    if (charset)        msg->sms.charset = charset;

⌨️ 快捷键说明

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