Correctly formatting the phone number within incoming messages

This commit is contained in:
Pierre Pronchery 2010-06-05 09:47:19 +00:00
parent 5c655fe692
commit 0d0bacaafb

View File

@ -1442,8 +1442,8 @@ static int _gsm_trigger_cmgl(GSM * gsm, char const * result)
/* gsm_trigger_cmgr */ /* gsm_trigger_cmgr */
static char * _cmgr_pdu_parse(char const * pdu, time_t * timestamp, static char * _cmgr_pdu_parse(char const * pdu, time_t * timestamp,
char number[32], GSMEncoding * encoding, size_t * length); char number[32], GSMEncoding * encoding, size_t * length);
static void _cmgr_pdu_parse_number(char const * number, size_t length, static void _cmgr_pdu_parse_number(unsigned int type, char const * number,
char buf[32]); size_t length, char buf[32]);
static time_t _cmgr_pdu_parse_timestamp(char const * timestamp); static time_t _cmgr_pdu_parse_timestamp(char const * timestamp);
static char * _cmgr_pdu_parse_encoding_default(char const * pdu, size_t len, static char * _cmgr_pdu_parse_encoding_default(char const * pdu, size_t len,
size_t i, size_t hdr, GSMEncoding * encoding, size_t * length); size_t i, size_t hdr, GSMEncoding * encoding, size_t * length);
@ -1555,7 +1555,7 @@ static char * _cmgr_pdu_parse(char const * pdu, time_t * timestamp,
addrl++; addrl++;
if((smscl * 2) + 2 + 4 + addrl + 2 > len) if((smscl * 2) + 2 + 4 + addrl + 2 > len)
return NULL; return NULL;
_cmgr_pdu_parse_number(q + 2, addrl + 1, number); _cmgr_pdu_parse_number(u, q + 2, addrl, number);
q = pdu + (smscl * 2) + 2 + 4 + addrl + 2; q = pdu + (smscl * 2) + 2 + 4 + addrl + 2;
if(sscanf(q, "%02X", &pid) != 1) /* PID */ if(sscanf(q, "%02X", &pid) != 1) /* PID */
return NULL; return NULL;
@ -1668,24 +1668,27 @@ static char * _cmgr_pdu_parse_encoding_data(char const * pdu, size_t len,
return (char *)p; return (char *)p;
} }
static void _cmgr_pdu_parse_number(char const * number, size_t length, static void _cmgr_pdu_parse_number(unsigned int type, char const * number,
char buf[32]) size_t length, char buf[32])
{ {
char * b = buf;
size_t i; size_t i;
if(type == 0x91)
*(b++) = '+';
for(i = 0; i < length - 1 && i < 32 - 1; i+=2) for(i = 0; i < length - 1 && i < 32 - 1; i+=2)
{ {
if((number[i] != 'F' && (number[i] < '0' || number[i] > '9')) if((number[i] != 'F' && (number[i] < '0' || number[i] > '9'))
|| number[i + 1] < '0' || number[i + 1] > '9') || number[i + 1] < '0' || number[i + 1] > '9')
break; break;
buf[i] = number[i + 1]; b[i] = number[i + 1];
if((buf[i + 1] = number[i]) == 'F') if((b[i + 1] = number[i]) == 'F')
buf[i + 1] = '\0'; b[i + 1] = '\0';
} }
buf[i] = '\0'; b[i] = '\0';
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "DEBUG: %s(\"%s\", %lu) => \"%s\"\n", __func__, number, fprintf(stderr, "DEBUG: %s(\"%s\", %lu) => \"%s\"\n", __func__, number,
length, buf); length, b);
#endif #endif
} }