Re: [Kannel-Devel] additional TLV patches for kannel?
Peter Beckman <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <[email protected]> |
The last patch was for 1.3.2; nobody has patched 1.4.0 and posted it. Attached. On Mon, 27 Feb 2006, Maurice Carron wrote: > Hey, > > I was wondering if anyone could point me to patches to add additional TLV's > to Kannel in particular one that will be compatable with the mBlox service. > I've seen patches available for an older version of Kannel and was wondering > if there is a current patch for mBlox using Kannel 1.4.0? > > -Maurice > --------------------------------------------------------------------------- Peter Beckman Internet Guy [email protected] http://www.purplecow.com/ ---------------------------------------------------------------------------
mblox_optionals_0.1.diff
(text/plain, 18.3 KB)
diff -ru gateway-1.3.2/ChangeLog gateway-1.3.2-mblox/ChangeLog --- gateway-1.3.2/ChangeLog 2004-07-14 10:42:18.000000000 +0000 +++ gateway-1.3.2-mblox/ChangeLog 2004-08-24 08:33:58.000000000 +0000 @@ -1,2 +1,5 @@ -2004-07-14 Stipe Tolj <[email protected]> - * Making development release 1.3.2. +2004-07-09 Ian Cass <[email protected]? + * Add mBlox optional parameters for PSMS +2004-07-09 Stipe Tolj <[email protected]> + * test/test_headers.c: fixing command line options and argument handling + which breaks "make check" target. diff -ru gateway-1.3.2/VERSION gateway-1.3.2-mblox/VERSION --- gateway-1.3.2/VERSION 2004-07-14 13:17:26.000000000 +0000 +++ gateway-1.3.2-mblox/VERSION 2004-08-24 08:34:25.000000000 +0000 @@ -1,4 +1,4 @@ -1.3.2 +1.3.2-mblox This file contains the version number of the gateway. It is stored on the first line. Nothing else should be there. diff -ru gateway-1.3.2/gw/bb_alog.c gateway-1.3.2-mblox/gw/bb_alog.c --- gateway-1.3.2/gw/bb_alog.c 2004-06-20 21:25:19.000000000 +0000 +++ gateway-1.3.2-mblox/gw/bb_alog.c 2004-08-24 08:32:25.000000000 +0000 @@ -80,6 +80,8 @@ * %i - smsc-id * %n - service-name (for MO) or sendsms-user (for MT) * %A - account + * %O - mBlox billing tag + * %o - mBlox operator tag * %B - billing identifier/information * %p - sender (from) * %P - receiver (to) @@ -285,6 +287,18 @@ octstr_append_decimal(result, octstr_len(msg->sms.udhdata)); break; + case 'O': /* mBlox billing identifier + if (octstr_len(msg->sms.mblox_billing)) { + octstr_append(result, msg->sms.mblox_billing); + } + break; + + case 'o': /* mBlox operator identifier + if (octstr_len(msg->sms.mblox_operator)) { + octstr_append(result, msg->sms.mblox_operator); + } + break; + case 'B': /* billing identifier/information */ if (octstr_len(msg->sms.binfo)) { octstr_append(result, msg->sms.binfo); diff -ru gateway-1.3.2/gw/msg-decl.h gateway-1.3.2-mblox/gw/msg-decl.h --- gateway-1.3.2/gw/msg-decl.h 2004-06-21 21:16:05.000000000 +0000 +++ gateway-1.3.2-mblox/gw/msg-decl.h 2004-08-24 08:32:25.000000000 +0000 @@ -103,6 +103,8 @@ OCTSTR(charset); OCTSTR(boxc_id); OCTSTR(binfo); + OCTSTR(mblox_billing); + OCTSTR(mblox_operator); INTEGER(msg_left); }) diff -ru gateway-1.3.2/gw/smsbox.c gateway-1.3.2-mblox/gw/smsbox.c --- gateway-1.3.2/gw/smsbox.c 2004-06-28 10:37:19.000000000 +0000 +++ gateway-1.3.2-mblox/gw/smsbox.c 2004-08-24 08:32:25.000000000 +0000 @@ -429,7 +429,8 @@ int *validity, int *deferred, int *dlr_mask, Octstr **dlr_url, Octstr **account, int *pid, int *alt_dcs, - int *rpi, Octstr **binfo) + int *rpi, Octstr **binfo, + Octstr **mblox_billing, Octstr **mblox_operator) { Octstr *name, *val; long l; @@ -482,6 +483,14 @@ *account = octstr_duplicate(val); octstr_strip_blanks(*account); } + else if (octstr_case_compare(name, octstr_imm("X-Kannel-mBlox-Billing")) == 0) { + *mblox_billing = octstr_duplicate(val); + octstr_strip_blanks(*mblox_billing); + } + else if (octstr_case_compare(name, octstr_imm("X-Kannel-mBlox-Operator")) == 0) { + *mblox_operator = octstr_duplicate(val); + octstr_strip_blanks(*mblox_operator); + } else if (octstr_case_compare(name, octstr_imm("X-Kannel-BInfo")) == 0) { *binfo = octstr_duplicate(val); octstr_strip_blanks(*binfo); @@ -572,7 +581,8 @@ int *dlr_mask, Octstr **dlr_url, Octstr **account, int *pid, int *alt_dcs, int *rpi, List **tolist, Octstr **charset, - Octstr **binfo) + Octstr **binfo, + Octstr **mblox_billing, Octstr **mblox_operator) { Octstr *text, *tmp, *tmp2; @@ -598,6 +608,12 @@ /* account */ get_tag(tmp, octstr_imm("account"), account, 0, 0); + /* mblox_billing */ + get_tag(tmp, octstr_imm("mblox_billing"), mblox_billing, 0, 0); + + /* mblox_operator */ + get_tag(tmp, octstr_imm("mblox_operator"), mblox_operator, 0, 0); + /* binfo */ get_tag(tmp, octstr_imm("binfo"), binfo, 0, 0); @@ -778,7 +794,8 @@ 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) + Octstr *charset, Octstr *binfo, + Octstr *mblox_billing, Octstr *mblox_operator) { msg->sms.msgdata = replytext; msg->sms.time = time(NULL); @@ -920,6 +937,26 @@ } } + if (mblox_billing) { + if (urltrans_accept_x_kannel_headers(trans)) { + msg->sms.mblox_billing = mblox_billing; + } else { + warning(0, "Tried to change mBlox billing info to '%s', denied.", + octstr_get_cstr(mblox_billing)); + octstr_destroy(mblox_billing); + } + } + + if (mblox_operator) { + if (urltrans_accept_x_kannel_headers(trans)) { + msg->sms.mblox_operator = mblox_operator; + } else { + warning(0, "Tried to change mBlox operator info to '%s', denied.", + octstr_get_cstr(mblox_operator)); + octstr_destroy(mblox_operator); + } + } + if (binfo) { if (urltrans_accept_x_kannel_headers(trans)) { msg->sms.binfo = binfo; @@ -1005,7 +1042,7 @@ unsigned int queued; /* indicate if processes reply is requeued */ Octstr *reply_body, *charset; - Octstr *udh, *from, *to, *dlr_url, *account, *smsc, *binfo; + Octstr *udh, *from, *to, *dlr_url, *account, *smsc, *binfo, *mblox_billing, *mblox_operator; int dlr_mask, mclass, mwi, coding, compress, pid, alt_dcs, rpi; int validity, deferred; @@ -1023,7 +1060,7 @@ break; octets = 0; - from = to = udh = smsc = dlr_url = account = binfo = charset = NULL; + from = to = udh = smsc = dlr_url = account = binfo = charset = mblox_billing = mblox_operator = NULL; mclass = mwi = coding = compress = pid = alt_dcs = rpi = dlr_mask = validity = deferred = -1; @@ -1043,7 +1080,8 @@ &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, - &binfo); + &binfo, + &mblox_billing, &mblox_operator); } else if (octstr_case_compare(type, text_plain) == 0) { replytext = octstr_duplicate(reply_body); octstr_destroy(reply_body); @@ -1053,7 +1091,8 @@ &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, - &binfo); + &binfo, + &mblox_billing, &mblox_operator); } else if (octstr_case_compare(type, text_xml) == 0) { replytext = octstr_duplicate(reply_body); octstr_destroy(reply_body); @@ -1062,7 +1101,8 @@ &from, &to, &udh, NULL, NULL, &smsc, &mclass, &mwi, &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, NULL, &charset, - &binfo); + &binfo, + &mblox_billing, &mblox_operator); } else if (octstr_case_compare(type, octet_stream) == 0) { replytext = octstr_duplicate(reply_body); octstr_destroy(reply_body); @@ -1073,7 +1113,8 @@ &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, - &binfo); + &binfo, + &mblox_billing, &mblox_operator); } else { replytext = octstr_duplicate(reply_couldnotrepresent); } @@ -1093,7 +1134,7 @@ fill_message(msg, trans, replytext, octets, from, to, udh, mclass, mwi, coding, compress, validity, deferred, dlr_url, dlr_mask, pid, alt_dcs, rpi, smsc, account, charset, - binfo); + binfo, mblox_billing, mblox_operator); if (final_url == NULL) final_url = octstr_imm(""); @@ -1346,6 +1387,20 @@ octstr_get_cstr(os)); octstr_destroy(os); } + if (octstr_len(msg->sms.mblox_billing)) { + Octstr *os; + os = octstr_duplicate(msg->sms.mblox_billing); + http_header_add(request_headers, "X-Kannel-mBlox-Billing", + octstr_get_cstr(os)); + octstr_destroy(os); + } + if (octstr_len(msg->sms.mblox_operator)) { + Octstr *os; + os = octstr_duplicate(msg->sms.mblox_operator); + http_header_add(request_headers, "X-Kannel-mBlox-Operator", + octstr_get_cstr(os)); + octstr_destroy(os); + } if (octstr_len(msg->sms.binfo)) { Octstr *os; os = octstr_duplicate(msg->sms.binfo); @@ -1842,7 +1897,8 @@ int validity, int deferred, int *status, int dlr_mask, Octstr *dlr_url, Octstr *account, int pid, int alt_dcs, int rpi, - List *receiver, Octstr *binfo) + List *receiver, Octstr *binfo, + Octstr *mblox_billing, Octstr *mblox_operator) { Msg *msg = NULL; Octstr *newfrom, *returnerror, *receiv; @@ -2027,6 +2083,12 @@ msg->sms.msgdata = text ? octstr_duplicate(text) : octstr_create(""); msg->sms.udhdata = udh ? octstr_duplicate(udh) : octstr_create(""); + if (octstr_len(mblox_billing)) + msg->sms.mblox_billing = octstr_duplicate(mblox_billing); + + if (octstr_len(mblox_operator)) + msg->sms.mblox_operator = octstr_duplicate(mblox_operator); + if (octstr_len(binfo)) msg->sms.binfo = octstr_duplicate(binfo); @@ -2337,10 +2399,12 @@ Octstr *tmp_string; Octstr *from, *to, *charset, *text, *udh, *smsc, *dlr_url, *account; Octstr *binfo; + Octstr *mblox_billing, *mblox_operator; int dlr_mask, mclass, mwi, coding, compress, validity, deferred, pid; int alt_dcs, rpi; - from = to = udh = text = smsc = account = dlr_url = charset = binfo = NULL; + from = to = udh = text = smsc = account = dlr_url = charset = binfo = + mblox_billing = mblox_operator = NULL; mclass = mwi = coding = compress = validity = deferred = dlr_mask = pid = alt_dcs = rpi = -1; @@ -2358,6 +2422,8 @@ from = http_cgi_variable(args, "from"); to = http_cgi_variable(args, "to"); account = http_cgi_variable(args, "account"); + mblox_billing = http_cgi_variable(args, "mblox_billing"); + mblox_operator = http_cgi_variable(args, "mblox_operator"); binfo = http_cgi_variable(args, "binfo"); dlr_url = http_cgi_variable(args, "dlr-url"); if(dlr_url == NULL) { /* deprecated dlrurl without "-" */ @@ -2428,7 +2494,7 @@ return smsbox_req_handle(t, client_ip, from, to, text, charset, udh, smsc, mclass, mwi, coding, compress, validity, deferred, status, dlr_mask, dlr_url, account, - pid, alt_dcs, rpi, NULL, binfo); + pid, alt_dcs, rpi, NULL, binfo, mblox_billing, mblox_operator); } @@ -2446,6 +2512,7 @@ Octstr *text_html, *text_plain, *text_wml, *text_xml, *octet_stream; Octstr *text; Octstr *from, *to, *udh, *smsc, *charset, *dlr_url, *account, *binfo; + Octstr *mblox_billing, *mblox_operator; int dlr_mask, mclass, mwi, coding, compress, validity, deferred; int pid, alt_dcs, rpi; @@ -2457,7 +2524,8 @@ user = pass = ret = type = NULL; tolist = NULL; - from = to = udh = smsc = account = dlr_url = charset = binfo = NULL; + from = to = udh = smsc = account = dlr_url = charset = binfo = + mblox_billing, mblox_operator = NULL; mclass = mwi = coding = compress = validity = deferred = dlr_mask = pid = alt_dcs = rpi = -1; @@ -2473,7 +2541,7 @@ &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, - &binfo); + &binfo, &mblox_billing, &mblox_operator); } else if (octstr_case_compare(type, text_plain) == 0 || octstr_case_compare(type, octet_stream) == 0) { get_x_kannel_from_headers(headers, &from, &to, &udh, @@ -2481,13 +2549,13 @@ &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, - &binfo); + &binfo, &mblox_billing, &mblox_operator); } else if (octstr_case_compare(type, text_xml) == 0) { get_x_kannel_from_xml(mt_push, &type, &body, headers, &from, &to, &udh, &user, &pass, &smsc, &mclass, &mwi, &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, - &rpi, &tolist, &charset, &binfo); + &rpi, &tolist, &charset, &binfo, &mblox_billing, &mblox_operator); } else { *status = HTTP_BAD_REQUEST; ret = octstr_create("Invalid content-type"); @@ -2538,7 +2606,7 @@ udh, smsc, mclass, mwi, coding, compress, validity, deferred, status, dlr_mask, dlr_url, account, pid, alt_dcs, rpi, tolist, - binfo); + binfo, mblox_billing, mblox_operator); } error2: @@ -2550,6 +2618,8 @@ octstr_destroy(smsc); octstr_destroy(dlr_url); octstr_destroy(account); + octstr_destroy(mblox_billing); + octstr_destroy(mblox_operator); octstr_destroy(binfo); error: octstr_destroy(type); @@ -2574,6 +2644,7 @@ { Octstr *ret, *type, *user, *pass; Octstr *from, *to, *udh, *smsc, *charset, *dlr_url, *account, *binfo; + Octstr *mblox_billing, *mblox_operator; Octstr *output; Octstr *method_name; XMLRPCDocument *msg; @@ -2581,7 +2652,8 @@ int dlr_mask, mclass, mwi, coding, compress, validity, deferred, pid, alt_dcs, rpi; - from = to = udh = smsc = account = dlr_url = charset = binfo = NULL; + from = to = udh = smsc = account = dlr_url = charset = binfo = + mblox_billing = mblox_operator = NULL; mclass = mwi = coding = compress = validity = deferred = dlr_mask = pid = alt_dcs = rpi = -1; diff -ru gateway-1.3.2/gw/smsc/smpp_pdu.def gateway-1.3.2-mblox/gw/smsc/smpp_pdu.def --- gateway-1.3.2/gw/smsc/smpp_pdu.def 2004-03-27 17:55:43.000000000 +0000 +++ gateway-1.3.2-mblox/gw/smsc/smpp_pdu.def 2004-08-24 08:32:25.000000000 +0000 @@ -253,6 +253,8 @@ TLV_INTEGER(its_reply_type, 1) TLV_OCTETS(its_session_info, 2, 2) TLV_OCTETS(ussd_service_op, 1, 1) + TLV_OCTETS(mblox_billing, 0, 5) + TLV_OCTETS(mblox_operator, 0, 5) OPTIONAL_END ) @@ -355,6 +357,8 @@ TLV_OCTETS(network_error_code, 3, 3) TLV_INTEGER(message_state, 1) TLV_NULTERMINATED(receipted_message_id, 65) + TLV_OCTETS(mblox_billing, 0, 5) + TLV_OCTETS(mblox_operator, 0, 5) OPTIONAL_END ) diff -ru gateway-1.3.2/gw/smsc/smpp_pdu_opt.def gateway-1.3.2-mblox/gw/smsc/smpp_pdu_opt.def --- gateway-1.3.2/gw/smsc/smpp_pdu_opt.def 2004-03-27 17:55:43.000000000 +0000 +++ gateway-1.3.2-mblox/gw/smsc/smpp_pdu_opt.def 2004-08-24 08:32:25.000000000 +0000 @@ -105,6 +105,8 @@ #define SMPP_alert_on_message_delivery 0x130C #define SMPP_its_reply_type 0x1380 #define SMPP_its_session_info 0x1383 +#define SMPP_mblox_operator 0x1402 +#define SMPP_mblox_billing 0x1403 #endif diff -ru gateway-1.3.2/gw/smsc/smsc_smpp.c gateway-1.3.2-mblox/gw/smsc/smsc_smpp.c --- gateway-1.3.2/gw/smsc/smsc_smpp.c 2004-06-29 08:17:45.000000000 +0000 +++ gateway-1.3.2-mblox/gw/smsc/smsc_smpp.c 2004-08-24 08:32:25.000000000 +0000 @@ -408,6 +408,18 @@ msg->sms.receiver = pdu->u.deliver_sm.destination_addr; pdu->u.deliver_sm.destination_addr = NULL; + /* Check for mBlox billing identifier */ + if (smpp->version > 0x33 && octstr_len(pdu->u.deliver_sm.mblox_billing)) { + msg->sms.mblox_billing = pdu->u.deliver_sm.mblox_billing; + pdu->u.deliver_sm.mblox_billing = NULL; + } + + /* Check for mBlox operator identifier */ + if (smpp->version > 0x33 && octstr_len(pdu->u.deliver_sm.mblox_operator)) { + msg->sms.mblox_operator = pdu->u.deliver_sm.mblox_operator; + pdu->u.deliver_sm.mblox_operator = NULL; + } + /* SMSCs use service_type for billing information */ msg->sms.binfo = pdu->u.deliver_sm.service_type; pdu->u.deliver_sm.service_type = NULL; @@ -739,6 +751,16 @@ if (smpp->version > 0x33 && msg->sms.msg_left > 0) pdu->u.submit_sm.more_messages_to_send = 1; + /* set mBlox billing identifier */ + if (smpp->version > 0x33 && octstr_len(msg->sms.mblox_billing)) { + pdu->u.submit_sm.mblox_billing = octstr_duplicate(msg->sms.mblox_billing); + } + + /* set mBlox operator identifier */ + if (smpp->version > 0x33 && octstr_len(msg->sms.mblox_operator)) { + pdu->u.submit_sm.mblox_operator = octstr_duplicate(msg->sms.mblox_operator); + } + return pdu; } diff -ru gateway-1.3.2/gw/urltrans.c gateway-1.3.2-mblox/gw/urltrans.c --- gateway-1.3.2/gw/urltrans.c 2004-03-08 23:12:56.000000000 +0000 +++ gateway-1.3.2-mblox/gw/urltrans.c 2004-08-24 08:32:25.000000000 +0000 @@ -625,6 +625,24 @@ } break; + case 'O': /* mBlox billing identifier */ + if (octstr_len(request->sms.mblox_billing)) { + enc = octstr_duplicate(request->sms.mblox_billing); + octstr_url_encode(enc); + octstr_append(result, enc); + octstr_destroy(enc); + } + break; + + case 'o': /* mBlox operator identifier */ + if (octstr_len(request->sms.mblox_operator)) { + enc = octstr_duplicate(request->sms.mblox_operator); + 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);