libmicrohttpd2

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

daemon_set_options.c (11984B)


      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_TLS_APP_NAME:
    156       /* custom setter */
    157       settings->tls_app_name.v_disable_fallback =
    158         option->val.tls_app_name.v_disable_fallback;
    159       if (NULL == option->val.tls_app_name.v_app_name)
    160         return MHD_SC_CONFIGURATION_PARAM_NULL;
    161       else
    162       {
    163         size_t len;
    164         len = strlen (option->val.tls_app_name.v_app_name);
    165         if (128 <= len)
    166           return MHD_SC_CONFIGURATION_PARAM_TOO_LARGE;
    167         settings->tls_app_name.v_app_name = (char *)malloc (len + 1u);
    168         if (NULL == settings->tls_app_name.v_app_name)
    169           return MHD_SC_DAEMON_MEM_ALLOC_FAILURE;
    170         memcpy (settings->tls_app_name.v_app_name,
    171                 option->val.tls_app_name.v_app_name,
    172                 len + 1u);
    173       }
    174       continue;
    175     case MHD_D_O_TLS_OPENSSL_DEF_FILE:
    176       /* custom setter */
    177       settings->tls_openssl_def_file.v_disable_fallback =
    178         option->val.tls_openssl_def_file.v_disable_fallback;
    179       if (NULL == option->val.tls_openssl_def_file.v_pathname)
    180         settings->tls_openssl_def_file.v_pathname = NULL;
    181       else
    182       {
    183         size_t len;
    184         len = strlen (option->val.tls_openssl_def_file.v_pathname);
    185         settings->tls_openssl_def_file.v_pathname = (char *)malloc (len + 1u);
    186         if (NULL == settings->tls_openssl_def_file.v_pathname)
    187           return MHD_SC_DAEMON_MEM_ALLOC_FAILURE;
    188         memcpy (settings->tls_openssl_def_file.v_pathname,
    189                 option->val.tls_openssl_def_file.v_pathname,
    190                 len + 1u);
    191       }
    192       continue;
    193     case MHD_D_O_DEFAULT_TIMEOUT_MILSEC:
    194       settings->default_timeout_milsec = option->val.default_timeout_milsec;
    195       continue;
    196     case MHD_D_O_GLOBAL_CONNECTION_LIMIT:
    197       settings->global_connection_limit = option->val.global_connection_limit;
    198       continue;
    199     case MHD_D_O_PER_IP_LIMIT:
    200       settings->per_ip_limit = option->val.per_ip_limit;
    201       continue;
    202     case MHD_D_O_ACCEPT_POLICY:
    203       settings->accept_policy.v_apc = option->val.accept_policy.v_apc;
    204       settings->accept_policy.v_apc_cls = option->val.accept_policy.v_apc_cls;
    205       continue;
    206     case MHD_D_O_CONN_BUFF_ZEROING:
    207       settings->conn_buff_zeroing = option->val.conn_buff_zeroing;
    208       continue;
    209     case MHD_D_O_PROTOCOL_STRICT_LEVEL:
    210       settings->protocol_strict_level.v_sl =
    211         option->val.protocol_strict_level.v_sl;
    212       settings->protocol_strict_level.v_how =
    213         option->val.protocol_strict_level.v_how;
    214       continue;
    215     case MHD_D_O_EARLY_URI_LOGGER:
    216       settings->early_uri_logger.v_cb = option->val.early_uri_logger.v_cb;
    217       settings->early_uri_logger.v_cls = option->val.early_uri_logger.v_cls;
    218       continue;
    219     case MHD_D_O_DISABLE_URI_QUERY_PLUS_AS_SPACE:
    220       settings->disable_uri_query_plus_as_space =
    221         option->val.disable_uri_query_plus_as_space;
    222       continue;
    223     case MHD_D_O_SUPPRESS_DATE_HEADER:
    224       settings->suppress_date_header = option->val.suppress_date_header;
    225       continue;
    226     case MHD_D_O_ENABLE_SHOUTCAST:
    227       settings->enable_shoutcast = option->val.enable_shoutcast;
    228       continue;
    229     case MHD_D_O_CONN_MEMORY_LIMIT:
    230       settings->conn_memory_limit = option->val.conn_memory_limit;
    231       continue;
    232     case MHD_D_O_LARGE_POOL_SIZE:
    233       settings->large_pool_size = option->val.large_pool_size;
    234       continue;
    235     case MHD_D_O_STACK_SIZE:
    236       settings->stack_size = option->val.stack_size;
    237       continue;
    238     case MHD_D_O_FD_NUMBER_LIMIT:
    239       settings->fd_number_limit = option->val.fd_number_limit;
    240       continue;
    241     case MHD_D_O_TURBO:
    242       settings->turbo = option->val.turbo;
    243       continue;
    244     case MHD_D_O_DISABLE_THREAD_SAFETY:
    245       settings->disable_thread_safety = option->val.disable_thread_safety;
    246       continue;
    247     case MHD_D_O_DISALLOW_UPGRADE:
    248       settings->disallow_upgrade = option->val.disallow_upgrade;
    249       continue;
    250     case MHD_D_O_DISALLOW_SUSPEND_RESUME:
    251       settings->disallow_suspend_resume = option->val.disallow_suspend_resume;
    252       continue;
    253     case MHD_D_O_DISABLE_COOKIES:
    254       /* custom setter */
    255       /* The is not an easy for automatic generations */
    256       // TODO: remove options generator
    257 #ifdef MHD_SUPPORT_COOKIES
    258       settings->disable_cookies = option->val.disable_cookies;
    259 #else
    260       if (MHD_NO != option->val.disable_cookies)
    261         return MHD_SC_FEATURE_DISABLED;
    262 #endif
    263       continue;
    264     case MHD_D_O_DAEMON_READY_CALLBACK:
    265       settings->daemon_ready_callback.v_cb =
    266         option->val.daemon_ready_callback.v_cb;
    267       settings->daemon_ready_callback.v_cb_cls =
    268         option->val.daemon_ready_callback.v_cb_cls;
    269       continue;
    270     case MHD_D_O_NOTIFY_CONNECTION:
    271       settings->notify_connection.v_ncc = option->val.notify_connection.v_ncc;
    272       settings->notify_connection.v_cls = option->val.notify_connection.v_cls;
    273       continue;
    274     case MHD_D_O_NOTIFY_STREAM:
    275       settings->notify_stream.v_nsc = option->val.notify_stream.v_nsc;
    276       settings->notify_stream.v_cls = option->val.notify_stream.v_cls;
    277       continue;
    278     case MHD_D_O_RANDOM_ENTROPY:
    279       /* custom setter */
    280       /* The is not an easy for automatic generations */
    281       if (0 != option->val.random_entropy.v_buf_size)
    282       {
    283         if (NULL != settings->random_entropy.v_buf)
    284           free (settings->random_entropy.v_buf);
    285         settings->random_entropy.v_buf =
    286           malloc (option->val.random_entropy.v_buf_size);
    287         if (NULL == settings->random_entropy.v_buf)
    288           return MHD_SC_DAEMON_MEM_ALLOC_FAILURE;
    289         memcpy (settings->random_entropy.v_buf,
    290                 option->val.random_entropy.v_buf,
    291                 option->val.random_entropy.v_buf_size);
    292         settings->random_entropy.v_buf_size =
    293           option->val.random_entropy.v_buf_size;
    294       }
    295       continue;
    296     case MHD_D_O_AUTH_DIGEST_MAP_SIZE:
    297       settings->auth_digest_map_size = option->val.auth_digest_map_size;
    298       continue;
    299     case MHD_D_O_AUTH_DIGEST_NONCE_TIMEOUT:
    300       settings->auth_digest_nonce_timeout =
    301         option->val.auth_digest_nonce_timeout;
    302       continue;
    303     case MHD_D_O_AUTH_DIGEST_DEF_MAX_NC:
    304       settings->auth_digest_def_max_nc = option->val.auth_digest_def_max_nc;
    305       continue;
    306     case MHD_D_O_SENTINEL:
    307     default: /* for -Wswitch-default -Wswitch-enum */
    308       res = MHD_SC_OPTION_UNKNOWN;
    309       i = options_max_num - 1;
    310       break;
    311     }
    312   }
    313   return res;
    314 }