/**
 * sesimos - secure, simple, modern web server
 * Configuration file loader (header file)
 * src/lib/config.h
 * Lorenz Stechauner, 2021-01-05
 */

#ifndef SESIMOS_CONFIG_H
#define SESIMOS_CONFIG_H

#include "uri.h"

#define CONFIG_SHM_KEY 255642
#define CONFIG_MAX_HOST_CONFIG 64
#define CONFIG_MAX_CERT_CONFIG 64

#define CONFIG_TYPE_UNSET 0
#define CONFIG_TYPE_LOCAL 1
#define CONFIG_TYPE_REVERSE_PROXY 2

#ifndef DEFAULT_CONFIG_FILE
#   define DEFAULT_CONFIG_FILE "/etc/sesimos/server.conf"
#endif


typedef struct {
    int type;
    char name[256];
    char cert_name[256];
    int cert;
    union {
        struct {
            char hostname[256];
            unsigned short port;
            unsigned char enc:1;
        } rev_proxy;
        struct {
            char webroot[256];
            unsigned char dir_mode:2;
        } local;
    };
} host_config;

typedef struct {
    char name[256];
    char full_chain[256];
    char priv_key[256];
} cert_config;

typedef struct {
    host_config hosts[CONFIG_MAX_HOST_CONFIG];
    cert_config certs[CONFIG_MAX_CERT_CONFIG];
} t_config;

extern t_config *config;
extern char geoip_dir[256], dns_server[256];

int config_init();

int config_load(const char *filename);

int config_unload();

#endif //SESIMOS_CONFIG_H