/* appweb.h -- Embedthis Appweb HTTP Web Server header Copyright (c) All Rights Reserved. See details at the end of the file. */ #ifndef _h_APPWEB #define _h_APPWEB 1 /********************************* Includes ***********************************/ #include "osdep.h" #include "mpr.h" #include "http.h" #ifdef __cplusplus extern "C" { #endif /********************************* Tunables ***********************************/ #define MA_UNLOAD_TIMEOUT "5mins" /**< Default module inactivity timeout */ /********************************** Defines ***********************************/ /* Pack defaults */ #ifndef ME_COM_CGI #define ME_COM_CGI 0 #endif #ifndef ME_COM_EJSCRIPT #define ME_COM_EJSCRIPT 0 #endif #ifndef ME_COM_ESP #define ME_COM_ESP 0 #endif #ifndef ME_COM_FAST #define ME_COM_FAST 0 #endif #ifndef ME_COM_MDB #define ME_COM_MDB 0 #endif #ifndef ME_COM_PHP #define ME_COM_PHP 0 #endif #ifndef ME_COM_PROXY #define ME_COM_PROXY 0 #endif #ifndef ME_COM_SDB #define ME_COM_SDB 0 #endif #ifndef ME_COM_SSL #define ME_COM_SSL 0 #endif #ifndef ME_COM_TEST #define ME_COM_TEST 0 #endif /******************************************************************************/ /* State flags */ #define MA_PARSE_NON_SERVER 0x1 /**< Command file being parsed by a utility program */ /** Current configuration parse state @stability Evolving @defgroup MaState MaState @see MaDirective MaState maAddDirective maArchiveLog maPopState maPushState maTokenize @stability Evolving */ typedef struct MaState { HttpHost *host; /**< Current host */ HttpAuth *auth; /**< Quick alias for route->auth */ HttpRoute *route; /**< Current route */ MprFile *file; /**< Config file handle */ char *key; /**< Current directive being parsed */ char *configDir; /**< Directory containing config file */ char *filename; /**< Config file name */ char *endpoints; /**< Virtual host endpoints */ char *data; /**< Config data (managed) */ int lineNumber; /**< Current line number */ int enabled; /**< True if the current block is enabled */ int flags; /**< Parsing flags */ struct MaState *prev; /**< Previous (inherited) state */ struct MaState *top; /**< Top level state */ struct MaState *current; /**< Current state */ } MaState; /** Appweb configuration file directive parsing callback function @description Directive callbacks are invoked to parse a directive. Directive callbacks are registered using #maAddDirective. @param state Current config parse state. @param key Directive key name @param value Directive key value @return Zero if successful, otherwise a negative Mpr error code. See the Appweb log for diagnostics. @ingroup MaState @stability Evolving */ typedef int (MaDirective)(MaState *state, cchar *key, cchar *value); /** Define a new appweb configuration file directive @description The appweb configuration file parse is extensible. New directives can be registered by this call. When encountered in the config file, the given callback proc will be invoked to parse. @param directive Directive name @param proc Directive callback procedure of the type #MaDirective. @ingroup MaState @stability Evolving */ PUBLIC void maAddDirective(cchar *directive, MaDirective proc); /** Configure a web server @description This will configure a web server based on either a configuration file or using the supplied IP address and port. @param configFile File name of the Appweb configuration file (appweb.conf) that defines the web server configuration. @param home Admin directory for the server. This overrides the value in the config file. @param documents Default directory for web documents to serve. This overrides the value in the config file. @param ip IP address to listen on. This overrides the value specified in the config file. @param port Port address to listen on. This overrides the value specified in the config file. @return Zero if successful, otherwise a negative Mpr error code. See the Appweb log for diagnostics. @ingroup MaState @stability Evolving */ PUBLIC int maConfigureServer(cchar *configFile, cchar *home, cchar *documents, cchar *ip, int port); /** Get the argument in a directive @description Break into arguments. Args may be quoted. An outer quoting of the entire arg is removed. @param s String to examine @param tok Next token reference @return Reference to the next token. (Not allocate @ingroup MaState @stability Evolving */ PUBLIC char *maGetNextArg(char *s, char **tok); /** Load an appweb module @description Load an appweb module. If the module is already loaded, this call will return successfully without reloading. Modules can be dynamically loaded or may also be pre-loaded using static linking. @param name User name. Must be defined in the system password file. @param libname Library path name @return Zero if successful, otherwise a negative Mpr error code. See the Appweb log for diagnostics. @ingroup MaState @stability Evolving */ PUBLIC int maLoadModule(cchar *name, cchar *libname); /** Load default modules @return Zero if successful, otherwise a negative Mpr error code. See the Appweb log for diagnostics. @ingroup MaState @stability Prototype */ PUBLIC int maLoadModules(void); /** Parse an Appweb configuration file @description Parse the configuration file and configure the server. This creates a default host and route and then configures the server based on config file directives. @param path Configuration file pathname. @return Zero if successful, otherwise a negative Mpr error code. See the Appweb log for diagnostics. @ingroup MaState @stability Evolving */ PUBLIC int maParseConfig(cchar *path); /** Parse a configuration file @param state Current state level object @param path Filename to parse @return Zero if successful, otherwise a negative Mpr error code. See the Appweb log for diagnostics. @ingroup MaState @stability Prototype */ PUBLIC int maParseFile(MaState *state, cchar *path); /** Pop the state @description This is used when parsing config files to handle nested include files and block level directives @param state Current state @return The next lower level state object @ingroup MaState @stability Evolving */ PUBLIC MaState *maPopState(MaState *state); /** Push the state @description This is used when parsing config files to handle nested include files and block level directives @param state Current state @return The state passed as a parameter which becomes the new top level state @ingroup MaState @stability Evolving */ PUBLIC MaState *maPushState(MaState *state); /** Tokenize a string based on route data @description This is a utility routine to parse a string into tokens given a format specifier. Mandatory tokens can be specified with "%" format specifier. Optional tokens are specified with "?" format. Values wrapped in quotes will have the outermost quotes trimmed. @param state Current config parsing state @param str String to expand @param fmt Format string specifier Supported tokens: