Re: dlr_mysql_add and internal charset
Peter Christensen <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, Revised patches. kannel.mysql.escape2.diff: All relevant queries are escaped now and indents are changed to 4 spaces instead of tabs. kannel.smpp.cp1252.diff: Indents are changed to 4 spaces instead of tabs kannel.smpp.alpha_gsm.diff: Indents are changed to 4 spaces instead of tabs. This patch require that kannel.smpp.cp1252.diff is already present. (The patch converts source_addr to GSM unless alt_charset is set. Got no response to the original patch, but here is a revised version anyway) As for mBlox and pack_udh patches, I didn't expect you to commit it to the CVS anyway. I just thought that I would attach every part of my patch, which was not from the original mBlox patch, in case anyone would be interested. I believe that is was Cellebrum or something, which required that we packed the UDH or something. AFAIK NowSMS even have the "feature" set by default. Med venlig hilsen / Best regards Peter Christensen Developer ------------------ Cool Systems ApS Tel: +45 2888 1600 @ : [email protected] www: www.coolsystems.dk Alexander Malysh wrote: > Hi Peter, > > please find comments bellow... > > Thanks, > Alex > > Peter Christensen wrote: >> Hi again, >> >> Here's the lot split into logical pieces (and synchronized with todays >> CVS). >> >> >> kannel.mysql.escape.diff: >> * Escapes strings in dlr_mysql_add INSERT query. >> >> >> kannel.smpp.cp1252.diff: >> * Changed internal non-unicode character set to CP1252 in smsbox and >> SMPP >> >> >> kannel.smpp.errors.diff: >> * Added recognition of all possible SMPP errors (including SMPPv5) >> >> >> kannel.mblox.errors.diff: >> * Added recognition of all mBlox SMPP errors >> >> >> kannel.smpp.pack_udh.diff >> * Added pack_udh option to SMPP. When set, Message is packed with the >> UDH into binary data when sent. >> >> >> Everything but the pack_udh patch have been thoroughly tested with >> millions of messages for seveal months. pack_udh have only been tested >> with some 100-200 different messages. >> >> >> Med venlig hilsen / Best regards >> >> Peter Christensen >> >> Developer >> ------------------ >> Cool Systems ApS >> >> Tel: +45 2888 1600 >> @ : [email protected] >> www: www.coolsystems.dk >> >> > > [snip] > >> >> ------------------------------------------------------------------------ >> >> diff -Nru gateway/gw/dlr_mysql.c gateway.new/gw/dlr_mysql.c >> --- gateway/gw/dlr_mysql.c 2006-01-10 13:53:29.000000000 +0100 >> +++ gateway.new/gw/dlr_mysql.c 2006-01-10 16:05:29.000000000 +0100 >> @@ -140,9 +140,38 @@ >> dlr_db_fields_destroy(fields); >> } >> >> +char *_mysql_escape_string(const char *string) { > > please fix coding style: > funct_name(...) > { > ... > } > >> + unsigned long int size, length; >> + char *buffer; >> + length = strlen(string); >> + size = (strlen(string) << 1) + 1; >> + if ((buffer = (char *)gw_malloc(size)) == NULL) { >> + error(0, "MYSQL: Error allocating buffer for string"); >> + return NULL; >> + } >> + else { >> + mysql_escape_string(buffer, string, length); >> + return buffer; >> + } >> +} >> + > > please fix coding style: indentation are 4 spaces. > >> static void dlr_mysql_add(struct dlr_entry *entry) >> { >> Octstr *sql; >> + char *safe_ts, *safe_src, *safe_url; >> + >> + if ((safe_ts = >> _mysql_escape_string(octstr_get_cstr(entry->timestamp))) == NULL) >> + return; >> + if ((safe_src = >> _mysql_escape_string(octstr_get_cstr(entry->source))) == NULL) { >> + gw_free(safe_ts); >> + return; >> + } >> + if ((safe_url = >> _mysql_escape_string(octstr_get_cstr(entry->url))) == NULL) { >> + gw_free(safe_ts); >> + gw_free(safe_src); >> + return; >> + } >> + > > indentation... > >> >> sql = octstr_format("INSERT INTO %s (%s, %s, %s, %s, %s, %s, %s, >> %s, %s) VALUES " >> "('%s', '%s', '%s', '%s', '%s', '%s', '%d', >> '%s', '%d');", >> @@ -152,10 +181,14 @@ >> octstr_get_cstr(fields->field_serv), >> octstr_get_cstr(fields->field_url), >> octstr_get_cstr(fields->field_mask), >> octstr_get_cstr(fields->field_boxc), >> octstr_get_cstr(fields->field_status), >> - octstr_get_cstr(entry->smsc), >> octstr_get_cstr(entry->timestamp), octstr_get_cstr(entry->source), >> - octstr_get_cstr(entry->destination), >> octstr_get_cstr(entry->service), octstr_get_cstr(entry->url), >> + octstr_get_cstr(entry->smsc), safe_ts, safe_src, >> + octstr_get_cstr(entry->destination), >> octstr_get_cstr(entry->service), safe_url, >> entry->mask, octstr_get_cstr(entry->boxc_id), >> 0); >> >> + gw_free(safe_ts); >> + gw_free(safe_src); >> + gw_free(safe_url); >> + >> > > ditto > >> mysql_update(sql); >> >> >> > > patch looks good. Please fix coding style and it could go into cvs. > Ahh I think you missing update/select case. Unescaped values could also > break update/select statements. > >> ------------------------------------------------------------------------ >> >> diff -Nru gateway/gw/smsbox.c gateway.new/gw/smsbox.c >> --- gateway/gw/smsbox.c 2005-12-09 03:14:31.000000000 +0100 >> +++ gateway.new/gw/smsbox.c 2006-01-10 15:57:05.000000000 +0100 >> @@ -3654,9 +3654,9 @@ >> >> if (coding == DC_7BIT) { >> /* >> - * For 7 bit, convert to ISO-8859-1 >> + * For 7 bit, convert to CP1252 >> */ >> - if (octstr_recode (octstr_imm ("ISO-8859-1"), charset, body) >> < 0) { >> + if (octstr_recode (octstr_imm ("CP1252"), charset, body) < 0) { >> resultcode = -1; >> } >> } else if (coding == DC_UCS2) { >> diff -Nru gateway/gw/smsc/smsc_smpp.c gateway.new/gw/smsc/smsc_smpp.c >> --- gateway/gw/smsc/smsc_smpp.c 2005-12-18 21:21:16.000000000 +0100 >> +++ gateway.new/gw/smsc/smsc_smpp.c 2006-01-10 15:58:41.000000000 >> +0100 >> @@ -78,6 +78,8 @@ >> #include "sms.h" >> #include "dlr.h" >> >> +#define SMPP_CHARSET "CP1252" >> + >> /* >> * Select these based on whether you want to dump SMPP PDUs as they are >> * sent and received or not. Not dumping should be the default in at >> least >> @@ -490,9 +492,9 @@ >> * unless it was specified binary, ie. UDH indicator was >> detected >> */ >> if (smpp->alt_charset && msg->sms.coding != DC_8BIT) { >> - if (charset_convert(msg->sms.msgdata, >> octstr_get_cstr(smpp->alt_charset), "ISO-8859-1") != 0) >> + if (charset_convert(msg->sms.msgdata, >> octstr_get_cstr(smpp->alt_charset), SMPP_CHARSET) != 0) >> error(0, "Failed to convert msgdata from charset >> <%s> to <%s>, will leave as is.", >> - octstr_get_cstr(smpp->alt_charset), >> "ISO-8859-1"); >> + octstr_get_cstr(smpp->alt_charset), >> SMPP_CHARSET); >> msg->sms.coding = DC_7BIT; >> } else { /* assume GSM 03.38 7-bit alphabet */ >> charset_gsm_to_latin1(msg->sms.msgdata); >> @@ -640,9 +642,9 @@ >> * unless it was specified binary, ie. UDH indicator was >> detected >> */ >> if (smpp->alt_charset && msg->sms.coding != DC_8BIT) { >> - if (charset_convert(msg->sms.msgdata, >> octstr_get_cstr(smpp->alt_charset), "ISO-8859-1") != 0) >> + if (charset_convert(msg->sms.msgdata, >> octstr_get_cstr(smpp->alt_charset), SMPP_CHARSET) != 0) >> error(0, "Failed to convert msgdata from charset >> <%s> to <%s>, will leave as is.", >> - octstr_get_cstr(smpp->alt_charset), >> "ISO-8859-1"); >> + octstr_get_cstr(smpp->alt_charset), >> SMPP_CHARSET); >> msg->sms.coding = DC_7BIT; >> } else { /* assume GSM 03.38 7-bit alphabet */ >> charset_gsm_to_latin1(msg->sms.msgdata); >> @@ -845,10 +847,10 @@ >> /* >> * convert to the given alternative charset >> */ >> - if (charset_convert(pdu->u.submit_sm.short_message, >> "ISO-8859-1", >> + if (charset_convert(pdu->u.submit_sm.short_message, >> SMPP_CHARSET, >> octstr_get_cstr(smpp->alt_charset)) >> != 0) >> error(0, "Failed to convert msgdata from charset <%s> >> to <%s>, will send as is.", >> - "ISO-8859-1", >> octstr_get_cstr(smpp->alt_charset)); >> + SMPP_CHARSET, >> octstr_get_cstr(smpp->alt_charset)); >> } >> } >> >> > > I have no strong opinion to this patch. +0 :) > > >> >> ------------------------------------------------------------------------ >> >> diff -Nru gateway/gw/smsc/smpp_pdu.c gateway.new/gw/smsc/smpp_pdu.c >> --- gateway/gw/smsc/smpp_pdu.c 2005-09-02 15:05:15.000000000 +0200 >> +++ gateway.new/gw/smsc/smpp_pdu.c 2006-01-10 16:10:36.000000000 +0100 >> @@ -462,6 +462,8 @@ >> return "Incorrect BIND Status for given command"; >> case SMPP_ESME_RALYNBD: >> return "ESME Already in Bound State"; >> + case SMPP_ESME_RINVPRTFLG: >> + return "Invalid Priority Flag"; >> case SMPP_ESME_RINVREGDLVFLG: >> return "Invalid Registered Delivery Flag"; >> case SMPP_ESME_RSYSERR: >> @@ -469,35 +471,118 @@ >> case SMPP_ESME_RINVSRCADR: >> return "Invalid Source Address"; >> case SMPP_ESME_RINVDSTADR: >> - return "Invalid Dest Address"; >> + return "Invalid Destination Address"; >> case SMPP_ESME_RBINDFAIL: >> return "Bind Failed"; >> case SMPP_ESME_RINVPASWD: >> return "Invalid Password"; >> case SMPP_ESME_RINVSYSID: >> return "Invalid System ID"; >> + case SMPP_ESME_RCANCELFAIL: >> + return "Cancel SM Failed"; >> + case SMPP_ESME_RREPLACEFAIL: >> + return "Replace SM Failed"; >> case SMPP_ESME_RMSGQFUL: >> return "Message Queue Full"; >> + case SMPP_ESME_RINVSERTYP: >> + return "Invalid Service Type"; >> + case SMPP_ESME_RINVNUMDESTS: >> + return "Invalid number of destinations"; >> + case SMPP_ESME_RINVDLNAME: >> + return "Invalid Distribution List Name"; >> + case SMPP_ESME_RINVDESTFLAG: >> + return "Destination flag is invalid"; >> + case SMPP_ESME_RINVSUBREP: >> + return "Submit w/replace not supported/allowed"; >> case SMPP_ESME_RINVESMCLASS: >> return "Invalid esm_class field data"; >> + case SMPP_ESME_RCNTSUBDL: >> + return "Cannot Submit to Distribution List"; >> + case SMPP_ESME_RSUBMITFAIL: >> + return "Submit failed"; >> case SMPP_ESME_RINVSRCTON: >> - return "Invalid Source Address TON"; + return "Invalid >> Source address TON"; + case SMPP_ESME_RINVSRCNPI: >> + return "Invalid Source address NPI"; >> + case SMPP_ESME_RINVDSTTON: >> + return "Invalid Destination address TON"; >> + case SMPP_ESME_RINVDSTNPI: >> + return "Invalid Destination address NPI"; >> + case SMPP_ESME_RINVSYSTYP: >> + return "Invalid system_type field"; >> + case SMPP_ESME_RINVREPFLAG: >> + return "Invalid replace_if_present flag"; >> + case SMPP_ESME_RINVNUMMSGS: >> + return "Invalid number of messages"; >> case SMPP_ESME_RTHROTTLED: >> return "Throttling error"; >> case SMPP_ESME_RINVSCHED: >> return "Invalid Scheduled Delivery Time"; >> case SMPP_ESME_RINVEXPIRY: >> return "Invalid message validity period"; >> + case SMPP_ESME_RINVDFTMSGID: >> + return "Predefined Message ID is Invalid or specific >> predefined message was not found"; >> case SMPP_ESME_RX_T_APPN: >> return "ESME Receiver Temporary App Error Code"; >> case SMPP_ESME_RX_P_APPN: >> return "ESME Receiver Permanent App Error Code"; >> case SMPP_ESME_RX_R_APPN: >> return "ESME Receiver Reject Message Error Code"; >> - case SMPP_ESME_ROPTPARNOTALLWD: >> - return "Optional Parameter not allowed"; >> + case SMPP_ESME_RQUERYFAIL: >> + return "query_sm request failed"; >> + case SMPP_ESME_RINVTLVSTREAM: >> + return "Error in optional part of the PDU Body"; >> + case SMPP_ESME_RTLVNOTALLWD: >> + return "TLV not allowed"; >> + case SMPP_ESME_RINVTLVLEN: >> + return "Invalid Parameter Length"; >> + case SMPP_ESME_RMISSINGTLV: >> + return "Expected TLV missing"; >> + case SMPP_ESME_RINVTLVVAL: >> + return "Invalid TLV value"; >> + case SMPP_ESME_RDELIVERYFAILURE: >> + return "Transaction Delivery Failure"; >> case SMPP_ESME_RUNKNOWNERR: >> return "Unknown Error"; >> + case SMPP_ESME_RSERTYPUNAUTH: >> + return "ESME Not authorized to use specified service_type"; >> + case SMPP_ESME_RPROHIBITED: >> + return "ESME Prohibited from using specified operation"; >> + case SMPP_ESME_RSERTYPUNAVAIL: >> + return "Specified service_type is unavailable"; >> + case SMPP_ESME_RSERTYPDENIED: >> + return "Specified service_Type is denied"; > > service_type maybe ;) > >> + case SMPP_ESME_RINVDCS: >> + return "Invalid Data Coding Scheme"; >> + case SMPP_ESME_RINVSRCADDRSUBUNIT: >> + return "Source Address Sub unit is invalid"; >> + case SMPP_ESME_RINVDSTADDRSUBUNIT: >> + return "Destination Address Sub unit is invalid"; >> + case SMPP_ESME_RINVBCASTFREQINT: >> + return "Broadcast Frequency Interval is invalid"; >> + case SMPP_ESME_RINVBCASTALIAS_NAME: >> + return "Broadcast Alias Name is invalid"; >> + case SMPP_ESME_RINVBCASTAREAFMT: >> + return "Broadcast Area Format is invalid"; >> + case SMPP_ESME_RINVNUMBCAST_AREAS: >> + return "Number of Broadcast Areas is invalid"; >> + case SMPP_ESME_RINVBCASTCNTTYPE: >> + return "Broadcast Content Type is invalid"; >> + case SMPP_ESME_RINVBCASTMSGCLASS: >> + return "Broadcast Message Class is invalid"; >> + case SMPP_ESME_RBCASTFAIL: >> + return "broadcast_sm operation failed"; >> + case SMPP_ESME_RBCASTQUERYFAIL: >> + return "broadcast_query_sm operation failed"; >> + case SMPP_ESME_RBCASTCANCELFAIL: >> + return "broadcast_cancel_sm operation failed"; >> + case SMPP_ESME_RINVBCAST_REP: >> + return "Number of Repeated Broadcasts is invalid"; >> + case SMPP_ESME_RINVBCASTSRVGRP: >> + return "Broadcast Service Group is invalid"; >> + case SMPP_ESME_RINVBCASTCHANIND: >> + return "Broadcast Channel Indicator is invalid"; >> + >> default: >> return "Unknown/Reserved"; >> } >> diff -Nru gateway/gw/smsc/smpp_pdu.h gateway.new/gw/smsc/smpp_pdu.h >> --- gateway/gw/smsc/smpp_pdu.h 2005-02-11 16:35:48.000000000 +0100 >> +++ gateway.new/gw/smsc/smpp_pdu.h 2006-01-10 16:10:50.000000000 +0100 >> @@ -161,24 +161,67 @@ >> SMPP_ESME_RINVCMDID = 0x00000003, >> SMPP_ESME_RINVBNDSTS = 0x00000004, >> SMPP_ESME_RALYNBD = 0x00000005, >> + SMPP_ESME_RINVPRTFLG = 0x00000006, >> SMPP_ESME_RINVREGDLVFLG = 0x00000007, >> SMPP_ESME_RSYSERR = 0x00000008, >> SMPP_ESME_RINVSRCADR = 0x0000000A, >> SMPP_ESME_RINVDSTADR = 0x0000000B, >> + SMPP_ESME_RINVMSGID = 0x0000000C, >> SMPP_ESME_RBINDFAIL = 0x0000000D, >> SMPP_ESME_RINVPASWD = 0x0000000E, >> SMPP_ESME_RINVSYSID = 0x0000000F, >> + SMPP_ESME_RCANCELFAIL = 0x00000011, >> + SMPP_ESME_RREPLACEFAIL = 0x00000013, >> SMPP_ESME_RMSGQFUL = 0x00000014, >> + SMPP_ESME_RINVSERTYP = 0x00000015, >> + SMPP_ESME_RINVNUMDESTS = 0x00000033, >> + SMPP_ESME_RINVDLNAME = 0x00000034, >> + SMPP_ESME_RINVDESTFLAG = 0x00000040, >> + SMPP_ESME_RINVSUBREP = 0x00000042, >> SMPP_ESME_RINVESMCLASS = 0x00000043, >> + SMPP_ESME_RCNTSUBDL = 0x00000044, >> + SMPP_ESME_RSUBMITFAIL = 0x00000045, >> SMPP_ESME_RINVSRCTON = 0x00000048, >> + SMPP_ESME_RINVSRCNPI = 0x00000049, >> + SMPP_ESME_RINVDSTTON = 0x00000050, >> + SMPP_ESME_RINVDSTNPI = 0x00000051, >> + SMPP_ESME_RINVSYSTYP = 0x00000053, >> + SMPP_ESME_RINVREPFLAG = 0x00000054, >> + SMPP_ESME_RINVNUMMSGS = 0x00000055, >> SMPP_ESME_RTHROTTLED = 0x00000058, >> SMPP_ESME_RINVSCHED = 0x00000061, >> SMPP_ESME_RINVEXPIRY = 0x00000062, >> + SMPP_ESME_RINVDFTMSGID = 0x00000063, >> SMPP_ESME_RX_T_APPN = 0x00000064, >> SMPP_ESME_RX_P_APPN = 0x00000065, >> SMPP_ESME_RX_R_APPN = 0x00000066, >> - SMPP_ESME_ROPTPARNOTALLWD = 0x000000C1, >> - SMPP_ESME_RUNKNOWNERR = 0x000000FF >> + SMPP_ESME_RQUERYFAIL = 0x00000067, >> + SMPP_ESME_RINVTLVSTREAM = 0x000000C0, >> + SMPP_ESME_RTLVNOTALLWD = 0x000000C1, >> + SMPP_ESME_RINVTLVLEN = 0x000000C2, >> + SMPP_ESME_RMISSINGTLV = 0x000000C3, >> + SMPP_ESME_RINVTLVVAL = 0x000000C4, >> + SMPP_ESME_RDELIVERYFAILURE = 0x000000FE, >> + SMPP_ESME_RUNKNOWNERR = 0x000000FF, >> + SMPP_ESME_RSERTYPUNAUTH = 0x00000100, >> + SMPP_ESME_RPROHIBITED = 0x00000101, >> + SMPP_ESME_RSERTYPUNAVAIL = 0x00000102, >> + SMPP_ESME_RSERTYPDENIED = 0x00000103, >> + SMPP_ESME_RINVDCS = 0x00000104, >> + SMPP_ESME_RINVSRCADDRSUBUNIT = 0x00000105, >> + SMPP_ESME_RINVDSTADDRSUBUNIT = 0x00000106, >> + SMPP_ESME_RINVBCASTFREQINT = 0x00000107, >> + SMPP_ESME_RINVBCASTALIAS_NAME = 0x00000108, >> + SMPP_ESME_RINVBCASTAREAFMT = 0x00000109, >> + SMPP_ESME_RINVNUMBCAST_AREAS = 0x0000010A, >> + SMPP_ESME_RINVBCASTCNTTYPE = 0x0000010B, >> + SMPP_ESME_RINVBCASTMSGCLASS = 0x0000010C, >> + SMPP_ESME_RBCASTFAIL = 0x0000010D, >> + SMPP_ESME_RBCASTQUERYFAIL = 0x0000010E, >> + SMPP_ESME_RBCASTCANCELFAIL = 0x0000010F, >> + SMPP_ESME_RINVBCAST_REP = 0x00000110, >> + SMPP_ESME_RINVBCASTSRVGRP = 0x00000111, >> + SMPP_ESME_RINVBCASTCHANIND = 0x00000112, >> }; >> >> SMPP_PDU *smpp_pdu_create(unsigned long type, unsigned long seq_no); >> > > patch commited to cvs. > >> >> ------------------------------------------------------------------------ >> >> diff -Nru gateway.new/gw/smsc/smpp_pdu.c gateway.new.2/gw/smsc/smpp_pdu.c >> --- gateway.new/gw/smsc/smpp_pdu.c 2006-01-10 16:10:36.000000000 +0100 >> +++ gateway.new.2/gw/smsc/smpp_pdu.c 2006-01-10 16:10:18.000000000 >> +0100 >> @@ -582,7 +582,78 @@ >> return "Broadcast Service Group is invalid"; >> case SMPP_ESME_RINVBCASTCHANIND: >> return "Broadcast Channel Indicator is invalid"; >> - >> + + case SMPP_ESME_RMBLOX_NUMBER_BLACKLISTED: >> + return "mBlox: Number blacklisted in system"; >> + case SMPP_ESME_RMBLOX_CLIENT_BLACKLISTED: >> + return "mBlox: Client blacklisted in system"; >> + case SMPP_ESME_RMBLOX_PREFIX_BLACKLISTED: >> + return "mBlox: Prefix blacklisted in system"; >> + case SMPP_ESME_RMBLOX_INVALID_ACCOUNT: >> + return "mBlox: Invalid account error"; >> + case SMPP_ESME_RMBLOX_NOT_APPLICABLE1: >> + case SMPP_ESME_RMBLOX_NOT_APPLICABLE2: >> + return "mBlox: No long applicable"; >> + case SMPP_ESME_RMBLOX_DESTINATION_BUSY: >> + return "mBlox: Destination Busy, please try again"; >> + case SMPP_ESME_RMBLOX_REPLY_TYPE_ERROR: >> + return "mBlox: Reply Type Error"; >> + case SMPP_ESME_RMBLOX_MSIP_SYNTAX_ERROR: >> + return "mBlox: MSIP Syntax Error"; >> + case SMPP_ESME_RMBLOX_SYSTEM_UNAVAIL1: >> + case SMPP_ESME_RMBLOX_SYSTEM_UNAVAIL2: >> + case SMPP_ESME_RMBLOX_SYSTEM_UNAVAIL3: >> + return "mBlox: System unavailable"; >> + case SMPP_ESME_RMBLOX_PROFILE_ERROR: >> + return "mBlox: Profile Error"; >> + case SMPP_ESME_RMBLOX_USERNAME_NOT_SET: >> + return "mBlox: Username not set"; >> + case SMPP_ESME_RMBLOX_BINARY_NOT_ALLOWED: >> + return "mBlox: Binary messages not allowed on profile"; >> + case SMPP_ESME_RMBLOX_TEMP_SYSTEM_FAIL: >> + return "mBlox: Temporary System Failure, please retry"; >> + case SMPP_ESME_RMBLOX_UNROUTABLE1: >> + case SMPP_ESME_RMBLOX_UNROUTABLE2: >> + case SMPP_ESME_RMBLOX_UNROUTABLE3: >> + case SMPP_ESME_RMBLOX_UNROUTABLE4: >> + case SMPP_ESME_RMBLOX_UNROUTABLE5: >> + case SMPP_ESME_RMBLOX_UNROUTABLE6: >> + case SMPP_ESME_RMBLOX_UNROUTABLE7: >> + case SMPP_ESME_RMBLOX_UNROUTABLE8: >> + case SMPP_ESME_RMBLOX_UNROUTABLE9: >> + return "mBlox: Number unroutable, do not retry"; >> + case SMPP_ESME_RMBLOX_TEMP_UNROUTABLE1: >> + case SMPP_ESME_RMBLOX_TEMP_UNROUTABLE2: >> + case SMPP_ESME_RMBLOX_TEMP_UNROUTABLE3: >> + case SMPP_ESME_RMBLOX_TEMP_UNROUTABLE4: >> + case SMPP_ESME_RMBLOX_TEMP_UNROUTABLE5: >> + return "mBlox: Number temporarily unroutable, please try again"; >> + case SMPP_ESME_RMBLOX_CURRENT_UNROUTABLE: >> + return "mBlox: Number unroutable on current settings. Do not >> retry"; >> + case SMPP_ESME_RMBLOX_LOCAL_DELIVERER_FAIL: >> + return "mBlox: Unable to send on local deliverer"; >> + case SMPP_ESME_RMBLOX_CANT_FIND_ORIGINATOR: >> + return "mBlox: Cannot find originator index. Do not retry"; >> + case SMPP_ESME_RMBLOX_DESTINATION_RETRY: >> + return "mBlox: Destination please try again"; >> + case SMPP_ESME_RMBLOX_NUMBER_BLOCKED1: >> + case SMPP_ESME_RMBLOX_NUMBER_BLOCKED2: >> + return "mBlox: Number is blocked. Do not retry"; >> + case SMPP_ESME_RMBLOX_BILLING_REF_ERROR: >> + return "mBlox: Billing Reference Error. Do not retry"; >> + case SMPP_ESME_RMBLOX_THROTTLING: >> + return "mBlox: Throttling - Please try again"; >> + case SMPP_ESME_RMBLOX_BAD_SEQUENCE: >> + return "mBlox: Bad sequence"; >> + case SMPP_ESME_RMBLOX_CLIENT_ID_ERROR1: >> + case SMPP_ESME_RMBLOX_CLIENT_ID_ERROR2: >> + return "mBlox: Error when supplying a client id"; >> + case SMPP_ESME_RMBLOX_PSMS_ROUTING_ERROR1: >> + case SMPP_ESME_RMBLOX_PSMS_ROUTING_ERROR2: >> + case SMPP_ESME_RMBLOX_PSMS_ROUTING_ERROR3: >> + case SMPP_ESME_RMBLOX_PSMS_ROUTING_ERROR4: >> + return "mBlox: Routing error for PSMS"; >> + default: >> return "Unknown/Reserved"; >> } >> diff -Nru gateway.new/gw/smsc/smpp_pdu.h gateway.new.2/gw/smsc/smpp_pdu.h >> --- gateway.new/gw/smsc/smpp_pdu.h 2006-01-10 16:10:50.000000000 +0100 >> +++ gateway.new.2/gw/smsc/smpp_pdu.h 2006-01-10 16:10:18.000000000 >> +0100 >> @@ -222,6 +222,52 @@ >> SMPP_ESME_RINVBCAST_REP = 0x00000110, >> SMPP_ESME_RINVBCASTSRVGRP = 0x00000111, >> SMPP_ESME_RINVBCASTCHANIND = 0x00000112, >> + >> + SMPP_ESME_RMBLOX_NUMBER_BLACKLISTED = 0x00000401, >> + SMPP_ESME_RMBLOX_CLIENT_BLACKLISTED = 0x00000402, >> + SMPP_ESME_RMBLOX_PREFIX_BLACKLISTED = 0x00000403, >> + SMPP_ESME_RMBLOX_INVALID_ACCOUNT = 0x00000404, >> + SMPP_ESME_RMBLOX_NOT_APPLICABLE1 = 0x00000405, >> + SMPP_ESME_RMBLOX_DESTINATION_BUSY = 0x00000406, >> + SMPP_ESME_RMBLOX_REPLY_TYPE_ERROR = 0x00000407, >> + SMPP_ESME_RMBLOX_MSIP_SYNTAX_ERROR = 0x00000408, >> + SMPP_ESME_RMBLOX_NOT_APPLICABLE2 = 0x00000409, >> + SMPP_ESME_RMBLOX_SYSTEM_UNAVAIL1 = 0x0000040A, >> + SMPP_ESME_RMBLOX_SYSTEM_UNAVAIL2 = 0x0000040B, >> + SMPP_ESME_RMBLOX_SYSTEM_UNAVAIL3 = 0x0000040C, >> + SMPP_ESME_RMBLOX_PROFILE_ERROR = 0x0000040D, >> + SMPP_ESME_RMBLOX_USERNAME_NOT_SET = 0x0000040E, >> + SMPP_ESME_RMBLOX_BINARY_NOT_ALLOWED = 0x0000040F, >> + SMPP_ESME_RMBLOX_TEMP_SYSTEM_FAIL = 0x00000410, >> + SMPP_ESME_RMBLOX_UNROUTABLE1 = 0x00000411, >> + SMPP_ESME_RMBLOX_TEMP_UNROUTABLE1 = 0x00000412, >> + SMPP_ESME_RMBLOX_UNROUTABLE2 = 0x00000413, >> + SMPP_ESME_RMBLOX_CURRENT_UNROUTABLE = 0x00000414, >> + SMPP_ESME_RMBLOX_TEMP_UNROUTABLE2 = 0x00000415, >> + SMPP_ESME_RMBLOX_UNROUTABLE3 = 0x00000416, >> + SMPP_ESME_RMBLOX_UNROUTABLE4 = 0x00000417, >> + SMPP_ESME_RMBLOX_UNROUTABLE5 = 0x00000418, >> + SMPP_ESME_RMBLOX_UNROUTABLE6 = 0x00000419, >> + SMPP_ESME_RMBLOX_UNROUTABLE7 = 0x0000041A, >> + SMPP_ESME_RMBLOX_UNROUTABLE8 = 0x0000041B, >> + SMPP_ESME_RMBLOX_TEMP_UNROUTABLE3 = 0x0000041C, >> + SMPP_ESME_RMBLOX_UNROUTABLE9 = 0x0000041D, >> + SMPP_ESME_RMBLOX_TEMP_UNROUTABLE4 = 0x0000041E, >> + SMPP_ESME_RMBLOX_TEMP_UNROUTABLE5 = 0x0000041F, >> + SMPP_ESME_RMBLOX_LOCAL_DELIVERER_FAIL = 0x00000420, >> + SMPP_ESME_RMBLOX_CANT_FIND_ORIGINATOR = 0x00000421, >> + SMPP_ESME_RMBLOX_DESTINATION_RETRY = 0x00000422, >> + SMPP_ESME_RMBLOX_NUMBER_BLOCKED1 = 0x00000423, >> + SMPP_ESME_RMBLOX_BILLING_REF_ERROR = 0x00000424, >> + SMPP_ESME_RMBLOX_NUMBER_BLOCKED2 = 0x00000425, >> + SMPP_ESME_RMBLOX_THROTTLING = 0x00000426, >> + SMPP_ESME_RMBLOX_BAD_SEQUENCE = 0x00000427, >> + SMPP_ESME_RMBLOX_CLIENT_ID_ERROR1 = 0x00000428, >> + SMPP_ESME_RMBLOX_CLIENT_ID_ERROR2 = 0x00000429, >> + SMPP_ESME_RMBLOX_PSMS_ROUTING_ERROR1 = 0x0000042A, >> + SMPP_ESME_RMBLOX_PSMS_ROUTING_ERROR2 = 0x0000042B, >> + SMPP_ESME_RMBLOX_PSMS_ROUTING_ERROR3 = 0x0000042C, >> + SMPP_ESME_RMBLOX_PSMS_ROUTING_ERROR4 = 0x0000042D >> }; >> >> SMPP_PDU *smpp_pdu_create(unsigned long type, unsigned long seq_no); >> > > we have coinvinience to not add SMSC specific things into SMSC modules. -1. > > This patch could be provided as add-on on kannel.org side. Stipe? > >> >> ------------------------------------------------------------------------ >> >> diff -Nru gateway/gw/smsc/smsc_smpp.c gateway.new/gw/smsc/smsc_smpp.c >> --- gateway/gw/smsc/smsc_smpp.c 2005-12-18 21:21:16.000000000 +0100 >> +++ gateway.new/gw/smsc/smsc_smpp.c 2006-01-10 16:26:11.000000000 >> +0100 >> @@ -69,6 +69,8 @@ >> either) */ >> /* XXX numbering plans and type of number: check spec */ >> >> +#include <math.h> >> + >> #include "gwlib/gwlib.h" >> #include "msg.h" >> #include "smsc_p.h" >> @@ -159,6 +161,7 @@ >> long connection_timeout; >> long wait_ack; >> int wait_ack_action; >> + int pack_udh; >> SMSCConn *conn; } SMPP; @@ -211,7 +214,7 @@ >> Octstr *my_number, int smpp_msg_id_type, >> int autodetect_addr, Octstr *alt_charset, >> Octstr *service_type, long connection_timeout, >> - long wait_ack, int wait_ack_action) >> + long wait_ack, int wait_ack_action, int >> pack_udh) { SMPP *smpp; @@ -251,6 +254,7 @@ >> smpp->connection_timeout = connection_timeout; >> smpp->wait_ack = wait_ack; >> smpp->wait_ack_action = wait_ack_action; >> + smpp->pack_udh = pack_udh; >> return smpp; } @@ -711,6 +715,45 @@ >> } >> } >> >> +static Octstr *smpp_pack_septets (Octstr *string) { >> + int i, len; >> + Octstr *res = octstr_create(""); >> + len = octstr_len(string); >> + for (i=0; i<len; i++) { >> + unsigned char val1, val2, val3; >> + val1 = octstr_get_char(string, i) & 0x7F; >> + if (i + 1 < len) >> + val2 = octstr_get_char(string, i + 1) & 0x7F; >> + else >> + val2 = 0; >> + val3 = ((val1 >> (i & 7)) | (val2 << (7 - (i & 7)))) & 0xFF; >> + octstr_append_char(res, val3); >> + if ((i & 7) == 6) >> + i = i + 1; >> + } >> + return res; >> +} >> + >> +static Octstr *smpp_unpack_septets (Octstr *string, int len) { >> + int i, j; >> + Octstr *res; >> + if (len == 0) >> + len = ceil((float)octstr_len(string) * 8.0 / 7.0); >> + res = octstr_create(""); >> + j = 0; >> + for (i=0; i<len; i++) { >> + octstr_append_char( >> + res, >> + ( >> + (j < octstr_len(string) ? (octstr_get_char(string, >> j) << (i & 0x07)) : 0) | >> + (j > 0 && j - 1 < octstr_len(string) ? >> (octstr_get_char(string, j - 1) >> (8 - (i & 0x07))) : 0) >> + ) & 0x7F); >> + if ((i & 7) != 7) >> + j++; >> + } >> + return res; >> +} >> + >> >> static SMPP_PDU *msg_to_pdu(SMPP *smpp, Msg *msg) >> { >> @@ -854,7 +897,25 @@ >> >> /* prepend udh if present */ >> if (octstr_len(msg->sms.udhdata)) { >> - octstr_insert(pdu->u.submit_sm.short_message, >> msg->sms.udhdata, 0); >> + if (smpp->pack_udh && msg->sms.coding == DC_7BIT) { >> + Octstr *udh_septets = >> smpp_unpack_septets(msg->sms.udhdata, 0); >> + Octstr *message; >> + >> + octstr_insert(pdu->u.submit_sm.short_message, >> udh_septets, 0); >> + >> + if (((octstr_len(pdu->u.submit_sm.short_message) + 1) & >> 7) == 0) { >> + /* message length will result in an @ in the end. Add >> a space instead */ >> + octstr_append_char(pdu->u.submit_sm.short_message, ' '); >> + } >> + >> + octstr_destroy(udh_septets); >> + message = smpp_pack_septets(pdu->u.submit_sm.short_message); >> + >> + octstr_destroy(pdu->u.submit_sm.short_message); >> + pdu->u.submit_sm.short_message = message; >> + } >> + else >> + octstr_insert(pdu->u.submit_sm.short_message, >> msg->sms.udhdata, 0); >> } >> >> pdu->u.submit_sm.sm_length = >> octstr_len(pdu->u.submit_sm.short_message); >> @@ -1937,6 +1998,7 @@ >> int autodetect_addr; >> Octstr *alt_charset; >> long connection_timeout, wait_ack, wait_ack_action; >> + int pack_udh; >> >> my_number = alt_charset = NULL; >> transceiver_mode = 0; >> @@ -2021,6 +2083,9 @@ >> if (cfg_get_bool(&autodetect_addr, grp, >> octstr_imm("source-addr-autodetect")) == -1) >> autodetect_addr = 1; /* default is autodetect if no option >> defined */ >> >> + if (cfg_get_bool(&pack_udh, grp, octstr_imm("pack-udh")) == -1) >> + pack_udh = 0; >> + >> /* check for any specified interface version */ >> if (cfg_get_integer(&version, grp, >> octstr_imm("interface-version")) == -1) >> version = SMPP_DEFAULT_VERSION; >> @@ -2074,7 +2139,7 @@ >> dest_addr_npi, enquire_link_interval, >> max_pending_submits, version, priority, >> validity, my_number, smpp_msg_id_type, >> autodetect_addr, alt_charset, - service_type, >> connection_timeout, wait_ack, wait_ack_action); >> + service_type, connection_timeout, wait_ack, >> wait_ack_action, pack_udh); conn->data = smpp; conn->name >> = octstr_format("SMPP:%S:%d/%d:%S:%S", diff -Nru >> gateway/gwlib/cfg.def gateway.new/gwlib/cfg.def >> --- gateway/gwlib/cfg.def 2005-12-13 01:11:04.000000000 +0100 >> +++ gateway.new/gwlib/cfg.def 2006-01-10 16:24:59.000000000 +0100 >> @@ -365,6 +365,7 @@ >> OCTSTR(denied-prefix-regex) >> OCTSTR(preferred-prefix-regex) >> OCTSTR(max-error-count) >> + OCTSTR(pack-udh) >> ) >> >> > > hmm, I never heard about a need to do udh packing. SMSC buggy? It would > be ok to pack whole message + udh but only udh??? > > as long as I'm not convinienced that SMPP spec require it: -1. > > >
kannel.mysql.escape2.diff
(text/x-patch, 4.6 KB)
--- gateway/gw/dlr_mysql.c 2006-01-10 13:53:29.000000000 +0100
+++ gateway.new/gw/dlr_mysql.c 2006-01-11 10:18:00.000000000 +0100
@@ -140,9 +140,39 @@
dlr_db_fields_destroy(fields);
}
+char *_mysql_escape_string(const char *string)
+{
+ unsigned long int size, length;
+ char *buffer;
+ length = strlen(string);
+ size = (strlen(string) << 1) + 1;
+ if ((buffer = (char *)gw_malloc(size)) == NULL) {
+ error(0, "MYSQL: Error allocating buffer for string");
+ return NULL;
+ }
+ else {
+ mysql_escape_string(buffer, string, length);
+ return buffer;
+ }
+}
+
static void dlr_mysql_add(struct dlr_entry *entry)
{
Octstr *sql;
+ char *safe_ts, *safe_src, *safe_url;
+
+ if ((safe_ts = _mysql_escape_string(octstr_get_cstr(entry->timestamp))) == NULL)
+ return;
+ if ((safe_src = _mysql_escape_string(octstr_get_cstr(entry->source))) == NULL) {
+ gw_free(safe_ts);
+ return;
+ }
+ if ((safe_url = _mysql_escape_string(octstr_get_cstr(entry->url))) == NULL) {
+ gw_free(safe_ts);
+ gw_free(safe_src);
+ return;
+ }
+
sql = octstr_format("INSERT INTO %s (%s, %s, %s, %s, %s, %s, %s, %s, %s) VALUES "
"('%s', '%s', '%s', '%s', '%s', '%s', '%d', '%s', '%d');",
@@ -152,10 +182,14 @@
octstr_get_cstr(fields->field_serv), octstr_get_cstr(fields->field_url),
octstr_get_cstr(fields->field_mask), octstr_get_cstr(fields->field_boxc),
octstr_get_cstr(fields->field_status),
- octstr_get_cstr(entry->smsc), octstr_get_cstr(entry->timestamp), octstr_get_cstr(entry->source),
- octstr_get_cstr(entry->destination), octstr_get_cstr(entry->service), octstr_get_cstr(entry->url),
+ octstr_get_cstr(entry->smsc), safe_ts, safe_src,
+ octstr_get_cstr(entry->destination), octstr_get_cstr(entry->service), safe_url,
entry->mask, octstr_get_cstr(entry->boxc_id), 0);
+ gw_free(safe_ts);
+ gw_free(safe_src);
+ gw_free(safe_url);
+
mysql_update(sql);
@@ -169,14 +203,19 @@
Octstr *sql;
MYSQL_RES *result;
MYSQL_ROW row;
+ char *safe_ts;
+
+ if ((safe_ts = _mysql_escape_string(octstr_get_cstr(ts))) == NULL)
+ return;
sql = octstr_format("SELECT %s, %s, %s, %s, %s, %s FROM %s WHERE %s='%s' AND %s='%s';",
octstr_get_cstr(fields->field_mask), octstr_get_cstr(fields->field_serv),
octstr_get_cstr(fields->field_url), octstr_get_cstr(fields->field_src),
octstr_get_cstr(fields->field_dst), octstr_get_cstr(fields->field_boxc),
octstr_get_cstr(fields->table), octstr_get_cstr(fields->field_smsc),
- octstr_get_cstr(smsc), octstr_get_cstr(fields->field_ts), octstr_get_cstr(ts));
+ octstr_get_cstr(smsc), octstr_get_cstr(fields->field_ts), safe_ts);
+ gw_free(safe_ts);
result = mysql_select(sql);
octstr_destroy(sql);
@@ -217,13 +256,17 @@
static void dlr_mysql_remove(const Octstr *smsc, const Octstr *ts, const Octstr *dst)
{
Octstr *sql;
+ char *safe_ts;
debug("dlr.mysql", 0, "removing DLR from database");
+ if ((safe_ts = _mysql_escape_string(octstr_get_cstr(ts))) == NULL)
+ return;
sql = octstr_format("DELETE FROM %s WHERE %s='%s' AND %s='%s' LIMIT 1;",
octstr_get_cstr(fields->table), octstr_get_cstr(fields->field_smsc),
- octstr_get_cstr(smsc), octstr_get_cstr(fields->field_ts), octstr_get_cstr(ts));
+ octstr_get_cstr(smsc), octstr_get_cstr(fields->field_ts), safe_ts);
+ gw_free(safe_ts);
mysql_update(sql);
octstr_destroy(sql);
@@ -232,14 +275,18 @@
static void dlr_mysql_update(const Octstr *smsc, const Octstr *ts, const Octstr *dst, int status)
{
Octstr *sql;
+ char *safe_ts;
debug("dlr.mysql", 0, "updating DLR status in database");
+ if ((safe_ts = _mysql_escape_string(octstr_get_cstr(ts))) == NULL)
+ return;
sql = octstr_format("UPDATE %s SET %s=%d WHERE %s='%s' AND %s='%s' LIMIT 1;",
octstr_get_cstr(fields->table),
octstr_get_cstr(fields->field_status), status,
octstr_get_cstr(fields->field_smsc), octstr_get_cstr(smsc),
- octstr_get_cstr(fields->field_ts), octstr_get_cstr(ts));
+ octstr_get_cstr(fields->field_ts), safe_ts);
+ gw_free(safe_ts);
mysql_update(sql);
octstr_destroy(sql);
kannel.smpp.alpha_gsm.diff
(text/x-patch, 2.3 KB)
diff -Nru gateway.old/gw/smsc/smsc_smpp.c gateway.new/gw/smsc/smsc_smpp.c
--- gateway.old/gw/smsc/smsc_smpp.c 2006-01-11 10:38:27.000000000 +0100
+++ gateway.new/gw/smsc/smsc_smpp.c 2006-01-11 10:38:09.000000000 +0100
@@ -372,6 +372,7 @@
break;
case GSM_ADDR_TON_ALPHANUMERIC:
+ charset_latin1_to_gsm(addr);
if (octstr_len(addr) > 11) {
/* alphanum sender, max. allowed length is 11 (according to GSM specs) */
error(0, "SMPP[%s]: Mallformed addr `%s', alphanum length greater 11 chars. ",
@@ -749,6 +750,14 @@
if (!octstr_check_range(pdu->u.submit_sm.source_addr, 1, 256, gw_isdigit)) {
pdu->u.submit_sm.source_addr_ton = GSM_ADDR_TON_ALPHANUMERIC; /* alphanum */
pdu->u.submit_sm.source_addr_npi = GSM_ADDR_NPI_UNKNOWN; /* short code */
+ if (smpp->alt_charset) {
+ if (charset_convert(pdu->u.submit_sm.source_addr, SMPP_CHARSET, octstr_get_cstr(smpp->alt_charset)) != 0)
+ error(0, "Failed to convert source_addr from charset <%s> to <%s>, will send as is.",
+ SMPP_CHARSET, octstr_get_cstr(smpp->alt_charset));
+ }
+ else
+ charset_latin1_to_gsm(pdu->u.submit_sm.source_addr);
+
} else {
/* numeric sender address with + in front -> international (remove the +) */
octstr_delete(pdu->u.submit_sm.source_addr, 0, 1);
@@ -758,6 +767,14 @@
if (!octstr_check_range(pdu->u.submit_sm.source_addr,0, 256, gw_isdigit)) {
pdu->u.submit_sm.source_addr_ton = GSM_ADDR_TON_ALPHANUMERIC;
pdu->u.submit_sm.source_addr_npi = GSM_ADDR_NPI_UNKNOWN;
+ if (smpp->alt_charset) {
+ if (charset_convert(pdu->u.submit_sm.source_addr, SMPP_CHARSET, octstr_get_cstr(smpp->alt_charset)) != 0)
+ error(0, "Failed to convert source_addr from charset <%s> to <%s>, will send as is.",
+ SMPP_CHARSET, octstr_get_cstr(smpp->alt_charset));
+ }
+ else
+ charset_latin1_to_gsm(pdu->u.submit_sm.source_addr);
+
}
}
}
kannel.smpp.cp1252.diff
(text/x-patch, 3.2 KB)
diff -Nru gateway/gw/smsbox.c gateway.new/gw/smsbox.c
--- gateway/gw/smsbox.c 2005-12-09 03:14:31.000000000 +0100
+++ gateway.new/gw/smsbox.c 2006-01-10 15:57:05.000000000 +0100
@@ -3654,9 +3654,9 @@
if (coding == DC_7BIT) {
/*
- * For 7 bit, convert to ISO-8859-1
+ * For 7 bit, convert to CP1252
*/
- if (octstr_recode (octstr_imm ("ISO-8859-1"), charset, body) < 0) {
+ if (charset_convert (body, octstr_get_cstr(charset), "CP1252") < 0) {
resultcode = -1;
}
} else if (coding == DC_UCS2) {
diff -Nru gateway/gw/smsc/smsc_smpp.c gateway.new/gw/smsc/smsc_smpp.c
--- gateway/gw/smsc/smsc_smpp.c 2005-12-18 21:21:16.000000000 +0100
+++ gateway.new/gw/smsc/smsc_smpp.c 2006-01-10 15:58:41.000000000 +0100
@@ -78,6 +78,8 @@
#include "sms.h"
#include "dlr.h"
+#define SMPP_CHARSET "CP1252"
+
/*
* Select these based on whether you want to dump SMPP PDUs as they are
* sent and received or not. Not dumping should be the default in at least
@@ -490,9 +492,9 @@
* unless it was specified binary, ie. UDH indicator was detected
*/
if (smpp->alt_charset && msg->sms.coding != DC_8BIT) {
- if (charset_convert(msg->sms.msgdata, octstr_get_cstr(smpp->alt_charset), "ISO-8859-1") != 0)
+ if (charset_convert(msg->sms.msgdata, octstr_get_cstr(smpp->alt_charset), SMPP_CHARSET) != 0)
error(0, "Failed to convert msgdata from charset <%s> to <%s>, will leave as is.",
- octstr_get_cstr(smpp->alt_charset), "ISO-8859-1");
+ octstr_get_cstr(smpp->alt_charset), SMPP_CHARSET);
msg->sms.coding = DC_7BIT;
} else { /* assume GSM 03.38 7-bit alphabet */
charset_gsm_to_latin1(msg->sms.msgdata);
@@ -640,9 +642,9 @@
* unless it was specified binary, ie. UDH indicator was detected
*/
if (smpp->alt_charset && msg->sms.coding != DC_8BIT) {
- if (charset_convert(msg->sms.msgdata, octstr_get_cstr(smpp->alt_charset), "ISO-8859-1") != 0)
+ if (charset_convert(msg->sms.msgdata, octstr_get_cstr(smpp->alt_charset), SMPP_CHARSET) != 0)
error(0, "Failed to convert msgdata from charset <%s> to <%s>, will leave as is.",
- octstr_get_cstr(smpp->alt_charset), "ISO-8859-1");
+ octstr_get_cstr(smpp->alt_charset), SMPP_CHARSET);
msg->sms.coding = DC_7BIT;
} else { /* assume GSM 03.38 7-bit alphabet */
charset_gsm_to_latin1(msg->sms.msgdata);
@@ -845,10 +847,10 @@
/*
* convert to the given alternative charset
*/
- if (charset_convert(pdu->u.submit_sm.short_message, "ISO-8859-1",
+ if (charset_convert(pdu->u.submit_sm.short_message, SMPP_CHARSET,
octstr_get_cstr(smpp->alt_charset)) != 0)
error(0, "Failed to convert msgdata from charset <%s> to <%s>, will send as is.",
- "ISO-8859-1", octstr_get_cstr(smpp->alt_charset));
+ SMPP_CHARSET, octstr_get_cstr(smpp->alt_charset));
}
}