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>
char *console; // console device name (can be a file or a tty)
int httpdPort;
char *ldpaths; // list of plugins directories
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
char *rootbase; // Angular HTML5 base URL
char *rootapi; // Base URL for REST APIs
char *sessiondir; // where to store mixer session files
-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;
{
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;
if (root == NULL) {
/* TODO message */
rc = 0;
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 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);
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);
#define WS_CLIENT 24
#define WS_SERVICE 25
#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
// Command line structure hold cli --command + help text
typedef struct {
int val; // command number within application
{SET_BACKGROUND ,0,"daemon" , "Get all in background mode"},
{SET_TCP_PORT ,1,"port" , "HTTP listening TCP port [default 1234]"},
{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]"},
{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]"},
}
// if no Angular/HTML5 rootbase let's try '/' as default
}
// if no Angular/HTML5 rootbase let's try '/' as default
+ if (config->roothttp == NULL)
+ config->roothttp = ".";
+
if (config->rootbase == NULL)
config->rootbase = "/opa";
if (config->rootbase == NULL)
config->rootbase = "/opa";
INFO("Forcing Rootdir=%s",config->rootdir);
break;
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;
case SET_ROOT_BASE:
if (optarg == 0) goto needValueForOption;
config->rootbase = optarg;
+--------------------------------------------------------- */
static int init_http_server(struct afb_hsrv *hsrv, struct afb_config * config)
{
+--------------------------------------------------------- */
static int init_http_server(struct afb_hsrv *hsrv, struct afb_config * config)
{
+ 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;
if (!afb_hsrv_add_handler(hsrv, config->rootapi, afb_hswitch_websocket_switch, NULL, 20))
return 0;
return 0;
for (idx = 0; idx < config->aliascount; idx++)
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))
- 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))
return 0;
if (!afb_hsrv_add_handler(hsrv, config->rootbase, afb_hswitch_one_page_api_redirect, NULL, -20))