📄 urltrans.c
字号:
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 + -