mirror of
https://github.com/zigzap/zap.git
synced 2025-10-21 07:34:08 +00:00
90 lines
3 KiB
C
90 lines
3 KiB
C
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#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(); }
|