]> sjero.net Git - linphone/commitdiff
add function to extract ccc from e164 number
authorJehan Monnier <jehan.monnier@linphone.org>
Fri, 23 Nov 2012 09:38:00 +0000 (10:38 +0100)
committerJehan Monnier <jehan.monnier@linphone.org>
Fri, 23 Nov 2012 09:38:15 +0000 (10:38 +0100)
coreapi/linphonecore_utils.h
coreapi/proxy.c
coreapi/test_numbers.c

index fadfc1a3608bb25cf559c39927ecba02b488ac61..cc0a6f692ad420071682b4505c443d26348dd6d2 100644 (file)
@@ -94,8 +94,14 @@ void linphone_core_remove_iterate_hook(LinphoneCore *lc, LinphoneCoreIterateHook
  *@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
index 864a23441d38c52cdef03f0dacd1cafa210e39f8..15f10b744d3311d10fe800ed8899cba8a6938dc0 100644 (file)
@@ -607,6 +607,32 @@ static dial_plan_t const dial_plans[]={
 };
 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++) {
index 8cf4fb7928a6ab242744005932026d3a0b8b58be..da1f22b6f60187e27d3c11838f0eefce630756a3 100644 (file)
@@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 
 #include "linphonecore.h"
+#include "linphonecore_utils.h"
 
 int main(int argc , char *argv[]){
        LinphoneProxyConfig *cfg;
@@ -35,6 +36,13 @@ int main(int argc , char *argv[]){
        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;
 }