*@return call country code or -1 if not found
*/
int linphone_dial_plan_lookup_ccc_from_iso(const char* iso);
-
-
+/**
+ * @ingroup misc
+ *Function to get call country code from an e164 number, ex: +33952650121 will return 33
+ *@param e164 phone number
+ *@return call country code or -1 if not found
+ */
+int linphone_dial_plan_lookup_ccc_from_e164(const char* e164);
+
#ifdef __cplusplus
}
#endif
};
static dial_plan_t most_common_dialplan={ "generic" ,"", "", 10, "00"};
+int linphone_dial_plan_lookup_ccc_from_e164(const char* e164) {
+ dial_plan_t* dial_plan;
+ dial_plan_t* elected_dial_plan=NULL;
+ unsigned int found;
+ unsigned int i=0;
+ if (e164[1]=='1') {
+ /*USA case*/
+ return 1;
+ }
+ do {
+ found=0;
+ i++;
+ for (dial_plan=(dial_plan_t*)dial_plans; dial_plan->country!=NULL; dial_plan++) {
+ if (strncmp(dial_plan->ccc,&e164[1],i) == 0) {
+ elected_dial_plan=dial_plan;
+ found++;
+ }
+ }
+ } while (found>1 || found==0);
+ if (found==1) {
+ return atoi(elected_dial_plan->ccc);
+ } else {
+ return -1; /*not found */
+ }
+
+}
int linphone_dial_plan_lookup_ccc_from_iso(const char* iso) {
dial_plan_t* dial_plan;
for (dial_plan=(dial_plan_t*)dial_plans; dial_plan->country!=NULL; dial_plan++) {
#include "linphonecore.h"
+#include "linphonecore_utils.h"
int main(int argc , char *argv[]){
LinphoneProxyConfig *cfg;
if (argc>3 && strcmp(argv[3],"--escape-plus")==0)
linphone_proxy_config_set_dial_escape_plus(cfg,TRUE);
linphone_proxy_config_normalize_number(cfg,argv[1],normalized_number,sizeof(normalized_number));
+
printf("Normalized number is %s\n",normalized_number);
+ /*check extracted ccc*/
+ if (linphone_dial_plan_lookup_ccc_from_e164(normalized_number) != atoi(linphone_proxy_config_get_dial_prefix(cfg))) {
+ printf("Error ccc [%i] not correctly parsed\n",linphone_dial_plan_lookup_ccc_from_e164(normalized_number));
+ } else {
+ printf("Extracted ccc is [%i] \n",linphone_dial_plan_lookup_ccc_from_e164(normalized_number));
+ }
return 0;
}