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

📄 urltrans.c

📁 The Kannel Open Source WAP and SMS gateway works as both an SMS gateway, for implementing keyword b
💻 C
📖 第 1 页 / 共 3 页
字号:
		    	    	  octstr_len(request->sms.sender));		octstr_url_encode(enc);		octstr_format_append(result, "%%2B%S", enc);		octstr_destroy(enc);	    } else {		enc = octstr_duplicate(request->sms.sender);    	    	octstr_url_encode(enc);		octstr_append(result, enc);		octstr_destroy(enc);	    }	    break;	case 'q':	    if (strncmp(octstr_get_cstr(request->sms.receiver),"00",2)==0) {		enc = octstr_copy(request->sms.receiver, 2, 		    	    	  octstr_len(request->sms.receiver));		octstr_url_encode(enc);		octstr_format_append(result, "%%2B%S", enc);		octstr_destroy(enc);	    } else {		enc = octstr_duplicate(request->sms.receiver);		octstr_url_encode(enc);		octstr_append(result, enc);		octstr_destroy(enc);	    }	    break;	case 'a':	    for (j = 0; j < num_words; ++j) {		enc = octstr_duplicate(list_get(word_list, j));		octstr_url_encode(enc);		if (j > 0)		    octstr_append_char(result, '+');		octstr_append(result, enc);		octstr_destroy(enc);	    }	    break;	case 'b':	    enc = octstr_duplicate(request->sms.msgdata);	    octstr_url_encode(enc);	    octstr_append(result, enc);	    octstr_destroy(enc);	    break;	case 't':	    tm = gw_gmtime(request->sms.time);	    octstr_format_append(result, "%04d-%02d-%02d+%02d:%02d:%02d",				 tm.tm_year + 1900,				 tm.tm_mon + 1,				 tm.tm_mday,				 tm.tm_hour,				 tm.tm_min,				 tm.tm_sec);	    break;	case 'T':	    if (request->sms.time == MSG_PARAM_UNDEFINED)		break;	    octstr_format_append(result, "%ld", request->sms.time);	    break;	case 'i':	    if (request->sms.smsc_id == NULL)		break;	    enc = octstr_duplicate(request->sms.smsc_id);	    octstr_url_encode(enc);	    octstr_append(result, enc);	    octstr_destroy(enc);	    break;	case 'I':	    if (!uuid_is_null(request->sms.id)) {                char id[UUID_STR_LEN + 1];                uuid_unparse(request->sms.id, id);	        octstr_append_cstr(result, id);            }	    break;	case 'n':	    if (request->sms.service == NULL)		break;	    enc = octstr_duplicate(request->sms.service);	    octstr_url_encode(enc);	    octstr_append(result, enc);	    octstr_destroy(enc);	    break;	case 'd':	    enc = octstr_create("");	    octstr_append_decimal(enc, request->sms.dlr_mask);	    octstr_url_encode(enc);	    octstr_append(result, enc);	    octstr_destroy(enc);	    break;	case 'A':	    if (reply) {		enc = octstr_duplicate(reply);		octstr_url_encode(enc);		octstr_append(result, enc);		octstr_destroy(enc);	    }	    break;	case 'c':	    octstr_append_decimal(result, request->sms.coding);	    break;	case 'C':	    if(octstr_len(request->sms.charset)) {		octstr_append(result, request->sms.charset);	    } else {		switch (request->sms.coding) {		    case DC_UNDEF:		    case DC_7BIT:			octstr_append(result, octstr_imm("ISO-8859-1"));			break;		    case DC_8BIT:			octstr_append(result, octstr_imm("8-BIT"));			break;		    case DC_UCS2:			octstr_append(result, octstr_imm("UTF16-BE"));			break;		}	    }	    break;	case 'u':	    if(octstr_len(request->sms.udhdata)) {		enc = octstr_duplicate(request->sms.udhdata);		octstr_url_encode(enc);		octstr_append(result, enc);		octstr_destroy(enc);	    }	    break;	case 'B':  /* billing identifier/information */	    if (octstr_len(request->sms.binfo)) {            enc = octstr_duplicate(request->sms.binfo);            octstr_url_encode(enc);            octstr_append(result, enc);            octstr_destroy(enc);        }        break;	    case 'o':  /* account information (may be operator id for aggregators */	    if (octstr_len(request->sms.account)) {            enc = octstr_duplicate(request->sms.account);            octstr_url_encode(enc);            octstr_append(result, enc);            octstr_destroy(enc);        }        break;	/* XXX sms.parameters not present in here:	 *   * pid - will we receive this ? 	 *   * mwi,mclass - will we receive these bits from smsc ?	 *   * alt-dcs - shouldn't be required unless we want to inform 	 *               which alt-dcs external server should use back	 *   * compress - if we use compression, probably kannel would 	 *                decompress and reset this to 0. not required	 *   * validity, deferred, rpi - we don't receive these from smsc	 *   * username, password, dlr-url, account - nonsense to send	 */	case '%':	    octstr_format_append(result, "%%");	    break;	default:	    octstr_format_append(result, "%%%c",	    	    	    	 octstr_get_char(pattern, pos + 1));	    break;	}	pos += 2;    }    /*     * this SHOULD be done in smsbox, not here, but well,     * much easier to do here     */    if (t && (t->type == TRANSTYPE_POST_URL || t->type == TRANSTYPE_POST_XML)		    && t->strip_keyword)	strip_keyword(request);    octstr_destroy(url);    octstr_destroy(reply);    list_destroy(word_list, octstr_destroy_item);    return result;}int urltrans_type(URLTranslation *t) {    return t->type;}Octstr *urltrans_prefix(URLTranslation *t) {    return t->prefix;}Octstr *urltrans_suffix(URLTranslation *t) {    return t->suffix;}Octstr *urltrans_default_sender(URLTranslation *t) {    return t->default_sender;}Octstr *urltrans_faked_sender(URLTranslation *t) {    return t->faked_sender;}int urltrans_max_messages(URLTranslation *t) {    return t->max_messages;}int urltrans_concatenation(URLTranslation *t) {    return t->concatenation;}Octstr *urltrans_split_chars(URLTranslation *t) {    return t->split_chars;}Octstr *urltrans_split_suffix(URLTranslation *t) {    return t->split_suffix;}int urltrans_omit_empty(URLTranslation *t) {    return t->omit_empty;}Octstr *urltrans_header(URLTranslation *t) {    return t->header;}Octstr *urltrans_footer(URLTranslation *t) {    return t->footer;}Octstr *urltrans_name(URLTranslation *t) {    return t->name;}Octstr *urltrans_username(URLTranslation *t) {    return t->username;}Octstr *urltrans_password(URLTranslation *t) {    return t->password;}Octstr *urltrans_forced_smsc(URLTranslation *t) {    return t->forced_smsc;}Octstr *urltrans_default_smsc(URLTranslation *t) {    return t->default_smsc;}Octstr *urltrans_allow_ip(URLTranslation *t) {    return t->allow_ip;}Octstr *urltrans_deny_ip(URLTranslation *t) {    return t->deny_ip;}Octstr *urltrans_allowed_prefix(URLTranslation *t) {    return t->allowed_prefix;}Octstr *urltrans_denied_prefix(URLTranslation *t) {    return t->denied_prefix;}Octstr *urltrans_allowed_recv_prefix(URLTranslation *t) {    return t->allowed_recv_prefix;}Octstr *urltrans_denied_recv_prefix(URLTranslation *t) {    return t->denied_recv_prefix;}Numhash *urltrans_white_list(URLTranslation *t){    return t->white_list;}regex_t *urltrans_white_list_regex(URLTranslation *t){    return t->white_list_regex;}Numhash *urltrans_black_list(URLTranslation *t){    return t->black_list;}regex_t *urltrans_black_list_regex(URLTranslation *t){    return t->black_list_regex;}int urltrans_assume_plain_text(URLTranslation *t) {    return t->assume_plain_text;}int urltrans_accept_x_kannel_headers(URLTranslation *t) {    return t->accept_x_kannel_headers;}int urltrans_strip_keyword(URLTranslation *t) {    return t->strip_keyword;}int urltrans_send_sender(URLTranslation *t) {    return t->send_sender;}/*********************************************************************** * Internal functions. *//* * Create one URLTranslation. Return NULL for failure, pointer to it for OK. */static URLTranslation *create_onetrans(CfgGroup *grp){    URLTranslation *ot;    Octstr *aliases, *url, *post_url, *post_xml, *text, *file, *exec;    Octstr *accepted_smsc, *forced_smsc, *default_smsc;    Octstr *grpname, *sendsms_user, *sms_service;    int is_sms_service;    Octstr *accepted_smsc_regex;    Octstr *allowed_prefix_regex;    Octstr *denied_prefix_regex;    Octstr *allowed_receiver_prefix_regex;    Octstr *denied_receiver_prefix_regex;    Octstr *white_list_regex;    Octstr *black_list_regex;    Octstr *keyword_regex;    Octstr *os;        grpname = cfg_get_group_name(grp);    if (grpname == NULL)    	return NULL;    sms_service = octstr_imm("sms-service");    sendsms_user = octstr_imm("sendsms-user");    if (octstr_compare(grpname, sms_service) == 0)    	is_sms_service = 1;    else if (octstr_compare(grpname, sendsms_user) == 0)    	is_sms_service = 0;    else {	octstr_destroy(grpname);	return NULL;    }    octstr_destroy(grpname);    ot = gw_malloc(sizeof(URLTranslation));    ot->keyword = NULL;    ot->aliases = NULL;    ot->pattern = NULL;    ot->prefix = NULL;    ot->suffix = NULL;    ot->faked_sender = NULL;    ot->default_sender = NULL;    ot->split_chars = NULL;    ot->split_suffix = NULL;    ot->footer = NULL;    ot->header = NULL;    ot->name = NULL;    ot->username = NULL;    ot->password = NULL;    ot->omit_empty = 0;    ot->accepted_smsc = NULL;    ot->forced_smsc = NULL;    ot->default_smsc = NULL;    ot->allow_ip = NULL;    ot->deny_ip = NULL;    ot->allowed_prefix = NULL;    ot->denied_prefix = NULL;    ot->allowed_recv_prefix = NULL;    ot->denied_recv_prefix = NULL;    ot->white_list = NULL;    ot->black_list = NULL;    ot->keyword_regex = NULL;    ot->accepted_smsc_regex = NULL;    ot->allowed_prefix_regex = NULL;    ot->denied_prefix_regex = NULL;    ot->allowed_receiver_prefix_regex = NULL;    ot->denied_receiver_prefix_regex = NULL;    ot->white_list_regex = NULL;    ot->black_list_regex = NULL;        if (is_sms_service) {	cfg_get_bool(&ot->catch_all, grp, octstr_imm("catch-all"));	ot->dlr_url = cfg_get(grp, octstr_imm("dlr-url"));	    	url = cfg_get(grp, octstr_imm("get-url"));	if (url == NULL)	    url = cfg_get(grp, octstr_imm("url"));	    	post_url = cfg_get(grp, octstr_imm("post-url"));	post_xml = cfg_get(grp, octstr_imm("post-xml"));	file = cfg_get(grp, octstr_imm("file"));	text = cfg_get(grp, octstr_imm("text"));	exec = cfg_get(grp, octstr_imm("exec"));	if (url != NULL) {	    ot->type = TRANSTYPE_GET_URL;	    ot->pattern = url;	} else if (post_url != NULL) {	    ot->type = TRANSTYPE_POST_URL;	    ot->pattern = post_url;	    ot->catch_all = 1;	} else if (post_xml != NULL) {	    ot->type = TRANSTYPE_POST_XML;	    ot->pattern = post_xml;	    ot->catch_all = 1;	} else if (file != NULL) {	    ot->type = TRANSTYPE_FILE;	    ot->pattern = file;	} else if (text != NULL) {	    ot->type = TRANSTYPE_TEXT;	    ot->pattern = text;	} else if (exec != NULL) {	    ot->type = TRANSTYPE_EXECUTE;	    ot->pattern = exec;	} else {	    error(0, "Configuration group `sms-service' "	    	     "did not specify get-url, post-url, post-xml, file or text.");    	    goto error;	}	ot->keyword = cfg_get(grp, octstr_imm("keyword"));	if (ot->keyword == NULL) {	    error(0, "Group 'sms-service' must include 'keyword'.");	    goto error;	}	octstr_convert_range(ot->keyword, 0, octstr_len(ot->keyword), 	    	    	     tolower);        keyword_regex = cfg_get(grp, octstr_imm("keyword-regex"));        if (keyword_regex != NULL) {            if ((ot->keyword_regex = gw_regex_comp(keyword_regex, REG_EXTENDED)) == NULL)                  panic(0, "Could not compile pattern '%s'", octstr_get_cstr(keyword_regex));            octstr_destroy(keyword_regex);        }	ot->name = cfg_get(grp, octstr_imm("name"));	if (ot->name == NULL)	    ot->name = octstr_duplicate(ot->keyword);	aliases = cfg_get(grp, octstr_imm("aliases"));

⌨️ 快捷键说明

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