Hey, On Sat, 2005-08-27 at 04:12 -0600, Alejandro Ramirez wrote: > I really need to set up a broadcast, but telco is asking me to send > the messages with ESM CLASS of DATAGRAM MODE. I've read in the mailing > list and I've changed the line 638 of the code of smsc_smpp.c to the > corresponding type. > > How ever when I try to send a SMS it STILL goes out with the ESM CLASS > of STORE & Forward??? > > Do i need to change the code somewhere else??
Apply the attached patch against CVS HEAD. It implements the submission_mode sendsms CGI variable so you can set the esm_class field of SMPP to one of: #define ESM_CLASS_SUBMIT_DEFAULT_SMSC_MODE 0x00000000 #define ESM_CLASS_SUBMIT_DATAGRAM_MODE 0x00000001 #define ESM_CLASS_SUBMIT_FORWARD_MODE 0x00000002 #define ESM_CLASS_SUBMIT_STORE_AND_FORWARD_MODE 0x00000003 via the sendsms CGI interface. Something like this to use datagram mode should work: http://localhost:10001/cgi-bin/sendsms?user=test&password=test&from=1234&to=1234&text=testing&submission_mode=1 -HTH -- .O. ..O Enver ALTIN | http://skyblue.gen.tr/ OOO Software developer @ Parkyeri | http://www.parkyeri.com/
Index: doc/userguide/userguide.xml =================================================================== RCS file: /home/cvs/gateway/doc/userguide/userguide.xml,v retrieving revision 1.302 diff -u -p -d -r1.302 userguide.xml --- doc/userguide/userguide.xml 26 Jul 2005 12:47:17 -0000 1.302 +++ doc/userguide/userguide.xml 27 Aug 2005 12:14:09 -0000 @@ -3419,6 +3419,14 @@ smsc-password = foo priority) </entry></row> + <row><entry><literal>submission_mode</literal><entry> + <entry><literal>number</literal></entry> + <entry valign="bottom"> + Optional, sets the esm_class field of SMPP submit_sm request. + Possible values are: 0 = Default SMSC mode, 1 = Datagram Mode, + 2 = Forward Mode, 3 = Store and Forward mode (Default). + </entry></row> + </tbody></tgroup></informaltable> </sect2> Index: gw/msg-decl.h =================================================================== RCS file: /home/cvs/gateway/gw/msg-decl.h,v retrieving revision 1.30 diff -u -p -d -r1.30 msg-decl.h --- gw/msg-decl.h 11 Feb 2005 15:35:48 -0000 1.30 +++ gw/msg-decl.h 27 Aug 2005 12:14:09 -0000 @@ -106,6 +106,7 @@ MSG(sms, INTEGER(msg_left); VOID(split_parts); INTEGER(priority); + INTEGER(submission_mode); }) MSG(ack, Index: gw/smsbox.c =================================================================== RCS file: /home/cvs/gateway/gw/smsbox.c,v retrieving revision 1.258 diff -u -p -d -r1.258 smsbox.c --- gw/smsbox.c 14 Apr 2005 11:58:57 -0000 1.258 +++ gw/smsbox.c 27 Aug 2005 12:14:09 -0000 @@ -502,7 +502,8 @@ static void get_x_kannel_from_headers(Li int *validity, int *deferred, int *dlr_mask, Octstr **dlr_url, Octstr **account, int *pid, int *alt_dcs, - int *rpi, Octstr **binfo, int *priority) + int *rpi, Octstr **binfo, int *priority, + int *submission_mode) { Octstr *name, *val; long l; @@ -592,6 +593,9 @@ static void get_x_kannel_from_headers(Li else if (octstr_case_compare(name, octstr_imm("X-Kannel-Priority")) == 0) { sscanf(octstr_get_cstr(val),"%d", priority); } + else if (octstr_case_compare(name, octstr_imm("X-Kannel-Submission-Mode")) == 0) { + sscanf(octstr_get_cstr(val),"%d", submission_mode); + } octstr_destroy(name); octstr_destroy(val); } @@ -648,7 +652,7 @@ static void get_x_kannel_from_xml(int re int *dlr_mask, Octstr **dlr_url, Octstr **account, int *pid, int *alt_dcs, int *rpi, List **tolist, Octstr **charset, - Octstr **binfo, int *priority) + Octstr **binfo, int *priority, int *submission_mode) { Octstr *text, *tmp, *tmp2; @@ -822,6 +826,13 @@ static void get_x_kannel_from_xml(int re *priority = tmplong; O_DESTROY(tmp); } + + get_tag(*body, octstr_imm("submission_mode"), &tmp, 0, 0); + if(tmp) { + if(octstr_parse_long(&tmplong, tmp, 0, 10) != -1) + *submission_mode = tmplong; + O_DESTROY(tmp); + } /* charset from <?xml...encoding=?> */ tmp = find_charset_encoding(*body); @@ -862,7 +873,8 @@ static void fill_message(Msg *msg, URLTr 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) + Octstr *charset, Octstr *binfo, int priority, + int submission_mode) { msg->sms.msgdata = replytext; msg->sms.time = time(NULL); @@ -1020,6 +1032,13 @@ static void fill_message(Msg *msg, URLTr else warning(0, "Tried to change priority to '%d', denied.", priority); } + + if (submission_mode != SMS_PARAM_UNDEFINED) { + if (urltrans_accept_x_kannel_headers(trans)) + msg->sms.submission_mode = submission_mode; + else + warning(0, "Tried to change submission mode to '%d', denied.", submission_mode); + } } @@ -1097,7 +1116,7 @@ static void url_result_thread(void *arg) Octstr *reply_body, *charset; Octstr *udh, *from, *to, *dlr_url, *account, *smsc, *binfo; int dlr_mask, mclass, mwi, coding, compress, pid, alt_dcs, rpi; - int validity, deferred, priority; + int validity, deferred, priority, submission_mode; text_html = octstr_imm("text/html"); text_wml = octstr_imm("text/vnd.wap.wml"); @@ -1115,7 +1134,7 @@ static void url_result_thread(void *arg) octets = 0; from = to = udh = smsc = dlr_url = account = binfo = charset = NULL; mclass = mwi = coding = compress = pid = alt_dcs = rpi = dlr_mask - = validity = deferred = priority = SMS_PARAM_UNDEFINED; + = validity = deferred = priority = submission_mode = SMS_PARAM_UNDEFINED; get_receiver(id, &msg, &trans, &method, &req_url, &req_headers, &req_body, &retries); @@ -1133,7 +1152,7 @@ static void url_result_thread(void *arg) &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, - &binfo, &priority); + &binfo, &priority, &submission_mode); } else if (octstr_case_compare(type, text_plain) == 0) { replytext = octstr_duplicate(reply_body); octstr_destroy(reply_body); @@ -1143,7 +1162,7 @@ static void url_result_thread(void *arg) &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, - &binfo, &priority); + &binfo, &priority, &submission_mode); } else if (octstr_case_compare(type, text_xml) == 0) { replytext = octstr_duplicate(reply_body); octstr_destroy(reply_body); @@ -1152,7 +1171,7 @@ static void url_result_thread(void *arg) &from, &to, &udh, NULL, NULL, &smsc, &mclass, &mwi, &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, NULL, &charset, - &binfo, &priority); + &binfo, &priority, &submission_mode); } else if (octstr_case_compare(type, octet_stream) == 0) { replytext = octstr_duplicate(reply_body); octstr_destroy(reply_body); @@ -1163,7 +1182,7 @@ static void url_result_thread(void *arg) &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, - &binfo, &priority); + &binfo, &priority, &submission_mode); } else { replytext = octstr_duplicate(reply_couldnotrepresent); } @@ -1183,7 +1202,7 @@ static void url_result_thread(void *arg) 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, priority); + binfo, priority, submission_mode); if (final_url == NULL) final_url = octstr_imm(""); @@ -1965,7 +1984,8 @@ static Octstr *smsbox_req_handle(URLTran 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, int priority) + List *receiver, Octstr *binfo, int priority, + int submission_mode) { Msg *msg = NULL; Octstr *newfrom, *returnerror, *receiv; @@ -2260,6 +2280,11 @@ static Octstr *smsbox_req_handle(URLTran } msg->sms.priority = priority; + if (submission_mode != SMS_PARAM_UNDEFINED && (submission_mode < 0 || submission_mode > 3)) { + returnerror = octstr_create("Submission mode field misformed, rejected"); + goto fielderror; + } + msg->sms.submission_mode = submission_mode; /* new smsc-id argument - we should check this one, if able, but that's advanced logics -- Kalle */ @@ -2477,11 +2502,11 @@ static Octstr *smsbox_req_sendsms(List * Octstr *from, *to, *charset, *text, *udh, *smsc, *dlr_url, *account; Octstr *binfo; int dlr_mask, mclass, mwi, coding, compress, validity, deferred, pid; - int alt_dcs, rpi, priority; + int alt_dcs, rpi, priority, submission_mode; from = to = udh = text = smsc = account = dlr_url = charset = binfo = NULL; mclass = mwi = coding = compress = validity = deferred = dlr_mask = - pid = alt_dcs = rpi = priority = SMS_PARAM_UNDEFINED; + pid = alt_dcs = rpi = priority = submission_mode = SMS_PARAM_UNDEFINED; /* check the username and password */ t = authorise_user(args, client_ip); @@ -2552,6 +2577,10 @@ static Octstr *smsbox_req_sendsms(List * tmp_string = http_cgi_variable(args, "priority"); if(tmp_string != NULL) sscanf(octstr_get_cstr(tmp_string),"%d", &priority); + + tmp_string = http_cgi_variable(args, "submission_mode"); + if(tmp_string != NULL) + sscanf(octstr_get_cstr(tmp_string),"%d", &submission_mode); /* * we required "to" to be defined @@ -2571,7 +2600,7 @@ static Octstr *smsbox_req_sendsms(List * return smsbox_req_handle(t, client_ip, stored_uuid, from, to, text, charset, udh, smsc, mclass, mwi, coding, compress, validity, deferred, status, dlr_mask, dlr_url, account, - pid, alt_dcs, rpi, NULL, binfo, priority); + pid, alt_dcs, rpi, NULL, binfo, priority, submission_mode); } @@ -2591,7 +2620,7 @@ static Octstr *smsbox_sendsms_post(List Octstr *text; Octstr *from, *to, *udh, *smsc, *charset, *dlr_url, *account, *binfo; int dlr_mask, mclass, mwi, coding, compress, validity, deferred; - int pid, alt_dcs, rpi, priority; + int pid, alt_dcs, rpi, priority, submission_mode; text_html = octstr_imm("text/html"); text_wml = octstr_imm("text/vnd.wap.wml"); @@ -2603,7 +2632,7 @@ static Octstr *smsbox_sendsms_post(List tolist = NULL; from = to = udh = smsc = account = dlr_url = charset = binfo = NULL; mclass = mwi = coding = compress = validity = deferred = dlr_mask = - pid = alt_dcs = rpi = priority = SMS_PARAM_UNDEFINED; + pid = alt_dcs = rpi = priority = submission_mode = SMS_PARAM_UNDEFINED; http_header_get_content_type(headers, &type, &charset); if (octstr_case_compare(type, text_html) == 0 || @@ -2617,7 +2646,7 @@ static Octstr *smsbox_sendsms_post(List &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, - &binfo, &priority); + &binfo, &priority, &submission_mode); } 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, @@ -2625,13 +2654,14 @@ static Octstr *smsbox_sendsms_post(List &coding, &compress, &validity, &deferred, &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &rpi, - &binfo, &priority); + &binfo, &priority, &submission_mode); } 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, &priority); + &rpi, &tolist, &charset, &binfo, &priority, + &submission_mode); } else { *status = HTTP_BAD_REQUEST; ret = octstr_create("Invalid content-type"); @@ -2682,7 +2712,7 @@ static Octstr *smsbox_sendsms_post(List udh, smsc, mclass, mwi, coding, compress, validity, deferred, status, dlr_mask, dlr_url, account, pid, alt_dcs, rpi, tolist, - binfo, priority); + binfo, priority, submission_mode); } error2: Index: gw/smsc/smsc_smpp.c =================================================================== RCS file: /home/cvs/gateway/gw/smsc/smsc_smpp.c,v retrieving revision 1.82 diff -u -p -d -r1.82 smsc_smpp.c --- gw/smsc/smsc_smpp.c 12 Aug 2005 16:12:58 -0000 1.82 +++ gw/smsc/smsc_smpp.c 27 Aug 2005 12:14:09 -0000 @@ -667,7 +667,10 @@ static SMPP_PDU *msg_to_pdu(SMPP *smpp, * set the esm_class field * default is store and forward, plus udh and rpi if requested */ - pdu->u.submit_sm.esm_class = ESM_CLASS_SUBMIT_STORE_AND_FORWARD_MODE; + if (msg->sms.submission_mode != SMS_PARAM_UNDEFINED) + pdu->u.submit_sm.esm_class = msg->sms.submission_mode; + else + pdu->u.submit_sm.esm_class = ESM_CLASS_SUBMIT_STORE_AND_FORWARD_MODE; if (octstr_len(msg->sms.udhdata)) pdu->u.submit_sm.esm_class = pdu->u.submit_sm.esm_class | ESM_CLASS_SUBMIT_UDH_INDICATOR;
signature.asc
Description: This is a digitally signed message part