#include #include #include "cli.h" #include "fio.h" #include "fio_cli.h" #include "http.h" #include "redis_engine.h" static void redis_cleanup(void *e_) { redis_engine_destroy(e_); FIO_LOG_DEBUG("Cleaned up redis engine object."); FIO_PUBSUB_DEFAULT = FIO_PUBSUB_CLUSTER; } void initialize_cli(int argc, char const *argv[]) { /* **** Command line arguments **** */ fio_cli_start( argc, argv, 0, 0, NULL, FIO_CLI_PRINT_HEADER("Address binding:"), FIO_CLI_INT("-port -p port number to listen to. defaults port 3000"), FIO_CLI_STRING("-bind -b address to listen to. defaults any available."), FIO_CLI_PRINT_HEADER("Concurrency:"), FIO_CLI_INT("-workers -w number of processes to use."), FIO_CLI_INT("-threads -t number of threads per process."), FIO_CLI_PRINT_HEADER("HTTP Server:"), FIO_CLI_STRING("-public -www public folder, for static file service."), FIO_CLI_INT( "-keep-alive -k HTTP keep-alive timeout (0..255). default: ~5s"), FIO_CLI_INT("-max-body -maxbd HTTP upload limit. default: ~50Mb"), FIO_CLI_BOOL("-log -v request verbosity (logging)."), FIO_CLI_PRINT_HEADER("WebSocket Server:"), FIO_CLI_INT("-ping websocket ping interval (0..255). default: ~40s"), FIO_CLI_INT("-max-msg -maxms incoming websocket message size limit. " "default: ~250Kb"), FIO_CLI_PRINT_HEADER("Redis support:"), FIO_CLI_STRING("-redis -r an optional Redis URL server address."), FIO_CLI_PRINT("\t\ti.e.: redis://user:password@localhost:6379/")); /* Test and set any default options */ if (!fio_cli_get("-b")) { char *tmp = getenv("ADDRESS"); if (tmp) { fio_cli_set("-b", tmp); fio_cli_set("-bind", tmp); } } if (!fio_cli_get("-p")) { /* Test environment as well and make sure address is missing */ char *tmp = getenv("PORT"); if (!tmp && !fio_cli_get("-b")) tmp = "3000"; /* Set default (unlike cmd line arguments, aliases are manually set) */ fio_cli_set("-p", tmp); fio_cli_set("-port", tmp); } if (!fio_cli_get("-public")) { char *tmp = getenv("HTTP_PUBLIC_FOLDER"); if (tmp) { fio_cli_set("-public", tmp); fio_cli_set("-www", tmp); } } if (!fio_cli_get("-redis")) { char *tmp = getenv("REDIS_URL"); if (tmp) { fio_cli_set("-redis", tmp); fio_cli_set("-r", tmp); } } if (fio_cli_get("-redis") && strlen(fio_cli_get("-redis"))) { FIO_LOG_INFO("* Initializing Redis connection to %s\n", fio_cli_get("-redis")); http_url_s info = http_url_parse(fio_cli_get("-redis"), strlen(fio_cli_get("-redis"))); fio_pubsub_engine_s *e = redis_engine_create(.address = info.host, .port = info.port, .auth = info.password); if (e) { fio_state_callback_add(FIO_CALL_ON_FINISH, redis_cleanup, e); FIO_PUBSUB_DEFAULT = e; } else { FIO_LOG_ERROR("Failed to create redis engine object."); } } } void free_cli(void) { fio_cli_end(); }