Implemented --alias and made timeout reentrant
[src/app-framework-binder.git] / src / main.c
index 9586bb5..b681bd0 100644 (file)
@@ -61,6 +61,7 @@ static sigjmp_buf restartpoint; // context save for set/longjmp
  #define SET_ROOT_DIR       121
  #define SET_ROOT_BASE      122
  #define SET_ROOT_API       123
+ #define SET_ROOT_ALIAS     124
 
  #define SET_CACHE_TO       130
  #define SET_cardid         131
@@ -91,6 +92,7 @@ static  AFB_options cliOptions [] = {
   {SET_ROOT_DIR     ,1,"rootdir"         , "HTTP Root Directory [default $HOME/.AFB"},
   {SET_ROOT_BASE    ,1,"rootbase"        , "Angular Base Root URL [default /opa"},
   {SET_ROOT_API     ,1,"rootapi"         , "HTML Root API URL [default /api"},
+  {SET_ROOT_ALIAS   ,1,"alias"           , "Muliple url map outside of rootdir [eg: --alias=/icons:/usr/share/icons]"},
   {SET_APITIMEOUT   ,1,"apitimeout"      , "Plugin API timeout in seconds [default 10]"},
 
   {SET_CACHE_TO     ,1,"cache-eol"       , "Client cache end of live [default 3600s]"},
@@ -109,6 +111,9 @@ static  AFB_options cliOptions [] = {
   {0, 0, 0}
  };
 
+static AFB_aliasdir aliasdir[MAX_ALIAS];
+static int aliascount=0;
+
 /*----------------------------------------------------------
  | signalQuit
  |  return to intitial exitpoint on order to close backend
@@ -265,7 +270,9 @@ int main(int argc, char *argv[])  {
 
   // ------------- Build session handler & init config -------
   session =  configInit ();
-  memset (&cliconfig,0,sizeof(cliconfig));
+  memset(&cliconfig,0,sizeof(cliconfig));
+  memset(&aliasdir  ,0,sizeof(aliasdir));
+  cliconfig.aliasdir = aliasdir;
 
   // GNU CLI getopts nterface.
   struct option ggcOption;
@@ -312,16 +319,34 @@ int main(int argc, char *argv[])  {
     case SET_ROOT_DIR:
        if (optarg == 0) goto needValueForOption;
        cliconfig.rootdir   = optarg;
+       if (verbose) fprintf(stderr, "Forcing Rootdir=%s\n",cliconfig.rootdir);
        break;       
        
     case SET_ROOT_BASE:
        if (optarg == 0) goto needValueForOption;
        cliconfig.rootbase   = optarg;
+       if (verbose) fprintf(stderr, "Forcing Rootbase=%s\n",cliconfig.rootbase);
        break;
 
     case SET_ROOT_API:
        if (optarg == 0) goto needValueForOption;
        cliconfig.rootapi   = optarg;
+       if (verbose) fprintf(stderr, "Forcing Rootapi=%s\n",cliconfig.rootapi);
+       break;
+       
+    case SET_ROOT_ALIAS:
+       if (optarg == 0) goto needValueForOption;
+       if (aliascount < MAX_ALIAS) {
+            aliasdir[aliascount].url  = strsep(&optarg,":");
+            aliasdir[aliascount].path = strsep(&optarg,":");
+            aliasdir[aliascount].len  = strlen(aliasdir[aliascount].url);
+            if (verbose) fprintf(stderr, "Alias url=%s path=%s\n", aliasdir[aliascount].url, aliasdir[aliascount].path);
+            aliascount++;
+       } else {
+           fprintf(stderr, "Too many aliases [max:%s] %s ignored\n", optarg, MAX_ALIAS-1);
+       }
+       
+      
        break;
        
     case SET_SMACK: