diff --git a/src/modules/phonenum/cphonenumber.cpp b/src/modules/phonenum/cphonenumber.cpp index 60f5039c88f..94cc9d2cddb 100644 --- a/src/modules/phonenum/cphonenumber.cpp +++ b/src/modules/phonenum/cphonenumber.cpp @@ -128,9 +128,11 @@ telnum_t* telnum_parse(char* number, char* region) return res; } res->valid = 1; - string formattedNumber; - _phoneUtil.Format(parsedNumber, PhoneNumberUtil::E164, &formattedNumber); - res->normalized = strdup(formattedNumber.c_str()); + string formattedNumberE164, formattedNumberNational; + _phoneUtil.Format(parsedNumber, PhoneNumberUtil::E164, &formattedNumberE164); + _phoneUtil.Format(parsedNumber, PhoneNumberUtil::NATIONAL, &formattedNumberNational); + res->normalized = strdup(formattedNumberE164.c_str()); + res->natnum = strdup(formattedNumberNational.c_str()); string descNumber = _phoneGeoCoder->GetDescriptionForNumber(parsedNumber, Locale("en")); res->ndesc = strdup(descNumber.c_str()); res->ltype = strdup(telnum_linetype(_phoneUtil.GetNumberType(parsedNumber))); @@ -156,6 +158,7 @@ telnum_t* telnum_new(char* number) tn->ltype = NULL; tn->ndesc = NULL; tn->ccname = NULL; + tn->natnum = NULL; tn->error = NULL; return tn; } @@ -183,5 +186,8 @@ void telnum_free(telnum_t* tn) if (tn->ccname) { free(tn->ccname); } + if (tn->natnum) { + free(tn->natnum); + } free(tn); } diff --git a/src/modules/phonenum/cphonenumber.h b/src/modules/phonenum/cphonenumber.h index 1a6a06df861..b9e1dc09d96 100644 --- a/src/modules/phonenum/cphonenumber.h +++ b/src/modules/phonenum/cphonenumber.h @@ -37,6 +37,7 @@ extern "C" char *ltype; char *ndesc; char *ccname; + char *natnum; char *error; int cctel; int valid; diff --git a/src/modules/phonenum/doc/phonenum_admin.xml b/src/modules/phonenum/doc/phonenum_admin.xml index f3a3e98ede0..740ec4780a3 100644 --- a/src/modules/phonenum/doc/phonenum_admin.xml +++ b/src/modules/phonenum/doc/phonenum_admin.xml @@ -205,7 +205,10 @@ if(phonenum_match_cn("1-484-555-8888", "US", "src")) { valid result; 0 otherwise - normalized - normalized phone number + normalized - normalized (E164) phone number + + + natnum - nationally formatted phone number cctel - country code for phone number diff --git a/src/modules/phonenum/phonenum_pv.c b/src/modules/phonenum/phonenum_pv.c index f6bcc025f66..5970c6b9845 100644 --- a/src/modules/phonenum/phonenum_pv.c +++ b/src/modules/phonenum/phonenum_pv.c @@ -190,6 +190,8 @@ int pv_parse_phonenum_name(pv_spec_p sp, str *in) gpv->type = 0; else if(strncmp(pvs.s, "ccname", 6) == 0) gpv->type = 7; + else if(strncmp(pvs.s, "natnum", 6) == 0) + gpv->type = 8; else goto error; break; @@ -268,6 +270,10 @@ int pv_get_phonenum(struct sip_msg *msg, pv_param_t *param, pv_value_t *res) if(gpv->item->r.record->ccname == NULL) return pv_get_null(msg, param, res); return pv_get_strzval(msg, param, res, gpv->item->r.record->ccname); + case 8: /* natnum */ + if(gpv->item->r.record->natnum == NULL) + return pv_get_null(msg, param, res); + return pv_get_strzval(msg, param, res, gpv->item->r.record->natnum); default: /* number */ if(gpv->item->r.record->number == NULL) return pv_get_null(msg, param, res);