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

📄 smsc_http.c

📁 gateway-1.3.2.tar.gz WAP gw code
💻 C
📖 第 1 页 / 共 3 页
字号:
    if (sms->sms.dlr_mask != DLR_UNDEFINED && sms->sms.dlr_mask != DLR_NOTHING)        octstr_format_append(url, "&dlr-mask=%d", sms->sms.dlr_mask);    headers = list_create();    debug("smsc.http.kannel", 0, "HTTP[%s]: Start request",          octstr_get_cstr(conn->id));    http_start_request(conndata->http_ref, HTTP_METHOD_GET, url, headers,                        NULL, 0, sms, NULL);    octstr_destroy(url);    http_destroy_headers(headers);}static void kannel_parse_reply(SMSCConn *conn, Msg *msg, int status,			       List *headers, Octstr *body){    /* Test on three cases:     * 1. an smsbox reply of an remote kannel instance     * 2. an smsc_http response (if used for MT to MO looping)     * 3. an smsbox reply of partly sucessfull sendings */    if ((status == HTTP_OK || status == HTTP_ACCEPTED)        && (octstr_case_compare(body, octstr_imm("Sent.")) == 0 ||            octstr_case_compare(body, octstr_imm("Ok.")) == 0 ||            octstr_ncompare(body, octstr_imm("Result: OK"),10) == 0)) {        bb_smscconn_sent(conn, msg, NULL);    } else {        bb_smscconn_send_failed(conn, msg,	            SMSCCONN_FAILED_MALFORMED, octstr_duplicate(body));    }}static void kannel_receive_sms(SMSCConn *conn, HTTPClient *client,			       List *headers, Octstr *body, List *cgivars){    ConnData *conndata = conn->data;    Octstr *user, *pass, *from, *to, *text, *udh, *account, *binfo, *tmp_string;    Octstr *retmsg;    int	mclass, mwi, coding, validity, deferred;    List *reply_headers;    int ret;    mclass = mwi = coding = validity = deferred = 0;    user = http_cgi_variable(cgivars, "username");    pass = http_cgi_variable(cgivars, "password");    from = http_cgi_variable(cgivars, "from");    to = http_cgi_variable(cgivars, "to");    text = http_cgi_variable(cgivars, "text");    udh = http_cgi_variable(cgivars, "udh");    account = http_cgi_variable(cgivars, "account");    binfo = http_cgi_variable(cgivars, "binfo");    tmp_string = http_cgi_variable(cgivars, "flash");    if(tmp_string) {	sscanf(octstr_get_cstr(tmp_string),"%d", &mclass);    }    tmp_string = http_cgi_variable(cgivars, "mclass");    if(tmp_string) {	sscanf(octstr_get_cstr(tmp_string),"%d", &mclass);    }    tmp_string = http_cgi_variable(cgivars, "mwi");    if(tmp_string) {	sscanf(octstr_get_cstr(tmp_string),"%d", &mwi);    }    tmp_string = http_cgi_variable(cgivars, "coding");    if(tmp_string) {	sscanf(octstr_get_cstr(tmp_string),"%d", &coding);    }    tmp_string = http_cgi_variable(cgivars, "validity");    if(tmp_string) {	sscanf(octstr_get_cstr(tmp_string),"%d", &validity);    }    tmp_string = http_cgi_variable(cgivars, "deferred");    if(tmp_string) {	sscanf(octstr_get_cstr(tmp_string),"%d", &deferred);    }    debug("smsc.http.kannel", 0, "HTTP[%s]: Received an HTTP request",          octstr_get_cstr(conn->id));        if (user == NULL || pass == NULL ||	    octstr_compare(user, conndata->username) != 0 ||	    octstr_compare(pass, conndata->password) != 0) {        error(0, "HTTP[%s]: Authorization failure",              octstr_get_cstr(conn->id));        retmsg = octstr_create("Authorization failed for sendsms");    }    else if (from == NULL || to == NULL || text == NULL) {	        error(0, "HTTP[%s]: Insufficient args",              octstr_get_cstr(conn->id));        retmsg = octstr_create("Insufficient args, rejected");    }    else if (udh != NULL && (octstr_len(udh) != octstr_get_char(udh, 0) + 1)) {        error(0, "HTTP[%s]: UDH field misformed, rejected",              octstr_get_cstr(conn->id));        retmsg = octstr_create("UDH field misformed, rejected");    }    else if (udh != NULL && octstr_len(udh) > MAX_SMS_OCTETS) {        error(0, "HTTP[%s]: UDH field is too long, rejected",              octstr_get_cstr(conn->id));        retmsg = octstr_create("UDH field is too long, rejected");    }    else {	Msg *msg;	msg = msg_create(sms);	debug("smsc.http.kannel", 0, "HTTP[%s]: Constructing new SMS",          octstr_get_cstr(conn->id));		msg->sms.sender = octstr_duplicate(from);	msg->sms.receiver = octstr_duplicate(to);	msg->sms.msgdata = octstr_duplicate(text);	msg->sms.udhdata = octstr_duplicate(udh);	msg->sms.smsc_id = octstr_duplicate(conn->id);	msg->sms.time = time(NULL);	msg->sms.mclass = mclass;	msg->sms.mwi = mwi;	msg->sms.coding = coding;	msg->sms.validity = validity;	msg->sms.deferred = deferred;	msg->sms.account = octstr_duplicate(account);	msg->sms.binfo = octstr_duplicate(binfo);	ret = bb_smscconn_receive(conn, msg);	if (ret == -1)	    retmsg = octstr_create("Not accepted");	else	    retmsg = octstr_create("Sent.");    }    reply_headers = list_create();    http_header_add(reply_headers, "Content-Type", "text/plain");    debug("smsc.http.kannel", 0, "HTTP[%s]: Sending reply",          octstr_get_cstr(conn->id));    http_send_reply(client, HTTP_ACCEPTED, reply_headers, retmsg);    octstr_destroy(retmsg);    http_destroy_headers(reply_headers);}/*---------------------------------------------------------------- * Brunet - A german aggregator (mainly doing T-Mobil D1 connections) * *  o bruHTT v1.3L (for MO traffic)  *  o bruHTP v2.1 (date 22.04.2003) (for MT traffic) * * Stipe Tolj <tolj@wapme-systems.de> *//* MT related function */static void brunet_send_sms(SMSCConn *conn, Msg *sms){    ConnData *conndata = conn->data;    Octstr *url, *tid;    List *headers;    char id[UUID_STR_LEN + 1];    /*      * Construct TransactionId.     * Beware that brunet needs an "clean" octstr representation,      * without the dashes in the string. So remove them.     */    uuid_unparse(sms->sms.id, id);    tid = octstr_create(id);    octstr_replace(tid, octstr_imm("-"), octstr_imm(""));    /* format the URL for call */    url = octstr_format("%S?"        "CustomerId=%E&MsIsdn=%E&Originator=%E&MessageType=%E"        "&Text=%E&TransactionId=%E"        "&SMSCount=1&ActionType=A&ServiceDeliveryType=P", /* static parts */        conndata->send_url,        conndata->username, sms->sms.receiver, sms->sms.sender,        (octstr_len(sms->sms.udhdata) ? octstr_imm("B") : octstr_imm("S")),        sms->sms.msgdata, tid);    /* add binary UDH header */    if (octstr_len(sms->sms.udhdata)) {        octstr_format_append(url, "&XSer=01%02x%E", octstr_len(sms->sms.udhdata),                              sms->sms.udhdata);    }    /*      * We use &binfo=<foobar> from sendsms interface to encode any additionaly     * proxied parameters, ie. billing information.     */    if (octstr_len(sms->sms.binfo)) {        octstr_url_decode(sms->sms.binfo);        octstr_format_append(url, "&%s", octstr_get_cstr(sms->sms.binfo));    }    headers = list_create();    debug("smsc.http.brunet", 0, "HTTP[%s]: Sending request <%s>",          octstr_get_cstr(conn->id), octstr_get_cstr(url));    /*      * Brunet requires an SSL-enabled HTTP client call, this is handled     * transparently by the Kannel HTTP layer module.     */    http_start_request(conndata->http_ref, HTTP_METHOD_GET, url, headers,                        NULL, 0, sms, NULL);    octstr_destroy(url);    octstr_destroy(tid);    http_destroy_headers(headers);}static void brunet_parse_reply(SMSCConn *conn, Msg *msg, int status,                               List *headers, Octstr *body){    if (status == HTTP_OK || status == HTTP_ACCEPTED) {        if (octstr_case_compare(body, octstr_imm("Status=0")) == 0) {            bb_smscconn_sent(conn, msg, NULL);        } else {            error(0, "HTTP[%s]: Message was malformed. SMSC response `%s'.",                  octstr_get_cstr(conn->id), octstr_get_cstr(body));            bb_smscconn_send_failed(conn, msg,	                SMSCCONN_FAILED_MALFORMED, octstr_duplicate(body));        }    } else {        error(0, "HTTP[%s]: Message was rejected. SMSC reponse `%s'.",              octstr_get_cstr(conn->id), octstr_get_cstr(body));        bb_smscconn_send_failed(conn, msg,	            SMSCCONN_FAILED_REJECTED, octstr_duplicate(body));    }}/* MO related function */static void brunet_receive_sms(SMSCConn *conn, HTTPClient *client,                               List *headers, Octstr *body, List *cgivars){    ConnData *conndata = conn->data;    Octstr *user, *from, *to, *text, *udh, *date, *type;    Octstr *retmsg;    int	mclass, mwi, coding, validity, deferred;    List *reply_headers;    int ret;    mclass = mwi = coding = validity = deferred = 0;    user = http_cgi_variable(cgivars, "CustomerId");    from = http_cgi_variable(cgivars, "MsIsdn");    to = http_cgi_variable(cgivars, "Recipient");    text = http_cgi_variable(cgivars, "SMMO");    udh = http_cgi_variable(cgivars, "XSer");    date = http_cgi_variable(cgivars, "DateReceived");    type = http_cgi_variable(cgivars, "MessageType");    debug("smsc.http.brunet", 0, "HTTP[%s]: Received a request",          octstr_get_cstr(conn->id));        if (user == NULL || octstr_compare(user, conndata->username) != 0) {        error(0, "HTTP[%s]: Authorization failure. CustomerId was <%s>.",              octstr_get_cstr(conn->id), octstr_get_cstr(user));        retmsg = octstr_create("Authorization failed for MO submission.");    }    else if (from == NULL || to == NULL || text == NULL) {        error(0, "HTTP[%s]: Insufficient args.",              octstr_get_cstr(conn->id));        retmsg = octstr_create("Insufficient arguments, rejected.");    }    else {        Msg *msg;        msg = msg_create(sms);        debug("smsc.http.brunet", 0, "HTTP[%s]: Received new MO SMS.",              octstr_get_cstr(conn->id));	        msg->sms.sender = octstr_duplicate(from);        msg->sms.receiver = octstr_duplicate(to);        msg->sms.msgdata = octstr_duplicate(text);        msg->sms.udhdata = octstr_duplicate(udh);        msg->sms.smsc_id = octstr_duplicate(conn->id);        msg->sms.time = time(NULL); /* XXX maybe extract from DateReceived */         msg->sms.mclass = mclass;        msg->sms.mwi = mwi;        msg->sms.coding = coding;        msg->sms.validity = validity;        msg->sms.deferred = deferred;        ret = bb_smscconn_receive(conn, msg);        if (ret == -1)            retmsg = octstr_create("Status=1");        else            retmsg = octstr_create("Status=0");    }    reply_headers = list_create();    http_header_add(reply_headers, "Content-Type", "text/plain");    debug("smsc.http.brunet", 0, "HTTP[%s]: Sending reply `%s'.",          octstr_get_cstr(conn->id), octstr_get_cstr(retmsg));    http_send_reply(client, HTTP_OK, reply_headers, retmsg);    octstr_destroy(retmsg);    http_destroy_headers(reply_headers);}/*---------------------------------------------------------------- * Xidris - An austrian aggregator  * Implementing version 1.3, 06.05.2003 * * Stipe Tolj <tolj@wapme-systems.de> *//* MT related function */static void xidris_send_sms(SMSCConn *conn, Msg *sms){    ConnData *conndata = conn->data;    Octstr *url, *raw, *new_msg;    List *headers;    int dcs, esm_class;    url = raw = new_msg = NULL;    dcs = esm_class = 0;    /* RAW additions to called URL */    if (octstr_len(sms->sms.udhdata)) {        /* set the data coding scheme (DCS) and ESM class fields */        dcs = fields_to_dcs(sms, sms->sms.alt_dcs);        /* ESM_CLASS_SUBMIT_STORE_AND_FORWARD_MODE |            ESM_CLASS_SUBMIT_UDH_INDICATOR */        esm_class = 0x03 | 0x40;             /* prepend UDH header to message block */        new_msg = octstr_duplicate(sms->sms.udhdata);        octstr_append(new_msg, sms->sms.msgdata);        raw = octstr_format("&dcs=%d&esm=%d", dcs, esm_class);    }    /* format the URL for call */    url = octstr_format("%S?"        "app_id=%E&key=%E&dest_addr=%E&source_addr=%E"        "&type=%E&message=%E",        conndata->send_url,        conndata->username, conndata->password, sms->sms.receiver, sms->sms.sender,        (raw ? octstr_imm("200") : (sms->sms.mclass ? octstr_imm("1") : octstr_imm("0"))),         (raw ? new_msg : sms->sms.msgdata));    if (raw) {        octstr_append(url, raw);    }    /*      * We use &account=<foobar> from sendsms interface to encode any additionaly     * proxied parameters, ie. billing information.     */    if (octstr_len(sms->sms.account)) {        octstr_url_decode(sms->sms.account);        octstr_format_append(url, "&%s", octstr_get_cstr(sms->sms.account));    }    headers = list_create();    debug("smsc.http.xidris", 0, "HTTP[%s]: Sending request <%s>",          octstr_get_cstr(conn->id), octstr_get_cstr(url));    http_start_request(conndata->http_ref, HTTP_METHOD_GET, url, headers,                        NULL, 0, sms, NULL);    octstr_destroy(url);    octstr_destroy(raw);

⌨️ 快捷键说明

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