libmicrohttpd2

HTTP server C library (MHD 2.x, alpha)
Log | Files | Refs | README | LICENSE

daemon_set_options.c (12106B)


      1 /* This is generated code, it is still under LGPLv2.1+.
      2    Do not edit directly! */
      3 /**
      4  * @file daemon_set_options.c
      5  * @author options-generator.c
      6  */
      7 
      8 #include "mhd_sys_options.h"
      9 #include "sys_base_types.h"
     10 #include "sys_malloc.h"
     11 #include <string.h>
     12 #include "mhd_daemon.h"
     13 #include "daemon_options.h"
     14 #include "mhd_public_api.h"
     15 
     16 
     17 MHD_FN_PAR_NONNULL_ALL_ MHD_EXTERN_
     18 enum MHD_StatusCode
     19 MHD_daemon_set_options (
     20   struct MHD_Daemon *MHD_RESTRICT daemon,
     21   const struct MHD_DaemonOptionAndValue *MHD_RESTRICT options,
     22   size_t options_max_num)
     23 {
     24   struct DaemonOptions *restrict settings = daemon->settings;
     25   enum MHD_StatusCode res = MHD_SC_OK;
     26   size_t i;
     27 
     28   if (mhd_DAEMON_STATE_NOT_STARTED != daemon->state)
     29     return MHD_SC_TOO_LATE;
     30 
     31   for (i = 0; i < options_max_num; i++)
     32   {
     33     const struct MHD_DaemonOptionAndValue *const option
     34       = options + i;
     35     switch (option->opt)
     36     {
     37     case MHD_D_O_END:
     38       i = options_max_num - 1;
     39       break;
     40     case MHD_D_O_WORK_MODE:
     41       settings->work_mode = option->val.work_mode;
     42       continue;
     43     case MHD_D_O_POLL_SYSCALL:
     44       settings->poll_syscall = option->val.poll_syscall;
     45       continue;
     46     case MHD_D_O_REREGISTER_ALL:
     47       settings->reregister_all = option->val.reregister_all;
     48       continue;
     49     case MHD_D_O_LOG_CALLBACK:
     50       /* Note: set directly to the daemon */
     51       daemon->log_params = option->val.log_callback;
     52       continue;
     53     case MHD_D_O_BIND_PORT:
     54       settings->bind_port.v_af = option->val.bind_port.v_af;
     55       settings->bind_port.v_port = option->val.bind_port.v_port;
     56       continue;
     57     case MHD_D_O_BIND_SA:
     58       /* custom setter */
     59       if (0 != option->val.bind_sa.v_sa_len)
     60       {
     61         if (NULL != settings->bind_sa.v_sa)
     62           free (settings->bind_sa.v_sa);
     63         settings->bind_sa.v_sa = (struct sockaddr *)
     64                                  malloc (option->val.bind_sa.v_sa_len);
     65         if (NULL == settings->bind_sa.v_sa)
     66           return MHD_SC_DAEMON_MEM_ALLOC_FAILURE;
     67         memcpy (settings->bind_sa.v_sa, option->val.bind_sa.v_sa,
     68                 option->val.bind_sa.v_sa_len);
     69         settings->bind_sa.v_sa_len = option->val.bind_sa.v_sa_len;
     70         settings->bind_sa.v_dual = option->val.bind_sa.v_dual;
     71       }
     72       continue;
     73     case MHD_D_O_LISTEN_SOCKET:
     74       settings->listen_socket = option->val.listen_socket;
     75       continue;
     76     case MHD_D_O_LISTEN_ADDR_REUSE:
     77       settings->listen_addr_reuse = option->val.listen_addr_reuse;
     78       continue;
     79     case MHD_D_O_TCP_FASTOPEN:
     80       settings->tcp_fastopen.v_option = option->val.tcp_fastopen.v_option;
     81       settings->tcp_fastopen.v_queue_length =
     82         option->val.tcp_fastopen.v_queue_length;
     83       continue;
     84     case MHD_D_O_LISTEN_BACKLOG:
     85       settings->listen_backlog = option->val.listen_backlog;
     86       continue;
     87     case MHD_D_O_SIGPIPE_SUPPRESSED:
     88       settings->sigpipe_suppressed = option->val.sigpipe_suppressed;
     89       continue;
     90     case MHD_D_O_TLS:
     91       settings->tls = option->val.tls;
     92       continue;
     93     case MHD_D_O_TLS_CERT_KEY:
     94       /* custom setter */
     95       if ((NULL == option->val.tls_cert_key.v_mem_cert)
     96           || (NULL == option->val.tls_cert_key.v_mem_key))
     97         return MHD_SC_TLS_CONF_BAD_CERT;
     98       else
     99       {
    100         size_t cert_size;
    101         size_t key_size;
    102         size_t pass_size;
    103         cert_size = strlen (option->val.tls_cert_key.v_mem_cert);
    104         key_size = strlen (option->val.tls_cert_key.v_mem_key);
    105         if ((0 == cert_size)
    106             || (0 == key_size))
    107           return MHD_SC_TLS_CONF_BAD_CERT;
    108         ++cert_size; /* Space for zero-termination */
    109         ++key_size;  /* Space for zero-termination */
    110         if (NULL != option->val.tls_cert_key.v_mem_pass)
    111           pass_size = strlen (option->val.tls_cert_key.v_mem_pass);
    112         else
    113           pass_size = 0;
    114         if (0 != pass_size)
    115           ++pass_size; /* Space for zero-termination */
    116         if (NULL != settings->tls_cert_key.v_mem_cert)
    117           free (settings->tls_cert_key.v_mem_cert); // TODO: Support multiple certificates!!
    118         settings->tls_cert_key.v_mem_cert = (char *)malloc (cert_size
    119                                                             + key_size
    120                                                             + pass_size);
    121         if (NULL == settings->tls_cert_key.v_mem_cert)
    122           return MHD_SC_DAEMON_MEM_ALLOC_FAILURE;
    123         memcpy (settings->tls_cert_key.v_mem_cert,
    124                 option->val.tls_cert_key.v_mem_cert,
    125                 cert_size);
    126         memcpy (settings->tls_cert_key.v_mem_cert + cert_size,
    127                 option->val.tls_cert_key.v_mem_key,
    128                 key_size);
    129         settings->tls_cert_key.v_mem_key =
    130           settings->tls_cert_key.v_mem_cert + cert_size;
    131         if (0 != pass_size)
    132         {
    133           memcpy (settings->tls_cert_key.v_mem_cert + cert_size + key_size,
    134                   option->val.tls_cert_key.v_mem_pass,
    135                   pass_size);
    136           settings->tls_cert_key.v_mem_pass =
    137             settings->tls_cert_key.v_mem_cert + cert_size + key_size;
    138         }
    139         else
    140           settings->tls_cert_key.v_mem_pass = NULL;
    141       }
    142       continue;
    143     case MHD_D_O_TLS_CLIENT_CA:
    144       settings->tls_client_ca = option->val.tls_client_ca;
    145       continue;
    146     case MHD_D_O_TLS_PSK_CALLBACK:
    147       settings->tls_psk_callback.v_psk_cb =
    148         option->val.tls_psk_callback.v_psk_cb;
    149       settings->tls_psk_callback.v_psk_cb_cls =
    150         option->val.tls_psk_callback.v_psk_cb_cls;
    151       continue;
    152     case MHD_D_O_NO_ALPN:
    153       settings->no_alpn = option->val.no_alpn;
    154       continue;
    155     case MHD_D_O_ACME_ALPN_REQUIRED:
    156       settings->acme_alpn_required = option->val.acme_alpn_required;
    157       continue;
    158     case MHD_D_O_TLS_APP_NAME:
    159       /* custom setter */
    160       settings->tls_app_name.v_disable_fallback =
    161         option->val.tls_app_name.v_disable_fallback;
    162       if (NULL == option->val.tls_app_name.v_app_name)
    163         return MHD_SC_CONFIGURATION_PARAM_NULL;
    164       else
    165       {
    166         size_t len;
    167         len = strlen (option->val.tls_app_name.v_app_name);
    168         if (128 <= len)
    169           return MHD_SC_CONFIGURATION_PARAM_TOO_LARGE;
    170         settings->tls_app_name.v_app_name = (char *)malloc (len + 1u);
    171         if (NULL == settings->tls_app_name.v_app_name)
    172           return MHD_SC_DAEMON_MEM_ALLOC_FAILURE;
    173         memcpy (settings->tls_app_name.v_app_name,
    174                 option->val.tls_app_name.v_app_name,
    175                 len + 1u);
    176       }
    177       continue;
    178     case MHD_D_O_TLS_OPENSSL_DEF_FILE:
    179       /* custom setter */
    180       settings->tls_openssl_def_file.v_disable_fallback =
    181         option->val.tls_openssl_def_file.v_disable_fallback;
    182       if (NULL == option->val.tls_openssl_def_file.v_pathname)
    183         settings->tls_openssl_def_file.v_pathname = NULL;
    184       else
    185       {
    186         size_t len;
    187         len = strlen (option->val.tls_openssl_def_file.v_pathname);
    188         settings->tls_openssl_def_file.v_pathname = (char *)malloc (len + 1u);
    189         if (NULL == settings->tls_openssl_def_file.v_pathname)
    190           return MHD_SC_DAEMON_MEM_ALLOC_FAILURE;
    191         memcpy (settings->tls_openssl_def_file.v_pathname,
    192                 option->val.tls_openssl_def_file.v_pathname,
    193                 len + 1u);
    194       }
    195       continue;
    196     case MHD_D_O_DEFAULT_TIMEOUT_MILSEC:
    197       settings->default_timeout_milsec = option->val.default_timeout_milsec;
    198       continue;
    199     case MHD_D_O_GLOBAL_CONNECTION_LIMIT:
    200       settings->global_connection_limit = option->val.global_connection_limit;
    201       continue;
    202     case MHD_D_O_PER_IP_LIMIT:
    203       settings->per_ip_limit = option->val.per_ip_limit;
    204       continue;
    205     case MHD_D_O_ACCEPT_POLICY:
    206       settings->accept_policy.v_apc = option->val.accept_policy.v_apc;
    207       settings->accept_policy.v_apc_cls = option->val.accept_policy.v_apc_cls;
    208       continue;
    209     case MHD_D_O_CONN_BUFF_ZEROING:
    210       settings->conn_buff_zeroing = option->val.conn_buff_zeroing;
    211       continue;
    212     case MHD_D_O_PROTOCOL_STRICT_LEVEL:
    213       settings->protocol_strict_level.v_sl =
    214         option->val.protocol_strict_level.v_sl;
    215       settings->protocol_strict_level.v_how =
    216         option->val.protocol_strict_level.v_how;
    217       continue;
    218     case MHD_D_O_EARLY_URI_LOGGER:
    219       settings->early_uri_logger.v_cb = option->val.early_uri_logger.v_cb;
    220       settings->early_uri_logger.v_cls = option->val.early_uri_logger.v_cls;
    221       continue;
    222     case MHD_D_O_DISABLE_URI_QUERY_PLUS_AS_SPACE:
    223       settings->disable_uri_query_plus_as_space =
    224         option->val.disable_uri_query_plus_as_space;
    225       continue;
    226     case MHD_D_O_SUPPRESS_DATE_HEADER:
    227       settings->suppress_date_header = option->val.suppress_date_header;
    228       continue;
    229     case MHD_D_O_ENABLE_SHOUTCAST:
    230       settings->enable_shoutcast = option->val.enable_shoutcast;
    231       continue;
    232     case MHD_D_O_CONN_MEMORY_LIMIT:
    233       settings->conn_memory_limit = option->val.conn_memory_limit;
    234       continue;
    235     case MHD_D_O_LARGE_POOL_SIZE:
    236       settings->large_pool_size = option->val.large_pool_size;
    237       continue;
    238     case MHD_D_O_STACK_SIZE:
    239       settings->stack_size = option->val.stack_size;
    240       continue;
    241     case MHD_D_O_FD_NUMBER_LIMIT:
    242       settings->fd_number_limit = option->val.fd_number_limit;
    243       continue;
    244     case MHD_D_O_TURBO:
    245       settings->turbo = option->val.turbo;
    246       continue;
    247     case MHD_D_O_DISABLE_THREAD_SAFETY:
    248       settings->disable_thread_safety = option->val.disable_thread_safety;
    249       continue;
    250     case MHD_D_O_DISALLOW_UPGRADE:
    251       settings->disallow_upgrade = option->val.disallow_upgrade;
    252       continue;
    253     case MHD_D_O_DISALLOW_SUSPEND_RESUME:
    254       settings->disallow_suspend_resume = option->val.disallow_suspend_resume;
    255       continue;
    256     case MHD_D_O_DISABLE_COOKIES:
    257       /* custom setter */
    258       /* The is not an easy for automatic generations */
    259       // TODO: remove options generator
    260 #ifdef MHD_SUPPORT_COOKIES
    261       settings->disable_cookies = option->val.disable_cookies;
    262 #else
    263       if (MHD_NO != option->val.disable_cookies)
    264         return MHD_SC_FEATURE_DISABLED;
    265 #endif
    266       continue;
    267     case MHD_D_O_DAEMON_READY_CALLBACK:
    268       settings->daemon_ready_callback.v_cb =
    269         option->val.daemon_ready_callback.v_cb;
    270       settings->daemon_ready_callback.v_cb_cls =
    271         option->val.daemon_ready_callback.v_cb_cls;
    272       continue;
    273     case MHD_D_O_NOTIFY_CONNECTION:
    274       settings->notify_connection.v_ncc = option->val.notify_connection.v_ncc;
    275       settings->notify_connection.v_cls = option->val.notify_connection.v_cls;
    276       continue;
    277     case MHD_D_O_NOTIFY_STREAM:
    278       settings->notify_stream.v_nsc = option->val.notify_stream.v_nsc;
    279       settings->notify_stream.v_cls = option->val.notify_stream.v_cls;
    280       continue;
    281     case MHD_D_O_RANDOM_ENTROPY:
    282       /* custom setter */
    283       /* The is not an easy for automatic generations */
    284       if (0 != option->val.random_entropy.v_buf_size)
    285       {
    286         if (NULL != settings->random_entropy.v_buf)
    287           free (settings->random_entropy.v_buf);
    288         settings->random_entropy.v_buf =
    289           malloc (option->val.random_entropy.v_buf_size);
    290         if (NULL == settings->random_entropy.v_buf)
    291           return MHD_SC_DAEMON_MEM_ALLOC_FAILURE;
    292         memcpy (settings->random_entropy.v_buf,
    293                 option->val.random_entropy.v_buf,
    294                 option->val.random_entropy.v_buf_size);
    295         settings->random_entropy.v_buf_size =
    296           option->val.random_entropy.v_buf_size;
    297       }
    298       continue;
    299     case MHD_D_O_AUTH_DIGEST_MAP_SIZE:
    300       settings->auth_digest_map_size = option->val.auth_digest_map_size;
    301       continue;
    302     case MHD_D_O_AUTH_DIGEST_NONCE_TIMEOUT:
    303       settings->auth_digest_nonce_timeout =
    304         option->val.auth_digest_nonce_timeout;
    305       continue;
    306     case MHD_D_O_AUTH_DIGEST_DEF_MAX_NC:
    307       settings->auth_digest_def_max_nc = option->val.auth_digest_def_max_nc;
    308       continue;
    309     case MHD_D_O_SENTINEL:
    310     default: /* for -Wswitch-default -Wswitch-enum */
    311       res = MHD_SC_OPTION_UNKNOWN;
    312       i = options_max_num - 1;
    313       break;
    314     }
    315   }
    316   return res;
    317 }