1This is libmicrohttpd.info, produced by makeinfo version 5.2 from 2libmicrohttpd.texi. 3 4This manual is for GNU libmicrohttpd (version 0.9.42, 3 April 2015), a 5library for embedding an HTTP(S) server into C applications. 6 7 Copyright (C) 2007-2013 Christian Grothoff 8 9 Permission is granted to copy, distribute and/or modify this 10 document under the terms of the GNU Free Documentation License, 11 Version 1.3 or any later version published by the Free Software 12 Foundation; with no Invariant Sections, no Front-Cover Texts, and 13 no Back-Cover Texts. A copy of the license is included in the 14 section entitled "GNU Free Documentation License". 15INFO-DIR-SECTION Software libraries 16START-INFO-DIR-ENTRY 17* libmicrohttpd: (libmicrohttpd). Embedded HTTP server library. 18END-INFO-DIR-ENTRY 19 20 21File: libmicrohttpd.info, Node: Top, Next: microhttpd-intro, Up: (dir) 22 23The GNU libmicrohttpd Library 24***************************** 25 26This manual is for GNU libmicrohttpd (version 0.9.42, 3 April 2015), a 27library for embedding an HTTP(S) server into C applications. 28 29 Copyright (C) 2007-2013 Christian Grothoff 30 31 Permission is granted to copy, distribute and/or modify this 32 document under the terms of the GNU Free Documentation License, 33 Version 1.3 or any later version published by the Free Software 34 Foundation; with no Invariant Sections, no Front-Cover Texts, and 35 no Back-Cover Texts. A copy of the license is included in the 36 section entitled "GNU Free Documentation License". 37 38* Menu: 39 40* microhttpd-intro:: Introduction. 41* microhttpd-const:: Constants. 42* microhttpd-struct:: Structures type definition. 43* microhttpd-cb:: Callback functions definition. 44* microhttpd-init:: Starting and stopping the server. 45* microhttpd-inspect:: Implementing external 'select'. 46* microhttpd-requests:: Handling requests. 47* microhttpd-responses:: Building responses to requests. 48* microhttpd-flow:: Flow control. 49* microhttpd-dauth:: Utilizing Authentication. 50* microhttpd-post:: Adding a 'POST' processor. 51* microhttpd-info:: Obtaining and modifying status information. 52* microhttpd-util:: Utilities. 53 54Appendices 55 56* GNU-LGPL:: The GNU Lesser General Public License says how you 57 can copy and share almost all of 'libmicrohttpd'. 58* GNU GPL with eCos Extension:: The GNU General Public License with eCos extension says how you 59 can copy and share some parts of 'libmicrohttpd'. 60* GNU-FDL:: The GNU Free Documentation License says how you 61 can copy and share the documentation of 'libmicrohttpd'. 62 63Indices 64 65* Concept Index:: Index of concepts and programs. 66* Function and Data Index:: Index of functions, variables and data types. 67* Type Index:: Index of data types. 68 69 70File: libmicrohttpd.info, Node: microhttpd-intro, Next: microhttpd-const, Prev: Top, Up: Top 71 721 Introduction 73************** 74 75All symbols defined in the public API start with 'MHD_'. MHD is a small 76HTTP daemon library. As such, it does not have any API for logging 77errors (you can only enable or disable logging to stderr). Also, it may 78not support all of the HTTP features directly, where applicable, 79portions of HTTP may have to be handled by clients of the library. 80 81 The library is supposed to handle everything that it must handle 82(because the API would not allow clients to do this), such as basic 83connection management; however, detailed interpretations of headers -- 84such as range requests -- and HTTP methods are left to clients. The 85library does understand 'HEAD' and will only send the headers of the 86response and not the body, even if the client supplied a body. The 87library also understands headers that control connection management 88(specifically, 'Connection: close' and 'Expect: 100 continue' are 89understood and handled automatically). 90 91 MHD understands 'POST' data and is able to decode certain formats (at 92the moment only 'application/x-www-form-urlencoded' and 93'multipart/form-data') using the post processor API. The data stream of 94a POST is also provided directly to the main application, so unsupported 95encodings could still be processed, just not conveniently by MHD. 96 97 The header file defines various constants used by the HTTP protocol. 98This does not mean that MHD actually interprets all of these values. 99The provided constants are exported as a convenience for users of the 100library. MHD does not verify that transmitted HTTP headers are part of 101the standard specification; users of the library are free to define 102their own extensions of the HTTP standard and use those with MHD. 103 104 All functions are guaranteed to be completely reentrant and 105thread-safe. MHD checks for allocation failures and tries to recover 106gracefully (for example, by closing the connection). Additionally, 107clients can specify resource limits on the overall number of 108connections, number of connections per IP address and memory used per 109connection to avoid resource exhaustion. 110 1111.1 Scope 112========= 113 114MHD is currently used in a wide range of implementations. Examples 115based on reports we've received from developers include: 116 * Embedded HTTP server on a cortex M3 (128 KB code space) 117 * Large-scale multimedia server (reportedly serving at the simulator 118 limit of 7.5 GB/s) 119 * Administrative console (via HTTP/HTTPS) for network appliances 120 1211.2 Thread modes and event loops 122================================ 123 124MHD supports four basic thread modes and up to three event loop styes. 125 126 The four basic thread modes are external (MHD creates no threads, 127event loop is fully managed by the application), internal (MHD creates 128one thread for all connections), thread pool (MHD creates a thread pool 129which is used to process all connections) and thread-per-connection (MHD 130creates one listen thread and then one thread per accepted connection). 131 132 These thread modes are then combined with the event loop styles. MHD 133support select, poll and epoll. epoll is only available on Linux, poll 134may not be available on some platforms. Note that it is possible to 135combine MHD using epoll with an external select-based event loop. 136 137 The default (if no other option is passed) is "external select". The 138highest performance can typically be obtained with a thread pool using 139'epoll'. Apache Benchmark (ab) was used to compare the performance of 140'select' and 'epoll' when using a thread pool and a large number of 141connections. *note Figure 1.1: fig:performance. shows the resulting 142plot from the 'benchmark.c' example, which measures the latency between 143an incoming request and the completion of the transmission of the 144response. In this setting, the 'epoll' thread pool with four threads 145was able to handle more than 45,000 connections per second on loopback 146(with Apache Benchmark running three processes on the same machine). 147 148[image src="performance_data.png" alt="Data"] 149 150Figure 1.1: Performance measurements for select vs. epoll (with 151thread-pool). 152 153 Not all combinations of thread modes and event loop styles are 154supported. This is partially to keep the API simple, and partially 155because some combinations simply make no sense as others are strictly 156superior. Note that the choice of style depends fist of all on the 157application logic, and then on the performance requirements. 158Applications that perform a blocking operation while handling a request 159within the callbacks from MHD must use a thread per connection. This is 160typically rather costly. Applications that do not support threads or 161that must run on embedded devices without thread-support must use the 162external mode. Using 'epoll' is only supported on Linux, thus portable 163applications must at least have a fallback option available. *note 164Table 1.1: tbl:supported. lists the sane combinations. 165 166 select poll epoll 167external yes no yes 168internal yes yes yes 169thread pool yes yes yes 170thread-per-connection yes yes no 171 172Table 1.1: Supported combinations of event styles and thread modes. 173 1741.3 Compiling GNU libmicrohttpd 175=============================== 176 177MHD uses the standard GNU system where the usual build process involves 178running 179$ ./configure 180$ make 181$ make install 182 183 MHD supports various options to be given to configure to tailor the 184binary to a specific situation. Note that some of these options will 185remove portions of the MHD code that are required for 186binary-compatibility. They should only be used on embedded systems with 187tight resource constraints and no concerns about library versioning. 188Standard distributions including MHD are expected to always ship with 189all features enabled, otherwise unexpected incompatibilities can arise! 190 191 Here is a list of MHD-specific options that can be given to configure 192(canonical configure options such as "-prefix" are also supported, for a 193full list of options run "./configure -help"): 194 195'``--disable-curl''' 196 disable running testcases using libcurl 197 198'``--disable-largefile''' 199 disable support for 64-bit files 200 201'``--disable-messages''' 202 disable logging of error messages (smaller binary size, not so much 203 fun for debugging) 204 205'``--disable-https''' 206 disable HTTPS support, even if GNUtls is found; this option must be 207 used if eCOS license is desired as an option (in all cases the 208 resulting binary falls under a GNU LGPL-only license) 209 210'``--disable-postprocessor''' 211 do not include the post processor API (results in binary 212 incompatibility) 213 214'``--disable-dauth''' 215 do not include the authentication APIs (results in binary 216 incompatibility) 217 218'``--disable-epoll' 219 do not include epoll support, even on Linux (minimally smaller 220 binary size, good for testing portability to non-Linux systems) 221 222'``--enable-coverage''' 223 set flags for analysis of code-coverage with gcc/gcov (results in 224 slow, large binaries) 225 226'``--with-gcrypt=PATH''' 227 specifies path to libgcrypt installation 228 229'``--with-gnutls=PATH''' 230 specifies path to libgnutls installation 231 2321.4 Validity of pointers 233======================== 234 235MHD will give applications access to its internal data structures via 236pointers via arguments and return values from its API. This creates the 237question as to how long those pointers are assured to stay valid. 238 239 Most MHD data structures are associated with the connection of an 240HTTP client. Thus, pointers associated with a connection are typically 241valid until the connection is finished, at which point MHD will call the 242'MHD_RequestCompletedCallback' if one is registered. Applications that 243have such a callback registered may assume that keys and values from the 244'MHD_KeyValueIterator', return values from 'MHD_lookup_connection_value' 245and the 'url', 'method' and 'version' arguments to the 246'MHD_AccessHandlerCallback' will remain valid until the respective 247'MHD_RequestCompletedCallback' is invoked. 248 249 In contrast, the 'upload_data' argument of 250'MHD_RequestCompletedCallback' as well as all pointers from the 251'MHD_PostDataIterator' are only valid for the duration of the callback. 252 253 Pointers returned from 'MHD_get_response_header' are valid as long as 254the response itself is valid. 255 2561.5 Including the microhttpd.h header 257===================================== 258 259Ideally, before including "microhttpd.h" you should add the necessary 260includes to define the 'uint64_t', 'size_t', 'fd_set', 'socklen_t' and 261'struct sockaddr' data types. Which specific headers are needed may 262depend on your platform and your build system might include some tests 263to provide you with the necessary conditional operations. For possible 264suggestions consult 'platform.h' and 'configure.ac' in the MHD 265distribution. 266 267 Once you have ensured that you manually (!) included the right 268headers for your platform before "microhttpd.h", you should also add a 269line with '#define MHD_PLATFORM_H' which will prevent the "microhttpd.h" 270header from trying (and, depending on your platform, failing) to include 271the right headers. 272 273 If you do not define MHD_PLATFORM_H, the "microhttpd.h" header will 274automatically include headers needed on GNU/Linux systems (possibly 275causing problems when porting to other platforms). 276 2771.6 SIGPIPE 278=========== 279 280MHD does not install a signal handler for SIGPIPE. On platforms where 281this is possible (such as GNU/Linux), it disables SIGPIPE for its I/O 282operations (by passing MSG_NOSIGNAL). On other platforms, SIGPIPE 283signals may be generated from network operations by MHD and will cause 284the process to die unless the developer explicitly installs a signal 285handler for SIGPIPE. 286 287 Hence portable code using MHD must install a SIGPIPE handler or 288explicitly block the SIGPIPE signal. MHD does not do so in order to 289avoid messing with other parts of the application that may need to 290handle SIGPIPE in a particular way. You can make your application 291handle SIGPIPE by calling the following function in 'main': 292 293static void 294catcher (int sig) 295{ 296} 297 298static void 299ignore_sigpipe () 300{ 301 struct sigaction oldsig; 302 struct sigaction sig; 303 304 sig.sa_handler = &catcher; 305 sigemptyset (&sig.sa_mask); 306#ifdef SA_INTERRUPT 307 sig.sa_flags = SA_INTERRUPT; /* SunOS */ 308#else 309 sig.sa_flags = SA_RESTART; 310#endif 311 if (0 != sigaction (SIGPIPE, &sig, &oldsig)) 312 fprintf (stderr, 313 "Failed to install SIGPIPE handler: %s\n", strerror (errno)); 314} 315 3161.7 MHD_UNSIGNED_LONG_LONG 317========================== 318 319Some platforms do not support 'long long'. Hence MHD defines a macro 320'MHD_UNSIGNED LONG_LONG' which will default to 'unsigned long long'. 321For standard desktop operating systems, this is all you need to know. 322 323 However, if your platform does not support 'unsigned long long', you 324should change "platform.h" to define 'MHD_LONG_LONG' and 325'MHD_UNSIGNED_LONG_LONG' to an appropriate alternative type and also 326define 'MHD_LONG_LONG_PRINTF' and 'MHD_UNSIGNED_LONG_LONG_PRINTF' to the 327corresponding format string for printing such a data type. Note that 328the "signed" versions are deprecated. Also, for historical reasons, 329'MHD_LONG_LONG_PRINTF' is without the percent sign, whereas 330'MHD_UNSIGNED_LONG_LONG_PRINTF' is with the percent sign. Newly written 331code should only use the unsigned versions. However, you need to define 332both in "platform.h" if you need to change the definition for the 333specific platform. 334 3351.8 Portability to W32 336====================== 337 338libmicrohttpd in general ported well to W32. Most libmicrohttpd 339features are supported. W32 do not support some functions, like epoll 340and corresponding MHD features are not available on W32. 341 3421.9 Portability to z/OS 343======================= 344 345To compile MHD on z/OS, extract the archive and run 346 347iconv -f UTF-8 -t IBM-1047 contrib/ascebc > /tmp/ascebc.sh 348chmod +x /tmp/ascebc.sh 349for n in `find * -type f` 350do 351 /tmp/ascebc.sh $n 352done 353 to convert all source files to EBCDIC. Note that you must run 354'configure' from the directory where the configure script is located. 355Otherwise, configure will fail to find the 'contrib/xcc' script (which 356is a wrapper around the z/OS c89 compiler). 357 358 359File: libmicrohttpd.info, Node: microhttpd-const, Next: microhttpd-struct, Prev: microhttpd-intro, Up: Top 360 3612 Constants 362*********** 363 364 -- Enumeration: MHD_FLAG 365 Options for the MHD daemon. 366 367 Note that if neither 'MHD_USE_THREAD_PER_CONNECTION' nor 368 'MHD_USE_SELECT_INTERNALLY' is used, the client wants control over 369 the process and will call the appropriate microhttpd callbacks. 370 371 Starting the daemon may also fail if a particular option is not 372 implemented or not supported on the target platform (i.e. no 373 support for SSL, threads or IPv6). SSL support generally depends 374 on options given during MHD compilation. Threaded operations 375 (including 'MHD_USE_SELECT_INTERNALLY') are not supported on 376 Symbian. 377 378 'MHD_NO_FLAG' 379 No options selected. 380 381 'MHD_USE_DEBUG' 382 Run in debug mode. If this flag is used, the library should 383 print error messages and warnings to stderr. Note that for 384 this run-time option to have any effect, MHD needs to be 385 compiled with messages enabled. This is done by default 386 except you ran configure with the '--disable-messages' flag 387 set. 388 389 'MHD_USE_SSL' 390 Run in HTTPS-mode. If you specify 'MHD_USE_SSL' and MHD was 391 compiled without SSL support, 'MHD_start_daemon' will return 392 NULL. 393 394 'MHD_USE_THREAD_PER_CONNECTION' 395 Run using one thread per connection. 396 397 'MHD_USE_SELECT_INTERNALLY' 398 Run using an internal thread doing 'SELECT'. 399 400 'MHD_USE_IPv6' 401 Run using the IPv6 protocol (otherwise, MHD will just support 402 IPv4). If you specify 'MHD_USE_IPV6' and the local platform 403 does not support it, 'MHD_start_daemon' will return NULL. 404 405 If you want MHD to support IPv4 and IPv6 using a single 406 socket, pass MHD_USE_DUAL_STACK, otherwise, if you only pass 407 this option, MHD will try to bind to IPv6-only (resulting in 408 no IPv4 support). 409 410 'MHD_USE_DUAL_STACK' 411 Use a single socket for IPv4 and IPv6. Note that this will 412 mean that IPv4 addresses are returned by MHD in the 413 IPv6-mapped format (the 'struct sockaddr_in6' format will be 414 used for IPv4 and IPv6). 415 416 'MHD_USE_PEDANTIC_CHECKS' 417 Be pedantic about the protocol (as opposed to as tolerant as 418 possible). Specifically, at the moment, this flag causes MHD 419 to reject HTTP 1.1 connections without a 'Host' header. This 420 is required by the standard, but of course in violation of the 421 "be as liberal as possible in what you accept" norm. It is 422 recommended to turn this *ON* if you are testing clients 423 against MHD, and *OFF* in production. 424 425 'MHD_USE_POLL' 426 Use poll instead of select. This allows sockets with 427 descriptors '>= FD_SETSIZE'. This option currently only works 428 in conjunction with 'MHD_USE_THREAD_PER_CONNECTION' or 429 'MHD_USE_INTERNAL_SELECT' (at this point). If you specify 430 'MHD_USE_POLL' and the local platform does not support it, 431 'MHD_start_daemon' will return NULL. 432 433 'MHD_USE_EPOLL_LINUX_ONLY' 434 Use epoll instead of poll or select. This allows sockets with 435 descriptors '>= FD_SETSIZE'. This option is only available on 436 Linux systems and only works in conjunction with 437 'MHD_USE_THREAD_PER_CONNECTION' (at this point). If you 438 specify 'MHD_USE_EPOLL_LINUX_ONLY' and the local platform does 439 not support it, 'MHD_start_daemon' will return NULL. Using 440 epoll instead of select or poll can in some situations result 441 in significantly higher performance as the system call has 442 fundamentally lower complexity (O(1) for epoll vs. O(n) for 443 select/poll where n is the number of open connections). 444 445 'MHD_SUPPRESS_DATE_NO_CLOCK' 446 Suppress (automatically) adding the 'Date:' header to HTTP 447 responses. This option should ONLY be used on systems that do 448 not have a clock and that DO provide other mechanisms for 449 cache control. See also RFC 2616, section 14.18 (exception 450 3). 451 452 'MHD_USE_NO_LISTEN_SOCKET' 453 Run the HTTP server without any listen socket. This option 454 only makes sense if 'MHD_add_connection' is going to be used 455 exclusively to connect HTTP clients to the HTTP server. This 456 option is incompatible with using a thread pool; if it is 457 used, 'MHD_OPTION_THREAD_POOL_SIZE' is ignored. 458 459 'MHD_USE_PIPE_FOR_SHUTDOWN' 460 Force MHD to use a signal pipe to notify the event loop (of 461 threads) of our shutdown. This is required if an appliction 462 uses 'MHD_USE_INTERNAL_SELECT' or 463 'MHD_USE_THREAD_PER_CONNECTION' and then performs 464 'MHD_quiesce_daemon' (which eliminates our ability to signal 465 termination via the listen socket). In these modes, 466 'MHD_quiesce_daemon' will fail if this option was not set. 467 Also, use of this option is automatic (as in, you do not even 468 have to specify it), if 'MHD_USE_NO_LISTEN_SOCKET' is 469 specified. In "external" select mode, this option is always 470 simply ignored. 471 472 'MHD_USE_SUSPEND_RESUME' 473 Enables using 'MHD_suspend_connection' and 474 'MHD_resume_connection', as performing these calls requires 475 some additional pipes to be created, and code not using these 476 calls should not pay the cost. 477 478 'MHD_USE_TCP_FASTOPEN' 479 Enable TCP_FASTOPEN on the listen socket. TCP_FASTOPEN is 480 currently supported on Linux >= 3.6. On other systems using 481 this option with cause 'MHD_start_daemon' to fail. 482 483 -- Enumeration: MHD_OPTION 484 MHD options. Passed in the varargs portion of 485 'MHD_start_daemon()'. 486 487 'MHD_OPTION_END' 488 No more options / last option. This is used to terminate the 489 VARARGs list. 490 491 'MHD_OPTION_CONNECTION_MEMORY_LIMIT' 492 Maximum memory size per connection (followed by a 'size_t'). 493 The default is 32 kB (32*1024 bytes) as defined by the 494 internal constant 'MHD_POOL_SIZE_DEFAULT'. Values above 128k 495 are unlikely to result in much benefit, as half of the memory 496 will be typically used for IO, and TCP buffers are unlikely to 497 support window sizes above 64k on most systems. 498 499 'MHD_OPTION_CONNECTION_MEMORY_INCREMENT' 500 Increment to use for growing the read buffer (followed by a 501 'size_t'). The default is 1024 (bytes). Increasing this 502 value will make MHD use memory for reading more aggressively, 503 which can reduce the number of 'recvfrom' calls but may 504 increase the number of 'sendto' calls. The given value must 505 fit within MHD_OPTION_CONNECTION_MEMORY_LIMIT. 506 507 'MHD_OPTION_CONNECTION_LIMIT' 508 Maximum number of concurrent connections to accept (followed 509 by an 'unsigned int'). The default is 'FD_SETSIZE - 4' (the 510 maximum number of file descriptors supported by 'select' minus 511 four for 'stdin', 'stdout', 'stderr' and the server socket). 512 In other words, the default is as large as possible. 513 514 Note that if you set a low connection limit, you can easily 515 get into trouble with browsers doing request pipelining. For 516 example, if your connection limit is "1", a browser may open a 517 first connection to access your "index.html" file, keep it 518 open but use a second connection to retrieve CSS files, images 519 and the like. In fact, modern browsers are typically by 520 default configured for up to 15 parallel connections to a 521 single server. If this happens, MHD will refuse to even 522 accept the second connection until the first connection is 523 closed -- which does not happen until timeout. As a result, 524 the browser will fail to render the page and seem to hang. If 525 you expect your server to operate close to the connection 526 limit, you should first consider using a lower timeout value 527 and also possibly add a "Connection: close" header to your 528 response to ensure that request pipelining is not used and 529 connections are closed immediately after the request has 530 completed: 531 MHD_add_response_header (response, 532 MHD_HTTP_HEADER_CONNECTION, 533 "close"); 534 535 'MHD_OPTION_CONNECTION_TIMEOUT' 536 After how many seconds of inactivity should a connection 537 automatically be timed out? (followed by an 'unsigned int'; 538 use zero for no timeout). The default is zero (no timeout). 539 540 'MHD_OPTION_NOTIFY_COMPLETED' 541 Register a function that should be called whenever a request 542 has been completed (this can be used for application-specific 543 clean up). Requests that have never been presented to the 544 application (via 'MHD_AccessHandlerCallback()') will not 545 result in notifications. 546 547 This option should be followed by *TWO* pointers. First a 548 pointer to a function of type 'MHD_RequestCompletedCallback()' 549 and second a pointer to a closure to pass to the request 550 completed callback. The second pointer maybe 'NULL'. 551 552 'MHD_OPTION_NOTIFY_CONNECTION' 553 Register a function that should be called when the TCP 554 connection to a client is opened or closed. Note that 555 'MHD_OPTION_NOTIFY_COMPLETED' and the 'con_cls' argument to 556 the 'MHD_AccessHandlerCallback' are per HTTP request (and 557 there can be multiple HTTP requests per TCP connection). The 558 registered callback is called twice per TCP connection, with 559 'MHD_CONNECTION_NOTIFY_STARTED' and 560 'MHD_CONNECTION_NOTIFY_CLOSED' respectively. An additional 561 argument can be used to store TCP connection specific 562 information, which can be retrieved using 563 'MHD_CONNECTION_INFO_SOCKET_CONTEXT' during the lifetime of 564 the TCP connection. The respective location is not the same 565 as the HTTP-request-specific 'con_cls' from the 566 'MHD_AccessHandlerCallback'. 567 568 This option should be followed by *TWO* pointers. First a 569 pointer to a function of type 'MHD_NotifyConnectionCallback()' 570 and second a pointer to a closure to pass to the request 571 completed callback. The second pointer maybe 'NULL'. 572 573 'MHD_OPTION_PER_IP_CONNECTION_LIMIT' 574 Limit on the number of (concurrent) connections made to the 575 server from the same IP address. Can be used to prevent one 576 IP from taking over all of the allowed connections. If the 577 same IP tries to establish more than the specified number of 578 connections, they will be immediately rejected. The option 579 should be followed by an 'unsigned int'. The default is zero, 580 which means no limit on the number of connections from the 581 same IP address. 582 583 'MHD_OPTION_SOCK_ADDR' 584 Bind daemon to the supplied socket address. This option 585 should be followed by a 'struct sockaddr *'. If 586 'MHD_USE_IPv6' is specified, the 'struct sockaddr*' should 587 point to a 'struct sockaddr_in6', otherwise to a 'struct 588 sockaddr_in'. If this option is not specified, the daemon 589 will listen to incoming connections from anywhere. If you use 590 this option, the 'port' argument from 'MHD_start_daemon' is 591 ignored and the port from the given 'struct sockaddr *' will 592 be used instead. 593 594 'MHD_OPTION_URI_LOG_CALLBACK' 595 Specify a function that should be called before parsing the 596 URI from the client. The specified callback function can be 597 used for processing the URI (including the options) before it 598 is parsed. The URI after parsing will no longer contain the 599 options, which maybe inconvenient for logging. This option 600 should be followed by two arguments, the first one must be of 601 the form 602 void * my_logger(void * cls, const char * uri, struct MHD_Connection *con) 603 where the return value will be passed as '*con_cls' in calls 604 to the 'MHD_AccessHandlerCallback' when this request is 605 processed later; returning a value of 'NULL' has no special 606 significance; (however, note that if you return non-'NULL', 607 you can no longer rely on the first call to the access handler 608 having 'NULL == *con_cls' on entry) 'cls' will be set to the 609 second argument following MHD_OPTION_URI_LOG_CALLBACK. 610 Finally, 'uri' will be the 0-terminated URI of the request. 611 612 Note that during the time of this call, most of the 613 connection's state is not initialized (as we have not yet 614 parsed he headers). However, information about the connecting 615 client (IP, socket) is available. 616 617 'MHD_OPTION_HTTPS_MEM_KEY' 618 Memory pointer to the private key to be used by the HTTPS 619 daemon. This option should be followed by an "const char*" 620 argument. This should be used in conjunction with 621 'MHD_OPTION_HTTPS_MEM_CERT'. 622 623 'MHD_OPTION_HTTPS_KEY_PASSWORD' 624 Memory pointer to the password that decrypts the private key 625 to be used by the HTTPS daemon. This option should be 626 followed by an "const char*" argument. This should be used in 627 conjunction with 'MHD_OPTION_HTTPS_MEM_KEY'. 628 629 The password (or passphrase) is only used immediately during 630 'MHD_start_daemon()'. Thus, the application may want to erase 631 it from memory afterwards for additional security. 632 633 'MHD_OPTION_HTTPS_MEM_CERT' 634 Memory pointer to the certificate to be used by the HTTPS 635 daemon. This option should be followed by an "const char*" 636 argument. This should be used in conjunction with 637 'MHD_OPTION_HTTPS_MEM_KEY'. 638 639 'MHD_OPTION_HTTPS_MEM_TRUST' 640 Memory pointer to the CA certificate to be used by the HTTPS 641 daemon to authenticate and trust clients certificates. This 642 option should be followed by an "const char*" argument. The 643 presence of this option activates the request of certificate 644 to the client. The request to the client is marked optional, 645 and it is the responsibility of the server to check the 646 presence of the certificate if needed. Note that most 647 browsers will only present a client certificate only if they 648 have one matching the specified CA, not sending any 649 certificate otherwise. 650 651 'MHD_OPTION_HTTPS_CRED_TYPE' 652 Daemon credentials type. Either certificate or anonymous, 653 this option should be followed by one of the values listed in 654 "enum gnutls_credentials_type_t". 655 656 'MHD_OPTION_HTTPS_PRIORITIES' 657 SSL/TLS protocol version and ciphers. This option must be 658 followed by an "const char *" argument specifying the SSL/TLS 659 protocol versions and ciphers that are acceptable for the 660 application. The string is passed unchanged to 661 gnutls_priority_init. If this option is not specified, 662 "NORMAL" is used. 663 664 'MHD_OPTION_HTTPS_CERT_CALLBACK' 665 Use a callback to determine which X.509 certificate should be 666 used for a given HTTPS connection. This option should be 667 followed by a argument of type 668 "gnutls_certificate_retrieve_function2 *". This option 669 provides an alternative to MHD_OPTION_HTTPS_MEM_KEY and 670 MHD_OPTION_HTTPS_MEM_CERT. You must use this version if 671 multiple domains are to be hosted at the same IP address using 672 TLS's Server Name Indication (SNI) extension. In this case, 673 the callback is expected to select the correct certificate 674 based on the SNI information provided. The callback is 675 expected to access the SNI data using 676 gnutls_server_name_get(). Using this option requires GnuTLS 677 3.0 or higher. 678 679 'MHD_OPTION_DIGEST_AUTH_RANDOM' 680 Digest Authentication nonce's seed. 681 682 This option should be followed by two arguments. First an 683 integer of type "size_t" which specifies the size of the 684 buffer pointed to by the second argument in bytes. Note that 685 the application must ensure that the buffer of the second 686 argument remains allocated and unmodified while the daemon is 687 running. For security, you SHOULD provide a fresh random 688 nonce when using MHD with Digest Authentication. 689 690 'MHD_OPTION_NONCE_NC_SIZE' 691 692 Size of an array of nonce and nonce counter map. This option 693 must be followed by an "unsigned int" argument that have the 694 size (number of elements) of a map of a nonce and a 695 nonce-counter. If this option is not specified, a default 696 value of 4 will be used (which might be too small for servers 697 handling many requests). If you do not use digest 698 authentication at all, you can specify a value of zero to save 699 some memory. 700 701 You should calculate the value of NC_SIZE based on the number 702 of connections per second multiplied by your expected session 703 duration plus a factor of about two for hash table collisions. 704 For example, if you expect 100 digest-authenticated 705 connections per second and the average user to stay on your 706 site for 5 minutes, then you likely need a value of about 707 60000. On the other hand, if you can only expect only 10 708 digest-authenticated connections per second, tolerate browsers 709 getting a fresh nonce for each request and expect a HTTP 710 request latency of 250 ms, then a value of about 5 should be 711 fine. 712 713 'MHD_OPTION_LISTEN_SOCKET' 714 Listen socket to use. Pass a listen socket for MHD to use 715 (systemd-style). If this option is used, MHD will not open 716 its own listen socket(s). The argument passed must be of type 717 "int" and refer to an existing socket that has been bound to a 718 port and is listening. 719 720 'MHD_OPTION_EXTERNAL_LOGGER' 721 Use the given function for logging error messages. This 722 option must be followed by two arguments; the first must be a 723 pointer to a function of type 'void fun(void * arg, const char 724 * fmt, va_list ap)' and the second a pointer of type 'void*' 725 which will be passed as the "arg" argument to "fun". 726 727 Note that MHD will not generate any log messages without the 728 MHD_USE_DEBUG flag set and if MHD was compiled with the 729 "-disable-messages" flag. 730 731 'MHD_OPTION_THREAD_POOL_SIZE' 732 Number (unsigned int) of threads in thread pool. Enable 733 thread pooling by setting this value to to something greater 734 than 1. Currently, thread model must be 735 MHD_USE_SELECT_INTERNALLY if thread pooling is enabled 736 ('MHD_start_daemon' returns 'NULL' for an unsupported thread 737 model). 738 739 'MHD_OPTION_ARRAY' 740 This option can be used for initializing MHD using options 741 from an array. A common use for this is writing an FFI for 742 MHD. The actual options given are in an array of 'struct 743 MHD_OptionItem', so this option requires a single argument of 744 type 'struct MHD_OptionItem'. The array must be terminated 745 with an entry 'MHD_OPTION_END'. 746 747 An example for code using MHD_OPTION_ARRAY is: 748 struct MHD_OptionItem ops[] = { 749 { MHD_OPTION_CONNECTION_LIMIT, 100, NULL }, 750 { MHD_OPTION_CONNECTION_TIMEOUT, 10, NULL }, 751 { MHD_OPTION_END, 0, NULL } 752 }; 753 d = MHD_start_daemon(0, 8080, NULL, NULL, dh, NULL, 754 MHD_OPTION_ARRAY, ops, 755 MHD_OPTION_END); 756 For options that expect a single pointer argument, the second 757 member of the 'struct MHD_OptionItem' is ignored. For options 758 that expect two pointer arguments, the first argument must be 759 cast to 'intptr_t'. 760 761 'MHD_OPTION_UNESCAPE_CALLBACK' 762 763 Specify a function that should be called for unescaping escape 764 sequences in URIs and URI arguments. Note that this function 765 will NOT be used by the MHD_PostProcessor. If this option is 766 not specified, the default method will be used which decodes 767 escape sequences of the form "%HH". This option should be 768 followed by two arguments, the first one must be of the form 769 770 size_t my_unescaper(void * cls, struct MHD_Connection *c, char *s) 771 772 where the return value must be 'strlen(s)' and 's' should be 773 updated. Note that the unescape function must not lengthen 774 's' (the result must be shorter than the input and still be 775 0-terminated). 'cls' will be set to the second argument 776 following MHD_OPTION_UNESCAPE_CALLBACK. 777 778 'MHD_OPTION_THREAD_STACK_SIZE' 779 Maximum stack size for threads created by MHD. This option 780 must be followed by a 'size_t'). Not specifying this option 781 or using a value of zero means using the system default (which 782 is likely to differ based on your platform). 783 784 'MHD_OPTION_TCP_FASTQUEUE_QUEUE_SIZE' 785 When the flag 'MHD_USE_TCP_FASTOPEN' is used, this option sets 786 the connection handshake queue size for the TCP FASTOPEN 787 connections. Note that a TCP FASTOPEN connection handshake 788 occupies more resources than a TCP handshake as the SYN 789 packets also contain DATA which is kept in the associate state 790 until handshake is completed. If this option is not given the 791 queue size is set to a default value of 10. This option must 792 be followed by a 'unsigned int'. 793 794 'MHD_OPTION_HTTPS_MEM_DHPARAMS' 795 Memory pointer for the Diffie-Hellman parameters (dh.pem) to 796 be used by the HTTPS daemon for key exchange. This option 797 must be followed by a 'const char *' argument. The argument 798 would be a zero-terminated string with a PEM encoded PKCS3 DH 799 parameters structure suitable for passing to 800 'gnutls_dh_parms_import_pkcs3'. 801 802 'MHD_OPTION_LISTENING_ADDRESS_REUSE' 803 This option must be followed by a 'unsigned int' argument. If 804 this option is present and true (nonzero) parameter is given, 805 allow reusing the address:port of the listening socket (using 806 'SO_REUSEPORT' on most platforms, and 'SO_REUSEADDR' on 807 Windows). If a false (zero) parameter is given, disallow 808 reusing the the address:port of the listening socket (this 809 usually requires no special action, but 'SO_EXCLUSIVEADDRUSE' 810 is needed on Windows). If this option is not present, default 811 behaviour is undefined (currently, 'SO_REUSEADDR' is used on 812 all platforms, which disallows address:port reusing with the 813 exception of Windows). 814 815 -- C Struct: MHD_OptionItem 816 Entry in an MHD_OPTION_ARRAY. See the 'MHD_OPTION_ARRAY' option 817 argument for its use. 818 819 The 'option' member is used to specify which option is specified in 820 the array. The other members specify the respective argument. 821 822 Note that for options taking only a single pointer, the 'ptr_value' 823 member should be set. For options taking two pointer arguments, 824 the first pointer must be cast to 'intptr_t' and both the 'value' 825 and the 'ptr_value' members should be used to pass the two 826 pointers. 827 828 -- Enumeration: MHD_ValueKind 829 The 'MHD_ValueKind' specifies the source of the key-value pairs in 830 the HTTP protocol. 831 832 'MHD_RESPONSE_HEADER_KIND' 833 Response header. 834 835 'MHD_HEADER_KIND' 836 HTTP header. 837 838 'MHD_COOKIE_KIND' 839 Cookies. Note that the original HTTP header containing the 840 cookie(s) will still be available and intact. 841 842 'MHD_POSTDATA_KIND' 843 'POST' data. This is available only if a content encoding 844 supported by MHD is used (currently only URL encoding), and 845 only if the posted content fits within the available memory 846 pool. Note that in that case, the upload data given to the 847 'MHD_AccessHandlerCallback()' will be empty (since it has 848 already been processed). 849 850 'MHD_GET_ARGUMENT_KIND' 851 'GET' (URI) arguments. 852 853 'MHD_FOOTER_KIND' 854 HTTP footer (only for http 1.1 chunked encodings). 855 856 -- Enumeration: MHD_RequestTerminationCode 857 The 'MHD_RequestTerminationCode' specifies reasons why a request 858 has been terminated (or completed). 859 860 'MHD_REQUEST_TERMINATED_COMPLETED_OK' 861 We finished sending the response. 862 863 'MHD_REQUEST_TERMINATED_WITH_ERROR' 864 Error handling the connection (resources exhausted, other side 865 closed connection, application error accepting request, etc.) 866 867 'MHD_REQUEST_TERMINATED_TIMEOUT_REACHED' 868 No activity on the connection for the number of seconds 869 specified using 'MHD_OPTION_CONNECTION_TIMEOUT'. 870 871 'MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN' 872 We had to close the session since MHD was being shut down. 873 874 -- Enumeration: MHD_ResponseMemoryMode 875 The 'MHD_ResponeMemoryMode' specifies how MHD should treat the 876 memory buffer given for the response in 877 'MHD_create_response_from_buffer'. 878 879 'MHD_RESPMEM_PERSISTENT' 880 Buffer is a persistent (static/global) buffer that won't 881 change for at least the lifetime of the response, MHD should 882 just use it, not free it, not copy it, just keep an alias to 883 it. 884 885 'MHD_RESPMEM_MUST_FREE' 886 Buffer is heap-allocated with 'malloc' (or equivalent) and 887 should be freed by MHD after processing the response has 888 concluded (response reference counter reaches zero). 889 890 'MHD_RESPMEM_MUST_COPY' 891 Buffer is in transient memory, but not on the heap (for 892 example, on the stack or non-malloc allocated) and only valid 893 during the call to 'MHD_create_response_from_buffer'. MHD 894 must make its own private copy of the data for processing. 895 896 -- Enumeration: MHD_ResponseFlags 897 Response-specific flags. Passed as an argument to 898 'MHD_set_response_options()'. 899 900 'MHD_RF_NONE' 901 No special handling. 902 903 'MHD_RF_HTTP_VERSION_1_0_ONLY' 904 Only respond in conservative HTTP 1.0-mode. In particular, do 905 not (automatically) sent "Connection" headers and always close 906 the connection after generating the response. 907 908 -- Enumeration: MHD_ResponseOptions 909 Response-specific options. Passed in the varargs portion of 910 'MHD_set_response_options()'. 911 912 'MHD_RO_END' 913 No more options / last option. This is used to terminate the 914 VARARGs list. 915 916 917File: libmicrohttpd.info, Node: microhttpd-struct, Next: microhttpd-cb, Prev: microhttpd-const, Up: Top 918 9193 Structures type definition 920**************************** 921 922 -- C Struct: MHD_Daemon 923 Handle for the daemon (listening on a socket for HTTP traffic). 924 925 -- C Struct: MHD_Connection 926 Handle for a connection / HTTP request. With HTTP/1.1, multiple 927 requests can be run over the same connection. However, MHD will 928 only show one request per TCP connection to the client at any given 929 time. 930 931 -- C Struct: MHD_Response 932 Handle for a response. 933 934 -- C Struct: MHD_PostProcessor 935 Handle for 'POST' processing. 936 937 -- C Union: MHD_ConnectionInfo 938 Information about a connection. 939 940 -- C Union: MHD_DaemonInfo 941 Information about an MHD daemon. 942 943 944File: libmicrohttpd.info, Node: microhttpd-cb, Next: microhttpd-init, Prev: microhttpd-struct, Up: Top 945 9464 Callback functions definition 947******************************* 948 949 -- Function Pointer: int *MHD_AcceptPolicyCallback (void *cls, const 950 struct sockaddr * addr, socklen_t addrlen) 951 Invoked in the context of a connection to allow or deny a client to 952 connect. This callback return 'MHD_YES' if connection is allowed, 953 'MHD_NO' if not. 954 955 CLS 956 custom value selected at callback registration time; 957 ADDR 958 address information from the client; 959 ADDRLEN 960 length of the address information. 961 962 -- Function Pointer: int *MHD_AccessHandlerCallback (void *cls, struct 963 MHD_Connection * connection, const char *url, const char 964 *method, const char *version, const char *upload_data, size_t 965 *upload_data_size, void **con_cls) 966 Invoked in the context of a connection to answer a request from the 967 client. This callback must call MHD functions (example: the 968 'MHD_Response' ones) to provide content to give back to the client 969 and return an HTTP status code (i.e. '200' for OK, '404', etc.). 970 971 *note microhttpd-post::, for details on how to code this callback. 972 973 Must return 'MHD_YES' if the connection was handled successfully, 974 'MHD_NO' if the socket must be closed due to a serious error while 975 handling the request 976 977 CLS 978 custom value selected at callback registration time; 979 980 URL 981 the URL requested by the client; 982 983 METHOD 984 the HTTP method used by the client ('GET', 'PUT', 'DELETE', 985 'POST', etc.); 986 987 VERSION 988 the HTTP version string (i.e. 'HTTP/1.1'); 989 990 UPLOAD_DATA 991 the data being uploaded (excluding headers): 992 993 'POST' data *will* be made available incrementally in 994 UPLOAD_DATA; even if 'POST' data is available, the first time 995 the callback is invoked there won't be upload data, as this is 996 done just after MHD parses the headers. If supported by the 997 client and the HTTP version, the application can at this point 998 queue an error response to possibly avoid the upload entirely. 999 If no response is generated, MHD will (if required) 1000 automatically send a 100 CONTINUE reply to the client. 1001 1002 Afterwards, POST data will be passed to the callback to be 1003 processed incrementally by the application. The application 1004 may return 'MHD_NO' to forcefully terminate the TCP connection 1005 without generating a proper HTTP response. Once all of the 1006 upload data has been provided to the application, the 1007 application will be called again with 0 bytes of upload data. 1008 At this point, a response should be queued to complete the 1009 handling of the request. 1010 1011 UPLOAD_DATA_SIZE 1012 set initially to the size of the UPLOAD_DATA provided; this 1013 callback must update this value to the number of bytes *NOT* 1014 processed; unless external select is used, the callback maybe 1015 required to process at least some data. If the callback fails 1016 to process data in multi-threaded or internal-select mode and 1017 if the read-buffer is already at the maximum size that MHD is 1018 willing to use for reading (about half of the maximum amount 1019 of memory allowed for the connection), then MHD will abort 1020 handling the connection and return an internal server error to 1021 the client. In order to avoid this, clients must be able to 1022 process upload data incrementally and reduce the value of 1023 'upload_data_size'. 1024 1025 CON_CLS 1026 reference to a pointer, initially set to 'NULL', that this 1027 callback can set to some address and that will be preserved by 1028 MHD for future calls for this request; 1029 1030 since the access handler may be called many times (i.e., for a 1031 'PUT'/'POST' operation with plenty of upload data) this allows 1032 the application to easily associate some request-specific 1033 state; 1034 1035 if necessary, this state can be cleaned up in the global 1036 'MHD_RequestCompletedCallback' (which can be set with the 1037 'MHD_OPTION_NOTIFY_COMPLETED'). 1038 1039 -- Function Pointer: void *MHD_RequestCompletedCallback (void *cls, 1040 struct MHD_Connectionconnection, void **con_cls, enum 1041 MHD_RequestTerminationCode toe) 1042 Signature of the callback used by MHD to notify the application 1043 about completed requests. 1044 1045 CLS 1046 custom value selected at callback registration time; 1047 1048 CONNECTION 1049 connection handle; 1050 1051 CON_CLS 1052 value as set by the last call to the 1053 'MHD_AccessHandlerCallback'; 1054 1055 TOE 1056 reason for request termination see 1057 'MHD_OPTION_NOTIFY_COMPLETED'. 1058 1059 -- Function Pointer: int *MHD_KeyValueIterator (void *cls, enum 1060 MHD_ValueKind kind, const char *key, const char *value) 1061 Iterator over key-value pairs. This iterator can be used to 1062 iterate over all of the cookies, headers, or 'POST'-data fields of 1063 a request, and also to iterate over the headers that have been 1064 added to a response. 1065 1066 CLS 1067 custom value specified when iteration was triggered; 1068 1069 KIND 1070 kind of the header we are looking at 1071 1072 KEY 1073 key for the value, can be an empty string 1074 1075 VALUE 1076 value corresponding value, can be NULL 1077 1078 Return 'MHD_YES' to continue iterating, 'MHD_NO' to abort the 1079 iteration. 1080 1081 -- Function Pointer: int *MHD_ContentReaderCallback (void *cls, 1082 uint64_t pos, char *buf, size_t max) 1083 Callback used by MHD in order to obtain content. The callback has 1084 to copy at most MAX bytes of content into BUF. The total number of 1085 bytes that has been placed into BUF should be returned. 1086 1087 Note that returning zero will cause MHD to try again. Thus, 1088 returning zero should only be used in conjunction with 1089 'MHD_suspend_connection()' to avoid busy waiting. 1090 1091 While usually the callback simply returns the number of bytes 1092 written into BUF, there are two special return value: 1093 1094 'MHD_CONTENT_READER_END_OF_STREAM' (-1) should be returned for the 1095 regular end of transmission (with chunked encoding, MHD will then 1096 terminate the chunk and send any HTTP footers that might be 1097 present; without chunked encoding and given an unknown response 1098 size, MHD will simply close the connection; note that while 1099 returning 'MHD_CONTENT_READER_END_OF_STREAM' is not technically 1100 legal if a response size was specified, MHD accepts this and treats 1101 it just as 'MHD_CONTENT_READER_END_WITH_ERROR'. 1102 1103 'MHD_CONTENT_READER_END_WITH_ERROR' (-2) is used to indicate a 1104 server error generating the response; this will cause MHD to simply 1105 close the connection immediately. If a response size was given or 1106 if chunked encoding is in use, this will indicate an error to the 1107 client. Note, however, that if the client does not know a response 1108 size and chunked encoding is not in use, then clients will not be 1109 able to tell the difference between 1110 'MHD_CONTENT_READER_END_WITH_ERROR' and 1111 'MHD_CONTENT_READER_END_OF_STREAM'. This is not a limitation of 1112 MHD but rather of the HTTP protocol. 1113 1114 CLS 1115 custom value selected at callback registration time; 1116 1117 POS 1118 position in the datastream to access; note that if an 1119 'MHD_Response' object is re-used, it is possible for the same 1120 content reader to be queried multiple times for the same data; 1121 however, if an 'MHD_Response' is not re-used, MHD guarantees 1122 that POS will be the sum of all non-negative return values 1123 obtained from the content reader so far. 1124 1125 Return '-1' on error (MHD will no longer try to read content and 1126 instead close the connection with the client). 1127 1128 -- Function Pointer: void *MHD_ContentReaderFreeCallback (void *cls) 1129 This method is called by MHD if we are done with a content reader. 1130 It should be used to free resources associated with the content 1131 reader. 1132 1133 -- Function Pointer: int *MHD_PostDataIterator (void *cls, enum 1134 MHD_ValueKind kind, const char *key, const char *filename, 1135 const char *content_type, const char *transfer_encoding, const 1136 char *data, uint64_t off, size_t size) 1137 Iterator over key-value pairs where the value maybe made available 1138 in increments and/or may not be zero-terminated. Used for 1139 processing 'POST' data. 1140 1141 CLS 1142 custom value selected at callback registration time; 1143 1144 KIND 1145 type of the value; 1146 1147 KEY 1148 zero-terminated key for the value; 1149 1150 FILENAME 1151 name of the uploaded file, 'NULL' if not known; 1152 1153 CONTENT_TYPE 1154 mime-type of the data, 'NULL' if not known; 1155 1156 TRANSFER_ENCODING 1157 encoding of the data, 'NULL' if not known; 1158 1159 DATA 1160 pointer to size bytes of data at the specified offset; 1161 1162 OFF 1163 offset of data in the overall value; 1164 1165 SIZE 1166 number of bytes in data available. 1167 1168 Return 'MHD_YES' to continue iterating, 'MHD_NO' to abort the 1169 iteration. 1170 1171 1172File: libmicrohttpd.info, Node: microhttpd-init, Next: microhttpd-inspect, Prev: microhttpd-cb, Up: Top 1173 11745 Starting and stopping the server 1175********************************** 1176 1177 -- Function: void MHD_set_panic_func (MHD_PanicCallback cb, void *cls) 1178 Set a handler for fatal errors. 1179 1180 CB 1181 function to call if MHD encounters a fatal internal error. If 1182 no handler was set explicitly, MHD will call 'abort'. 1183 1184 CLS 1185 closure argument for cb; the other arguments are the name of 1186 the source file, line number and a string describing the 1187 nature of the fatal error (which can be 'NULL') 1188 1189 -- Function: struct MHD_Daemon * MHD_start_daemon (unsigned int flags, 1190 unsigned short port, MHD_AcceptPolicyCallback apc, void 1191 *apc_cls, MHD_AccessHandlerCallback dh, void *dh_cls, ...) 1192 Start a webserver on the given port. 1193 1194 FLAGS 1195 OR-ed combination of 'MHD_FLAG' values; 1196 1197 PORT 1198 port to bind to; 1199 1200 APC 1201 callback to call to check which clients will be allowed to 1202 connect; you can pass 'NULL' in which case connections from 1203 any IP will be accepted; 1204 1205 APC_CLS 1206 extra argument to APC; 1207 1208 DH 1209 default handler for all URIs; 1210 1211 DH_CLS 1212 extra argument to DH. 1213 1214 Additional arguments are a list of options (type-value pairs, 1215 terminated with 'MHD_OPTION_END'). It is mandatory to use 1216 'MHD_OPTION_END' as last argument, even when there are no 1217 additional arguments. 1218 1219 Return 'NULL' on error, handle to daemon on success. 1220 1221 -- Function: int MHD_quiesce_daemon (struct MHD_Daemon *daemon) 1222 Stop accepting connections from the listening socket. Allows 1223 clients to continue processing, but stops accepting new 1224 connections. Note that the caller is responsible for closing the 1225 returned socket; however, if MHD is run using threads (anything but 1226 external select mode), it must not be closed until AFTER 1227 'MHD_stop_daemon' has been called (as it is theoretically possible 1228 that an existing thread is still using it). 1229 1230 This function is useful in the special case that a listen socket is 1231 to be migrated to another process (i.e. a newer version of the 1232 HTTP server) while existing connections should continue to be 1233 processed until they are finished. 1234 1235 Return '-1' on error (daemon not listening), the handle to the 1236 listen socket otherwise. 1237 1238 -- Function: void MHD_stop_daemon (struct MHD_Daemon *daemon) 1239 Shutdown an HTTP daemon. 1240 1241 -- Function: int MHD_run (struct MHD_Daemon *daemon) 1242 Run webserver operations (without blocking unless in client 1243 callbacks). This method should be called by clients in combination 1244 with 'MHD_get_fdset()' if the client-controlled 'select'-method is 1245 used. 1246 1247 This function will work for external 'poll' and 'select' mode. 1248 However, if using external 'select' mode, you may want to instead 1249 use 'MHD_run_from_select', as it is more efficient. 1250 1251 DAEMON 1252 daemon to process connections of 1253 1254 Return 'MHD_YES' on success, 'MHD_NO' if this daemon was not 1255 started with the right options for this call. 1256 1257 -- Function: int MHD_run_from_select (struct MHD_Daemon *daemon, const 1258 fd_set *read_fd_set, const fd_set *write_fd_set, const fd_set 1259 *except_fd_set) 1260 Run webserver operations given sets of ready socket handles. 1261 1262 This method should be called by clients in combination with 1263 'MHD_get_fdset' if the client-controlled (external) select method 1264 is used. 1265 1266 You can use this function instead of 'MHD_run' if you called 1267 'select' on the result from 'MHD_get_fdset'. File descriptors in 1268 the sets that are not controlled by MHD will be ignored. Calling 1269 this function instead of 'MHD_run' is more efficient as MHD will 1270 not have to call 'select' again to determine which operations are 1271 ready. 1272 1273 DAEMON 1274 daemon to process connections of 1275 READ_FD_SET 1276 set of descriptors that must be ready for reading without 1277 blocking 1278 WRITE_FD_SET 1279 set of descriptors that must be ready for writing without 1280 blocking 1281 EXCEPT_FD_SET 1282 ignored, can be NULL 1283 1284 Return 'MHD_YES' on success, 'MHD_NO' on serious internal errors. 1285 1286 -- Function: void MHD_add_connection (struct MHD_Daemon *daemon, int 1287 client_socket, const struct sockaddr *addr, socklen_t addrlen) 1288 Add another client connection to the set of connections managed by 1289 MHD. This API is usually not needed (since MHD will accept inbound 1290 connections on the server socket). Use this API in special cases, 1291 for example if your HTTP server is behind NAT and needs to connect 1292 out to the HTTP client, or if you are building a proxy. 1293 1294 If you use this API in conjunction with a internal select or a 1295 thread pool, you must set the option 'MHD_USE_PIPE_FOR_SHUTDOWN' to 1296 ensure that the freshly added connection is immediately processed 1297 by MHD. 1298 1299 The given client socket will be managed (and closed!) by MHD after 1300 this call and must no longer be used directly by the application 1301 afterwards. 1302 1303 DAEMON 1304 daemon that manages the connection 1305 CLIENT_SOCKET 1306 socket to manage (MHD will expect to receive an HTTP request 1307 from this socket next). 1308 ADDR 1309 IP address of the client 1310 ADDRLEN 1311 number of bytes in addr 1312 1313 This function will return 'MHD_YES' on success, 'MHD_NO' if this 1314 daemon could not handle the connection (i.e. malloc failed, etc). 1315 The socket will be closed in any case; 'errno' is set to indicate 1316 further details about the error. 1317 1318 1319File: libmicrohttpd.info, Node: microhttpd-inspect, Next: microhttpd-requests, Prev: microhttpd-init, Up: Top 1320 13216 Implementing external 'select' 1322******************************** 1323 1324 -- Function: int MHD_get_fdset (struct MHD_Daemon *daemon, fd_set * 1325 read_fd_set, fd_set * write_fd_set, fd_set * except_fd_set, 1326 int *max_fd) 1327 Obtain the 'select()' sets for this daemon. The daemon's socket is 1328 added to READ_FD_SET. The list of currently existent connections 1329 is scanned and their file descriptors added to the correct set. 1330 1331 After the call completed successfully: the variable referenced by 1332 MAX_FD references the file descriptor with highest integer 1333 identifier. The variable must be set to zero before invoking this 1334 function. 1335 1336 Return 'MHD_YES' on success, 'MHD_NO' if: the arguments are invalid 1337 (example: 'NULL' pointers); this daemon was not started with the 1338 right options for this call. 1339 1340 -- Function: int MHD_get_timeout (struct MHD_Daemon *daemon, unsigned 1341 long long *timeout) 1342 Obtain timeout value for select for this daemon (only needed if 1343 connection timeout is used). The returned value is how many 1344 milliseconds 'select' should at most block, not the timeout value 1345 set for connections. This function must not be called if the 1346 'MHD_USE_THREAD_PER_CONNECTION' mode is in use (since then it is 1347 not meaningful to ask for a timeout, after all, there is 1348 concurrenct activity). The function must also not be called by 1349 user-code if 'MHD_USE_INTERNAL_SELECT' is in use. In the latter 1350 case, the behavior is undefined. 1351 1352 DAEMON 1353 which daemon to obtain the timeout from. 1354 TIMEOUT 1355 will be set to the timeout (in milliseconds). 1356 1357 Return 'MHD_YES' on success, 'MHD_NO' if timeouts are not used (or 1358 no connections exist that would necessiate the use of a timeout 1359 right now). 1360 1361 1362File: libmicrohttpd.info, Node: microhttpd-requests, Next: microhttpd-responses, Prev: microhttpd-inspect, Up: Top 1363 13647 Handling requests 1365******************* 1366 1367 -- Function: int MHD_get_connection_values (struct MHD_Connection 1368 *connection, enum MHD_ValueKind kind, MHD_KeyValueIterator 1369 iterator, void *iterator_cls) 1370 Get all the headers matching KIND from the request. 1371 1372 The ITERATOR callback is invoked once for each header, with 1373 ITERATOR_CLS as first argument. After version 0.9.19, the headers 1374 are iterated in the same order as they were received from the 1375 network; previous versions iterated over the headers in reverse 1376 order. 1377 1378 'MHD_get_connection_values' returns the number of entries iterated 1379 over; this can be less than the number of headers if, while 1380 iterating, ITERATOR returns 'MHD_NO'. 1381 1382 ITERATOR can be 'NULL': in this case this function just counts and 1383 returns the number of headers. 1384 1385 In the case of 'MHD_GET_ARGUMENT_KIND', the VALUE argument will be 1386 'NULL' if the URL contained a key without an equals operator. For 1387 example, for a HTTP request to the URL "http://foo/bar?key", the 1388 VALUE argument is 'NULL'; in contrast, a HTTP request to the URL 1389 "http://foo/bar?key=", the VALUE argument is the empty string. The 1390 normal case is that the URL contains "http://foo/bar?key=value" in 1391 which case VALUE would be the string "value" and KEY would contain 1392 the string "key". 1393 1394 -- Function: int MHD_set_connection_value (struct MHD_Connection 1395 *connection, enum MHD_ValueKind kind, const char * key, const 1396 char * value) 1397 This function can be used to append an entry to the list of HTTP 1398 headers of a connection (so that the 'MHD_get_connection_values 1399 function' will return them - and the MHD PostProcessor will also 1400 see them). This maybe required in certain situations (see Mantis 1401 #1399) where (broken) HTTP implementations fail to supply values 1402 needed by the post processor (or other parts of the application). 1403 1404 This function MUST only be called from within the 1405 MHD_AccessHandlerCallback (otherwise, access maybe improperly 1406 synchronized). Furthermore, the client must guarantee that the key 1407 and value arguments are 0-terminated strings that are NOT freed 1408 until the connection is closed. (The easiest way to do this is by 1409 passing only arguments to permanently allocated strings.). 1410 1411 CONNECTION is the connection for which the entry for KEY of the 1412 given KIND should be set to the given VALUE. 1413 1414 The function returns 'MHD_NO' if the operation could not be 1415 performed due to insufficient memory and 'MHD_YES' on success. 1416 1417 -- Function: const char * MHD_lookup_connection_value (struct 1418 MHD_Connection *connection, enum MHD_ValueKind kind, const 1419 char *key) 1420 Get a particular header value. If multiple values match the KIND, 1421 return one of them (the "first", whatever that means). KEY must 1422 reference a zero-terminated ASCII-coded string representing the 1423 header to look for: it is compared against the headers using 1424 'strcasecmp()', so case is ignored. A value of 'NULL' for KEY can 1425 be used to lookup 'trailing' values without a key, for example if a 1426 URI is of the form "http://example.com/?trailer", a KEY of 'NULL' 1427 can be used to access "tailer" The function returns 'NULL' if no 1428 matching item was found. 1429 1430 1431File: libmicrohttpd.info, Node: microhttpd-responses, Next: microhttpd-flow, Prev: microhttpd-requests, Up: Top 1432 14338 Building responses to requests 1434******************************** 1435 1436Response objects handling by MHD is asynchronous with respect to the 1437application execution flow. Instances of the 'MHD_Response' structure 1438are not associated to a daemon and neither to a client connection: they 1439are managed with reference counting. 1440 1441 In the simplest case: we allocate a new 'MHD_Response' structure for 1442each response, we use it once and finally we destroy it. 1443 1444 MHD allows more efficient resources usages. 1445 1446 Example: we allocate a new 'MHD_Response' structure for each response 1447*kind*, we use it every time we have to give that response and we 1448finally destroy it only when the daemon shuts down. 1449 1450* Menu: 1451 1452* microhttpd-response enqueue:: Enqueuing a response. 1453* microhttpd-response create:: Creating a response object. 1454* microhttpd-response headers:: Adding headers to a response. 1455* microhttpd-response options:: Setting response options. 1456* microhttpd-response inspect:: Inspecting a response object. 1457 1458 1459File: libmicrohttpd.info, Node: microhttpd-response enqueue, Next: microhttpd-response create, Up: microhttpd-responses 1460 14618.1 Enqueuing a response 1462======================== 1463 1464 -- Function: int MHD_queue_response (struct MHD_Connection *connection, 1465 unsigned int status_code, struct MHD_Response *response) 1466 Queue a response to be transmitted to the client as soon as 1467 possible but only after MHD_AccessHandlerCallback returns. This 1468 function checks that it is legal to queue a response at this time 1469 for the given connection. It also increments the internal 1470 reference counter for the response object (the counter will be 1471 decremented automatically once the response has been transmitted). 1472 1473 CONNECTION 1474 the connection identifying the client; 1475 1476 STATUS_CODE 1477 HTTP status code (i.e. '200' for OK); 1478 1479 RESPONSE 1480 response to transmit. 1481 1482 Return 'MHD_YES' on success or if message has been queued. Return 1483 'MHD_NO': if arguments are invalid (example: 'NULL' pointer); on 1484 error (i.e. reply already sent). 1485 1486 -- Function: void MHD_destroy_response (struct MHD_Response *response) 1487 Destroy a response object and associated resources (decrement the 1488 reference counter). Note that MHD may keep some of the resources 1489 around if the response is still in the queue for some clients, so 1490 the memory may not necessarily be freed immediately. 1491 1492 An explanation of reference counting(1): 1493 1494 1. a 'MHD_Response' object is allocated: 1495 1496 struct MHD_Response * response = MHD_create_response_from_buffer(...); 1497 /* here: reference counter = 1 */ 1498 1499 2. the 'MHD_Response' object is enqueued in a 'MHD_Connection': 1500 1501 MHD_queue_response(connection, , response); 1502 /* here: reference counter = 2 */ 1503 1504 3. the creator of the response object discharges responsibility for 1505 it: 1506 1507 MHD_destroy_response(response); 1508 /* here: reference counter = 1 */ 1509 1510 4. the daemon handles the connection sending the response's data to 1511 the client then decrements the reference counter by calling 1512 'MHD_destroy_response()': the counter's value drops to zero and the 1513 'MHD_Response' object is released. 1514 1515 ---------- Footnotes ---------- 1516 1517 (1) Note to readers acquainted to the Tcl API: reference counting on 1518'MHD_Connection' structures is handled in the same way as Tcl handles 1519'Tcl_Obj' structures through 'Tcl_IncrRefCount()' and 1520'Tcl_DecrRefCount()'. 1521 1522 1523File: libmicrohttpd.info, Node: microhttpd-response create, Next: microhttpd-response headers, Prev: microhttpd-response enqueue, Up: microhttpd-responses 1524 15258.2 Creating a response object 1526============================== 1527 1528 -- Function: struct MHD_Response * MHD_create_response_from_callback 1529 (uint64_t size, size_t block_size, MHD_ContentReaderCallback 1530 crc, void *crc_cls, MHD_ContentReaderFreeCallback crfc) 1531 Create a response object. The response object can be extended with 1532 header information and then it can be used any number of times. 1533 1534 SIZE 1535 size of the data portion of the response, '-1' for unknown; 1536 1537 BLOCK_SIZE 1538 preferred block size for querying CRC (advisory only, MHD may 1539 still call CRC using smaller chunks); this is essentially the 1540 buffer size used for IO, clients should pick a value that is 1541 appropriate for IO and memory performance requirements; 1542 1543 CRC 1544 callback to use to obtain response data; 1545 1546 CRC_CLS 1547 extra argument to CRC; 1548 1549 CRFC 1550 callback to call to free CRC_CLS resources. 1551 1552 Return 'NULL' on error (i.e. invalid arguments, out of memory). 1553 1554 -- Function: struct MHD_Response * MHD_create_response_from_fd 1555 (uint64_t size, int fd) 1556 Create a response object. The response object can be extended with 1557 header information and then it can be used any number of times. 1558 1559 SIZE 1560 size of the data portion of the response (should be smaller or 1561 equal to the size of the file) 1562 1563 FD 1564 file descriptor referring to a file on disk with the data; 1565 will be closed when response is destroyed; note that 'fd' must 1566 be an actual file descriptor (not a pipe or socket) since MHD 1567 might use 'sendfile' or 'seek' on it. The descriptor should 1568 be in blocking-IO mode. 1569 1570 Return 'NULL' on error (i.e. invalid arguments, out of memory). 1571 1572 -- Function: struct MHD_Response * 1573 MHD_create_response_from_fd_at_offset (size_t size, int fd, 1574 off_t offset) 1575 Create a response object. The response object can be extended with 1576 header information and then it can be used any number of times. 1577 Note that you need to be a bit careful about 'off_t' when writing 1578 this code. Depending on your platform, MHD is likely to have been 1579 compiled with support for 64-bit files. When you compile your own 1580 application, you must make sure that 'off_t' is also a 64-bit 1581 value. If not, your compiler may pass a 32-bit value as 'off_t', 1582 which will result in 32-bits of garbage. 1583 1584 If you use the autotools, use the 'AC_SYS_LARGEFILE' autoconf macro 1585 and make sure to include the generated 'config.h' file before 1586 'microhttpd.h' to avoid problems. If you do not have a build 1587 system and only want to run on a GNU/Linux system, you could also 1588 use 1589 #define _FILE_OFFSET_BITS 64 1590 #include <sys/types.h> 1591 #include <sys/stat.h> 1592 #include <fcntl.h> 1593 #include <microhttpd.h> 1594 to ensure 64-bit 'off_t'. Note that if your operating system does 1595 not support 64-bit files, MHD will be compiled with a 32-bit 1596 'off_t' (in which case the above would be wrong). 1597 1598 SIZE 1599 size of the data portion of the response (number of bytes to 1600 transmit from the file starting at offset). 1601 1602 FD 1603 file descriptor referring to a file on disk with the data; 1604 will be closed when response is destroyed; note that 'fd' must 1605 be an actual file descriptor (not a pipe or socket) since MHD 1606 might use 'sendfile' or 'seek' on it. The descriptor should 1607 be in blocking-IO mode. 1608 1609 OFFSET 1610 offset to start reading from in the file 1611 1612 Return 'NULL' on error (i.e. invalid arguments, out of memory). 1613 1614 -- Function: struct MHD_Response * MHD_create_response_from_buffer 1615 (size_t size, void *data, enum MHD_ResponseMemoryMode mode) 1616 Create a response object. The response object can be extended with 1617 header information and then it can be used any number of times. 1618 1619 SIZE 1620 size of the data portion of the response; 1621 1622 BUFFER 1623 the data itself; 1624 1625 MODE 1626 memory management options for buffer; use 1627 MHD_RESPMEM_PERSISTENT if the buffer is static/global memory, 1628 use MHD_RESPMEM_MUST_FREE if the buffer is heap-allocated and 1629 should be freed by MHD and MHD_RESPMEM_MUST_COPY if the buffer 1630 is in transient memory (i.e. on the stack) and must be copied 1631 by MHD; 1632 1633 Return 'NULL' on error (i.e. invalid arguments, out of memory). 1634 1635 -- Function: struct MHD_Response * MHD_create_response_from_data 1636 (size_t size, void *data, int must_free, int must_copy) 1637 Create a response object. The response object can be extended with 1638 header information and then it can be used any number of times. 1639 This function is deprecated, use 'MHD_create_response_from_buffer' 1640 instead. 1641 1642 SIZE 1643 size of the data portion of the response; 1644 1645 DATA 1646 the data itself; 1647 1648 MUST_FREE 1649 if true: MHD should free data when done; 1650 1651 MUST_COPY 1652 if true: MHD allocates a block of memory and use it to make a 1653 copy of DATA embedded in the returned 'MHD_Response' 1654 structure; handling of the embedded memory is responsibility 1655 of MHD; DATA can be released anytime after this call returns. 1656 1657 Return 'NULL' on error (i.e. invalid arguments, out of memory). 1658 1659 Example: create a response from a statically allocated string: 1660 1661 const char * data = "<html><body><p>Error!</p></body></html>"; 1662 1663 struct MHD_Connection * connection = ...; 1664 struct MHD_Response * response; 1665 1666 response = MHD_create_response_from_buffer (strlen(data), data, 1667 MHD_RESPMEM_PERSISTENT); 1668 MHD_queue_response(connection, 404, response); 1669 MHD_destroy_response(response); 1670 1671 1672File: libmicrohttpd.info, Node: microhttpd-response headers, Next: microhttpd-response options, Prev: microhttpd-response create, Up: microhttpd-responses 1673 16748.3 Adding headers to a response 1675================================ 1676 1677 -- Function: int MHD_add_response_header (struct MHD_Response 1678 *response, const char *header, const char *content) 1679 Add a header line to the response. The strings referenced by 1680 HEADER and CONTENT must be zero-terminated and they are duplicated 1681 into memory blocks embedded in RESPONSE. 1682 1683 Notice that the strings must not hold newlines, carriage returns or 1684 tab chars. 1685 1686 Return 'MHD_NO' on error (i.e. invalid header or content format or 1687 memory allocation error). 1688 1689 -- Function: int MHD_add_response_footer (struct MHD_Response 1690 *response, const char *footer, const char *content) 1691 Add a footer line to the response. The strings referenced by 1692 FOOTER and CONTENT must be zero-terminated and they are duplicated 1693 into memory blocks embedded in RESPONSE. 1694 1695 Notice that the strings must not hold newlines, carriage returns or 1696 tab chars. You can add response footers at any time before 1697 signalling the end of the response to MHD (not just before calling 1698 'MHD_queue_response'). Footers are useful for adding cryptographic 1699 checksums to the reply or to signal errors encountered during data 1700 generation. This call was introduced in MHD 0.9.3. 1701 1702 Return 'MHD_NO' on error (i.e. invalid header or content format or 1703 memory allocation error). 1704 1705 -- Function: int MHD_del_response_header (struct MHD_Response 1706 *response, const char *header, const char *content) 1707 Delete a header (or footer) line from the response. Return 1708 'MHD_NO' on error (arguments are invalid or no such header known). 1709 1710 1711File: libmicrohttpd.info, Node: microhttpd-response options, Next: microhttpd-response inspect, Prev: microhttpd-response headers, Up: microhttpd-responses 1712 17138.4 Setting response options 1714============================ 1715 1716 -- Function: int MHD_set_response_options (struct MHD_Response 1717 *response, enum MHD_ResponseFlags flags, ...) 1718 Set special flags and options for a response. 1719 1720 Calling this functions sets the given flags and options for the 1721 response. 1722 1723 RESPONSE 1724 which response should be modified; 1725 1726 FLAGS 1727 flags to set for the response; 1728 1729 Additional arguments are a list of options (type-value pairs, 1730 terminated with 'MHD_RO_END'). It is mandatory to use 'MHD_RO_END' 1731 as last argument, even when there are no additional arguments. 1732 1733 Return 'MHD_NO' on error, 'MHD_YES' on success. 1734 1735 1736File: libmicrohttpd.info, Node: microhttpd-response inspect, Prev: microhttpd-response options, Up: microhttpd-responses 1737 17388.5 Inspecting a response object 1739================================ 1740 1741 -- Function: int MHD_get_response_headers (struct MHD_Response 1742 *response, MHD_KeyValueIterator iterator, void *iterator_cls) 1743 Get all of the headers added to a response. 1744 1745 Invoke the ITERATOR callback for each header in the response, using 1746 ITERATOR_CLS as first argument. Return number of entries iterated 1747 over. ITERATOR can be 'NULL': in this case the function just 1748 counts headers. 1749 1750 ITERATOR should not modify the its key and value arguments, unless 1751 we know what we are doing. 1752 1753 -- Function: const char * MHD_get_response_header (struct MHD_Response 1754 *response, const char *key) 1755 Find and return a pointer to the value of a particular header from 1756 the response. KEY must reference a zero-terminated string 1757 representing the header to look for. The search is case sensitive. 1758 Return 'NULL' if header does not exist or KEY is 'NULL'. 1759 1760 We should not modify the value, unless we know what we are doing. 1761 1762 1763File: libmicrohttpd.info, Node: microhttpd-flow, Next: microhttpd-dauth, Prev: microhttpd-responses, Up: Top 1764 17659 Flow control. 1766*************** 1767 1768Sometimes it may be possible that clients upload data faster than an 1769application can process it, or that an application needs an extended 1770period of time to generate a response. If 1771'MHD_USE_THREAD_PER_CONNECTION' is used, applications can simply deal 1772with this by performing their logic within the thread and thus 1773effectively blocking connection processing by MHD. In all other modes, 1774blocking logic must not be placed within the callbacks invoked by MHD as 1775this would also block processing of other requests, as a single thread 1776may be responsible for tens of thousands of connections. 1777 1778 Instead, applications using thread modes other than 1779'MHD_USE_THREAD_PER_CONNECTION' should use the following functions to 1780perform flow control. 1781 1782 -- Function: int MHD_suspend_connection (struct MHD_Connection 1783 *connection) 1784 Suspend handling of network data for a given connection. This can 1785 be used to dequeue a connection from MHD's event loop (external 1786 select, internal select or thread pool; not applicable to 1787 thread-per-connection!) for a while. 1788 1789 If you use this API in conjunction with a internal select or a 1790 thread pool, you must set the option 'MHD_USE_SUSPEND_RESUME' to 1791 ensure that a resumed connection is immediately processed by MHD. 1792 1793 Suspended connections continue to count against the total number of 1794 connections allowed (per daemon, as well as per IP, if such limits 1795 are set). Suspended connections will NOT time out; timeouts will 1796 restart when the connection handling is resumed. While a 1797 connection is suspended, MHD will not detect disconnects by the 1798 client. 1799 1800 The only safe time to suspend a connection is from the 1801 'MHD_AccessHandlerCallback'. 1802 1803 Finally, it is an API violation to call 'MHD_stop_daemon' while 1804 having suspended connections (this will at least create memory and 1805 socket leaks or lead to undefined behavior). You must explicitly 1806 resume all connections before stopping the daemon. 1807 1808 CONNECTION 1809 the connection to suspend 1810 1811 -- Function: int MHD_resume_connection (struct MHD_Connection 1812 *connection) 1813 Resume handling of network data for suspended connection. It is 1814 safe to resume a suspended connection at any time. Calling this 1815 function on a connection that was not previously suspended will 1816 result in undefined behavior. 1817 1818 CONNECTION 1819 the connection to resume 1820 1821 1822File: libmicrohttpd.info, Node: microhttpd-dauth, Next: microhttpd-post, Prev: microhttpd-flow, Up: Top 1823 182410 Utilizing Authentication 1825*************************** 1826 1827MHD support three types of client authentication. 1828 1829 Basic authentication uses a simple authentication method based on 1830BASE64 algorithm. Username and password are exchanged in clear between 1831the client and the server, so this method must only be used for 1832non-sensitive content or when the session is protected with https. When 1833using basic authentication MHD will have access to the clear password, 1834possibly allowing to create a chained authentication toward an external 1835authentication server. 1836 1837 Digest authentication uses a one-way authentication method based on 1838MD5 hash algorithm. Only the hash will transit over the network, hence 1839protecting the user password. The nonce will prevent replay attacks. 1840This method is appropriate for general use, especially when https is not 1841used to encrypt the session. 1842 1843 Client certificate authentication uses a X.509 certificate from the 1844client. This is the strongest authentication mechanism but it requires 1845the use of HTTPS. Client certificate authentication can be used 1846simultaneously with Basic or Digest Authentication in order to provide a 1847two levels authentication (like for instance separate machine and user 1848authentication). A code example for using client certificates is 1849presented in the MHD tutorial. 1850 1851* Menu: 1852 1853* microhttpd-dauth basic:: Using Basic Authentication. 1854* microhttpd-dauth digest:: Using Digest Authentication. 1855 1856 1857File: libmicrohttpd.info, Node: microhttpd-dauth basic, Next: microhttpd-dauth digest, Up: microhttpd-dauth 1858 185910.1 Using Basic Authentication 1860=============================== 1861 1862 -- Function: char * MHD_basic_auth_get_username_password (struct 1863 MHD_Connection *connection, char** password) 1864 Get the username and password from the basic authorization header 1865 sent by the client. Return 'NULL' if no username could be found, a 1866 pointer to the username if found. If returned value is not 'NULL', 1867 the value must be 'free()''ed. 1868 1869 PASSWORD reference a buffer to store the password. It can be 1870 'NULL'. If returned value is not 'NULL', the value must be 1871 'free()''ed. 1872 1873 -- Function: int MHD_queue_basic_auth_fail_response (struct 1874 MHD_Connection *connection, const char *realm, struct 1875 MHD_Response *response) 1876 Queues a response to request basic authentication from the client. 1877 Return 'MHD_YES' if successful, otherwise 'MHD_NO'. 1878 1879 REALM must reference to a zero-terminated string representing the 1880 realm. 1881 1882 RESPONSE a response structure to specify what shall be presented to 1883 the client with a 401 HTTP status. 1884 1885 1886File: libmicrohttpd.info, Node: microhttpd-dauth digest, Prev: microhttpd-dauth basic, Up: microhttpd-dauth 1887 188810.2 Using Digest Authentication 1889================================ 1890 1891 -- Function: char * MHD_digest_auth_get_username (struct MHD_Connection 1892 *connection) 1893 Find and return a pointer to the username value from the request 1894 header. Return 'NULL' if the value is not found or header does not 1895 exist. If returned value is not 'NULL', the value must be 1896 'free()''ed. 1897 1898 -- Function: int MHD_digest_auth_check (struct MHD_Connection 1899 *connection, const char *realm, const char *username, const 1900 char *password, unsigned int nonce_timeout) 1901 Checks if the provided values in the WWW-Authenticate header are 1902 valid and sound according to RFC2716. If valid return 'MHD_YES', 1903 otherwise return 'MHD_NO'. 1904 1905 REALM must reference to a zero-terminated string representing the 1906 realm. 1907 1908 USERNAME must reference to a zero-terminated string representing 1909 the username, it is usually the returned value from 1910 MHD_digest_auth_get_username. 1911 1912 PASSWORD must reference to a zero-terminated string representing 1913 the password, most probably it will be the result of a lookup of 1914 the username against a local database. 1915 1916 NONCE_TIMEOUT is the amount of time in seconds for a nonce to be 1917 invalid. Most of the time it is sound to specify 300 seconds as 1918 its values. 1919 1920 -- Function: int MHD_queue_auth_fail_response (struct MHD_Connection 1921 *connection, const char *realm, const char *opaque, struct 1922 MHD_Response *response, int signal_stale) 1923 Queues a response to request authentication from the client, return 1924 'MHD_YES' if successful, otherwise 'MHD_NO'. 1925 1926 REALM must reference to a zero-terminated string representing the 1927 realm. 1928 1929 OPAQUE must reference to a zero-terminated string representing a 1930 value that gets passed to the client and expected to be passed 1931 again to the server as-is. This value can be a hexadecimal or 1932 base64 string. 1933 1934 RESPONSE a response structure to specify what shall be presented to 1935 the client with a 401 HTTP status. 1936 1937 SIGNAL_STALE a value that signals "stale=true" in the response 1938 header to indicate the invalidity of the nonce and no need to ask 1939 for authentication parameters and only a new nonce gets generated. 1940 'MHD_YES' to generate a new nonce, 'MHD_NO' to ask for 1941 authentication parameters. 1942 1943 Example: handling digest authentication requests and responses. 1944 1945 #define PAGE "<html><head><title>libmicrohttpd demo</title></head><body>Access granted</body></html>" 1946 #define DENIED "<html><head><title>libmicrohttpd demo</title></head><body>Access denied</body></html>" 1947 #define OPAQUE "11733b200778ce33060f31c9af70a870ba96ddd4" 1948 1949 static int 1950 ahc_echo (void *cls, 1951 struct MHD_Connection *connection, 1952 const char *url, 1953 const char *method, 1954 const char *version, 1955 const char *upload_data, size_t *upload_data_size, void **ptr) 1956 { 1957 struct MHD_Response *response; 1958 char *username; 1959 const char *password = "testpass"; 1960 const char *realm = "test@example.com"; 1961 int ret; 1962 1963 username = MHD_digest_auth_get_username(connection); 1964 if (username == NULL) 1965 { 1966 response = MHD_create_response_from_buffer(strlen (DENIED), 1967 DENIED, 1968 MHD_RESPMEM_PERSISTENT); 1969 ret = MHD_queue_auth_fail_response(connection, realm, 1970 OPAQUE, 1971 response, 1972 MHD_NO); 1973 MHD_destroy_response(response); 1974 return ret; 1975 } 1976 ret = MHD_digest_auth_check(connection, realm, 1977 username, 1978 password, 1979 300); 1980 free(username); 1981 if ( (ret == MHD_INVALID_NONCE) || 1982 (ret == MHD_NO) ) 1983 { 1984 response = MHD_create_response_from_buffer(strlen (DENIED), 1985 DENIED, 1986 MHD_RESPMEM_PERSISTENT); 1987 if (NULL == response) 1988 return MHD_NO; 1989 ret = MHD_queue_auth_fail_response(connection, realm, 1990 OPAQUE, 1991 response, 1992 (ret == MHD_INVALID_NONCE) ? MHD_YES : MHD_NO); 1993 MHD_destroy_response(response); 1994 return ret; 1995 } 1996 response = MHD_create_response_from_buffer (strlen(PAGE), PAGE, 1997 MHD_RESPMEM_PERSISTENT); 1998 ret = MHD_queue_response(connection, MHD_HTTP_OK, response); 1999 MHD_destroy_response(response); 2000 return ret; 2001 } 2002 2003 2004File: libmicrohttpd.info, Node: microhttpd-post, Next: microhttpd-info, Prev: microhttpd-dauth, Up: Top 2005 200611 Adding a 'POST' processor 2007**************************** 2008 2009* Menu: 2010 2011* microhttpd-post api:: Programming interface for the 2012 'POST' processor. 2013 2014MHD provides the post processor API to make it easier for applications 2015to parse the data of a client's 'POST' request: the 2016'MHD_AccessHandlerCallback' will be invoked multiple times to process 2017data as it arrives; at each invocation a new chunk of data must be 2018processed. The arguments UPLOAD_DATA and UPLOAD_DATA_SIZE are used to 2019reference the chunk of data. 2020 2021 When 'MHD_AccessHandlerCallback' is invoked for a new connection: its 2022'*CON_CLS' argument is set to 'NULL'. When 'POST' data comes in the 2023upload buffer it is *mandatory* to use the CON_CLS to store a reference 2024to per-connection data. The fact that the pointer was initially 'NULL' 2025can be used to detect that this is a new request. 2026 2027 One method to detect that a new connection was established is to set 2028'*con_cls' to an unused integer: 2029 2030 int 2031 access_handler (void *cls, 2032 struct MHD_Connection * connection, 2033 const char *url, 2034 const char *method, const char *version, 2035 const char *upload_data, size_t *upload_data_size, 2036 void **con_cls) 2037 { 2038 static int old_connection_marker; 2039 int new_connection = (NULL == *con_cls); 2040 2041 if (new_connection) 2042 { 2043 /* new connection with POST */ 2044 *con_cls = &old_connection_marker; 2045 } 2046 2047 ... 2048 } 2049 2050In contrast to the previous example, for 'POST' requests in particular, 2051it is more common to use the value of '*con_cls' to keep track of actual 2052state used during processing, such as the post processor (or a struct 2053containing a post processor): 2054 2055 int 2056 access_handler (void *cls, 2057 struct MHD_Connection * connection, 2058 const char *url, 2059 const char *method, const char *version, 2060 const char *upload_data, size_t *upload_data_size, 2061 void **con_cls) 2062 { 2063 struct MHD_PostProcessor * pp = *con_cls; 2064 2065 if (pp == NULL) 2066 { 2067 pp = MHD_create_post_processor(connection, ...); 2068 *con_cls = pp; 2069 return MHD_YES; 2070 } 2071 if (*upload_data_size) 2072 { 2073 MHD_post_process(pp, upload_data, *upload_data_size); 2074 *upload_data_size = 0; 2075 return MHD_YES; 2076 } 2077 else 2078 { 2079 MHD_destroy_post_processor(pp); 2080 return MHD_queue_response(...); 2081 } 2082 } 2083 2084 Note that the callback from 'MHD_OPTION_NOTIFY_COMPLETED' should be 2085used to destroy the post processor. This cannot be done inside of the 2086access handler since the connection may not always terminate normally. 2087 2088 2089File: libmicrohttpd.info, Node: microhttpd-post api, Up: microhttpd-post 2090 209111.1 Programming interface for the 'POST' processor 2092=================================================== 2093 2094 -- Function: struct MHD_PostProcessor * MHD_create_post_processor 2095 (struct MHD_Connection *connection, size_t buffer_size, 2096 MHD_PostDataIterator iterator, void *iterator_cls) 2097 Create a PostProcessor. A PostProcessor can be used to 2098 (incrementally) parse the data portion of a 'POST' request. 2099 2100 CONNECTION 2101 the connection on which the 'POST' is happening (used to 2102 determine the 'POST' format); 2103 2104 BUFFER_SIZE 2105 maximum number of bytes to use for internal buffering (used 2106 only for the parsing, specifically the parsing of the keys). 2107 A tiny value (256-1024) should be sufficient; do *NOT* use a 2108 value smaller than 256; for good performance, use 32k or 64k 2109 (i.e. 65536). 2110 2111 ITERATOR 2112 iterator to be called with the parsed data; must *NOT* be 2113 'NULL'; 2114 2115 ITERATOR_CLS 2116 custom value to be used as first argument to ITERATOR. 2117 2118 Return 'NULL' on error (out of memory, unsupported encoding), 2119 otherwise a PP handle. 2120 2121 -- Function: int MHD_post_process (struct MHD_PostProcessor *pp, const 2122 char *post_data, size_t post_data_len) 2123 Parse and process 'POST' data. Call this function when 'POST' data 2124 is available (usually during an 'MHD_AccessHandlerCallback') with 2125 the UPLOAD_DATA and UPLOAD_DATA_SIZE. Whenever possible, this will 2126 then cause calls to the 'MHD_IncrementalKeyValueIterator'. 2127 2128 PP 2129 the post processor; 2130 2131 POST_DATA 2132 POST_DATA_LEN bytes of 'POST' data; 2133 2134 POST_DATA_LEN 2135 length of POST_DATA. 2136 2137 Return 'MHD_YES' on success, 'MHD_NO' on error (out-of-memory, 2138 iterator aborted, parse error). 2139 2140 -- Function: int MHD_destroy_post_processor (struct MHD_PostProcessor 2141 *pp) 2142 Release PostProcessor resources. After this function is being 2143 called, the PostProcessor is guaranteed to no longer call its 2144 iterator. There is no special call to the iterator to indicate the 2145 end of the post processing stream. After destroying the 2146 PostProcessor, the programmer should perform any necessary work to 2147 complete the processing of the iterator. 2148 2149 Return 'MHD_YES' if processing completed nicely, 'MHD_NO' if there 2150 were spurious characters or formatting problems with the post 2151 request. It is common to ignore the return value of this function. 2152 2153 2154File: libmicrohttpd.info, Node: microhttpd-info, Next: microhttpd-util, Prev: microhttpd-post, Up: Top 2155 215612 Obtaining and modifying status information. 2157********************************************** 2158 2159* Menu: 2160 2161* microhttpd-info daemon:: State information about an MHD daemon 2162* microhttpd-info conn:: State information about a connection 2163* microhttpd-option conn:: Modify per-connection options 2164 2165 2166File: libmicrohttpd.info, Node: microhttpd-info daemon, Next: microhttpd-info conn, Up: microhttpd-info 2167 216812.1 Obtaining state information about an MHD daemon 2169==================================================== 2170 2171 -- Function: const union MHD_DaemonInfo * MHD_get_daemon_info (struct 2172 MHD_Daemon *daemon, enum MHD_DaemonInfoType infoType, ...) 2173 Obtain information about the given daemon. This function is 2174 currently not fully implemented. 2175 2176 DAEMON 2177 the daemon about which information is desired; 2178 2179 INFOTYPE 2180 type of information that is desired 2181 2182 ... 2183 additional arguments about the desired information (depending 2184 on infoType) 2185 2186 Returns a union with the respective member (depending on infoType) 2187 set to the desired information), or 'NULL' in case the desired 2188 information is not available or applicable. 2189 2190 -- Enumeration: MHD_DaemonInfoType 2191 Values of this enum are used to specify what information about a 2192 daemon is desired. 2193 'MHD_DAEMON_INFO_KEY_SIZE' 2194 Request information about the key size for a particular cipher 2195 algorithm. The cipher algorithm should be passed as an extra 2196 argument (of type 'enum MHD_GNUTLS_CipherAlgorithm'). No 2197 longer supported, using this value will cause 2198 'MHD_get_daemon_info' to return NULL. 2199 2200 'MHD_DAEMON_INFO_MAC_KEY_SIZE' 2201 Request information about the key size for a particular cipher 2202 algorithm. The cipher algorithm should be passed as an extra 2203 argument (of type 'enum MHD_GNUTLS_HashAlgorithm'). No longer 2204 supported, using this value will cause 'MHD_get_daemon_info' 2205 to return NULL. 2206 2207 'MHD_DAEMON_INFO_LISTEN_FD' 2208 Request the file-descriptor number that MHD is using to listen 2209 to the server socket. This can be useful if no port was 2210 specified and a client needs to learn what port is actually 2211 being used by MHD. No extra arguments should be passed. 2212 2213 'MHD_DAEMON_INFO_EPOLL_FD_LINUX_ONLY' 2214 Request the file-descriptor number that MHD is using for 2215 epoll. If the build is not supporting epoll, NULL is 2216 returned; if we are using a thread pool or this daemon was not 2217 started with 'MHD_USE_EPOLL_LINUX_ONLY', (a pointer to) -1 is 2218 returned. If we are using 'MHD_USE_SELECT_INTERNALLY' or are 2219 in 'external' select mode, the internal epoll FD is returned. 2220 This function must be used in external select mode with epoll 2221 to obtain the FD to call epoll on. No extra arguments should 2222 be passed. 2223 2224 'MHD_DAEMON_INFO_CURRENT_CONNECTIONS' 2225 Request the number of current connections handled by the 2226 daemon. No extra arguments should be passed and a pointer to 2227 a 'union MHD_DaemonInfo' value is returned, with the 2228 'num_connections' member of type 'unsigned int' set to the 2229 number of active connections. 2230 2231 Note that in multi-threaded or internal-select mode, the real 2232 number of current connections may already be different when 2233 'MHD_get_daemon_info' returns. The number of current 2234 connections can be used (even in multi-threaded and 2235 internal-select mode) after 'MHD_quiesce_daemon' to detect 2236 whether all connections have been handled. 2237 2238 2239File: libmicrohttpd.info, Node: microhttpd-info conn, Next: microhttpd-option conn, Prev: microhttpd-info daemon, Up: microhttpd-info 2240 224112.2 Obtaining state information about a connection 2242=================================================== 2243 2244 -- Function: const union MHD_ConnectionInfo * MHD_get_connection_info 2245 (struct MHD_Connection *daemon, enum MHD_ConnectionInfoType 2246 infoType, ...) 2247 Obtain information about the given connection. 2248 2249 CONNECTION 2250 the connection about which information is desired; 2251 2252 INFOTYPE 2253 type of information that is desired 2254 2255 ... 2256 additional arguments about the desired information (depending 2257 on infoType) 2258 2259 Returns a union with the respective member (depending on infoType) 2260 set to the desired information), or 'NULL' in case the desired 2261 information is not available or applicable. 2262 2263 -- Enumeration: MHD_ConnectionInfoType 2264 Values of this enum are used to specify what information about a 2265 connection is desired. 2266 2267 'MHD_CONNECTION_INFO_CIPHER_ALGO' 2268 What cipher algorithm is being used (HTTPS connections only). 2269 Takes no extra arguments. 'NULL' is returned for non-HTTPS 2270 connections. 2271 2272 'MHD_CONNECTION_INFO_PROTOCOL,' 2273 Takes no extra arguments. Allows finding out the TLS/SSL 2274 protocol used (HTTPS connections only). 'NULL' is returned 2275 for non-HTTPS connections. 2276 2277 'MHD_CONNECTION_INFO_CLIENT_ADDRESS' 2278 Returns information about the address of the client. Returns 2279 essentially a 'struct sockaddr **' (since the API returns a 2280 'union MHD_ConnectionInfo *' and that union contains a 'struct 2281 sockaddr *'). 2282 2283 'MHD_CONNECTION_INFO_GNUTLS_SESSION,' 2284 Takes no extra arguments. Allows access to the underlying 2285 GNUtls session, including access to the underlying GNUtls 2286 client certificate (HTTPS connections only). Takes no extra 2287 arguments. 'NULL' is returned for non-HTTPS connections. 2288 2289 'MHD_CONNECTION_INFO_GNUTLS_CLIENT_CERT,' 2290 Dysfunctional (never implemented, deprecated). Use 2291 MHD_CONNECTION_INFO_GNUTLS_SESSION to get the 2292 'gnutls_session_t' and then call 2293 'gnutls_certificate_get_peers()'. 2294 2295 'MHD_CONNECTION_INFO_DAEMON' 2296 Returns information about 'struct MHD_Daemon' which manages 2297 this connection. 2298 2299 'MHD_CONNECTION_INFO_CONNECTION_FD' 2300 Returns the file descriptor (usually a TCP socket) associated 2301 with this connection (in the "connect-fd" member of the 2302 returned struct). Note that manipulating the descriptor 2303 directly can have problematic consequences (as in, break 2304 HTTP). Applications might use this access to manipulate TCP 2305 options, for example to set the "TCP-NODELAY" option for 2306 COMET-like applications. Note that MHD will set TCP-CORK 2307 after sending the HTTP header and clear it after finishing the 2308 footers automatically (if the platform supports it). As the 2309 connection callbacks are invoked in between, those might be 2310 used to set different values for TCP-CORK and TCP-NODELAY in 2311 the meantime. 2312 2313 'MHD_CONNECTION_INFO_SOCKET_CONTEXT' 2314 Returns the client-specific pointer to a 'void *' that was 2315 (possibly) set during a 'MHD_NotifyConnectionCallback' when 2316 the socket was first accepted. Note that this is NOT the same 2317 as the 'con_cls' argument of the 'MHD_AccessHandlerCallback'. 2318 The 'con_cls' is fresh for each HTTP request, while the 2319 'socket_context' is fresh for each socket. 2320 2321 2322File: libmicrohttpd.info, Node: microhttpd-option conn, Prev: microhttpd-info conn, Up: microhttpd-info 2323 232412.3 Setting custom options for an individual connection 2325======================================================== 2326 2327 -- Function: int MHD_set_connection_option (struct MHD_Connection 2328 *daemon, enum MHD_CONNECTION_OPTION option, ...) 2329 Set a custom option for the given connection. 2330 2331 CONNECTION 2332 the connection for which an option should be set or modified; 2333 2334 OPTION 2335 option to set 2336 2337 ... 2338 additional arguments for the option (depending on option) 2339 2340 Returns 'MHD_YES' on success, 'MHD_NO' for errors (i.e. option 2341 argument invalid or option unknown). 2342 2343 -- Enumeration: MHD_CONNECTION_OPTION 2344 Values of this enum are used to specify which option for a 2345 connection should be changed. 2346 2347 'MHD_CONNECTION_OPTION_TIMEOUT' 2348 Set a custom timeout for the given connection. Specified as 2349 the number of seconds, given as an 'unsigned int'. Use zero 2350 for no timeout. 2351 2352 2353File: libmicrohttpd.info, Node: microhttpd-util, Next: GNU-LGPL, Prev: microhttpd-info, Up: Top 2354 235513 Utility functions. 2356********************* 2357 2358* Menu: 2359 2360* microhttpd-util feature:: Test supported MHD features 2361* microhttpd-util unescape:: Unescape strings 2362 2363 2364File: libmicrohttpd.info, Node: microhttpd-util feature, Next: microhttpd-util unescape, Up: microhttpd-util 2365 236613.1 Testing for supported MHD features 2367======================================= 2368 2369 -- Enumeration: MHD_FEATURE 2370 Values of this enum are used to specify what information about a 2371 daemon is desired. 2372 'MHD_FEATURE_MESSAGES' 2373 Get whether messages are supported. If supported then in 2374 debug mode messages can be printed to stderr or to external 2375 logger. 2376 2377 'MHD_FEATURE_SSL' 2378 Get whether HTTPS is supported. If supported then flag 2379 MHD_USE_SSL and options MHD_OPTION_HTTPS_MEM_KEY, 2380 MHD_OPTION_HTTPS_MEM_CERT, MHD_OPTION_HTTPS_MEM_TRUST, 2381 MHD_OPTION_HTTPS_MEM_DHPARAMS, MHD_OPTION_HTTPS_CRED_TYPE, 2382 MHD_OPTION_HTTPS_PRIORITIES can be used. 2383 2384 'MHD_FEATURE_HTTPS_CERT_CALLBACK' 2385 Get whether option #MHD_OPTION_HTTPS_CERT_CALLBACK is 2386 supported. 2387 2388 'MHD_FEATURE_IPv6' 2389 Get whether IPv6 is supported. If supported then flag 2390 MHD_USE_IPv6 can be used. 2391 2392 'MHD_FEATURE_IPv6_ONLY' 2393 Get whether IPv6 without IPv4 is supported. If not supported 2394 then IPv4 is always enabled in IPv6 sockets and flag 2395 MHD_USE_DUAL_STACK if always used when MHD_USE_IPv6 is 2396 specified. 2397 2398 'MHD_FEATURE_POLL' 2399 Get whether 'poll()' is supported. If supported then flag 2400 MHD_USE_POLL can be used. 2401 2402 'MHD_FEATURE_EPOLL' 2403 Get whether 'epoll()' is supported. If supported then Flags 2404 MHD_USE_EPOLL_LINUX_ONLY and 2405 MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY can be used. 2406 2407 'MHD_FEATURE_SHUTDOWN_LISTEN_SOCKET' 2408 Get whether shutdown on listen socket to signal other threads 2409 is supported. If not supported flag MHD_USE_PIPE_FOR_SHUTDOWN 2410 is automatically forced. 2411 2412 'MHD_FEATURE_SOCKETPAIR' 2413 Get whether a 'socketpair()' is used internally instead of a 2414 'pipe()' to signal other threads. 2415 2416 'MHD_FEATURE_TCP_FASTOPEN' 2417 Get whether TCP Fast Open is supported. If supported then 2418 flag MHD_USE_TCP_FASTOPEN and option 2419 MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE can be used. 2420 2421 'MHD_FEATURE_BASIC_AUTH' 2422 Get whether HTTP Basic authorization is supported. If 2423 supported then functions 2424 'MHD_basic_auth_get_username_password()' and 2425 'MHD_queue_basic_auth_fail_response()' can be used. 2426 2427 'MHD_FEATURE_DIGEST_AUTH' 2428 Get whether HTTP Digest authorization is supported. If 2429 supported then options MHD_OPTION_DIGEST_AUTH_RANDOM, 2430 MHD_OPTION_NONCE_NC_SIZE and functions 2431 'MHD_digest_auth_check()', can be used. 2432 2433 'MHD_FEATURE_POSTPROCESSOR' 2434 Get whether postprocessor is supported. If supported then 2435 functions 'MHD_create_post_processor()', 'MHD_post_process()', 2436 'MHD_destroy_post_processor()' can be used. 2437 2438 -- Function: int MHD_is_feature_supported (enum MHD_FEATURE feature) 2439 Get information about supported MHD features. Indicate that MHD 2440 was compiled with or without support for particular feature. Some 2441 features require additional support by the kernel. However, kernel 2442 support is not checked by this function. 2443 2444 FEATURE 2445 type of requested information 2446 2447 Returns 'MHD_YES' if the feature is supported, and 'MHD_NO' if not. 2448 2449 2450File: libmicrohttpd.info, Node: microhttpd-util unescape, Prev: microhttpd-util feature, Up: microhttpd-util 2451 245213.2 Unescape strings 2453===================== 2454 2455 -- Function: size_t MHD_http_unescape (char *val) 2456 Process escape sequences ('%HH') Updates val in place; the result 2457 should be UTF-8 encoded and cannot be larger than the input. The 2458 result must also still be 0-terminated. 2459 2460 VAL 2461 value to unescape (modified in the process), must be a 2462 0-terminated UTF-8 string. 2463 2464 Returns length of the resulting val ('strlen(val)' may be shorter 2465 afterwards due to elimination of escape sequences). 2466 2467 2468File: libmicrohttpd.info, Node: GNU-LGPL, Next: GNU GPL with eCos Extension, Prev: microhttpd-util, Up: Top 2469 2470GNU-LGPL 2471******** 2472 2473 Version 2.1, February 1999 2474 2475 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 2476 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 2477 2478 Everyone is permitted to copy and distribute verbatim copies 2479 of this license document, but changing it is not allowed. 2480 2481 [This is the first released version of the Lesser GPL. It also counts 2482 as the successor of the GNU Library Public License, version 2, hence the 2483 version number 2.1.] 2484 2485Preamble 2486-------- 2487 2488The licenses for most software are designed to take away your freedom to 2489share and change it. By contrast, the GNU General Public Licenses are 2490intended to guarantee your freedom to share and change free software--to 2491make sure the software is free for all its users. 2492 2493 This license, the Lesser General Public License, applies to some 2494specially designated software--typically libraries--of the Free Software 2495Foundation and other authors who decide to use it. You can use it too, 2496but we suggest you first think carefully about whether this license or 2497the ordinary General Public License is the better strategy to use in any 2498particular case, based on the explanations below. 2499 2500 When we speak of free software, we are referring to freedom of use, 2501not price. Our General Public Licenses are designed to make sure that 2502you have the freedom to distribute copies of free software (and charge 2503for this service if you wish); that you receive source code or can get 2504it if you want it; that you can change the software and use pieces of it 2505in new free programs; and that you are informed that you can do these 2506things. 2507 2508 To protect your rights, we need to make restrictions that forbid 2509distributors to deny you these rights or to ask you to surrender these 2510rights. These restrictions translate to certain responsibilities for 2511you if you distribute copies of the library or if you modify it. 2512 2513 For example, if you distribute copies of the library, whether gratis 2514or for a fee, you must give the recipients all the rights that we gave 2515you. You must make sure that they, too, receive or can get the source 2516code. If you link other code with the library, you must provide 2517complete object files to the recipients, so that they can relink them 2518with the library after making changes to the library and recompiling it. 2519And you must show them these terms so they know their rights. 2520 2521 We protect your rights with a two-step method: (1) we copyright the 2522library, and (2) we offer you this license, which gives you legal 2523permission to copy, distribute and/or modify the library. 2524 2525 To protect each distributor, we want to make it very clear that there 2526is no warranty for the free library. Also, if the library is modified 2527by someone else and passed on, the recipients should know that what they 2528have is not the original version, so that the original author's 2529reputation will not be affected by problems that might be introduced by 2530others. 2531 2532 Finally, software patents pose a constant threat to the existence of 2533any free program. We wish to make sure that a company cannot 2534effectively restrict the users of a free program by obtaining a 2535restrictive license from a patent holder. Therefore, we insist that any 2536patent license obtained for a version of the library must be consistent 2537with the full freedom of use specified in this license. 2538 2539 Most GNU software, including some libraries, is covered by the 2540ordinary GNU General Public License. This license, the GNU Lesser 2541General Public License, applies to certain designated libraries, and is 2542quite different from the ordinary General Public License. We use this 2543license for certain libraries in order to permit linking those libraries 2544into non-free programs. 2545 2546 When a program is linked with a library, whether statically or using 2547a shared library, the combination of the two is legally speaking a 2548combined work, a derivative of the original library. The ordinary 2549General Public License therefore permits such linking only if the entire 2550combination fits its criteria of freedom. The Lesser General Public 2551License permits more lax criteria for linking other code with the 2552library. 2553 2554 We call this license the "Lesser" General Public License because it 2555does _Less_ to protect the user's freedom than the ordinary General 2556Public License. It also provides other free software developers Less of 2557an advantage over competing non-free programs. These disadvantages are 2558the reason we use the ordinary General Public License for many 2559libraries. However, the Lesser license provides advantages in certain 2560special circumstances. 2561 2562 For example, on rare occasions, there may be a special need to 2563encourage the widest possible use of a certain library, so that it 2564becomes a de-facto standard. To achieve this, non-free programs must be 2565allowed to use the library. A more frequent case is that a free library 2566does the same job as widely used non-free libraries. In this case, 2567there is little to gain by limiting the free library to free software 2568only, so we use the Lesser General Public License. 2569 2570 In other cases, permission to use a particular library in non-free 2571programs enables a greater number of people to use a large body of free 2572software. For example, permission to use the GNU C Library in non-free 2573programs enables many more people to use the whole GNU operating system, 2574as well as its variant, the GNU/Linux operating system. 2575 2576 Although the Lesser General Public License is Less protective of the 2577users' freedom, it does ensure that the user of a program that is linked 2578with the Library has the freedom and the wherewithal to run that program 2579using a modified version of the Library. 2580 2581 The precise terms and conditions for copying, distribution and 2582modification follow. Pay close attention to the difference between a 2583"work based on the library" and a "work that uses the library". The 2584former contains code derived from the library, whereas the latter must 2585be combined with the library in order to run. 2586 2587TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 2588--------------------------------------------------------------- 2589 2590 0. This License Agreement applies to any software library or other 2591 program which contains a notice placed by the copyright holder or 2592 other authorized party saying it may be distributed under the terms 2593 of this Lesser General Public License (also called "this License"). 2594 Each licensee is addressed as "you". 2595 2596 A "library" means a collection of software functions and/or data 2597 prepared so as to be conveniently linked with application programs 2598 (which use some of those functions and data) to form executables. 2599 2600 The "Library", below, refers to any such software library or work 2601 which has been distributed under these terms. A "work based on the 2602 Library" means either the Library or any derivative work under 2603 copyright law: that is to say, a work containing the Library or a 2604 portion of it, either verbatim or with modifications and/or 2605 translated straightforwardly into another language. (Hereinafter, 2606 translation is included without limitation in the term 2607 "modification".) 2608 2609 "Source code" for a work means the preferred form of the work for 2610 making modifications to it. For a library, complete source code 2611 means all the source code for all modules it contains, plus any 2612 associated interface definition files, plus the scripts used to 2613 control compilation and installation of the library. 2614 2615 Activities other than copying, distribution and modification are 2616 not covered by this License; they are outside its scope. The act 2617 of running a program using the Library is not restricted, and 2618 output from such a program is covered only if its contents 2619 constitute a work based on the Library (independent of the use of 2620 the Library in a tool for writing it). Whether that is true 2621 depends on what the Library does and what the program that uses the 2622 Library does. 2623 2624 1. You may copy and distribute verbatim copies of the Library's 2625 complete source code as you receive it, in any medium, provided 2626 that you conspicuously and appropriately publish on each copy an 2627 appropriate copyright notice and disclaimer of warranty; keep 2628 intact all the notices that refer to this License and to the 2629 absence of any warranty; and distribute a copy of this License 2630 along with the Library. 2631 2632 You may charge a fee for the physical act of transferring a copy, 2633 and you may at your option offer warranty protection in exchange 2634 for a fee. 2635 2636 2. You may modify your copy or copies of the Library or any portion of 2637 it, thus forming a work based on the Library, and copy and 2638 distribute such modifications or work under the terms of Section 1 2639 above, provided that you also meet all of these conditions: 2640 2641 a. The modified work must itself be a software library. 2642 2643 b. You must cause the files modified to carry prominent notices 2644 stating that you changed the files and the date of any change. 2645 2646 c. You must cause the whole of the work to be licensed at no 2647 charge to all third parties under the terms of this License. 2648 2649 d. If a facility in the modified Library refers to a function or 2650 a table of data to be supplied by an application program that 2651 uses the facility, other than as an argument passed when the 2652 facility is invoked, then you must make a good faith effort to 2653 ensure that, in the event an application does not supply such 2654 function or table, the facility still operates, and performs 2655 whatever part of its purpose remains meaningful. 2656 2657 (For example, a function in a library to compute square roots 2658 has a purpose that is entirely well-defined independent of the 2659 application. Therefore, Subsection 2d requires that any 2660 application-supplied function or table used by this function 2661 must be optional: if the application does not supply it, the 2662 square root function must still compute square roots.) 2663 2664 These requirements apply to the modified work as a whole. If 2665 identifiable sections of that work are not derived from the 2666 Library, and can be reasonably considered independent and separate 2667 works in themselves, then this License, and its terms, do not apply 2668 to those sections when you distribute them as separate works. But 2669 when you distribute the same sections as part of a whole which is a 2670 work based on the Library, the distribution of the whole must be on 2671 the terms of this License, whose permissions for other licensees 2672 extend to the entire whole, and thus to each and every part 2673 regardless of who wrote it. 2674 2675 Thus, it is not the intent of this section to claim rights or 2676 contest your rights to work written entirely by you; rather, the 2677 intent is to exercise the right to control the distribution of 2678 derivative or collective works based on the Library. 2679 2680 In addition, mere aggregation of another work not based on the 2681 Library with the Library (or with a work based on the Library) on a 2682 volume of a storage or distribution medium does not bring the other 2683 work under the scope of this License. 2684 2685 3. You may opt to apply the terms of the ordinary GNU General Public 2686 License instead of this License to a given copy of the Library. To 2687 do this, you must alter all the notices that refer to this License, 2688 so that they refer to the ordinary GNU General Public License, 2689 version 2, instead of to this License. (If a newer version than 2690 version 2 of the ordinary GNU General Public License has appeared, 2691 then you can specify that version instead if you wish.) Do not 2692 make any other change in these notices. 2693 2694 Once this change is made in a given copy, it is irreversible for 2695 that copy, so the ordinary GNU General Public License applies to 2696 all subsequent copies and derivative works made from that copy. 2697 2698 This option is useful when you wish to copy part of the code of the 2699 Library into a program that is not a library. 2700 2701 4. You may copy and distribute the Library (or a portion or derivative 2702 of it, under Section 2) in object code or executable form under the 2703 terms of Sections 1 and 2 above provided that you accompany it with 2704 the complete corresponding machine-readable source code, which must 2705 be distributed under the terms of Sections 1 and 2 above on a 2706 medium customarily used for software interchange. 2707 2708 If distribution of object code is made by offering access to copy 2709 from a designated place, then offering equivalent access to copy 2710 the source code from the same place satisfies the requirement to 2711 distribute the source code, even though third parties are not 2712 compelled to copy the source along with the object code. 2713 2714 5. A program that contains no derivative of any portion of the 2715 Library, but is designed to work with the Library by being compiled 2716 or linked with it, is called a "work that uses the Library". Such 2717 a work, in isolation, is not a derivative work of the Library, and 2718 therefore falls outside the scope of this License. 2719 2720 However, linking a "work that uses the Library" with the Library 2721 creates an executable that is a derivative of the Library (because 2722 it contains portions of the Library), rather than a "work that uses 2723 the library". The executable is therefore covered by this License. 2724 Section 6 states terms for distribution of such executables. 2725 2726 When a "work that uses the Library" uses material from a header 2727 file that is part of the Library, the object code for the work may 2728 be a derivative work of the Library even though the source code is 2729 not. Whether this is true is especially significant if the work 2730 can be linked without the Library, or if the work is itself a 2731 library. The threshold for this to be true is not precisely 2732 defined by law. 2733 2734 If such an object file uses only numerical parameters, data 2735 structure layouts and accessors, and small macros and small inline 2736 functions (ten lines or less in length), then the use of the object 2737 file is unrestricted, regardless of whether it is legally a 2738 derivative work. (Executables containing this object code plus 2739 portions of the Library will still fall under Section 6.) 2740 2741 Otherwise, if the work is a derivative of the Library, you may 2742 distribute the object code for the work under the terms of Section 2743 6. Any executables containing that work also fall under Section 6, 2744 whether or not they are linked directly with the Library itself. 2745 2746 6. As an exception to the Sections above, you may also combine or link 2747 a "work that uses the Library" with the Library to produce a work 2748 containing portions of the Library, and distribute that work under 2749 terms of your choice, provided that the terms permit modification 2750 of the work for the customer's own use and reverse engineering for 2751 debugging such modifications. 2752 2753 You must give prominent notice with each copy of the work that the 2754 Library is used in it and that the Library and its use are covered 2755 by this License. You must supply a copy of this License. If the 2756 work during execution displays copyright notices, you must include 2757 the copyright notice for the Library among them, as well as a 2758 reference directing the user to the copy of this License. Also, 2759 you must do one of these things: 2760 2761 a. Accompany the work with the complete corresponding 2762 machine-readable source code for the Library including 2763 whatever changes were used in the work (which must be 2764 distributed under Sections 1 and 2 above); and, if the work is 2765 an executable linked with the Library, with the complete 2766 machine-readable "work that uses the Library", as object code 2767 and/or source code, so that the user can modify the Library 2768 and then relink to produce a modified executable containing 2769 the modified Library. (It is understood that the user who 2770 changes the contents of definitions files in the Library will 2771 not necessarily be able to recompile the application to use 2772 the modified definitions.) 2773 2774 b. Use a suitable shared library mechanism for linking with the 2775 Library. A suitable mechanism is one that (1) uses at run 2776 time a copy of the library already present on the user's 2777 computer system, rather than copying library functions into 2778 the executable, and (2) will operate properly with a modified 2779 version of the library, if the user installs one, as long as 2780 the modified version is interface-compatible with the version 2781 that the work was made with. 2782 2783 c. Accompany the work with a written offer, valid for at least 2784 three years, to give the same user the materials specified in 2785 Subsection 6a, above, for a charge no more than the cost of 2786 performing this distribution. 2787 2788 d. If distribution of the work is made by offering access to copy 2789 from a designated place, offer equivalent access to copy the 2790 above specified materials from the same place. 2791 2792 e. Verify that the user has already received a copy of these 2793 materials or that you have already sent this user a copy. 2794 2795 For an executable, the required form of the "work that uses the 2796 Library" must include any data and utility programs needed for 2797 reproducing the executable from it. However, as a special 2798 exception, the materials to be distributed need not include 2799 anything that is normally distributed (in either source or binary 2800 form) with the major components (compiler, kernel, and so on) of 2801 the operating system on which the executable runs, unless that 2802 component itself accompanies the executable. 2803 2804 It may happen that this requirement contradicts the license 2805 restrictions of other proprietary libraries that do not normally 2806 accompany the operating system. Such a contradiction means you 2807 cannot use both them and the Library together in an executable that 2808 you distribute. 2809 2810 7. You may place library facilities that are a work based on the 2811 Library side-by-side in a single library together with other 2812 library facilities not covered by this License, and distribute such 2813 a combined library, provided that the separate distribution of the 2814 work based on the Library and of the other library facilities is 2815 otherwise permitted, and provided that you do these two things: 2816 2817 a. Accompany the combined library with a copy of the same work 2818 based on the Library, uncombined with any other library 2819 facilities. This must be distributed under the terms of the 2820 Sections above. 2821 2822 b. Give prominent notice with the combined library of the fact 2823 that part of it is a work based on the Library, and explaining 2824 where to find the accompanying uncombined form of the same 2825 work. 2826 2827 8. You may not copy, modify, sublicense, link with, or distribute the 2828 Library except as expressly provided under this License. Any 2829 attempt otherwise to copy, modify, sublicense, link with, or 2830 distribute the Library is void, and will automatically terminate 2831 your rights under this License. However, parties who have received 2832 copies, or rights, from you under this License will not have their 2833 licenses terminated so long as such parties remain in full 2834 compliance. 2835 2836 9. You are not required to accept this License, since you have not 2837 signed it. However, nothing else grants you permission to modify 2838 or distribute the Library or its derivative works. These actions 2839 are prohibited by law if you do not accept this License. 2840 Therefore, by modifying or distributing the Library (or any work 2841 based on the Library), you indicate your acceptance of this License 2842 to do so, and all its terms and conditions for copying, 2843 distributing or modifying the Library or works based on it. 2844 2845 10. Each time you redistribute the Library (or any work based on the 2846 Library), the recipient automatically receives a license from the 2847 original licensor to copy, distribute, link with or modify the 2848 Library subject to these terms and conditions. You may not impose 2849 any further restrictions on the recipients' exercise of the rights 2850 granted herein. You are not responsible for enforcing compliance 2851 by third parties with this License. 2852 2853 11. If, as a consequence of a court judgment or allegation of patent 2854 infringement or for any other reason (not limited to patent 2855 issues), conditions are imposed on you (whether by court order, 2856 agreement or otherwise) that contradict the conditions of this 2857 License, they do not excuse you from the conditions of this 2858 License. If you cannot distribute so as to satisfy simultaneously 2859 your obligations under this License and any other pertinent 2860 obligations, then as a consequence you may not distribute the 2861 Library at all. For example, if a patent license would not permit 2862 royalty-free redistribution of the Library by all those who receive 2863 copies directly or indirectly through you, then the only way you 2864 could satisfy both it and this License would be to refrain entirely 2865 from distribution of the Library. 2866 2867 If any portion of this section is held invalid or unenforceable 2868 under any particular circumstance, the balance of the section is 2869 intended to apply, and the section as a whole is intended to apply 2870 in other circumstances. 2871 2872 It is not the purpose of this section to induce you to infringe any 2873 patents or other property right claims or to contest validity of 2874 any such claims; this section has the sole purpose of protecting 2875 the integrity of the free software distribution system which is 2876 implemented by public license practices. Many people have made 2877 generous contributions to the wide range of software distributed 2878 through that system in reliance on consistent application of that 2879 system; it is up to the author/donor to decide if he or she is 2880 willing to distribute software through any other system and a 2881 licensee cannot impose that choice. 2882 2883 This section is intended to make thoroughly clear what is believed 2884 to be a consequence of the rest of this License. 2885 2886 12. If the distribution and/or use of the Library is restricted in 2887 certain countries either by patents or by copyrighted interfaces, 2888 the original copyright holder who places the Library under this 2889 License may add an explicit geographical distribution limitation 2890 excluding those countries, so that distribution is permitted only 2891 in or among countries not thus excluded. In such case, this 2892 License incorporates the limitation as if written in the body of 2893 this License. 2894 2895 13. The Free Software Foundation may publish revised and/or new 2896 versions of the Lesser General Public License from time to time. 2897 Such new versions will be similar in spirit to the present version, 2898 but may differ in detail to address new problems or concerns. 2899 2900 Each version is given a distinguishing version number. If the 2901 Library specifies a version number of this License which applies to 2902 it and "any later version", you have the option of following the 2903 terms and conditions either of that version or of any later version 2904 published by the Free Software Foundation. If the Library does not 2905 specify a license version number, you may choose any version ever 2906 published by the Free Software Foundation. 2907 2908 14. If you wish to incorporate parts of the Library into other free 2909 programs whose distribution conditions are incompatible with these, 2910 write to the author to ask for permission. For software which is 2911 copyrighted by the Free Software Foundation, write to the Free 2912 Software Foundation; we sometimes make exceptions for this. Our 2913 decision will be guided by the two goals of preserving the free 2914 status of all derivatives of our free software and of promoting the 2915 sharing and reuse of software generally. 2916 2917 NO WARRANTY 2918 2919 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO 2920 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE 2921 LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS 2922 AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY 2923 OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT 2924 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 2925 FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND 2926 PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE 2927 DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR 2928 OR CORRECTION. 2929 2930 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 2931 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY 2932 MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE 2933 LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, 2934 INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR 2935 INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF 2936 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU 2937 OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY 2938 OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN 2939 ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 2940 2941END OF TERMS AND CONDITIONS 2942--------------------------- 2943 2944How to Apply These Terms to Your New Libraries 2945---------------------------------------------- 2946 2947If you develop a new library, and you want it to be of the greatest 2948possible use to the public, we recommend making it free software that 2949everyone can redistribute and change. You can do so by permitting 2950redistribution under these terms (or, alternatively, under the terms of 2951the ordinary General Public License). 2952 2953 To apply these terms, attach the following notices to the library. 2954It is safest to attach them to the start of each source file to most 2955effectively convey the exclusion of warranty; and each file should have 2956at least the "copyright" line and a pointer to where the full notice is 2957found. 2958 2959 ONE LINE TO GIVE THE LIBRARY'S NAME AND AN IDEA OF WHAT IT DOES. 2960 Copyright (C) YEAR NAME OF AUTHOR 2961 2962 This library is free software; you can redistribute it and/or modify it 2963 under the terms of the GNU Lesser General Public License as published by 2964 the Free Software Foundation; either version 2.1 of the License, or (at 2965 your option) any later version. 2966 2967 This library is distributed in the hope that it will be useful, but 2968 WITHOUT ANY WARRANTY; without even the implied warranty of 2969 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 2970 Lesser General Public License for more details. 2971 2972 You should have received a copy of the GNU Lesser General Public 2973 License along with this library; if not, write to the Free Software 2974 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 2975 USA. 2976 2977 Also add information on how to contact you by electronic and paper 2978mail. 2979 2980 You should also get your employer (if you work as a programmer) or 2981your school, if any, to sign a "copyright disclaimer" for the library, 2982if necessary. Here is a sample; alter the names: 2983 2984 Yoyodyne, Inc., hereby disclaims all copyright interest in the library 2985 `Frob' (a library for tweaking knobs) written by James Random Hacker. 2986 2987 SIGNATURE OF TY COON, 1 April 1990 2988 Ty Coon, President of Vice 2989 2990 That's all there is to it! 2991 2992 2993File: libmicrohttpd.info, Node: GNU GPL with eCos Extension, Next: GNU-FDL, Prev: GNU-LGPL, Up: Top 2994 2995GNU GPL with eCos Extension 2996*************************** 2997 2998 Version 2, June 1991 2999 3000 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 3001 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 3002 3003 Everyone is permitted to copy and distribute verbatim copies 3004 of this license document, but changing it is not allowed. 3005 3006Preamble 3007-------- 3008 3009The licenses for most software are designed to take away your freedom to 3010share and change it. By contrast, the GNU General Public License is 3011intended to guarantee your freedom to share and change free software--to 3012make sure the software is free for all its users. This General Public 3013License applies to most of the Free Software Foundation's software and 3014to any other program whose authors commit to using it. (Some other Free 3015Software Foundation software is covered by the GNU Library General 3016Public License instead.) You can apply it to your programs, too. 3017 3018 When we speak of free software, we are referring to freedom, not 3019price. Our General Public Licenses are designed to make sure that you 3020have the freedom to distribute copies of free software (and charge for 3021this service if you wish), that you receive source code or can get it if 3022you want it, that you can change the software or use pieces of it in new 3023free programs; and that you know you can do these things. 3024 3025 To protect your rights, we need to make restrictions that forbid 3026anyone to deny you these rights or to ask you to surrender the rights. 3027These restrictions translate to certain responsibilities for you if you 3028distribute copies of the software, or if you modify it. 3029 3030 For example, if you distribute copies of such a program, whether 3031gratis or for a fee, you must give the recipients all the rights that 3032you have. You must make sure that they, too, receive or can get the 3033source code. And you must show them these terms so they know their 3034rights. 3035 3036 We protect your rights with two steps: (1) copyright the software, 3037and (2) offer you this license which gives you legal permission to copy, 3038distribute and/or modify the software. 3039 3040 Also, for each author's protection and ours, we want to make certain 3041that everyone understands that there is no warranty for this free 3042software. If the software is modified by someone else and passed on, we 3043want its recipients to know that what they have is not the original, so 3044that any problems introduced by others will not reflect on the original 3045authors' reputations. 3046 3047 Finally, any free program is threatened constantly by software 3048patents. We wish to avoid the danger that redistributors of a free 3049program will individually obtain patent licenses, in effect making the 3050program proprietary. To prevent this, we have made it clear that any 3051patent must be licensed for everyone's free use or not licensed at all. 3052 3053 The precise terms and conditions for copying, distribution and 3054modification follow. 3055 3056 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 3057 3058 1. This License applies to any program or other work which contains a 3059 notice placed by the copyright holder saying it may be distributed 3060 under the terms of this General Public License. The "Program", 3061 below, refers to any such program or work, and a "work based on the 3062 Program" means either the Program or any derivative work under 3063 copyright law: that is to say, a work containing the Program or a 3064 portion of it, either verbatim or with modifications and/or 3065 translated into another language. (Hereinafter, translation is 3066 included without limitation in the term "modification".) Each 3067 licensee is addressed as "you". 3068 3069 Activities other than copying, distribution and modification are 3070 not covered by this License; they are outside its scope. The act 3071 of running the Program is not restricted, and the output from the 3072 Program is covered only if its contents constitute a work based on 3073 the Program (independent of having been made by running the 3074 Program). Whether that is true depends on what the Program does. 3075 3076 2. You may copy and distribute verbatim copies of the Program's source 3077 code as you receive it, in any medium, provided that you 3078 conspicuously and appropriately publish on each copy an appropriate 3079 copyright notice and disclaimer of warranty; keep intact all the 3080 notices that refer to this License and to the absence of any 3081 warranty; and give any other recipients of the Program a copy of 3082 this License along with the Program. 3083 3084 You may charge a fee for the physical act of transferring a copy, 3085 and you may at your option offer warranty protection in exchange 3086 for a fee. 3087 3088 3. You may modify your copy or copies of the Program or any portion of 3089 it, thus forming a work based on the Program, and copy and 3090 distribute such modifications or work under the terms of Section 1 3091 above, provided that you also meet all of these conditions: 3092 3093 a. You must cause the modified files to carry prominent notices 3094 stating that you changed the files and the date of any change. 3095 3096 b. You must cause any work that you distribute or publish, that 3097 in whole or in part contains or is derived from the Program or 3098 any part thereof, to be licensed as a whole at no charge to 3099 all third parties under the terms of this License. 3100 3101 c. If the modified program normally reads commands interactively 3102 when run, you must cause it, when started running for such 3103 interactive use in the most ordinary way, to print or display 3104 an announcement including an appropriate copyright notice and 3105 a notice that there is no warranty (or else, saying that you 3106 provide a warranty) and that users may redistribute the 3107 program under these conditions, and telling the user how to 3108 view a copy of this License. (Exception: if the Program 3109 itself is interactive but does not normally print such an 3110 announcement, your work based on the Program is not required 3111 to print an announcement.) 3112 3113 These requirements apply to the modified work as a whole. If 3114 identifiable sections of that work are not derived from the 3115 Program, and can be reasonably considered independent and separate 3116 works in themselves, then this License, and its terms, do not apply 3117 to those sections when you distribute them as separate works. But 3118 when you distribute the same sections as part of a whole which is a 3119 work based on the Program, the distribution of the whole must be on 3120 the terms of this License, whose permissions for other licensees 3121 extend to the entire whole, and thus to each and every part 3122 regardless of who wrote it. 3123 3124 Thus, it is not the intent of this section to claim rights or 3125 contest your rights to work written entirely by you; rather, the 3126 intent is to exercise the right to control the distribution of 3127 derivative or collective works based on the Program. 3128 3129 In addition, mere aggregation of another work not based on the 3130 Program with the Program (or with a work based on the Program) on a 3131 volume of a storage or distribution medium does not bring the other 3132 work under the scope of this License. 3133 3134 4. You may copy and distribute the Program (or a work based on it, 3135 under Section 2) in object code or executable form under the terms 3136 of Sections 1 and 2 above provided that you also do one of the 3137 following: 3138 3139 a. Accompany it with the complete corresponding machine-readable 3140 source code, which must be distributed under the terms of 3141 Sections 1 and 2 above on a medium customarily used for 3142 software interchange; or, 3143 3144 b. Accompany it with a written offer, valid for at least three 3145 years, to give any third party, for a charge no more than your 3146 cost of physically performing source distribution, a complete 3147 machine-readable copy of the corresponding source code, to be 3148 distributed under the terms of Sections 1 and 2 above on a 3149 medium customarily used for software interchange; or, 3150 3151 c. Accompany it with the information you received as to the offer 3152 to distribute corresponding source code. (This alternative is 3153 allowed only for noncommercial distribution and only if you 3154 received the program in object code or executable form with 3155 such an offer, in accord with Subsection b above.) 3156 3157 The source code for a work means the preferred form of the work for 3158 making modifications to it. For an executable work, complete 3159 source code means all the source code for all modules it contains, 3160 plus any associated interface definition files, plus the scripts 3161 used to control compilation and installation of the executable. 3162 However, as a special exception, the source code distributed need 3163 not include anything that is normally distributed (in either source 3164 or binary form) with the major components (compiler, kernel, and so 3165 on) of the operating system on which the executable runs, unless 3166 that component itself accompanies the executable. 3167 3168 If distribution of executable or object code is made by offering 3169 access to copy from a designated place, then offering equivalent 3170 access to copy the source code from the same place counts as 3171 distribution of the source code, even though third parties are not 3172 compelled to copy the source along with the object code. 3173 3174 5. You may not copy, modify, sublicense, or distribute the Program 3175 except as expressly provided under this License. Any attempt 3176 otherwise to copy, modify, sublicense or distribute the Program is 3177 void, and will automatically terminate your rights under this 3178 License. However, parties who have received copies, or rights, 3179 from you under this License will not have their licenses terminated 3180 so long as such parties remain in full compliance. 3181 3182 6. You are not required to accept this License, since you have not 3183 signed it. However, nothing else grants you permission to modify 3184 or distribute the Program or its derivative works. These actions 3185 are prohibited by law if you do not accept this License. 3186 Therefore, by modifying or distributing the Program (or any work 3187 based on the Program), you indicate your acceptance of this License 3188 to do so, and all its terms and conditions for copying, 3189 distributing or modifying the Program or works based on it. 3190 3191 7. Each time you redistribute the Program (or any work based on the 3192 Program), the recipient automatically receives a license from the 3193 original licensor to copy, distribute or modify the Program subject 3194 to these terms and conditions. You may not impose any further 3195 restrictions on the recipients' exercise of the rights granted 3196 herein. You are not responsible for enforcing compliance by third 3197 parties to this License. 3198 3199 8. If, as a consequence of a court judgment or allegation of patent 3200 infringement or for any other reason (not limited to patent 3201 issues), conditions are imposed on you (whether by court order, 3202 agreement or otherwise) that contradict the conditions of this 3203 License, they do not excuse you from the conditions of this 3204 License. If you cannot distribute so as to satisfy simultaneously 3205 your obligations under this License and any other pertinent 3206 obligations, then as a consequence you may not distribute the 3207 Program at all. For example, if a patent license would not permit 3208 royalty-free redistribution of the Program by all those who receive 3209 copies directly or indirectly through you, then the only way you 3210 could satisfy both it and this License would be to refrain entirely 3211 from distribution of the Program. 3212 3213 If any portion of this section is held invalid or unenforceable 3214 under any particular circumstance, the balance of the section is 3215 intended to apply and the section as a whole is intended to apply 3216 in other circumstances. 3217 3218 It is not the purpose of this section to induce you to infringe any 3219 patents or other property right claims or to contest validity of 3220 any such claims; this section has the sole purpose of protecting 3221 the integrity of the free software distribution system, which is 3222 implemented by public license practices. Many people have made 3223 generous contributions to the wide range of software distributed 3224 through that system in reliance on consistent application of that 3225 system; it is up to the author/donor to decide if he or she is 3226 willing to distribute software through any other system and a 3227 licensee cannot impose that choice. 3228 3229 This section is intended to make thoroughly clear what is believed 3230 to be a consequence of the rest of this License. 3231 3232 9. If the distribution and/or use of the Program is restricted in 3233 certain countries either by patents or by copyrighted interfaces, 3234 the original copyright holder who places the Program under this 3235 License may add an explicit geographical distribution limitation 3236 excluding those countries, so that distribution is permitted only 3237 in or among countries not thus excluded. In such case, this 3238 License incorporates the limitation as if written in the body of 3239 this License. 3240 3241 10. The Free Software Foundation may publish revised and/or new 3242 versions of the General Public License from time to time. Such new 3243 versions will be similar in spirit to the present version, but may 3244 differ in detail to address new problems or concerns. 3245 3246 Each version is given a distinguishing version number. If the 3247 Program specifies a version number of this License which applies to 3248 it and "any later version", you have the option of following the 3249 terms and conditions either of that version or of any later version 3250 published by the Free Software Foundation. If the Program does not 3251 specify a version number of this License, you may choose any 3252 version ever published by the Free Software Foundation. 3253 3254 11. If you wish to incorporate parts of the Program into other free 3255 programs whose distribution conditions are different, write to the 3256 author to ask for permission. For software which is copyrighted by 3257 the Free Software Foundation, write to the Free Software 3258 Foundation; we sometimes make exceptions for this. Our decision 3259 will be guided by the two goals of preserving the free status of 3260 all derivatives of our free software and of promoting the sharing 3261 and reuse of software generally. 3262 3263 NO WARRANTY 3264 3265 12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO 3266 WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE 3267 LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS 3268 AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 3269 OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT 3270 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 3271 FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND 3272 PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE 3273 DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR 3274 OR CORRECTION. 3275 3276 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 3277 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY 3278 MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE 3279 LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, 3280 INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR 3281 INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 3282 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU 3283 OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY 3284 OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN 3285 ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 3286 3287 ECOS EXTENSION 3288 3289 14. As a special exception, if other files instantiate templates or 3290 use macros or inline functions from this file, or you compile this 3291 file and link it with other works to produce a work based on this 3292 file, this file does not by itself cause the resulting work to be 3293 covered by the GNU General Public License. However the source code 3294 for this file must still be made available in accordance with 3295 section (3) of the GNU General Public License v2. 3296 3297 This exception does not invalidate any other reasons why a work 3298 based on this file might be covered by the GNU General Public 3299 License. 3300 3301END OF TERMS AND CONDITIONS 3302--------------------------- 3303 3304How to Apply These Terms to Your New Programs 3305============================================= 3306 3307If you develop a new program, and you want it to be of the greatest 3308possible use to the public, the best way to achieve this is to make it 3309free software which everyone can redistribute and change under these 3310terms. 3311 3312 To do so, attach the following notices to the program. It is safest 3313to attach them to the start of each source file to most effectively 3314convey the exclusion of warranty; and each file should have at least the 3315"copyright" line and a pointer to where the full notice is found. 3316 3317 ONE LINE TO GIVE THE PROGRAM'S NAME AND AN IDEA OF WHAT IT DOES. 3318 Copyright (C) 19YY NAME OF AUTHOR 3319 3320 This program is free software; you can redistribute it and/or 3321 modify it under the terms of the GNU General Public License 3322 as published by the Free Software Foundation; either version 2 3323 of the License, or (at your option) any later version. 3324 3325 This program is distributed in the hope that it will be useful, 3326 but WITHOUT ANY WARRANTY; without even the implied warranty of 3327 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 3328 GNU General Public License for more details. 3329 3330 You should have received a copy of the GNU General Public License along 3331 with this program; if not, write to the Free Software Foundation, Inc., 3332 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. 3333 3334 Also add information on how to contact you by electronic and paper 3335mail. 3336 3337 If the program is interactive, make it output a short notice like 3338this when it starts in an interactive mode: 3339 3340 Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR 3341 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details 3342 type `show w'. This is free software, and you are welcome 3343 to redistribute it under certain conditions; type `show c' 3344 for details. 3345 3346 The hypothetical commands 'show w' and 'show c' should show the 3347appropriate parts of the General Public License. Of course, the 3348commands you use may be called something other than 'show w' and 'show 3349c'; they could even be mouse-clicks or menu items--whatever suits your 3350program. 3351 3352 You should also get your employer (if you work as a programmer) or 3353your school, if any, to sign a "copyright disclaimer" for the program, 3354if necessary. Here is a sample; alter the names: 3355 3356 Yoyodyne, Inc., hereby disclaims all copyright 3357 interest in the program `Gnomovision' 3358 (which makes passes at compilers) written 3359 by James Hacker. 3360 3361 SIGNATURE OF TY COON, 1 April 1989 3362 Ty Coon, President of Vice 3363 3364 This General Public License does not permit incorporating your 3365program into proprietary programs. If your program is a subroutine 3366library, you may consider it more useful to permit linking proprietary 3367applications with the library. If this is what you want to do, use the 3368GNU Library General Public License instead of this License. 3369 3370 3371File: libmicrohttpd.info, Node: GNU-FDL, Next: Concept Index, Prev: GNU GPL with eCos Extension, Up: Top 3372 3373GNU-FDL 3374******* 3375 3376 Version 1.3, 3 November 2008 3377 3378 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 3379 <http://fsf.org/> 3380 3381 Everyone is permitted to copy and distribute verbatim copies 3382 of this license document, but changing it is not allowed. 3383 3384 0. PREAMBLE 3385 3386 The purpose of this License is to make a manual, textbook, or other 3387 functional and useful document "free" in the sense of freedom: to 3388 assure everyone the effective freedom to copy and redistribute it, 3389 with or without modifying it, either commercially or 3390 noncommercially. Secondarily, this License preserves for the 3391 author and publisher a way to get credit for their work, while not 3392 being considered responsible for modifications made by others. 3393 3394 This License is a kind of "copyleft", which means that derivative 3395 works of the document must themselves be free in the same sense. 3396 It complements the GNU General Public License, which is a copyleft 3397 license designed for free software. 3398 3399 We have designed this License in order to use it for manuals for 3400 free software, because free software needs free documentation: a 3401 free program should come with manuals providing the same freedoms 3402 that the software does. But this License is not limited to 3403 software manuals; it can be used for any textual work, regardless 3404 of subject matter or whether it is published as a printed book. We 3405 recommend this License principally for works whose purpose is 3406 instruction or reference. 3407 3408 1. APPLICABILITY AND DEFINITIONS 3409 3410 This License applies to any manual or other work, in any medium, 3411 that contains a notice placed by the copyright holder saying it can 3412 be distributed under the terms of this License. Such a notice 3413 grants a world-wide, royalty-free license, unlimited in duration, 3414 to use that work under the conditions stated herein. The 3415 "Document", below, refers to any such manual or work. Any member 3416 of the public is a licensee, and is addressed as "you". You accept 3417 the license if you copy, modify or distribute the work in a way 3418 requiring permission under copyright law. 3419 3420 A "Modified Version" of the Document means any work containing the 3421 Document or a portion of it, either copied verbatim, or with 3422 modifications and/or translated into another language. 3423 3424 A "Secondary Section" is a named appendix or a front-matter section 3425 of the Document that deals exclusively with the relationship of the 3426 publishers or authors of the Document to the Document's overall 3427 subject (or to related matters) and contains nothing that could 3428 fall directly within that overall subject. (Thus, if the Document 3429 is in part a textbook of mathematics, a Secondary Section may not 3430 explain any mathematics.) The relationship could be a matter of 3431 historical connection with the subject or with related matters, or 3432 of legal, commercial, philosophical, ethical or political position 3433 regarding them. 3434 3435 The "Invariant Sections" are certain Secondary Sections whose 3436 titles are designated, as being those of Invariant Sections, in the 3437 notice that says that the Document is released under this License. 3438 If a section does not fit the above definition of Secondary then it 3439 is not allowed to be designated as Invariant. The Document may 3440 contain zero Invariant Sections. If the Document does not identify 3441 any Invariant Sections then there are none. 3442 3443 The "Cover Texts" are certain short passages of text that are 3444 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 3445 that says that the Document is released under this License. A 3446 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 3447 be at most 25 words. 3448 3449 A "Transparent" copy of the Document means a machine-readable copy, 3450 represented in a format whose specification is available to the 3451 general public, that is suitable for revising the document 3452 straightforwardly with generic text editors or (for images composed 3453 of pixels) generic paint programs or (for drawings) some widely 3454 available drawing editor, and that is suitable for input to text 3455 formatters or for automatic translation to a variety of formats 3456 suitable for input to text formatters. A copy made in an otherwise 3457 Transparent file format whose markup, or absence of markup, has 3458 been arranged to thwart or discourage subsequent modification by 3459 readers is not Transparent. An image format is not Transparent if 3460 used for any substantial amount of text. A copy that is not 3461 "Transparent" is called "Opaque". 3462 3463 Examples of suitable formats for Transparent copies include plain 3464 ASCII without markup, Texinfo input format, LaTeX input format, 3465 SGML or XML using a publicly available DTD, and standard-conforming 3466 simple HTML, PostScript or PDF designed for human modification. 3467 Examples of transparent image formats include PNG, XCF and JPG. 3468 Opaque formats include proprietary formats that can be read and 3469 edited only by proprietary word processors, SGML or XML for which 3470 the DTD and/or processing tools are not generally available, and 3471 the machine-generated HTML, PostScript or PDF produced by some word 3472 processors for output purposes only. 3473 3474 The "Title Page" means, for a printed book, the title page itself, 3475 plus such following pages as are needed to hold, legibly, the 3476 material this License requires to appear in the title page. For 3477 works in formats which do not have any title page as such, "Title 3478 Page" means the text near the most prominent appearance of the 3479 work's title, preceding the beginning of the body of the text. 3480 3481 The "publisher" means any person or entity that distributes copies 3482 of the Document to the public. 3483 3484 A section "Entitled XYZ" means a named subunit of the Document 3485 whose title either is precisely XYZ or contains XYZ in parentheses 3486 following text that translates XYZ in another language. (Here XYZ 3487 stands for a specific section name mentioned below, such as 3488 "Acknowledgements", "Dedications", "Endorsements", or "History".) 3489 To "Preserve the Title" of such a section when you modify the 3490 Document means that it remains a section "Entitled XYZ" according 3491 to this definition. 3492 3493 The Document may include Warranty Disclaimers next to the notice 3494 which states that this License applies to the Document. These 3495 Warranty Disclaimers are considered to be included by reference in 3496 this License, but only as regards disclaiming warranties: any other 3497 implication that these Warranty Disclaimers may have is void and 3498 has no effect on the meaning of this License. 3499 3500 2. VERBATIM COPYING 3501 3502 You may copy and distribute the Document in any medium, either 3503 commercially or noncommercially, provided that this License, the 3504 copyright notices, and the license notice saying this License 3505 applies to the Document are reproduced in all copies, and that you 3506 add no other conditions whatsoever to those of this License. You 3507 may not use technical measures to obstruct or control the reading 3508 or further copying of the copies you make or distribute. However, 3509 you may accept compensation in exchange for copies. If you 3510 distribute a large enough number of copies you must also follow the 3511 conditions in section 3. 3512 3513 You may also lend copies, under the same conditions stated above, 3514 and you may publicly display copies. 3515 3516 3. COPYING IN QUANTITY 3517 3518 If you publish printed copies (or copies in media that commonly 3519 have printed covers) of the Document, numbering more than 100, and 3520 the Document's license notice requires Cover Texts, you must 3521 enclose the copies in covers that carry, clearly and legibly, all 3522 these Cover Texts: Front-Cover Texts on the front cover, and 3523 Back-Cover Texts on the back cover. Both covers must also clearly 3524 and legibly identify you as the publisher of these copies. The 3525 front cover must present the full title with all words of the title 3526 equally prominent and visible. You may add other material on the 3527 covers in addition. Copying with changes limited to the covers, as 3528 long as they preserve the title of the Document and satisfy these 3529 conditions, can be treated as verbatim copying in other respects. 3530 3531 If the required texts for either cover are too voluminous to fit 3532 legibly, you should put the first ones listed (as many as fit 3533 reasonably) on the actual cover, and continue the rest onto 3534 adjacent pages. 3535 3536 If you publish or distribute Opaque copies of the Document 3537 numbering more than 100, you must either include a machine-readable 3538 Transparent copy along with each Opaque copy, or state in or with 3539 each Opaque copy a computer-network location from which the general 3540 network-using public has access to download using public-standard 3541 network protocols a complete Transparent copy of the Document, free 3542 of added material. If you use the latter option, you must take 3543 reasonably prudent steps, when you begin distribution of Opaque 3544 copies in quantity, to ensure that this Transparent copy will 3545 remain thus accessible at the stated location until at least one 3546 year after the last time you distribute an Opaque copy (directly or 3547 through your agents or retailers) of that edition to the public. 3548 3549 It is requested, but not required, that you contact the authors of 3550 the Document well before redistributing any large number of copies, 3551 to give them a chance to provide you with an updated version of the 3552 Document. 3553 3554 4. MODIFICATIONS 3555 3556 You may copy and distribute a Modified Version of the Document 3557 under the conditions of sections 2 and 3 above, provided that you 3558 release the Modified Version under precisely this License, with the 3559 Modified Version filling the role of the Document, thus licensing 3560 distribution and modification of the Modified Version to whoever 3561 possesses a copy of it. In addition, you must do these things in 3562 the Modified Version: 3563 3564 A. Use in the Title Page (and on the covers, if any) a title 3565 distinct from that of the Document, and from those of previous 3566 versions (which should, if there were any, be listed in the 3567 History section of the Document). You may use the same title 3568 as a previous version if the original publisher of that 3569 version gives permission. 3570 3571 B. List on the Title Page, as authors, one or more persons or 3572 entities responsible for authorship of the modifications in 3573 the Modified Version, together with at least five of the 3574 principal authors of the Document (all of its principal 3575 authors, if it has fewer than five), unless they release you 3576 from this requirement. 3577 3578 C. State on the Title page the name of the publisher of the 3579 Modified Version, as the publisher. 3580 3581 D. Preserve all the copyright notices of the Document. 3582 3583 E. Add an appropriate copyright notice for your modifications 3584 adjacent to the other copyright notices. 3585 3586 F. Include, immediately after the copyright notices, a license 3587 notice giving the public permission to use the Modified 3588 Version under the terms of this License, in the form shown in 3589 the Addendum below. 3590 3591 G. Preserve in that license notice the full lists of Invariant 3592 Sections and required Cover Texts given in the Document's 3593 license notice. 3594 3595 H. Include an unaltered copy of this License. 3596 3597 I. Preserve the section Entitled "History", Preserve its Title, 3598 and add to it an item stating at least the title, year, new 3599 authors, and publisher of the Modified Version as given on the 3600 Title Page. If there is no section Entitled "History" in the 3601 Document, create one stating the title, year, authors, and 3602 publisher of the Document as given on its Title Page, then add 3603 an item describing the Modified Version as stated in the 3604 previous sentence. 3605 3606 J. Preserve the network location, if any, given in the Document 3607 for public access to a Transparent copy of the Document, and 3608 likewise the network locations given in the Document for 3609 previous versions it was based on. These may be placed in the 3610 "History" section. You may omit a network location for a work 3611 that was published at least four years before the Document 3612 itself, or if the original publisher of the version it refers 3613 to gives permission. 3614 3615 K. For any section Entitled "Acknowledgements" or "Dedications", 3616 Preserve the Title of the section, and preserve in the section 3617 all the substance and tone of each of the contributor 3618 acknowledgements and/or dedications given therein. 3619 3620 L. Preserve all the Invariant Sections of the Document, unaltered 3621 in their text and in their titles. Section numbers or the 3622 equivalent are not considered part of the section titles. 3623 3624 M. Delete any section Entitled "Endorsements". Such a section 3625 may not be included in the Modified Version. 3626 3627 N. Do not retitle any existing section to be Entitled 3628 "Endorsements" or to conflict in title with any Invariant 3629 Section. 3630 3631 O. Preserve any Warranty Disclaimers. 3632 3633 If the Modified Version includes new front-matter sections or 3634 appendices that qualify as Secondary Sections and contain no 3635 material copied from the Document, you may at your option designate 3636 some or all of these sections as invariant. To do this, add their 3637 titles to the list of Invariant Sections in the Modified Version's 3638 license notice. These titles must be distinct from any other 3639 section titles. 3640 3641 You may add a section Entitled "Endorsements", provided it contains 3642 nothing but endorsements of your Modified Version by various 3643 parties--for example, statements of peer review or that the text 3644 has been approved by an organization as the authoritative 3645 definition of a standard. 3646 3647 You may add a passage of up to five words as a Front-Cover Text, 3648 and a passage of up to 25 words as a Back-Cover Text, to the end of 3649 the list of Cover Texts in the Modified Version. Only one passage 3650 of Front-Cover Text and one of Back-Cover Text may be added by (or 3651 through arrangements made by) any one entity. If the Document 3652 already includes a cover text for the same cover, previously added 3653 by you or by arrangement made by the same entity you are acting on 3654 behalf of, you may not add another; but you may replace the old 3655 one, on explicit permission from the previous publisher that added 3656 the old one. 3657 3658 The author(s) and publisher(s) of the Document do not by this 3659 License give permission to use their names for publicity for or to 3660 assert or imply endorsement of any Modified Version. 3661 3662 5. COMBINING DOCUMENTS 3663 3664 You may combine the Document with other documents released under 3665 this License, under the terms defined in section 4 above for 3666 modified versions, provided that you include in the combination all 3667 of the Invariant Sections of all of the original documents, 3668 unmodified, and list them all as Invariant Sections of your 3669 combined work in its license notice, and that you preserve all 3670 their Warranty Disclaimers. 3671 3672 The combined work need only contain one copy of this License, and 3673 multiple identical Invariant Sections may be replaced with a single 3674 copy. If there are multiple Invariant Sections with the same name 3675 but different contents, make the title of each such section unique 3676 by adding at the end of it, in parentheses, the name of the 3677 original author or publisher of that section if known, or else a 3678 unique number. Make the same adjustment to the section titles in 3679 the list of Invariant Sections in the license notice of the 3680 combined work. 3681 3682 In the combination, you must combine any sections Entitled 3683 "History" in the various original documents, forming one section 3684 Entitled "History"; likewise combine any sections Entitled 3685 "Acknowledgements", and any sections Entitled "Dedications". You 3686 must delete all sections Entitled "Endorsements." 3687 3688 6. COLLECTIONS OF DOCUMENTS 3689 3690 You may make a collection consisting of the Document and other 3691 documents released under this License, and replace the individual 3692 copies of this License in the various documents with a single copy 3693 that is included in the collection, provided that you follow the 3694 rules of this License for verbatim copying of each of the documents 3695 in all other respects. 3696 3697 You may extract a single document from such a collection, and 3698 distribute it individually under this License, provided you insert 3699 a copy of this License into the extracted document, and follow this 3700 License in all other respects regarding verbatim copying of that 3701 document. 3702 3703 7. AGGREGATION WITH INDEPENDENT WORKS 3704 3705 A compilation of the Document or its derivatives with other 3706 separate and independent documents or works, in or on a volume of a 3707 storage or distribution medium, is called an "aggregate" if the 3708 copyright resulting from the compilation is not used to limit the 3709 legal rights of the compilation's users beyond what the individual 3710 works permit. When the Document is included in an aggregate, this 3711 License does not apply to the other works in the aggregate which 3712 are not themselves derivative works of the Document. 3713 3714 If the Cover Text requirement of section 3 is applicable to these 3715 copies of the Document, then if the Document is less than one half 3716 of the entire aggregate, the Document's Cover Texts may be placed 3717 on covers that bracket the Document within the aggregate, or the 3718 electronic equivalent of covers if the Document is in electronic 3719 form. Otherwise they must appear on printed covers that bracket 3720 the whole aggregate. 3721 3722 8. TRANSLATION 3723 3724 Translation is considered a kind of modification, so you may 3725 distribute translations of the Document under the terms of section 3726 4. Replacing Invariant Sections with translations requires special 3727 permission from their copyright holders, but you may include 3728 translations of some or all Invariant Sections in addition to the 3729 original versions of these Invariant Sections. You may include a 3730 translation of this License, and all the license notices in the 3731 Document, and any Warranty Disclaimers, provided that you also 3732 include the original English version of this License and the 3733 original versions of those notices and disclaimers. In case of a 3734 disagreement between the translation and the original version of 3735 this License or a notice or disclaimer, the original version will 3736 prevail. 3737 3738 If a section in the Document is Entitled "Acknowledgements", 3739 "Dedications", or "History", the requirement (section 4) to 3740 Preserve its Title (section 1) will typically require changing the 3741 actual title. 3742 3743 9. TERMINATION 3744 3745 You may not copy, modify, sublicense, or distribute the Document 3746 except as expressly provided under this License. Any attempt 3747 otherwise to copy, modify, sublicense, or distribute it is void, 3748 and will automatically terminate your rights under this License. 3749 3750 However, if you cease all violation of this License, then your 3751 license from a particular copyright holder is reinstated (a) 3752 provisionally, unless and until the copyright holder explicitly and 3753 finally terminates your license, and (b) permanently, if the 3754 copyright holder fails to notify you of the violation by some 3755 reasonable means prior to 60 days after the cessation. 3756 3757 Moreover, your license from a particular copyright holder is 3758 reinstated permanently if the copyright holder notifies you of the 3759 violation by some reasonable means, this is the first time you have 3760 received notice of violation of this License (for any work) from 3761 that copyright holder, and you cure the violation prior to 30 days 3762 after your receipt of the notice. 3763 3764 Termination of your rights under this section does not terminate 3765 the licenses of parties who have received copies or rights from you 3766 under this License. If your rights have been terminated and not 3767 permanently reinstated, receipt of a copy of some or all of the 3768 same material does not give you any rights to use it. 3769 3770 10. FUTURE REVISIONS OF THIS LICENSE 3771 3772 The Free Software Foundation may publish new, revised versions of 3773 the GNU Free Documentation License from time to time. Such new 3774 versions will be similar in spirit to the present version, but may 3775 differ in detail to address new problems or concerns. See 3776 <http://www.gnu.org/copyleft/>. 3777 3778 Each version of the License is given a distinguishing version 3779 number. If the Document specifies that a particular numbered 3780 version of this License "or any later version" applies to it, you 3781 have the option of following the terms and conditions either of 3782 that specified version or of any later version that has been 3783 published (not as a draft) by the Free Software Foundation. If the 3784 Document does not specify a version number of this License, you may 3785 choose any version ever published (not as a draft) by the Free 3786 Software Foundation. If the Document specifies that a proxy can 3787 decide which future versions of this License can be used, that 3788 proxy's public statement of acceptance of a version permanently 3789 authorizes you to choose that version for the Document. 3790 3791 11. RELICENSING 3792 3793 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 3794 World Wide Web server that publishes copyrightable works and also 3795 provides prominent facilities for anybody to edit those works. A 3796 public wiki that anybody can edit is an example of such a server. 3797 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 3798 site means any set of copyrightable works thus published on the MMC 3799 site. 3800 3801 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 3802 license published by Creative Commons Corporation, a not-for-profit 3803 corporation with a principal place of business in San Francisco, 3804 California, as well as future copyleft versions of that license 3805 published by that same organization. 3806 3807 "Incorporate" means to publish or republish a Document, in whole or 3808 in part, as part of another Document. 3809 3810 An MMC is "eligible for relicensing" if it is licensed under this 3811 License, and if all works that were first published under this 3812 License somewhere other than this MMC, and subsequently 3813 incorporated in whole or in part into the MMC, (1) had no cover 3814 texts or invariant sections, and (2) were thus incorporated prior 3815 to November 1, 2008. 3816 3817 The operator of an MMC Site may republish an MMC contained in the 3818 site under CC-BY-SA on the same site at any time before August 1, 3819 2009, provided the MMC is eligible for relicensing. 3820 3821ADDENDUM: How to use this License for your documents 3822==================================================== 3823 3824To use this License in a document you have written, include a copy of 3825the License in the document and put the following copyright and license 3826notices just after the title page: 3827 3828 Copyright (C) YEAR YOUR NAME. 3829 Permission is granted to copy, distribute and/or modify this document 3830 under the terms of the GNU Free Documentation License, Version 1.3 3831 or any later version published by the Free Software Foundation; 3832 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 3833 Texts. A copy of the license is included in the section entitled ``GNU 3834 Free Documentation License''. 3835 3836 If you have Invariant Sections, Front-Cover Texts and Back-Cover 3837Texts, replace the "with...Texts." line with this: 3838 3839 with the Invariant Sections being LIST THEIR TITLES, with 3840 the Front-Cover Texts being LIST, and with the Back-Cover Texts 3841 being LIST. 3842 3843 If you have Invariant Sections without Cover Texts, or some other 3844combination of the three, merge those two alternatives to suit the 3845situation. 3846 3847 If your document contains nontrivial examples of program code, we 3848recommend releasing these examples in parallel under your choice of free 3849software license, such as the GNU General Public License, to permit 3850their use in free software. 3851 3852 3853File: libmicrohttpd.info, Node: Concept Index, Next: Function and Data Index, Prev: GNU-FDL, Up: Top 3854 3855Concept Index 3856************* 3857 3858[index] 3859* Menu: 3860 3861* ARM: microhttpd-intro. (line 249) 3862* bind, restricting bind: microhttpd-const. (line 226) 3863* bind, restricting bind <1>: microhttpd-const. (line 445) 3864* cipher: microhttpd-const. (line 299) 3865* clock: microhttpd-const. (line 88) 3866* compilation: microhttpd-intro. (line 107) 3867* connection, limiting number of connections: microhttpd-const. 3868 (line 150) 3869* connection, limiting number of connections <1>: microhttpd-info daemon. 3870 (line 60) 3871* cookie: microhttpd-const. (line 481) 3872* cortex m3: microhttpd-intro. (line 249) 3873* date: microhttpd-const. (line 88) 3874* debugging: microhttpd-const. (line 24) 3875* debugging <1>: microhttpd-const. (line 237) 3876* DH: microhttpd-const. (line 437) 3877* digest auth: microhttpd-const. (line 322) 3878* digest auth <1>: microhttpd-const. (line 333) 3879* eCos, GNU General Public License with eCos Extension: GNU GPL with eCos Extension. 3880 (line 6) 3881* embedded systems: microhttpd-intro. (line 107) 3882* embedded systems <1>: microhttpd-intro. (line 249) 3883* embedded systems <2>: microhttpd-const. (line 88) 3884* embedded systems <3>: microhttpd-const. (line 95) 3885* embedded systems <4>: microhttpd-const. (line 421) 3886* epoll: microhttpd-intro. (line 55) 3887* epoll <1>: microhttpd-const. (line 76) 3888* epoll <2>: microhttpd-info daemon. 3889 (line 49) 3890* escaping: microhttpd-const. (line 404) 3891* FD_SETSIZE: microhttpd-const. (line 68) 3892* FD_SETSIZE <1>: microhttpd-const. (line 76) 3893* foreign-function interface: microhttpd-const. (line 382) 3894* GPL, GNU General Public License: GNU GPL with eCos Extension. 3895 (line 6) 3896* IAR: microhttpd-intro. (line 249) 3897* internationalization: microhttpd-const. (line 404) 3898* IPv6: microhttpd-const. (line 43) 3899* IPv6 <1>: microhttpd-const. (line 53) 3900* license: GNU-LGPL. (line 6) 3901* license <1>: GNU GPL with eCos Extension. 3902 (line 6) 3903* license <2>: GNU-FDL. (line 6) 3904* listen: microhttpd-const. (line 95) 3905* listen <1>: microhttpd-const. (line 121) 3906* listen <2>: microhttpd-const. (line 427) 3907* listen <3>: microhttpd-info daemon. 3908 (line 43) 3909* logging: microhttpd-const. (line 237) 3910* logging <1>: microhttpd-const. (line 363) 3911* long long: microhttpd-intro. (line 249) 3912* memory: microhttpd-const. (line 142) 3913* memory, limiting memory utilization: microhttpd-const. (line 134) 3914* MHD_LONG_LONG: microhttpd-intro. (line 249) 3915* microhttpd.h: microhttpd-intro. (line 189) 3916* options: microhttpd-const. (line 382) 3917* performance: microhttpd-intro. (line 77) 3918* performance <1>: microhttpd-const. (line 374) 3919* poll: microhttpd-intro. (line 55) 3920* poll <1>: microhttpd-const. (line 68) 3921* poll <2>: microhttpd-init. (line 74) 3922* portability: microhttpd-intro. (line 107) 3923* portability <1>: microhttpd-intro. (line 189) 3924* POST method: microhttpd-const. (line 485) 3925* POST method <1>: microhttpd-struct. (line 19) 3926* POST method <2>: microhttpd-cb. (line 48) 3927* POST method <3>: microhttpd-post. (line 6) 3928* POST method <4>: microhttpd-post api. (line 6) 3929* proxy: microhttpd-const. (line 95) 3930* pthread: microhttpd-const. (line 421) 3931* PUT method: microhttpd-cb. (line 48) 3932* query string: microhttpd-const. (line 237) 3933* quiesce: microhttpd-const. (line 102) 3934* quiesce <1>: microhttpd-init. (line 51) 3935* random: microhttpd-const. (line 322) 3936* replay attack: microhttpd-const. (line 333) 3937* reusing listening address: microhttpd-const. (line 445) 3938* select: microhttpd-intro. (line 55) 3939* select <1>: microhttpd-const. (line 68) 3940* select <2>: microhttpd-const. (line 76) 3941* select <3>: microhttpd-init. (line 74) 3942* select <4>: microhttpd-init. (line 89) 3943* signals: microhttpd-intro. (line 210) 3944* SNI: microhttpd-const. (line 307) 3945* SSL: microhttpd-const. (line 32) 3946* SSL <1>: microhttpd-const. (line 260) 3947* SSL <2>: microhttpd-const. (line 266) 3948* SSL <3>: microhttpd-const. (line 276) 3949* SSL <4>: microhttpd-const. (line 282) 3950* SSL <5>: microhttpd-const. (line 294) 3951* SSL <6>: microhttpd-const. (line 299) 3952* SSL <7>: microhttpd-const. (line 307) 3953* SSL <8>: microhttpd-const. (line 437) 3954* stack: microhttpd-const. (line 421) 3955* systemd: microhttpd-const. (line 356) 3956* thread: microhttpd-const. (line 421) 3957* timeout: microhttpd-const. (line 178) 3958* timeout <1>: microhttpd-inspect. (line 24) 3959* timeout <2>: microhttpd-option conn. 3960 (line 6) 3961* TLS: microhttpd-const. (line 32) 3962* TLS <1>: microhttpd-const. (line 260) 3963* TLS <2>: microhttpd-const. (line 266) 3964* TLS <3>: microhttpd-const. (line 276) 3965* TLS <4>: microhttpd-const. (line 282) 3966* TLS <5>: microhttpd-const. (line 294) 3967* TLS <6>: microhttpd-const. (line 299) 3968* TLS <7>: microhttpd-const. (line 307) 3969* TLS <8>: microhttpd-const. (line 437) 3970 3971 3972File: libmicrohttpd.info, Node: Function and Data Index, Next: Type Index, Prev: Concept Index, Up: Top 3973 3974Function and Data Index 3975*********************** 3976 3977[index] 3978* Menu: 3979 3980* *MHD_AcceptPolicyCallback: microhttpd-cb. (line 6) 3981* *MHD_AccessHandlerCallback: microhttpd-cb. (line 19) 3982* *MHD_ContentReaderCallback: microhttpd-cb. (line 138) 3983* *MHD_ContentReaderFreeCallback: microhttpd-cb. (line 185) 3984* *MHD_KeyValueIterator: microhttpd-cb. (line 116) 3985* *MHD_PostDataIterator: microhttpd-cb. (line 190) 3986* *MHD_RequestCompletedCallback: microhttpd-cb. (line 96) 3987* MHD_add_connection: microhttpd-init. (line 115) 3988* MHD_add_response_footer: microhttpd-response headers. 3989 (line 18) 3990* MHD_add_response_header: microhttpd-response headers. 3991 (line 6) 3992* MHD_basic_auth_get_username_password: microhttpd-dauth basic. 3993 (line 6) 3994* MHD_create_post_processor: microhttpd-post api. (line 6) 3995* MHD_create_response_from_buffer: microhttpd-response create. 3996 (line 92) 3997* MHD_create_response_from_callback: microhttpd-response create. 3998 (line 6) 3999* MHD_create_response_from_data: microhttpd-response create. 4000 (line 113) 4001* MHD_create_response_from_fd: microhttpd-response create. 4002 (line 32) 4003* MHD_create_response_from_fd_at_offset: microhttpd-response create. 4004 (line 50) 4005* MHD_del_response_header: microhttpd-response headers. 4006 (line 34) 4007* MHD_destroy_post_processor: microhttpd-post api. (line 52) 4008* MHD_destroy_response: microhttpd-response enqueue. 4009 (line 28) 4010* MHD_digest_auth_check: microhttpd-dauth digest. 4011 (line 13) 4012* MHD_digest_auth_get_username: microhttpd-dauth digest. 4013 (line 6) 4014* MHD_get_connection_info: microhttpd-info conn. 4015 (line 6) 4016* MHD_get_connection_values: microhttpd-requests. (line 6) 4017* MHD_get_daemon_info: microhttpd-info daemon. 4018 (line 6) 4019* MHD_get_fdset: microhttpd-inspect. (line 6) 4020* MHD_get_response_header: microhttpd-response inspect. 4021 (line 18) 4022* MHD_get_response_headers: microhttpd-response inspect. 4023 (line 6) 4024* MHD_get_timeout: microhttpd-inspect. (line 22) 4025* MHD_http_unescape: microhttpd-util unescape. 4026 (line 6) 4027* MHD_is_feature_supported: microhttpd-util feature. 4028 (line 75) 4029* MHD_lookup_connection_value: microhttpd-requests. (line 56) 4030* MHD_post_process: microhttpd-post api. (line 33) 4031* MHD_queue_auth_fail_response: microhttpd-dauth digest. 4032 (line 35) 4033* MHD_queue_basic_auth_fail_response: microhttpd-dauth basic. 4034 (line 17) 4035* MHD_queue_response: microhttpd-response enqueue. 4036 (line 6) 4037* MHD_quiesce_daemon: microhttpd-init. (line 50) 4038* MHD_resume_connection: microhttpd-flow. (line 49) 4039* MHD_run: microhttpd-init. (line 70) 4040* MHD_run_from_select: microhttpd-init. (line 86) 4041* MHD_set_connection_option: microhttpd-option conn. 4042 (line 6) 4043* MHD_set_connection_value: microhttpd-requests. (line 33) 4044* MHD_set_panic_func: microhttpd-init. (line 6) 4045* MHD_set_response_options: microhttpd-response options. 4046 (line 6) 4047* MHD_start_daemon: microhttpd-init. (line 18) 4048* MHD_stop_daemon: microhttpd-init. (line 67) 4049* MHD_suspend_connection: microhttpd-flow. (line 20) 4050 4051 4052File: libmicrohttpd.info, Node: Type Index, Prev: Function and Data Index, Up: Top 4053 4054Type Index 4055********** 4056 4057[index] 4058* Menu: 4059 4060* MHD_Connection: microhttpd-struct. (line 9) 4061* MHD_ConnectionInfo: microhttpd-struct. (line 21) 4062* MHD_ConnectionInfoType: microhttpd-info conn. 4063 (line 25) 4064* MHD_CONNECTION_OPTION: microhttpd-option conn. 4065 (line 22) 4066* MHD_Daemon: microhttpd-struct. (line 6) 4067* MHD_DaemonInfo: microhttpd-struct. (line 24) 4068* MHD_DaemonInfoType: microhttpd-info daemon. 4069 (line 25) 4070* MHD_FEATURE: microhttpd-util feature. 4071 (line 6) 4072* MHD_FLAG: microhttpd-const. (line 6) 4073* MHD_OPTION: microhttpd-const. (line 125) 4074* MHD_OptionItem: microhttpd-const. (line 457) 4075* MHD_PostProcessor: microhttpd-struct. (line 18) 4076* MHD_RequestTerminationCode: microhttpd-const. (line 498) 4077* MHD_Response: microhttpd-struct. (line 15) 4078* MHD_ResponseFlags: microhttpd-const. (line 538) 4079* MHD_ResponseMemoryMode: microhttpd-const. (line 516) 4080* MHD_ResponseOptions: microhttpd-const. (line 550) 4081* MHD_ValueKind: microhttpd-const. (line 470) 4082 4083 4084 4085Tag Table: 4086Node: Top813 4087Node: microhttpd-intro3014 4088Ref: fig:performance7063 4089Ref: tbl:supported8008 4090Node: microhttpd-const15281 4091Node: microhttpd-struct42798 4092Node: microhttpd-cb43578 4093Node: microhttpd-init52920 4094Node: microhttpd-inspect58674 4095Node: microhttpd-requests60611 4096Node: microhttpd-responses64095 4097Node: microhttpd-response enqueue65207 4098Ref: microhttpd-response enqueue-Footnote-167474 4099Node: microhttpd-response create67693 4100Node: microhttpd-response headers73726 4101Node: microhttpd-response options75553 4102Node: microhttpd-response inspect76408 4103Node: microhttpd-flow77581 4104Node: microhttpd-dauth80172 4105Node: microhttpd-dauth basic81723 4106Node: microhttpd-dauth digest82915 4107Node: microhttpd-post87563 4108Node: microhttpd-post api90508 4109Node: microhttpd-info93092 4110Node: microhttpd-info daemon93514 4111Node: microhttpd-info conn96919 4112Node: microhttpd-option conn100636 4113Node: microhttpd-util101700 4114Node: microhttpd-util feature101971 4115Node: microhttpd-util unescape105412 4116Node: GNU-LGPL106052 4117Node: GNU GPL with eCos Extension134156 4118Node: GNU-FDL154024 4119Node: Concept Index179110 4120Node: Function and Data Index187200 4121Node: Type Index192372 4122 4123End Tag Table 4124