Fix MBDN encoding 28/21328/1
authorJogi <ankit.jogi@samsung.com>
Wed, 30 Apr 2014 15:25:29 +0000 (20:55 +0530)
committerDongchul Lim <dc7.lim@samsung.com>
Mon, 19 May 2014 06:43:17 +0000 (15:43 +0900)
Change-Id: I64b459e0b806e5d9f1586b66b9f830bfea058648

include/at.h [changed mode: 0755->0644]
include/co_sim.h
src/co_network.c [changed mode: 0755->0644]
src/co_ps.c [changed mode: 0755->0644]
src/co_sat.c [changed mode: 0755->0644]
src/co_sim.c [changed mode: 0755->0644]
src/storage.c [changed mode: 0755->0644]

old mode 100755 (executable)
new mode 100644 (file)
index 0916ecf..d61b45e 100644 (file)
@@ -330,7 +330,8 @@ gboolean tcore_sim_decode_spdi(unsigned char *enc_spdi, int enc_spdi_len, TelSim
 gboolean tcore_sim_decode_msisdn(unsigned char *enc_msisdn, int enc_msisdn_len, TelSimSubscriberInfo *dec_msisdn);
 gboolean tcore_sim_decode_xdn(unsigned char *enc_xdn, int enc_xdn_len,
        char *alpha_id, unsigned int *alpha_id_len, char *num);
-gboolean tcore_sim_encode_xdn(char *alpha_id, char *num, char *enc_xdn, int enc_xdn_len);
+gboolean tcore_sim_encode_xdn(gchar *alpha_id, gchar *number, guint enc_xdn_len,
+       gchar **enc_data);
 gboolean tcore_sim_decode_ecc(unsigned char *enc_ecc, int enc_ecc_len, TelSimEccList *dec_ecc);
 gboolean tcore_sim_decode_ust(unsigned char *enc_ust, int enc_ust_len, char *dec_ust);
 gboolean tcore_sim_decode_uecc(unsigned char* enc_uecc, int enc_uecc_len, TelSimEcc *dec_ecc);
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 71849a1..0008e97
@@ -692,58 +692,89 @@ gboolean tcore_sim_decode_xdn(unsigned char *enc_xdn, int enc_xdn_len,
        return TRUE;
 }
 
-gboolean tcore_sim_encode_xdn(char *alpha_id, char *num, char *enc_xdn, int enc_xdn_len)
+gboolean tcore_sim_encode_xdn(gchar *alpha_id, gchar *number, guint enc_xdn_len,
+       gchar **enc_data)
 {
-       int alpha_id_space =0, digit_len =0, str_len = 0;
-       char bcd_code[TEL_SIM_XDN_NUMBER_LEN_MAX / 2];
-       enc_xdn = tcore_malloc0(enc_xdn_len);
-       memset((void*) enc_xdn, 0xFF, enc_xdn_len);
-
-       tcore_check_return_value_assert(alpha_id != NULL, FALSE);
-       tcore_check_return_value_assert(num != NULL, FALSE);
-
-       // get alpha id max length
-       alpha_id_space = enc_xdn_len - 14;
-
-       // alpha id is too big
-       str_len = strlen(alpha_id);
-       if (alpha_id_space < str_len) {
-               dbg("SIM space for alpha_id is [%d] but input alpha_id length is [%d]. so we will use [%d] byte",
-                               alpha_id_space, str_len, alpha_id_space);
-               str_len = alpha_id_space;
-       }
+#define TEL_SIM_CCI_OFFSET     12
+#define TEL_SIM_ERI_OFFSET     13
+
+       gint alpha_id_length = 0;
+       gchar *enc_xdn;
+
+       enc_xdn = tcore_malloc0(enc_xdn_len + 1);
+       memset((void*)enc_xdn, 0xFF, enc_xdn_len);
+
+       /* Alpha ID length */
+       alpha_id_length = enc_xdn_len - 14;
+       if (alpha_id_length < 0)
+               alpha_id_length = 0;
+
+       /* Alpha ID */
+       if (alpha_id) {
+               guint str_len = strlen(alpha_id);
+
+               if (str_len) {
+                       /* Validate Alpha ID length */
+                       if (alpha_id_length < str_len) {
+                               /* alpha id is too big */
+                               dbg("SIM space for alpha_id is [%d] but input alpha_id " \
+                                       "length is [%d]. so we will use [%d] byte",
+                                       alpha_id_length, str_len, alpha_id_length);
+                               str_len = alpha_id_length;
+                       }
 
-       digit_len = strlen(num);
-       // this is digit length
-       if ( digit_len > TEL_SIM_XDN_NUMBER_LEN_MAX) {
-               dbg("SIM space for number is [%d] but input number length is [%d]. so we will use [%d] byte",
-                               TEL_SIM_XDN_NUMBER_LEN_MAX, digit_len, TEL_SIM_XDN_NUMBER_LEN_MAX);
-               digit_len = TEL_SIM_XDN_NUMBER_LEN_MAX;
+                       /* Set Alpha ID */
+                       tcore_util_set_string((unsigned char *)enc_xdn,
+                               (unsigned char *)alpha_id, str_len);
+               }
        }
 
-       tcore_util_set_string((unsigned char *)enc_xdn, (unsigned char *)alpha_id, str_len);
+       /* Dialing number/SSC string */
+       if (number) {
+               guchar number_index = 0;
+               guint number_length = 0;
+
+               if (number[0] == '+')
+                       number_index = 1;
+
+               number_length = strlen(&number[number_index]);
+               if (number_length) {
+                       gchar bcd_number[TEL_SIM_XDN_NUMBER_LEN_MAX / 2];
+                       memset((void*)bcd_number, 0xFF, TEL_SIM_XDN_NUMBER_LEN_MAX / 2);
+
+                       /* Validate Dialing number/SSC string length */
+                       if (number_length > TEL_SIM_XDN_NUMBER_LEN_MAX) {
+                               dbg("SIM space for number is [%d] but input number length " \
+                                       "is [%d]. so we will use [%d] byte",
+                                       TEL_SIM_XDN_NUMBER_LEN_MAX,
+                                       number_length, TEL_SIM_XDN_NUMBER_LEN_MAX);
+                               number_length = TEL_SIM_XDN_NUMBER_LEN_MAX;
+                       }
 
-       // set length of BCD number/SSC contents
-       // p_xdn->diallingnumLen is maximum digit length. = 20 bytes.
-       // convert to BCD length and add 1 byte.
-       enc_xdn[alpha_id_space] = ( (digit_len + 1) / 2 ) + 1;
+                       tcore_util_convert_digit_to_bcd((char*)bcd_number,
+                               (char *)&number[number_index], number_length);
 
-       /* set TON and NPI
-       xdn[alpha_id_space + 1] = 0x80;
-       xdn[alpha_id_space + 1] |= (p_xdn->ton & 0x07) << 4;
-       xdn[alpha_id_space + 1] |= p_xdn->npi & 0x0F;
-       */
-       // set dialing number/SSC string
-       memset((void*) bcd_code, 0xFF, TEL_SIM_XDN_NUMBER_LEN_MAX / 2);
+                       /* Set length of BCD number/SSC contents */
+                       enc_xdn[alpha_id_length] = ( (number_length + 1) / 2 ) + 1;
+
+                       /* Set TON and NPI */
+                       enc_xdn[alpha_id_length + 1] = 0x80;
+                       enc_xdn[alpha_id_length + 1] |= (number_index & 0x07) << 4;
+                       enc_xdn[alpha_id_length + 1] |= (number_index & 0x0F);
+
+                       memcpy((void*)&enc_xdn[alpha_id_length + 2],
+                               bcd_number, TEL_SIM_XDN_NUMBER_LEN_MAX / 2);
+               }
+       }
 
-       tcore_util_convert_digit_to_bcd((char*) bcd_code, (char*)num, digit_len);
+       /* Set Capability/Configuration Identifier */
+       enc_xdn[alpha_id_length + TEL_SIM_CCI_OFFSET] = 0xFF;
 
-       memcpy((void*) &enc_xdn[alpha_id_space + 2], bcd_code, TEL_SIM_XDN_NUMBER_LEN_MAX / 2);
+       /* Set Extension1 Record Identifier */
+       enc_xdn[alpha_id_length + TEL_SIM_ERI_OFFSET] = 0xFF;
 
-       // set Capability/Configuration Identifier
-       //out[alpha_id_space + 12] = (unsigned char) p_xdn->cc_id;
-       // set extension1 record Identifier
-       //out[alpha_id_space + 13] = (unsigned char) p_xdn->ext1_id;
+       *enc_data = enc_xdn;
+       enc_xdn[enc_xdn_len] = '\0';
 
        return TRUE;
 }
old mode 100755 (executable)
new mode 100644 (file)