From b495720c202fe7667831c5d30e007f8a2ab47b1f Mon Sep 17 00:00:00 2001 From: Wolfgang Wiedmeyer Date: Sat, 3 Jun 2017 23:06:56 +0200 Subject: move encoding check to ss.c Signed-off-by: Wolfgang Wiedmeyer --- samsung-ril.h | 6 ++++++ ss.c | 43 ++++++++++++++++++++++++++++++++++++++----- utils.c | 32 -------------------------------- utils.h | 8 -------- 4 files changed, 44 insertions(+), 45 deletions(-) diff --git a/samsung-ril.h b/samsung-ril.h index 28a731f..cf6dc15 100644 --- a/samsung-ril.h +++ b/samsung-ril.h @@ -369,6 +369,12 @@ int ril_request_screen_state(void *data, size_t size, RIL_Token token); * SS */ +enum { + USSD_ENCODING_UNKNOWN, + USSD_ENCODING_GSM7, + USSD_ENCODING_UCS2 +}; + int ipc_ss_ussd(struct ipc_message *message); int ril_request_send_ussd(void *data, size_t size, RIL_Token token); int ril_request_cancel_ussd(void *data, size_t size, RIL_Token token); diff --git a/ss.c b/ss.c index 750f079..1ba7216 100644 --- a/ss.c +++ b/ss.c @@ -230,12 +230,45 @@ int ipc2ril_ussd_state(struct ipc_ss_ussd_header *ussd, char *message[2]) return 0; } +int ipc2ril_ussd_encoding(int data_encoding) +{ + switch (data_encoding >> 4) { + case 0x00: + case 0x02: + case 0x03: + return USSD_ENCODING_GSM7; + case 0x01: + if (data_encoding == 0x10) + return USSD_ENCODING_GSM7; + if (data_encoding == 0x11) + return USSD_ENCODING_UCS2; + break; + case 0x04: + case 0x05: + case 0x06: + case 0x07: + if (data_encoding & 0x20) + return USSD_ENCODING_UNKNOWN; + if (((data_encoding >> 2) & 3) == 0) + return USSD_ENCODING_GSM7; + if (((data_encoding >> 2) & 3) == 2) + return USSD_ENCODING_UCS2; + break; + case 0xF: + if (!(data_encoding & 4)) + return USSD_ENCODING_GSM7; + break; + } + + return USSD_ENCODING_UNKNOWN; +} + int ipc_ss_ussd(struct ipc_message *message) { char *data_dec = NULL; int data_dec_len = 0; - sms_coding_scheme coding_scheme; char *ussd_message[2]; + int ussd_encoding; struct ipc_ss_ussd_header *ussd = NULL; unsigned char state; int rc; @@ -254,9 +287,9 @@ int ipc_ss_ussd(struct ipc_message *message) ril_request_data_set_uniq(RIL_REQUEST_SEND_USSD, (void *) &ussd->state, sizeof(unsigned char)); if (ussd->length > 0 && message->size > 0 && message->data != NULL) { - coding_scheme = sms_get_coding_scheme(ussd->dcs); - switch (coding_scheme) { - case SMS_CODING_SCHEME_GSM7: + ussd_encoding = ipc2ril_ussd_encoding(ussd->dcs); + switch (ussd_encoding) { + case USSD_ENCODING_GSM7: RIL_LOGD("USSD Rx encoding is GSM7"); data_dec_len = gsm72ascii((unsigned char *) message->data @@ -265,7 +298,7 @@ int ipc_ss_ussd(struct ipc_message *message) ussd_message[1][data_dec_len] = '\0'; break; - case SMS_CODING_SCHEME_UCS2: + case USSD_ENCODING_UCS2: RIL_LOGD("USSD Rx encoding %x is UCS2", ussd->dcs); data_dec_len = message->size - sizeof(struct ipc_ss_ussd_header); diff --git a/utils.c b/utils.c index 214f46f..f4b5344 100644 --- a/utils.c +++ b/utils.c @@ -184,38 +184,6 @@ int utf8_write(char *utf8, int offset, int v) return result; } -sms_coding_scheme sms_get_coding_scheme(int data_encoding) -{ - switch (data_encoding >> 4) { - case 0x00: - case 0x02: - case 0x03: - return SMS_CODING_SCHEME_GSM7; - case 0x01: - if (data_encoding == 0x10) - return SMS_CODING_SCHEME_GSM7; - if (data_encoding == 0x11) - return SMS_CODING_SCHEME_UCS2; - break; - case 0x04: - case 0x05: - case 0x06: - case 0x07: - if (data_encoding & 0x20) - return SMS_CODING_SCHEME_UNKNOWN; - if (((data_encoding >> 2) & 3) == 0) - return SMS_CODING_SCHEME_GSM7; - if (((data_encoding >> 2) & 3) == 2) - return SMS_CODING_SCHEME_UCS2; - break; - case 0xF: - if (!(data_encoding & 4)) - return SMS_CODING_SCHEME_GSM7; - break; - } - return SMS_CODING_SCHEME_UNKNOWN; -} - int data_dump(const void *data, size_t size) { unsigned int cols = 8; diff --git a/utils.h b/utils.h index 21a8add..ca05cd2 100644 --- a/utils.h +++ b/utils.h @@ -42,12 +42,4 @@ int eventfd_flush(int fd); int eventfd_recv(int fd, eventfd_t *event); int eventfd_send(int fd, eventfd_t event); -typedef enum { - SMS_CODING_SCHEME_UNKNOWN = 0, - SMS_CODING_SCHEME_GSM7, - SMS_CODING_SCHEME_UCS2 -} sms_coding_scheme; - -sms_coding_scheme sms_get_coding_scheme(int data_encoding); - #endif -- cgit v1.1