Home | History | Annotate | Download | only in microhttpd
      1 /*
      2   This file is part of libmicrohttpd
      3   Copyright (C) 2007-2015 Daniel Pittman and Christian Grothoff
      4 
      5   This library is free software; you can redistribute it and/or
      6   modify it under the terms of the GNU Lesser General Public
      7   License as published by the Free Software Foundation; either
      8   version 2.1 of the License, or (at your option) any later version.
      9 
     10   This library is distributed in the hope that it will be useful,
     11   but WITHOUT ANY WARRANTY; without even the implied warranty of
     12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13   Lesser General Public License for more details.
     14 
     15   You should have received a copy of the GNU Lesser General Public
     16   License along with this library; if not, write to the Free Software
     17   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
     18 */
     19 
     20 /**
     21  * @file microhttpd/internal.h
     22  * @brief  internal shared structures
     23  * @author Daniel Pittman
     24  * @author Christian Grothoff
     25  */
     26 
     27 #ifndef INTERNAL_H
     28 #define INTERNAL_H
     29 
     30 #include "platform.h"
     31 #include "microhttpd.h"
     32 #include "platform_interface.h"
     33 #if HTTPS_SUPPORT
     34 #include <openssl/ssl.h>
     35 #endif
     36 #if EPOLL_SUPPORT
     37 #include <sys/epoll.h>
     38 #endif
     39 #if HAVE_NETINET_TCP_H
     40 /* for TCP_FASTOPEN */
     41 #include <netinet/tcp.h>
     42 #endif
     43 
     44 
     45 /**
     46  * Should we perform additional sanity checks at runtime (on our internal
     47  * invariants)?  This may lead to aborts, but can be useful for debugging.
     48  */
     49 #define EXTRA_CHECKS MHD_NO
     50 
     51 #define MHD_MAX(a,b) ((a)<(b)) ? (b) : (a)
     52 #define MHD_MIN(a,b) ((a)<(b)) ? (a) : (b)
     53 
     54 
     55 /**
     56  * Minimum size by which MHD tries to increment read/write buffers.
     57  * We usually begin with half the available pool space for the
     58  * IO-buffer, but if absolutely needed we additively grow by the
     59  * number of bytes given here (up to -- theoretically -- the full pool
     60  * space).
     61  */
     62 #define MHD_BUF_INC_SIZE 1024
     63 
     64 
     65 /**
     66  * Handler for fatal errors.
     67  */
     68 extern MHD_PanicCallback mhd_panic;
     69 
     70 /**
     71  * Closure argument for "mhd_panic".
     72  */
     73 extern void *mhd_panic_cls;
     74 
     75 /* If we have Clang or gcc >= 4.5, use __buildin_unreachable() */
     76 #if defined(__clang__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
     77 #define BUILTIN_NOT_REACHED __builtin_unreachable()
     78 #else
     79 #define BUILTIN_NOT_REACHED
     80 #endif
     81 
     82 
     83 #if HAVE_MESSAGES
     84 /**
     85  * Trigger 'panic' action based on fatal errors.
     86  *
     87  * @param msg error message (const char *)
     88  */
     89 #define MHD_PANIC(msg) do { mhd_panic (mhd_panic_cls, __FILE__, __LINE__, msg); BUILTIN_NOT_REACHED; } while (0)
     90 #else
     91 /**
     92  * Trigger 'panic' action based on fatal errors.
     93  *
     94  * @param msg error message (const char *)
     95  */
     96 #define MHD_PANIC(msg) do { mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL); BUILTIN_NOT_REACHED; } while (0)
     97 #endif
     98 
     99 
    100 /**
    101  * State of the socket with respect to epoll (bitmask).
    102  */
    103 enum MHD_EpollState
    104   {
    105 
    106     /**
    107      * The socket is not involved with a defined state in epoll right
    108      * now.
    109      */
    110     MHD_EPOLL_STATE_UNREADY = 0,
    111 
    112     /**
    113      * epoll told us that data was ready for reading, and we did
    114      * not consume all of it yet.
    115      */
    116     MHD_EPOLL_STATE_READ_READY = 1,
    117 
    118     /**
    119      * epoll told us that space was available for writing, and we did
    120      * not consume all of it yet.
    121      */
    122     MHD_EPOLL_STATE_WRITE_READY = 2,
    123 
    124     /**
    125      * Is this connection currently in the 'eready' EDLL?
    126      */
    127     MHD_EPOLL_STATE_IN_EREADY_EDLL = 4,
    128 
    129     /**
    130      * Is this connection currently in the 'epoll' set?
    131      */
    132     MHD_EPOLL_STATE_IN_EPOLL_SET = 8,
    133 
    134     /**
    135      * Is this connection currently suspended?
    136      */
    137     MHD_EPOLL_STATE_SUSPENDED = 16
    138   };
    139 
    140 
    141 /**
    142  * What is this connection waiting for?
    143  */
    144 enum MHD_ConnectionEventLoopInfo
    145   {
    146     /**
    147      * We are waiting to be able to read.
    148      */
    149     MHD_EVENT_LOOP_INFO_READ = 0,
    150 
    151     /**
    152      * We are waiting to be able to write.
    153      */
    154     MHD_EVENT_LOOP_INFO_WRITE = 1,
    155 
    156     /**
    157      * We are waiting for the application to provide data.
    158      */
    159     MHD_EVENT_LOOP_INFO_BLOCK = 2,
    160 
    161     /**
    162      * We are finished and are awaiting cleanup.
    163      */
    164     MHD_EVENT_LOOP_INFO_CLEANUP = 3
    165   };
    166 
    167 
    168 /**
    169  * Maximum length of a nonce in digest authentication.  32(MD5 Hex) +
    170  * 8(Timestamp Hex) + 1(NULL); hence 41 should suffice, but Opera
    171  * (already) takes more (see Mantis #1633), so we've increased the
    172  * value to support something longer...
    173  */
    174 #define MAX_NONCE_LENGTH 129
    175 
    176 
    177 /**
    178  * A structure representing the internal holder of the
    179  * nonce-nc map.
    180  */
    181 struct MHD_NonceNc
    182 {
    183 
    184   /**
    185    * Nonce counter, a value that increases for each subsequent
    186    * request for the same nonce.
    187    */
    188   unsigned long int nc;
    189 
    190   /**
    191    * Nonce value:
    192    */
    193   char nonce[MAX_NONCE_LENGTH];
    194 
    195 };
    196 
    197 #if HAVE_MESSAGES
    198 /**
    199  * fprintf-like helper function for logging debug
    200  * messages.
    201  */
    202 void
    203 MHD_DLOG (const struct MHD_Daemon *daemon,
    204 	  const char *format, ...);
    205 #endif
    206 
    207 
    208 /**
    209  * Header or cookie in HTTP request or response.
    210  */
    211 struct MHD_HTTP_Header
    212 {
    213   /**
    214    * Headers are kept in a linked list.
    215    */
    216   struct MHD_HTTP_Header *next;
    217 
    218   /**
    219    * The name of the header (key), without
    220    * the colon.
    221    */
    222   char *header;
    223 
    224   /**
    225    * The value of the header.
    226    */
    227   char *value;
    228 
    229   /**
    230    * Type of the header (where in the HTTP
    231    * protocol is this header from).
    232    */
    233   enum MHD_ValueKind kind;
    234 
    235 };
    236 
    237 
    238 /**
    239  * Representation of a response.
    240  */
    241 struct MHD_Response
    242 {
    243 
    244   /**
    245    * Headers to send for the response.  Initially
    246    * the linked list is created in inverse order;
    247    * the order should be inverted before sending!
    248    */
    249   struct MHD_HTTP_Header *first_header;
    250 
    251   /**
    252    * Buffer pointing to data that we are supposed
    253    * to send as a response.
    254    */
    255   char *data;
    256 
    257   /**
    258    * Closure to give to the content reader @e crc
    259    * and content reader free callback @e crfc.
    260    */
    261   void *crc_cls;
    262 
    263   /**
    264    * How do we get more data?  NULL if we are
    265    * given all of the data up front.
    266    */
    267   MHD_ContentReaderCallback crc;
    268 
    269   /**
    270    * NULL if data must not be freed, otherwise
    271    * either user-specified callback or "&free".
    272    */
    273   MHD_ContentReaderFreeCallback crfc;
    274 
    275   /**
    276    * Mutex to synchronize access to @e data, @e size and
    277    * @e reference_count.
    278    */
    279   MHD_mutex_ mutex;
    280 
    281   /**
    282    * Set to #MHD_SIZE_UNKNOWN if size is not known.
    283    */
    284   uint64_t total_size;
    285 
    286   /**
    287    * At what offset in the stream is the
    288    * beginning of @e data located?
    289    */
    290   uint64_t data_start;
    291 
    292   /**
    293    * Offset to start reading from when using @e fd.
    294    */
    295   off_t fd_off;
    296 
    297   /**
    298    * Number of bytes ready in @e data (buffer may be larger
    299    * than what is filled with payload).
    300    */
    301   size_t data_size;
    302 
    303   /**
    304    * Size of the data buffer @e data.
    305    */
    306   size_t data_buffer_size;
    307 
    308   /**
    309    * Reference count for this response.  Free
    310    * once the counter hits zero.
    311    */
    312   unsigned int reference_count;
    313 
    314   /**
    315    * File-descriptor if this response is FD-backed.
    316    */
    317   int fd;
    318 
    319   /**
    320    * Flags set for the MHD response.
    321    */
    322   enum MHD_ResponseFlags flags;
    323 
    324 };
    325 
    326 
    327 /**
    328  * States in a state machine for a connection.
    329  *
    330  * Transitions are any-state to CLOSED, any state to state+1,
    331  * FOOTERS_SENT to INIT.  CLOSED is the terminal state and
    332  * INIT the initial state.
    333  *
    334  * Note that transitions for *reading* happen only after
    335  * the input has been processed; transitions for
    336  * *writing* happen after the respective data has been
    337  * put into the write buffer (the write does not have
    338  * to be completed yet).  A transition to CLOSED or INIT
    339  * requires the write to be complete.
    340  */
    341 enum MHD_CONNECTION_STATE
    342 {
    343   /**
    344    * Connection just started (no headers received).
    345    * Waiting for the line with the request type, URL and version.
    346    */
    347   MHD_CONNECTION_INIT = 0,
    348 
    349   /**
    350    * 1: We got the URL (and request type and version).  Wait for a header line.
    351    */
    352   MHD_CONNECTION_URL_RECEIVED = MHD_CONNECTION_INIT + 1,
    353 
    354   /**
    355    * 2: We got part of a multi-line request header.  Wait for the rest.
    356    */
    357   MHD_CONNECTION_HEADER_PART_RECEIVED = MHD_CONNECTION_URL_RECEIVED + 1,
    358 
    359   /**
    360    * 3: We got the request headers.  Process them.
    361    */
    362   MHD_CONNECTION_HEADERS_RECEIVED = MHD_CONNECTION_HEADER_PART_RECEIVED + 1,
    363 
    364   /**
    365    * 4: We have processed the request headers.  Send 100 continue.
    366    */
    367   MHD_CONNECTION_HEADERS_PROCESSED = MHD_CONNECTION_HEADERS_RECEIVED + 1,
    368 
    369   /**
    370    * 5: We have processed the headers and need to send 100 CONTINUE.
    371    */
    372   MHD_CONNECTION_CONTINUE_SENDING = MHD_CONNECTION_HEADERS_PROCESSED + 1,
    373 
    374   /**
    375    * 6: We have sent 100 CONTINUE (or do not need to).  Read the message body.
    376    */
    377   MHD_CONNECTION_CONTINUE_SENT = MHD_CONNECTION_CONTINUE_SENDING + 1,
    378 
    379   /**
    380    * 7: We got the request body.  Wait for a line of the footer.
    381    */
    382   MHD_CONNECTION_BODY_RECEIVED = MHD_CONNECTION_CONTINUE_SENT + 1,
    383 
    384   /**
    385    * 8: We got part of a line of the footer.  Wait for the
    386    * rest.
    387    */
    388   MHD_CONNECTION_FOOTER_PART_RECEIVED = MHD_CONNECTION_BODY_RECEIVED + 1,
    389 
    390   /**
    391    * 9: We received the entire footer.  Wait for a response to be queued
    392    * and prepare the response headers.
    393    */
    394   MHD_CONNECTION_FOOTERS_RECEIVED = MHD_CONNECTION_FOOTER_PART_RECEIVED + 1,
    395 
    396   /**
    397    * 10: We have prepared the response headers in the writ buffer.
    398    * Send the response headers.
    399    */
    400   MHD_CONNECTION_HEADERS_SENDING = MHD_CONNECTION_FOOTERS_RECEIVED + 1,
    401 
    402   /**
    403    * 11: We have sent the response headers.  Get ready to send the body.
    404    */
    405   MHD_CONNECTION_HEADERS_SENT = MHD_CONNECTION_HEADERS_SENDING + 1,
    406 
    407   /**
    408    * 12: We are ready to send a part of a non-chunked body.  Send it.
    409    */
    410   MHD_CONNECTION_NORMAL_BODY_READY = MHD_CONNECTION_HEADERS_SENT + 1,
    411 
    412   /**
    413    * 13: We are waiting for the client to provide more
    414    * data of a non-chunked body.
    415    */
    416   MHD_CONNECTION_NORMAL_BODY_UNREADY = MHD_CONNECTION_NORMAL_BODY_READY + 1,
    417 
    418   /**
    419    * 14: We are ready to send a chunk.
    420    */
    421   MHD_CONNECTION_CHUNKED_BODY_READY = MHD_CONNECTION_NORMAL_BODY_UNREADY + 1,
    422 
    423   /**
    424    * 15: We are waiting for the client to provide a chunk of the body.
    425    */
    426   MHD_CONNECTION_CHUNKED_BODY_UNREADY = MHD_CONNECTION_CHUNKED_BODY_READY + 1,
    427 
    428   /**
    429    * 16: We have sent the response body. Prepare the footers.
    430    */
    431   MHD_CONNECTION_BODY_SENT = MHD_CONNECTION_CHUNKED_BODY_UNREADY + 1,
    432 
    433   /**
    434    * 17: We have prepared the response footer.  Send it.
    435    */
    436   MHD_CONNECTION_FOOTERS_SENDING = MHD_CONNECTION_BODY_SENT + 1,
    437 
    438   /**
    439    * 18: We have sent the response footer.  Shutdown or restart.
    440    */
    441   MHD_CONNECTION_FOOTERS_SENT = MHD_CONNECTION_FOOTERS_SENDING + 1,
    442 
    443   /**
    444    * 19: This connection is to be closed.
    445    */
    446   MHD_CONNECTION_CLOSED = MHD_CONNECTION_FOOTERS_SENT + 1,
    447 
    448   /**
    449    * 20: This connection is finished (only to be freed)
    450    */
    451   MHD_CONNECTION_IN_CLEANUP = MHD_CONNECTION_CLOSED + 1,
    452 
    453   /*
    454    *  SSL/TLS connection states
    455    */
    456 
    457   /**
    458    * The initial connection state for all secure connectoins
    459    * Handshake messages will be processed in this state & while
    460    * in the 'MHD_TLS_HELLO_REQUEST' state
    461    */
    462   MHD_TLS_CONNECTION_INIT = MHD_CONNECTION_IN_CLEANUP + 1
    463 
    464 };
    465 
    466 /**
    467  * Should all state transitions be printed to stderr?
    468  */
    469 #define DEBUG_STATES MHD_NO
    470 
    471 
    472 #if HAVE_MESSAGES
    473 #if DEBUG_STATES
    474 const char *
    475 MHD_state_to_string (enum MHD_CONNECTION_STATE state);
    476 #endif
    477 #endif
    478 
    479 /**
    480  * Function to receive plaintext data.
    481  *
    482  * @param conn the connection struct
    483  * @param write_to where to write received data
    484  * @param max_bytes maximum number of bytes to receive
    485  * @return number of bytes written to write_to
    486  */
    487 typedef ssize_t
    488 (*ReceiveCallback) (struct MHD_Connection *conn,
    489                     void *write_to,
    490                     size_t max_bytes);
    491 
    492 
    493 /**
    494  * Function to transmit plaintext data.
    495  *
    496  * @param conn the connection struct
    497  * @param read_from where to read data to transmit
    498  * @param max_bytes maximum number of bytes to transmit
    499  * @return number of bytes transmitted
    500  */
    501 typedef ssize_t
    502 (*TransmitCallback) (struct MHD_Connection *conn,
    503                      const void *write_to,
    504                      size_t max_bytes);
    505 
    506 
    507 /**
    508  * State kept for each HTTP request.
    509  */
    510 struct MHD_Connection
    511 {
    512 
    513 #if EPOLL_SUPPORT
    514   /**
    515    * Next pointer for the EDLL listing connections that are epoll-ready.
    516    */
    517   struct MHD_Connection *nextE;
    518 
    519   /**
    520    * Previous pointer for the EDLL listing connections that are epoll-ready.
    521    */
    522   struct MHD_Connection *prevE;
    523 #endif
    524 
    525   /**
    526    * Next pointer for the DLL describing our IO state.
    527    */
    528   struct MHD_Connection *next;
    529 
    530   /**
    531    * Previous pointer for the DLL describing our IO state.
    532    */
    533   struct MHD_Connection *prev;
    534 
    535   /**
    536    * Next pointer for the XDLL organizing connections by timeout.
    537    * This DLL can be either the
    538    * 'manual_timeout_head/manual_timeout_tail' or the
    539    * 'normal_timeout_head/normal_timeout_tail', depending on whether a
    540    * custom timeout is set for the connection.
    541    */
    542   struct MHD_Connection *nextX;
    543 
    544   /**
    545    * Previous pointer for the XDLL organizing connections by timeout.
    546    */
    547   struct MHD_Connection *prevX;
    548 
    549   /**
    550    * Reference to the MHD_Daemon struct.
    551    */
    552   struct MHD_Daemon *daemon;
    553 
    554   /**
    555    * Linked list of parsed headers.
    556    */
    557   struct MHD_HTTP_Header *headers_received;
    558 
    559   /**
    560    * Tail of linked list of parsed headers.
    561    */
    562   struct MHD_HTTP_Header *headers_received_tail;
    563 
    564   /**
    565    * Response to transmit (initially NULL).
    566    */
    567   struct MHD_Response *response;
    568 
    569   /**
    570    * The memory pool is created whenever we first read
    571    * from the TCP stream and destroyed at the end of
    572    * each request (and re-created for the next request).
    573    * In the meantime, this pointer is NULL.  The
    574    * pool is used for all connection-related data
    575    * except for the response (which maybe shared between
    576    * connections) and the IP address (which persists
    577    * across individual requests).
    578    */
    579   struct MemoryPool *pool;
    580 
    581   /**
    582    * We allow the main application to associate some pointer with the
    583    * HTTP request, which is passed to each #MHD_AccessHandlerCallback
    584    * and some other API calls.  Here is where we store it.  (MHD does
    585    * not know or care what it is).
    586    */
    587   void *client_context;
    588 
    589   /**
    590    * We allow the main application to associate some pointer with the
    591    * TCP connection (which may span multiple HTTP requests).  Here is
    592    * where we store it.  (MHD does not know or care what it is).
    593    * The location is given to the #MHD_NotifyConnectionCallback and
    594    * also accessible via #MHD_CONNECTION_INFO_SOCKET_CONTEXT.
    595    */
    596   void *socket_context;
    597 
    598   /**
    599    * Request method.  Should be GET/POST/etc.  Allocated
    600    * in pool.
    601    */
    602   char *method;
    603 
    604   /**
    605    * Requested URL (everything after "GET" only).  Allocated
    606    * in pool.
    607    */
    608   char *url;
    609 
    610   /**
    611    * HTTP version string (i.e. http/1.1).  Allocated
    612    * in pool.
    613    */
    614   char *version;
    615 
    616   /**
    617    * Buffer for reading requests.   Allocated
    618    * in pool.  Actually one byte larger than
    619    * @e read_buffer_size (if non-NULL) to allow for
    620    * 0-termination.
    621    */
    622   char *read_buffer;
    623 
    624   /**
    625    * Buffer for writing response (headers only).  Allocated
    626    * in pool.
    627    */
    628   char *write_buffer;
    629 
    630   /**
    631    * Last incomplete header line during parsing of headers.
    632    * Allocated in pool.  Only valid if state is
    633    * either #MHD_CONNECTION_HEADER_PART_RECEIVED or
    634    * #MHD_CONNECTION_FOOTER_PART_RECEIVED.
    635    */
    636   char *last;
    637 
    638   /**
    639    * Position after the colon on the last incomplete header
    640    * line during parsing of headers.
    641    * Allocated in pool.  Only valid if state is
    642    * either #MHD_CONNECTION_HEADER_PART_RECEIVED or
    643    * #MHD_CONNECTION_FOOTER_PART_RECEIVED.
    644    */
    645   char *colon;
    646 
    647   /**
    648    * Foreign address (of length @e addr_len).  MALLOCED (not
    649    * in pool!).
    650    */
    651   struct sockaddr *addr;
    652 
    653   /**
    654    * Thread handle for this connection (if we are using
    655    * one thread per connection).
    656    */
    657   MHD_thread_handle_ pid;
    658 
    659   /**
    660    * Size of read_buffer (in bytes).  This value indicates
    661    * how many bytes we're willing to read into the buffer;
    662    * the real buffer is one byte longer to allow for
    663    * adding zero-termination (when needed).
    664    */
    665   size_t read_buffer_size;
    666 
    667   /**
    668    * Position where we currently append data in
    669    * read_buffer (last valid position).
    670    */
    671   size_t read_buffer_offset;
    672 
    673   /**
    674    * Size of write_buffer (in bytes).
    675    */
    676   size_t write_buffer_size;
    677 
    678   /**
    679    * Offset where we are with sending from write_buffer.
    680    */
    681   size_t write_buffer_send_offset;
    682 
    683   /**
    684    * Last valid location in write_buffer (where do we
    685    * append and up to where is it safe to send?)
    686    */
    687   size_t write_buffer_append_offset;
    688 
    689   /**
    690    * How many more bytes of the body do we expect
    691    * to read? #MHD_SIZE_UNKNOWN for unknown.
    692    */
    693   uint64_t remaining_upload_size;
    694 
    695   /**
    696    * Current write position in the actual response
    697    * (excluding headers, content only; should be 0
    698    * while sending headers).
    699    */
    700   uint64_t response_write_position;
    701 
    702   /**
    703    * Position in the 100 CONTINUE message that
    704    * we need to send when receiving http 1.1 requests.
    705    */
    706   size_t continue_message_write_offset;
    707 
    708   /**
    709    * Length of the foreign address.
    710    */
    711   socklen_t addr_len;
    712 
    713   /**
    714    * Last time this connection had any activity
    715    * (reading or writing).
    716    */
    717   time_t last_activity;
    718 
    719   /**
    720    * After how many seconds of inactivity should
    721    * this connection time out?  Zero for no timeout.
    722    */
    723   unsigned int connection_timeout;
    724 
    725   /**
    726    * Did we ever call the "default_handler" on this connection?
    727    * (this flag will determine if we call the 'notify_completed'
    728    * handler when the connection closes down).
    729    */
    730   int client_aware;
    731 
    732   /**
    733    * Socket for this connection.  Set to #MHD_INVALID_SOCKET if
    734    * this connection has died (daemon should clean
    735    * up in that case).
    736    */
    737   MHD_socket socket_fd;
    738 
    739   /**
    740    * Has this socket been closed for reading (i.e.  other side closed
    741    * the connection)?  If so, we must completely close the connection
    742    * once we are done sending our response (and stop trying to read
    743    * from this socket).
    744    */
    745   int read_closed;
    746 
    747   /**
    748    * Set to #MHD_YES if the thread has been joined.
    749    */
    750   int thread_joined;
    751 
    752   /**
    753    * Are we currently inside the "idle" handler (to avoid recursively invoking it).
    754    */
    755   int in_idle;
    756 
    757 #if EPOLL_SUPPORT
    758   /**
    759    * What is the state of this socket in relation to epoll?
    760    */
    761   enum MHD_EpollState epoll_state;
    762 #endif
    763 
    764   /**
    765    * State in the FSM for this connection.
    766    */
    767   enum MHD_CONNECTION_STATE state;
    768 
    769   /**
    770    * What is this connection waiting for?
    771    */
    772   enum MHD_ConnectionEventLoopInfo event_loop_info;
    773 
    774   /**
    775    * HTTP response code.  Only valid if response object
    776    * is already set.
    777    */
    778   unsigned int responseCode;
    779 
    780   /**
    781    * Set to MHD_YES if the response's content reader
    782    * callback failed to provide data the last time
    783    * we tried to read from it.  In that case, the
    784    * write socket should be marked as unready until
    785    * the CRC call succeeds.
    786    */
    787   int response_unready;
    788 
    789   /**
    790    * Are we receiving with chunked encoding?  This will be set to
    791    * MHD_YES after we parse the headers and are processing the body
    792    * with chunks.  After we are done with the body and we are
    793    * processing the footers; once the footers are also done, this will
    794    * be set to MHD_NO again (before the final call to the handler).
    795    */
    796   int have_chunked_upload;
    797 
    798   /**
    799    * If we are receiving with chunked encoding, where are we right
    800    * now?  Set to 0 if we are waiting to receive the chunk size;
    801    * otherwise, this is the size of the current chunk.  A value of
    802    * zero is also used when we're at the end of the chunks.
    803    */
    804   size_t current_chunk_size;
    805 
    806   /**
    807    * If we are receiving with chunked encoding, where are we currently
    808    * with respect to the current chunk (at what offset / position)?
    809    */
    810   size_t current_chunk_offset;
    811 
    812   /**
    813    * Handler used for processing read connection operations
    814    */
    815   int (*read_handler) (struct MHD_Connection *connection);
    816 
    817   /**
    818    * Handler used for processing write connection operations
    819    */
    820   int (*write_handler) (struct MHD_Connection *connection);
    821 
    822   /**
    823    * Handler used for processing idle connection operations
    824    */
    825   int (*idle_handler) (struct MHD_Connection *connection);
    826 
    827   /**
    828    * Function used for reading HTTP request stream.
    829    */
    830   ReceiveCallback recv_cls;
    831 
    832   /**
    833    * Function used for writing HTTP response stream.
    834    */
    835   TransmitCallback send_cls;
    836 
    837 #if HTTPS_SUPPORT
    838   /**
    839    * State required for HTTPS/SSL/TLS support.
    840    */
    841   SSL* tls_session;
    842 
    843   /**
    844    * Memory location to return for protocol session info.
    845    */
    846   const char* protocol;
    847 
    848   /**
    849    * Memory location to return for protocol session info.
    850    */
    851   const char* cipher;
    852 
    853   /**
    854    * Could it be that we are ready to read due to TLS buffers
    855    * even though the socket is not?
    856    */
    857   int tls_read_ready;
    858 #endif
    859 
    860   /**
    861    * Is the connection suspended?
    862    */
    863   int suspended;
    864 
    865   /**
    866    * Is the connection wanting to resume?
    867    */
    868   int resuming;
    869 };
    870 
    871 /**
    872  * Signature of function called to log URI accesses.
    873  *
    874  * @param cls closure
    875  * @param uri uri being accessed
    876  * @param con connection handle
    877  * @return new closure
    878  */
    879 typedef void *
    880 (*LogCallback)(void * cls,
    881                const char * uri,
    882                struct MHD_Connection *con);
    883 
    884 /**
    885  * Signature of function called to unescape URIs.  See also
    886  * #MHD_http_unescape().
    887  *
    888  * @param cls closure
    889  * @param conn connection handle
    890  * @param uri 0-terminated string to unescape (should be updated)
    891  * @return length of the resulting string
    892  */
    893 typedef size_t
    894 (*UnescapeCallback)(void *cls,
    895                     struct MHD_Connection *conn,
    896                     char *uri);
    897 
    898 
    899 /**
    900  * State kept for each MHD daemon.  All connections are kept in two
    901  * doubly-linked lists.  The first one reflects the state of the
    902  * connection in terms of what operations we are waiting for (read,
    903  * write, locally blocked, cleanup) whereas the second is about its
    904  * timeout state (default or custom).
    905  */
    906 struct MHD_Daemon
    907 {
    908 
    909   /**
    910    * Callback function for all requests.
    911    */
    912   MHD_AccessHandlerCallback default_handler;
    913 
    914   /**
    915    * Closure argument to default_handler.
    916    */
    917   void *default_handler_cls;
    918 
    919   /**
    920    * Head of doubly-linked list of our current, active connections.
    921    */
    922   struct MHD_Connection *connections_head;
    923 
    924   /**
    925    * Tail of doubly-linked list of our current, active connections.
    926    */
    927   struct MHD_Connection *connections_tail;
    928 
    929   /**
    930    * Head of doubly-linked list of our current but suspended connections.
    931    */
    932   struct MHD_Connection *suspended_connections_head;
    933 
    934   /**
    935    * Tail of doubly-linked list of our current but suspended connections.
    936    */
    937   struct MHD_Connection *suspended_connections_tail;
    938 
    939   /**
    940    * Head of doubly-linked list of connections to clean up.
    941    */
    942   struct MHD_Connection *cleanup_head;
    943 
    944   /**
    945    * Tail of doubly-linked list of connections to clean up.
    946    */
    947   struct MHD_Connection *cleanup_tail;
    948 
    949 #if EPOLL_SUPPORT
    950   /**
    951    * Head of EDLL of connections ready for processing (in epoll mode).
    952    */
    953   struct MHD_Connection *eready_head;
    954 
    955   /**
    956    * Tail of EDLL of connections ready for processing (in epoll mode)
    957    */
    958   struct MHD_Connection *eready_tail;
    959 #endif
    960 
    961   /**
    962    * Head of the XDLL of ALL connections with a default ('normal')
    963    * timeout, sorted by timeout (earliest at the tail, most recently
    964    * used connection at the head).  MHD can just look at the tail of
    965    * this list to determine the timeout for all of its elements;
    966    * whenever there is an event of a connection, the connection is
    967    * moved back to the tail of the list.
    968    *
    969    * All connections by default start in this list; if a custom
    970    * timeout that does not match 'connection_timeout' is set, they
    971    * are moved to the 'manual_timeout_head'-XDLL.
    972    */
    973   struct MHD_Connection *normal_timeout_head;
    974 
    975   /**
    976    * Tail of the XDLL of ALL connections with a default timeout,
    977    * sorted by timeout (earliest timeout at the tail).
    978    */
    979   struct MHD_Connection *normal_timeout_tail;
    980 
    981   /**
    982    * Head of the XDLL of ALL connections with a non-default/custom
    983    * timeout, unsorted.  MHD will do a O(n) scan over this list to
    984    * determine the current timeout.
    985    */
    986   struct MHD_Connection *manual_timeout_head;
    987 
    988   /**
    989    * Tail of the XDLL of ALL connections with a non-default/custom
    990    * timeout, unsorted.
    991    */
    992   struct MHD_Connection *manual_timeout_tail;
    993 
    994   /**
    995    * Function to call to check if we should accept or reject an
    996    * incoming request.  May be NULL.
    997    */
    998   MHD_AcceptPolicyCallback apc;
    999 
   1000   /**
   1001    * Closure argument to apc.
   1002    */
   1003   void *apc_cls;
   1004 
   1005   /**
   1006    * Function to call when we are done processing
   1007    * a particular request.  May be NULL.
   1008    */
   1009   MHD_RequestCompletedCallback notify_completed;
   1010 
   1011   /**
   1012    * Closure argument to notify_completed.
   1013    */
   1014   void *notify_completed_cls;
   1015 
   1016   /**
   1017    * Function to call when we are starting/stopping
   1018    * a connection.  May be NULL.
   1019    */
   1020   MHD_NotifyConnectionCallback notify_connection;
   1021 
   1022   /**
   1023    * Closure argument to notify_connection.
   1024    */
   1025   void *notify_connection_cls;
   1026 
   1027   /**
   1028    * Function to call with the full URI at the
   1029    * beginning of request processing.  May be NULL.
   1030    * <p>
   1031    * Returns the initial pointer to internal state
   1032    * kept by the client for the request.
   1033    */
   1034   LogCallback uri_log_callback;
   1035 
   1036   /**
   1037    * Closure argument to @e uri_log_callback.
   1038    */
   1039   void *uri_log_callback_cls;
   1040 
   1041   /**
   1042    * Function to call when we unescape escape sequences.
   1043    */
   1044   UnescapeCallback unescape_callback;
   1045 
   1046   /**
   1047    * Closure for @e unescape_callback.
   1048    */
   1049   void *unescape_callback_cls;
   1050 
   1051 #if HAVE_MESSAGES
   1052   /**
   1053    * Function for logging error messages (if we
   1054    * support error reporting).
   1055    */
   1056   void (*custom_error_log) (void *cls, const char *fmt, va_list va);
   1057 
   1058   /**
   1059    * Closure argument to custom_error_log.
   1060    */
   1061   void *custom_error_log_cls;
   1062 #endif
   1063 
   1064   /**
   1065    * Pointer to master daemon (NULL if this is the master)
   1066    */
   1067   struct MHD_Daemon *master;
   1068 
   1069   /**
   1070    * Worker daemons (one per thread)
   1071    */
   1072   struct MHD_Daemon *worker_pool;
   1073 
   1074   /**
   1075    * Table storing number of connections per IP
   1076    */
   1077   void *per_ip_connection_count;
   1078 
   1079   /**
   1080    * Size of the per-connection memory pools.
   1081    */
   1082   size_t pool_size;
   1083 
   1084   /**
   1085    * Increment for growth of the per-connection memory pools.
   1086    */
   1087   size_t pool_increment;
   1088 
   1089   /**
   1090    * Size of threads created by MHD.
   1091    */
   1092   size_t thread_stack_size;
   1093 
   1094   /**
   1095    * Number of worker daemons
   1096    */
   1097   unsigned int worker_pool_size;
   1098 
   1099   /**
   1100    * The select thread handle (if we have internal select)
   1101    */
   1102   MHD_thread_handle_ pid;
   1103 
   1104   /**
   1105    * Mutex for per-IP connection counts.
   1106    */
   1107   MHD_mutex_ per_ip_connection_mutex;
   1108 
   1109   /**
   1110    * Mutex for (modifying) access to the "cleanup" connection DLL.
   1111    */
   1112   MHD_mutex_ cleanup_connection_mutex;
   1113 
   1114   /**
   1115    * Listen socket.
   1116    */
   1117   MHD_socket socket_fd;
   1118 
   1119   /**
   1120    * Whether to allow/disallow/ignore reuse of listening address.
   1121    * The semantics is the following:
   1122    * 0: ignore (user did not ask for neither allow/disallow, use SO_REUSEADDR)
   1123    * >0: allow (use SO_REUSEPORT on most platforms, SO_REUSEADDR on Windows)
   1124    * <0: disallow (mostly no action, SO_EXCLUSIVEADDRUSE on Windows)
   1125    */
   1126   int listening_address_reuse;
   1127 
   1128 #if EPOLL_SUPPORT
   1129   /**
   1130    * File descriptor associated with our epoll loop.
   1131    */
   1132   int epoll_fd;
   1133 
   1134   /**
   1135    * MHD_YES if the listen socket is in the 'epoll' set,
   1136    * MHD_NO if not.
   1137    */
   1138   int listen_socket_in_epoll;
   1139 #endif
   1140 
   1141   /**
   1142    * Pipe we use to signal shutdown, unless
   1143    * 'HAVE_LISTEN_SHUTDOWN' is defined AND we have a listen
   1144    * socket (which we can then 'shutdown' to stop listening).
   1145    * MHD can be build with usage of socketpair instead of
   1146    * pipe (forced on W32).
   1147    */
   1148   MHD_pipe wpipe[2];
   1149 
   1150   /**
   1151    * Are we shutting down?
   1152    */
   1153   int shutdown;
   1154 
   1155   /*
   1156    * Do we need to process resuming connections?
   1157    */
   1158   int resuming;
   1159 
   1160   /**
   1161    * Number of active parallel connections.
   1162    */
   1163   unsigned int connections;
   1164 
   1165   /**
   1166    * Limit on the number of parallel connections.
   1167    */
   1168   unsigned int connection_limit;
   1169 
   1170   /**
   1171    * After how many seconds of inactivity should
   1172    * connections time out?  Zero for no timeout.
   1173    */
   1174   unsigned int connection_timeout;
   1175 
   1176   /**
   1177    * Maximum number of connections per IP, or 0 for
   1178    * unlimited.
   1179    */
   1180   unsigned int per_ip_connection_limit;
   1181 
   1182   /**
   1183    * Daemon's flags (bitfield).
   1184    */
   1185   enum MHD_FLAG options;
   1186 
   1187   /**
   1188    * Listen port.
   1189    */
   1190   uint16_t port;
   1191 
   1192 #if HTTPS_SUPPORT
   1193   SSL_CTX* tls_context;
   1194   /**
   1195    * Pointer to our SSL/TLS key (in PEM) in memory.
   1196    */
   1197   const char *https_mem_key;
   1198 
   1199   /**
   1200    * Pointer to our SSL/TLS certificate (in PEM) in memory.
   1201    */
   1202   const char *https_mem_cert;
   1203 
   1204   /**
   1205    * Pointer to 0-terminated HTTPS passphrase in memory.
   1206    */
   1207   const char *https_key_password;
   1208 
   1209   /**
   1210    * Pointer to our SSL/TLS certificate authority (in PEM) in memory.
   1211    */
   1212   const char *https_mem_trust;
   1213 
   1214   /**
   1215    * Our Diffie-Hellman parameters (in PEM) in memory.
   1216    */
   1217   const char *https_mem_dhparams;
   1218 
   1219   /**
   1220    * Pointer to SSL/TLS cipher string in memory.
   1221    */
   1222   const char *https_mem_cipher;
   1223 
   1224   /**
   1225    * For how many connections do we have 'tls_read_ready' set to MHD_YES?
   1226    * Used to avoid O(n) traversal over all connections when determining
   1227    * event-loop timeout (as it needs to be zero if there is any connection
   1228    * which might have ready data within TLS).
   1229    */
   1230   unsigned int num_tls_read_ready;
   1231 
   1232 #endif
   1233 
   1234 #ifdef DAUTH_SUPPORT
   1235 
   1236   /**
   1237    * Character array of random values.
   1238    */
   1239   const char *digest_auth_random;
   1240 
   1241   /**
   1242    * An array that contains the map nonce-nc.
   1243    */
   1244   struct MHD_NonceNc *nnc;
   1245 
   1246   /**
   1247    * A rw-lock for synchronizing access to `nnc'.
   1248    */
   1249   MHD_mutex_ nnc_lock;
   1250 
   1251   /**
   1252    * Size of `digest_auth_random.
   1253    */
   1254   size_t digest_auth_rand_size;
   1255 
   1256   /**
   1257    * Size of the nonce-nc array.
   1258    */
   1259   unsigned int nonce_nc_size;
   1260 
   1261 #endif
   1262 
   1263 #ifdef TCP_FASTOPEN
   1264   /**
   1265    * The queue size for incoming SYN + DATA packets.
   1266    */
   1267   unsigned int fastopen_queue_size;
   1268 #endif
   1269 };
   1270 
   1271 
   1272 #if EXTRA_CHECKS
   1273 #define EXTRA_CHECK(a) do { if (!(a)) abort(); } while (0)
   1274 #else
   1275 #define EXTRA_CHECK(a)
   1276 #endif
   1277 
   1278 
   1279 /**
   1280  * Insert an element at the head of a DLL. Assumes that head, tail and
   1281  * element are structs with prev and next fields.
   1282  *
   1283  * @param head pointer to the head of the DLL
   1284  * @param tail pointer to the tail of the DLL
   1285  * @param element element to insert
   1286  */
   1287 #define DLL_insert(head,tail,element) do { \
   1288   EXTRA_CHECK (NULL == (element)->next); \
   1289   EXTRA_CHECK (NULL == (element)->prev); \
   1290   (element)->next = (head); \
   1291   (element)->prev = NULL; \
   1292   if ((tail) == NULL) \
   1293     (tail) = element; \
   1294   else \
   1295     (head)->prev = element; \
   1296   (head) = (element); } while (0)
   1297 
   1298 
   1299 /**
   1300  * Remove an element from a DLL. Assumes
   1301  * that head, tail and element are structs
   1302  * with prev and next fields.
   1303  *
   1304  * @param head pointer to the head of the DLL
   1305  * @param tail pointer to the tail of the DLL
   1306  * @param element element to remove
   1307  */
   1308 #define DLL_remove(head,tail,element) do { \
   1309   EXTRA_CHECK ( (NULL != (element)->next) || ((element) == (tail)));  \
   1310   EXTRA_CHECK ( (NULL != (element)->prev) || ((element) == (head)));  \
   1311   if ((element)->prev == NULL) \
   1312     (head) = (element)->next;  \
   1313   else \
   1314     (element)->prev->next = (element)->next; \
   1315   if ((element)->next == NULL) \
   1316     (tail) = (element)->prev;  \
   1317   else \
   1318     (element)->next->prev = (element)->prev; \
   1319   (element)->next = NULL; \
   1320   (element)->prev = NULL; } while (0)
   1321 
   1322 
   1323 
   1324 /**
   1325  * Insert an element at the head of a XDLL. Assumes that head, tail and
   1326  * element are structs with prevX and nextX fields.
   1327  *
   1328  * @param head pointer to the head of the XDLL
   1329  * @param tail pointer to the tail of the XDLL
   1330  * @param element element to insert
   1331  */
   1332 #define XDLL_insert(head,tail,element) do { \
   1333   EXTRA_CHECK (NULL == (element)->nextX); \
   1334   EXTRA_CHECK (NULL == (element)->prevX); \
   1335   (element)->nextX = (head); \
   1336   (element)->prevX = NULL; \
   1337   if (NULL == (tail)) \
   1338     (tail) = element; \
   1339   else \
   1340     (head)->prevX = element; \
   1341   (head) = (element); } while (0)
   1342 
   1343 
   1344 /**
   1345  * Remove an element from a XDLL. Assumes
   1346  * that head, tail and element are structs
   1347  * with prevX and nextX fields.
   1348  *
   1349  * @param head pointer to the head of the XDLL
   1350  * @param tail pointer to the tail of the XDLL
   1351  * @param element element to remove
   1352  */
   1353 #define XDLL_remove(head,tail,element) do { \
   1354   EXTRA_CHECK ( (NULL != (element)->nextX) || ((element) == (tail)));  \
   1355   EXTRA_CHECK ( (NULL != (element)->prevX) || ((element) == (head)));  \
   1356   if (NULL == (element)->prevX) \
   1357     (head) = (element)->nextX;  \
   1358   else \
   1359     (element)->prevX->nextX = (element)->nextX; \
   1360   if (NULL == (element)->nextX) \
   1361     (tail) = (element)->prevX;  \
   1362   else \
   1363     (element)->nextX->prevX = (element)->prevX; \
   1364   (element)->nextX = NULL; \
   1365   (element)->prevX = NULL; } while (0)
   1366 
   1367 
   1368 /**
   1369  * Insert an element at the head of a EDLL. Assumes that head, tail and
   1370  * element are structs with prevE and nextE fields.
   1371  *
   1372  * @param head pointer to the head of the EDLL
   1373  * @param tail pointer to the tail of the EDLL
   1374  * @param element element to insert
   1375  */
   1376 #define EDLL_insert(head,tail,element) do { \
   1377   (element)->nextE = (head); \
   1378   (element)->prevE = NULL; \
   1379   if ((tail) == NULL) \
   1380     (tail) = element; \
   1381   else \
   1382     (head)->prevE = element; \
   1383   (head) = (element); } while (0)
   1384 
   1385 
   1386 /**
   1387  * Remove an element from a EDLL. Assumes
   1388  * that head, tail and element are structs
   1389  * with prevE and nextE fields.
   1390  *
   1391  * @param head pointer to the head of the EDLL
   1392  * @param tail pointer to the tail of the EDLL
   1393  * @param element element to remove
   1394  */
   1395 #define EDLL_remove(head,tail,element) do { \
   1396   if ((element)->prevE == NULL) \
   1397     (head) = (element)->nextE;  \
   1398   else \
   1399     (element)->prevE->nextE = (element)->nextE; \
   1400   if ((element)->nextE == NULL) \
   1401     (tail) = (element)->prevE;  \
   1402   else \
   1403     (element)->nextE->prevE = (element)->prevE; \
   1404   (element)->nextE = NULL; \
   1405   (element)->prevE = NULL; } while (0)
   1406 
   1407 
   1408 /**
   1409  * Equivalent to `time(NULL)` but tries to use some sort of monotonic
   1410  * clock that isn't affected by someone setting the system real time
   1411  * clock.
   1412  *
   1413  * @return 'current' time
   1414  */
   1415 time_t
   1416 MHD_monotonic_time(void);
   1417 
   1418 
   1419 /**
   1420  * Convert all occurences of '+' to ' '.
   1421  *
   1422  * @param arg string that is modified (in place), must be 0-terminated
   1423  */
   1424 void
   1425 MHD_unescape_plus (char *arg);
   1426 
   1427 
   1428 #endif
   1429