Add the option roothttp
authorJosé Bollo <jose.bollo@iot.bzh>
Wed, 31 Aug 2016 12:16:07 +0000 (14:16 +0200)
committerJosé Bollo <jose.bollo@iot.bzh>
Wed, 31 Aug 2016 12:16:07 +0000 (14:16 +0200)
This option tells to the HTTP part of the binder the location
of the root directory for HTTP.

Change-Id: I080adcaaee952e375128eff3898f29332939c5f5
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
src/afb-config.h
src/afb-hsrv.c
src/afb-hsrv.h
src/main.c

index b049326..b430cb0 100644 (file)
@@ -44,7 +44,8 @@ struct afb_config
   char *console;           // console device name (can be a file or a tty)
   int   httpdPort;
   char *ldpaths;           // list of plugins directories
-  char *rootdir;           // base dir for httpd file download
+  char *rootdir;           // base dir for files
+  char *roothttp;          // directory for http files
   char *rootbase;          // Angular HTML5 base URL
   char *rootapi;           // Base URL for REST APIs
   char *sessiondir;        // where to store mixer session files
index 361d13f..030bec5 100644 (file)
@@ -359,12 +359,12 @@ int afb_hsrv_add_alias_root(struct afb_hsrv *hsrv, const char *prefix, struct lo
        return 0;
 }
 
-int afb_hsrv_add_alias(struct afb_hsrv *hsrv, const char *prefix, const char *alias, int priority, int relax)
+int afb_hsrv_add_alias(struct afb_hsrv *hsrv, const char *prefix, int dirfd, const char *alias, int priority, int relax)
 {
        struct locale_root *root;
        int rc;
 
-       root = locale_root_create_at(AT_FDCWD, alias);
+       root = locale_root_create_at(dirfd, alias);
        if (root == NULL) {
                /* TODO message */
                rc = 0;
index 0f469a8..532af7d 100644 (file)
@@ -28,7 +28,7 @@ extern void afb_hsrv_put(struct afb_hsrv *hsrv);
 extern void afb_hsrv_stop(struct afb_hsrv *hsrv);
 extern int afb_hsrv_start(struct afb_hsrv *hsrv, uint16_t port, unsigned int connection_timeout);
 extern int afb_hsrv_set_cache_timeout(struct afb_hsrv *hsrv, int duration);
-extern int afb_hsrv_add_alias(struct afb_hsrv *hsrv, const char *prefix, const char *alias, int priority, int relax);
+extern int afb_hsrv_add_alias(struct afb_hsrv *hsrv, const char *prefix, int dirfd, const char *alias, int priority, int relax);
 extern int afb_hsrv_add_alias_root(struct afb_hsrv *hsrv, const char *prefix, struct locale_root *root, int priority, int relax);
 extern int afb_hsrv_add_handler(struct afb_hsrv *hsrv, const char *prefix, int (*handler) (struct afb_hreq *, void *), void *data, int priority);
 
index ff7daaf..28b452c 100644 (file)
@@ -85,6 +85,8 @@
 #define WS_CLIENT          24
 #define WS_SERVICE         25
 
+#define SET_ROOT_HTTP      26
+
 // Command line structure hold cli --command + help text
 typedef struct {
   int  val;        // command number within application
@@ -102,7 +104,8 @@ static  AFB_options cliOptions [] = {
   {SET_BACKGROUND   ,0,"daemon"          , "Get all in background mode"},
 
   {SET_TCP_PORT     ,1,"port"            , "HTTP listening TCP port  [default 1234]"},
-  {SET_ROOT_DIR     ,1,"rootdir"         , "HTTP Root Directory [default $HOME/.AFB]"},
+  {SET_ROOT_DIR     ,1,"rootdir"         , "Root Directory [default $HOME/.AFB]"},
+  {SET_ROOT_HTTP    ,1,"roothttp"        , "HTTP Root Directory [default rootdir]"},
   {SET_ROOT_BASE    ,1,"rootbase"        , "Angular Base Root URL [default /opa]"},
   {SET_ROOT_API     ,1,"rootapi"         , "HTML Root API URL [default /api]"},
   {SET_ALIAS        ,1,"alias"           , "Muliple url map outside of rootdir [eg: --alias=/icons:/usr/share/icons]"},
@@ -212,6 +215,9 @@ static void config_set_default (struct afb_config * config)
    }
 
    // if no Angular/HTML5 rootbase let's try '/' as default
+   if  (config->roothttp == NULL)
+       config->roothttp = ".";
+
    if  (config->rootbase == NULL)
        config->rootbase = "/opa";
 
@@ -312,6 +318,12 @@ static void parse_arguments(int argc, char *argv[], struct afb_config *config)
        INFO("Forcing Rootdir=%s",config->rootdir);
        break;
 
+    case SET_ROOT_HTTP:
+       if (optarg == 0) goto needValueForOption;
+       config->roothttp   = optarg;
+       INFO("Forcing Root HTTP=%s",config->roothttp);
+       break;
+
     case SET_ROOT_BASE:
        if (optarg == 0) goto needValueForOption;
        config->rootbase   = optarg;
@@ -492,7 +504,9 @@ static void daemonize(struct afb_config *config)
  +--------------------------------------------------------- */
 static int init_http_server(struct afb_hsrv *hsrv, struct afb_config * config)
 {
-       int idx;
+       int idx, dfd;
+
+       dfd = afb_common_rootdir_get_fd();
 
        if (!afb_hsrv_add_handler(hsrv, config->rootapi, afb_hswitch_websocket_switch, NULL, 20))
                return 0;
@@ -501,10 +515,10 @@ static int init_http_server(struct afb_hsrv *hsrv, struct afb_config * config)
                return 0;
 
        for (idx = 0; idx < config->aliascount; idx++)
-               if (!afb_hsrv_add_alias (hsrv, config->aliasdir[idx].url, config->aliasdir[idx].path, 0, 0))
+               if (!afb_hsrv_add_alias (hsrv, config->aliasdir[idx].url, dfd, config->aliasdir[idx].path, 0, 0))
                        return 0;
 
-       if (!afb_hsrv_add_alias(hsrv, "", config->rootdir, -10, 1))
+       if (!afb_hsrv_add_alias(hsrv, "", dfd, config->roothttp, -10, 1))
                return 0;
 
        if (!afb_hsrv_add_handler(hsrv, config->rootbase, afb_hswitch_one_page_api_redirect, NULL, -20))