libmicrohttpd.texi 123 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328
  1. \input texinfo
  2. @setfilename libmicrohttpd.info
  3. @documentencoding UTF-8
  4. @include version.texi
  5. @settitle The GNU libmicrohttpd Reference Manual
  6. @c Unify all the indices into concept index.
  7. @syncodeindex vr cp
  8. @syncodeindex ky cp
  9. @syncodeindex pg cp
  10. @copying
  11. This manual is for GNU libmicrohttpd
  12. (version @value{VERSION}, @value{UPDATED}), a library for embedding
  13. an HTTP(S) server into C applications.
  14. Copyright @copyright{} 2007--2019 Christian Grothoff
  15. @quotation
  16. Permission is granted to copy, distribute and/or modify this document
  17. under the terms of the GNU Free Documentation License, Version 1.3
  18. or any later version published by the Free Software Foundation;
  19. with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
  20. Texts. A copy of the license is included in the section entitled "GNU
  21. Free Documentation License".
  22. @end quotation
  23. @end copying
  24. @dircategory Software libraries
  25. @direntry
  26. * libmicrohttpd: (libmicrohttpd). Embedded HTTP server library.
  27. @end direntry
  28. @c
  29. @c Titlepage
  30. @c
  31. @titlepage
  32. @title The GNU libmicrohttpd Reference Manual
  33. @subtitle Version @value{VERSION}
  34. @subtitle @value{UPDATED}
  35. @author Marco Maggi (@email{marco.maggi-ipsu@@poste.it})
  36. @author Christian Grothoff (@email{christian@@grothoff.org})
  37. @page
  38. @vskip 0pt plus 1filll
  39. @insertcopying
  40. @end titlepage
  41. @summarycontents
  42. @contents
  43. @c ------------------------------------------------------------
  44. @ifnottex
  45. @node Top
  46. @top The GNU libmicrohttpd Library
  47. @insertcopying
  48. @end ifnottex
  49. @menu
  50. * microhttpd-intro:: Introduction.
  51. * microhttpd-const:: Constants.
  52. * microhttpd-struct:: Structures type definition.
  53. * microhttpd-cb:: Callback functions definition.
  54. * microhttpd-init:: Starting and stopping the server.
  55. * microhttpd-inspect:: Implementing external @code{select}.
  56. * microhttpd-requests:: Handling requests.
  57. * microhttpd-responses:: Building responses to requests.
  58. * microhttpd-flow:: Flow control.
  59. * microhttpd-dauth:: Utilizing Authentication.
  60. * microhttpd-post:: Adding a @code{POST} processor.
  61. * microhttpd-info:: Obtaining and modifying status information.
  62. * microhttpd-util:: Utilities.
  63. Appendices
  64. * GNU-LGPL:: The GNU Lesser General Public License says how you
  65. can copy and share almost all of `libmicrohttpd'.
  66. * eCos License:: The eCos License says how you can copy and share some parts of `libmicrohttpd'.
  67. * GNU-GPL:: The GNU General Public License (with eCos extension) says how you can copy and share some parts of `libmicrohttpd'.
  68. * GNU-FDL:: The GNU Free Documentation License says how you
  69. can copy and share the documentation of `libmicrohttpd'.
  70. Indices
  71. * Concept Index:: Index of concepts and programs.
  72. * Function and Data Index:: Index of functions, variables and data types.
  73. * Type Index:: Index of data types.
  74. @end menu
  75. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  76. @c ------------------------------------------------------------
  77. @node microhttpd-intro
  78. @chapter Introduction
  79. @noindent
  80. All symbols defined in the public API start with @code{MHD_}. MHD
  81. is a small HTTP daemon library. As such, it does not have any API
  82. for logging errors (you can only enable or disable logging to stderr).
  83. Also, it may not support all of the HTTP features directly, where
  84. applicable, portions of HTTP may have to be handled by clients of the
  85. library.
  86. The library is supposed to handle everything that it must handle
  87. (because the API would not allow clients to do this), such as basic
  88. connection management. However, detailed interpretations of headers,
  89. such as range requests, are left to the main application. In
  90. particular, if an application developer wants to support range
  91. requests, he needs to explicitly indicate support in responses and
  92. also explicitly parse the range header and generate a response (for
  93. example, using the @code{MHD_create_response_from_fd_at_offset} call
  94. to serve ranges from a file). MHD does understands headers that
  95. control connection management (specifically, @code{Connection: close}
  96. and @code{Expect: 100 continue} are understood and handled
  97. automatically). @code{Connection: upgrade} is supported by passing
  98. control over the socket (or something that behaves like the real
  99. socket in the case of TLS) to the application (after sending the
  100. desired HTTP response header).
  101. MHD largely ignores the semantics of the different HTTP methods,
  102. so clients are left to handle those. One exception is that MHD does
  103. understand @code{HEAD} and will only send the headers of the response
  104. and not the body, even if the client supplied a body. (In fact,
  105. clients do need to construct a response with the correct length, even
  106. for @code{HEAD} request.)
  107. MHD understands @code{POST} data and is able to decode certain
  108. formats (at the moment only @code{application/x-www-form-urlencoded}
  109. and @code{multipart/form-data}) using the post processor API. The
  110. data stream of a POST is also provided directly to the main
  111. application, so unsupported encodings could still be processed, just
  112. not conveniently by MHD.
  113. The header file defines various constants used by the HTTP protocol.
  114. This does not mean that MHD actually interprets all of these values.
  115. The provided constants are exported as a convenience for users of the
  116. library. MHD does not verify that transmitted HTTP headers are
  117. part of the standard specification; users of the library are free to
  118. define their own extensions of the HTTP standard and use those with
  119. MHD.
  120. All functions are guaranteed to be completely reentrant and
  121. thread-safe. MHD checks for allocation failures and tries to
  122. recover gracefully (for example, by closing the connection).
  123. Additionally, clients can specify resource limits on the overall
  124. number of connections, number of connections per IP address and memory
  125. used per connection to avoid resource exhaustion.
  126. @section Scope
  127. MHD is currently used in a wide range of implementations.
  128. Examples based on reports we've received from developers include:
  129. @itemize
  130. @item Embedded HTTP server on a cortex M3 (128 KB code space)
  131. @item Large-scale multimedia server (reportedly serving at the
  132. simulator limit of 7.5 GB/s)
  133. @item Administrative console (via HTTP/HTTPS) for network appliances
  134. @c If you have other interesting examples, please let us know
  135. @end itemize
  136. @section Thread modes and event loops
  137. @cindex poll
  138. @cindex epoll
  139. @cindex select
  140. MHD supports four basic thread modes and up to three event loop
  141. styles.
  142. The four basic thread modes are external sockets polling (MHD creates
  143. no threads, event loop is fully managed by the application), internal
  144. polling (MHD creates one thread for all connections), polling in
  145. thread pool (MHD creates a thread pool which is used to process all
  146. connections) and thread-per-connection (MHD creates one thread for
  147. listen sockets and then one thread per accepted connection).
  148. These thread modes are then combined with the evet loop styles
  149. (polling function type). MHD support select, poll and epoll. select
  150. is available on all platforms, epoll and poll may not be available on
  151. some platforms. Note that it is possible to combine MHD using epoll
  152. with an external select-based event loop.
  153. The default (if no other option is passed) is ``external select''.
  154. The highest performance can typically be obtained with a thread pool
  155. using @code{epoll}. Apache Benchmark (ab) was used to compare the
  156. performance of @code{select} and @code{epoll} when using a thread pool
  157. and a large number of connections. @ref{fig:performance} shows the
  158. resulting plot from the @code{benchmark.c} example, which measures the
  159. latency between an incoming request and the completion of the
  160. transmission of the response. In this setting, the @code{epoll}
  161. thread pool with four threads was able to handle more than 45,000
  162. connections per second on loopback (with Apache Benchmark running
  163. three processes on the same machine).
  164. @cindex performance
  165. @float Figure,fig:performance
  166. @image{libmicrohttpd_performance_data,400pt,300pt,Data,.png}
  167. @caption{Performance measurements for select vs. epoll (with thread-pool).}
  168. @end float
  169. Not all combinations of thread modes and event loop styles are
  170. supported. This is partially to keep the API simple, and partially
  171. because some combinations simply make no sense as others are strictly
  172. superior. Note that the choice of style depends first of all on the
  173. application logic, and then on the performance requirements.
  174. Applications that perform a blocking operation while handling a
  175. request within the callbacks from MHD must use a thread per
  176. connection. This is typically rather costly. Applications that do
  177. not support threads or that must run on embedded devices without
  178. thread-support must use the external mode. Using @code{epoll} is only
  179. supported on some platform, thus portable applications must at least
  180. have a fallback option available. @ref{tbl:supported} lists the sane
  181. combinations.
  182. @float Table,tbl:supported
  183. @multitable {@b{thread-per-connection}} {@b{select}} {@b{poll}} {@b{epoll}}
  184. @item @tab @b{select} @tab @b{poll} @tab @b{epoll}
  185. @item @b{external} @tab yes @tab no @tab yes
  186. @item @b{internal} @tab yes @tab yes @tab yes
  187. @item @b{thread pool} @tab yes @tab yes @tab yes
  188. @item @b{thread-per-connection} @tab yes @tab yes @tab no
  189. @end multitable
  190. @caption{Supported combinations of event styles and thread modes.}
  191. @end float
  192. @section Compiling GNU libmicrohttpd
  193. @cindex compilation
  194. @cindex embedded systems
  195. @cindex portability
  196. MHD uses the standard GNU system where the usual build process
  197. involves running
  198. @verbatim
  199. $ ./configure
  200. $ make
  201. $ make install
  202. @end verbatim
  203. MHD supports various options to be given to configure to tailor the
  204. binary to a specific situation. Note that some of these options will
  205. remove portions of the MHD code that are required for
  206. binary-compatibility. They should only be used on embedded systems
  207. with tight resource constraints and no concerns about library
  208. versioning. Standard distributions including MHD are expected to
  209. always ship with all features enabled, otherwise unexpected
  210. incompatibilities can arise!
  211. Here is a list of MHD-specific options that can be given to configure
  212. (canonical configure options such as ``--prefix'' are also supported, for a
  213. full list of options run ``./configure --help''):
  214. @table @code
  215. @item ``--disable-curl''
  216. disable running testcases using libcurl
  217. @item ``--disable-largefile''
  218. disable support for 64-bit files
  219. @item ``--disable-messages''
  220. disable logging of error messages (smaller binary size, not so much fun for debugging)
  221. @item ``--disable-https''
  222. disable HTTPS support, even if GNUtls is found; this option must be used if eCOS license is desired as an option (in all cases the resulting binary falls under a GNU LGPL-only license)
  223. @item ``--disable-postprocessor''
  224. do not include the post processor API (results in binary incompatibility)
  225. @item ``--disable-dauth''
  226. do not include the authentication APIs (results in binary incompatibility)
  227. @item ``--disable-httpupgrade''
  228. do not build code for HTTP ``Upgrade'' (smaller binary size, binary incompatible library)
  229. @item ``--disable-epoll''
  230. do not include epoll support, even if it supported (minimally smaller binary size, good for portability testing)
  231. @item ``--enable-coverage''
  232. set flags for analysis of code-coverage with gcc/gcov (results in slow, large binaries)
  233. @item ``--with-threads=posix,w32,none,auto''
  234. sets threading library to use. With use ``none'' to not support threads. In this case, MHD will only support the ``external'' threading modes and not perform any locking of data structures! Use @code{MHD_is_feature_supported(MHD_FEATURE_THREADS)} to test if threads are available. Default is ``auto''.
  235. @item ``--with-gcrypt=PATH''
  236. specifies path to libgcrypt installation
  237. @item ``--with-gnutls=PATH''
  238. specifies path to libgnutls installation
  239. @end table
  240. @section Validity of pointers
  241. MHD will give applications access to its internal data structures
  242. via pointers via arguments and return values from its API. This
  243. creates the question as to how long those pointers are assured to
  244. stay valid.
  245. Most MHD data structures are associated with the connection of an
  246. HTTP client. Thus, pointers associated with a connection are
  247. typically valid until the connection is finished, at which point
  248. MHD will call the @code{MHD_RequestCompletedCallback} if one is
  249. registered. Applications that have such a callback registered
  250. may assume that keys and values from the
  251. @code{MHD_KeyValueIterator}, return values from
  252. @code{MHD_lookup_connection_value} and the @code{url},
  253. @code{method} and @code{version} arguments to the
  254. @code{MHD_AccessHandlerCallback} will remain valid until the
  255. respective @code{MHD_RequestCompletedCallback} is invoked.
  256. In contrast, the @code{upload_data} argument of
  257. @code{MHD_RequestCompletedCallback} as well as all pointers
  258. from the @code{MHD_PostDataIterator} are only valid for the
  259. duration of the callback.
  260. Pointers returned from @code{MHD_get_response_header} are
  261. valid as long as the response itself is valid.
  262. @section Including the microhttpd.h header
  263. @cindex portability
  264. @cindex microhttpd.h
  265. Ideally, before including "microhttpd.h" you should add the necessary
  266. includes to define the @code{uint64_t}, @code{size_t}, @code{fd_set},
  267. @code{socklen_t} and @code{struct sockaddr} data types. Which
  268. specific headers are needed may depend on your platform and your build
  269. system might include some tests to provide you with the necessary
  270. conditional operations. For possible suggestions consult
  271. @code{platform.h} and @code{configure.ac} in the MHD distribution.
  272. Once you have ensured that you manually (!) included the right headers
  273. for your platform before "microhttpd.h", you should also add a line
  274. with @code{#define MHD_PLATFORM_H} which will prevent the
  275. "microhttpd.h" header from trying (and, depending on your platform,
  276. failing) to include the right headers.
  277. If you do not define MHD_PLATFORM_H, the "microhttpd.h" header will
  278. automatically include headers needed on GNU/Linux systems (possibly
  279. causing problems when porting to other platforms).
  280. @section SIGPIPE
  281. @cindex signals
  282. MHD does not install a signal handler for SIGPIPE. On platforms where
  283. this is possible (such as GNU/Linux), it disables SIGPIPE for its I/O
  284. operations (by passing MSG_NOSIGNAL or similar). On other platforms,
  285. SIGPIPE signals may be generated from network operations by MHD and
  286. will cause the process to die unless the developer explicitly installs
  287. a signal handler for SIGPIPE.
  288. Hence portable code using MHD must install a SIGPIPE handler or
  289. explicitly block the SIGPIPE signal. MHD does not do so in order to
  290. avoid messing with other parts of the application that may need to
  291. handle SIGPIPE in a particular way. You can make your application
  292. handle SIGPIPE by calling the following function in @code{main}:
  293. @verbatim
  294. static void
  295. catcher (int sig)
  296. {
  297. }
  298. static void
  299. ignore_sigpipe ()
  300. {
  301. struct sigaction oldsig;
  302. struct sigaction sig;
  303. sig.sa_handler = &catcher;
  304. sigemptyset (&sig.sa_mask);
  305. #ifdef SA_INTERRUPT
  306. sig.sa_flags = SA_INTERRUPT; /* SunOS */
  307. #else
  308. sig.sa_flags = SA_RESTART;
  309. #endif
  310. if (0 != sigaction (SIGPIPE, &sig, &oldsig))
  311. fprintf (stderr,
  312. "Failed to install SIGPIPE handler: %s\n", strerror (errno));
  313. }
  314. @end verbatim
  315. @section MHD_UNSIGNED_LONG_LONG
  316. @cindex long long
  317. @cindex MHD_LONG_LONG
  318. @cindex IAR
  319. @cindex ARM
  320. @cindex cortex m3
  321. @cindex embedded systems
  322. Some platforms do not support @code{long long}. Hence MHD defines a
  323. macro @code{MHD_UNSIGNED LONG_LONG} which will default to
  324. @code{unsigned long long}. For standard desktop operating systems,
  325. this is all you need to know.
  326. However, if your platform does not support @code{unsigned long long},
  327. you should change "platform.h" to define @code{MHD_LONG_LONG} and
  328. @code{MHD_UNSIGNED_LONG_LONG} to an appropriate alternative type and
  329. also define @code{MHD_LONG_LONG_PRINTF} and
  330. @code{MHD_UNSIGNED_LONG_LONG_PRINTF} to the corresponding format
  331. string for printing such a data type. Note that the ``signed''
  332. versions are deprecated. Also, for historical reasons,
  333. @code{MHD_LONG_LONG_PRINTF} is without the percent sign, whereas
  334. @code{MHD_UNSIGNED_LONG_LONG_PRINTF} is with the percent sign. Newly
  335. written code should only use the unsigned versions. However, you need
  336. to define both in "platform.h" if you need to change the definition
  337. for the specific platform.
  338. @section Portability to W32
  339. libmicrohttpd in general ported well to W32. Most libmicrohttpd features
  340. are supported. W32 do not support some functions, like epoll and
  341. corresponding MHD features are not available on W32.
  342. @section Portability to z/OS
  343. To compile MHD on z/OS, extract the archive and run
  344. @verbatim
  345. iconv -f UTF-8 -t IBM-1047 contrib/ascebc > /tmp/ascebc.sh
  346. chmod +x /tmp/ascebc.sh
  347. for n in `find * -type f`
  348. do
  349. /tmp/ascebc.sh $n
  350. done
  351. @end verbatim
  352. to convert all source files to EBCDIC. Note that you must run
  353. @code{configure} from the directory where the configure script is
  354. located. Otherwise, configure will fail to find the
  355. @code{contrib/xcc} script (which is a wrapper around the z/OS c89
  356. compiler).
  357. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  358. @c ------------------------------------------------------------
  359. @node microhttpd-const
  360. @chapter Constants
  361. @deftp {Enumeration} MHD_FLAG
  362. Options for the MHD daemon.
  363. Note that MHD will run automatically in background thread(s) only if
  364. @code{MHD_USE_INTERNAL_POLLING_THREAD} is used. Otherwise caller
  365. (application) must use @code{MHD_run} or @code{MHD_run_from_select} to
  366. have MHD processed network connections and data.
  367. Starting the daemon may also fail if a particular option is not
  368. implemented or not supported on the target platform (i.e. no support
  369. for @acronym{TLS}, threads or IPv6). TLS support generally depends on
  370. options given during MHD compilation.
  371. @table @code
  372. @item MHD_NO_FLAG
  373. No options selected.
  374. @item MHD_USE_ERROR_LOG
  375. If this flag is used, the library should print error messages and
  376. warnings to stderr (or to custom error printer if it's specified by
  377. options). Note that for this run-time option to have any effect, MHD
  378. needs to be compiled with messages enabled. This is done by default
  379. except you ran configure with the @code{--disable-messages} flag set.
  380. @item MHD_USE_DEBUG
  381. @cindex debugging
  382. Currently the same as @code{MHD_USE_ERROR_LOG}.
  383. @item MHD_USE_TLS
  384. @cindex TLS
  385. @cindex SSL
  386. Run in HTTPS-mode. If you specify @code{MHD_USE_TLS} and MHD was
  387. compiled without SSL support, @code{MHD_start_daemon} will return
  388. NULL.
  389. @item MHD_USE_THREAD_PER_CONNECTION
  390. Run using one thread per connection.
  391. @item MHD_USE_INTERNAL_POLLING_THREAD
  392. Run using an internal thread doing @code{SELECT}.
  393. @item MHD_USE_IPv6
  394. @cindex IPv6
  395. Run using the IPv6 protocol (otherwise, MHD will just support IPv4).
  396. If you specify @code{MHD_USE_IPV6} and the local platform does not
  397. support it, @code{MHD_start_daemon} will return NULL.
  398. If you want MHD to support IPv4 and IPv6 using a single socket, pass
  399. MHD_USE_DUAL_STACK, otherwise, if you only pass this option, MHD will
  400. try to bind to IPv6-only (resulting in no IPv4 support).
  401. @item MHD_USE_DUAL_STACK
  402. @cindex IPv6
  403. Use a single socket for IPv4 and IPv6. Note that this will mean
  404. that IPv4 addresses are returned by MHD in the IPv6-mapped format
  405. (the 'struct sockaddr_in6' format will be used for IPv4 and IPv6).
  406. @item MHD_USE_PEDANTIC_CHECKS
  407. @cindex deprecated
  408. Deprecated (use @code{MHD_OPTION_STRICT_FOR_CLIENT}).
  409. Be pedantic about the protocol.
  410. Specifically, at the moment, this flag causes MHD to reject HTTP
  411. 1.1 connections without a @code{Host} header. This is required by the
  412. standard, but of course in violation of the ``be as liberal as possible
  413. in what you accept'' norm. It is recommended to turn this @strong{ON}
  414. if you are testing clients against MHD, and @strong{OFF} in
  415. production.
  416. @item MHD_USE_POLL
  417. @cindex FD_SETSIZE
  418. @cindex poll
  419. @cindex select
  420. Use @code{poll()} instead of @code{select()}. This allows sockets with
  421. descriptors @code{>= FD_SETSIZE}. This option currently only works in
  422. conjunction with @code{MHD_USE_INTERNAL_POLLING_THREAD} (at this point).
  423. If you specify @code{MHD_USE_POLL} and the local platform does not
  424. support it, @code{MHD_start_daemon} will return NULL.
  425. @item MHD_USE_EPOLL
  426. @cindex FD_SETSIZE
  427. @cindex epoll
  428. @cindex select
  429. Use @code{epoll()} instead of @code{poll()} or @code{select()}. This
  430. allows sockets with descriptors @code{>= FD_SETSIZE}. This option is
  431. only available on some systems and does not work in conjunction with
  432. @code{MHD_USE_THREAD_PER_CONNECTION} (at this point). If you specify
  433. @code{MHD_USE_EPOLL} and the local platform does not support it,
  434. @code{MHD_start_daemon} will return NULL. Using @code{epoll()}
  435. instead of @code{select()} or @code{poll()} can in some situations
  436. result in significantly higher performance as the system call has
  437. fundamentally lower complexity (O(1) for @code{epoll()} vs. O(n) for
  438. @code{select()}/@code{poll()} where n is the number of open
  439. connections).
  440. @item MHD_USE_TURBO
  441. @cindex performance
  442. Enable optimizations to aggressively improve performance.
  443. Currently, the optimizations this option enables are based on
  444. opportunistic reads and writes. Bascially, MHD will simply try to
  445. read or write or accept on a socket before checking that the socket is
  446. ready for IO using the event loop mechanism. As the sockets are
  447. non-blocking, this may fail (at a loss of performance), but generally
  448. MHD does this in situations where the operation is likely to succeed,
  449. in which case performance is improved. Setting the flag should generally
  450. be safe (even though the code is slightly more experimental). You may
  451. want to benchmark your application to see if this makes any difference
  452. for you.
  453. @item MHD_USE_SUPPRESS_DATE_NO_CLOCK
  454. @cindex date
  455. @cindex clock
  456. @cindex embedded systems
  457. Suppress (automatically) adding the 'Date:' header to HTTP responses.
  458. This option should ONLY be used on systems that do not have a clock
  459. and that DO provide other mechanisms for cache control. See also
  460. RFC 2616, section 14.18 (exception 3).
  461. @item MHD_USE_NO_LISTEN_SOCKET
  462. @cindex listen
  463. @cindex proxy
  464. @cindex embedded systems
  465. Run the HTTP server without any listen socket. This option only makes
  466. sense if @code{MHD_add_connection} is going to be used exclusively to
  467. connect HTTP clients to the HTTP server. This option is incompatible
  468. with using a thread pool; if it is used,
  469. @code{MHD_OPTION_THREAD_POOL_SIZE} is ignored.
  470. @item MHD_USE_ITC
  471. @cindex quiesce
  472. Force MHD to use a signal inter-thread communication channel to notify
  473. the event loop (of threads) of our shutdown and other events. This is
  474. required if an application uses @code{MHD_USE_INTERNAL_POLLING_THREAD}
  475. and then performs @code{MHD_quiesce_daemon} (which eliminates our
  476. ability to signal termination via the listen socket). In these modes,
  477. @code{MHD_quiesce_daemon} will fail if this option was not set. Also,
  478. use of this option is automatic (as in, you do not even have to
  479. specify it), if @code{MHD_USE_NO_LISTEN_SOCKET} is specified. In
  480. "external" select mode, this option is always simply ignored.
  481. Using this option also guarantees that MHD will not call
  482. @code{shutdown()} on the listen socket, which means a parent
  483. process can continue to use the socket.
  484. @item MHD_ALLOW_SUSPEND_RESUME
  485. Enables using @code{MHD_suspend_connection} and
  486. @code{MHD_resume_connection}, as performing these calls requires some
  487. additional inter-thred communication channels to be created, and code
  488. not using these calls should not pay the cost.
  489. @item MHD_USE_TCP_FASTOPEN
  490. @cindex listen
  491. Enable TCP_FASTOPEN on the listen socket. TCP_FASTOPEN is currently
  492. supported on Linux >= 3.6. On other systems using this option with
  493. cause @code{MHD_start_daemon} to fail.
  494. @item MHD_ALLOW_UPGRADE
  495. @cindex upgrade
  496. This option must be set if you want to upgrade connections
  497. (via ``101 Switching Protocols'' responses). This requires MHD to
  498. allocate additional resources, and hence we require this
  499. special flag so we only use the resources that are really needed.
  500. @item MHD_USE_AUTO
  501. Automatically select best event loop style (polling function)
  502. depending on requested mode by other MHD flags and functions available
  503. on platform. If application doesn't have requirements for any
  504. specific polling function, it's recommended to use this flag. This
  505. flag is very convenient for multiplatform applications.
  506. @item MHD_USE_POST_HANDSHAKE_AUTH_SUPPORT
  507. Tell the TLS library to support post handshake client authentication.
  508. Only useful in combination with @code{MHD_USE_TLS}.
  509. This option will only work if the underyling TLS library
  510. supports it (i.e. GnuTLS after 3.6.3). If the TLS library
  511. does not support it, MHD may ignore the option and proceed
  512. without supporting this features.
  513. @item MHD_USE_INSECURE_TLS_EARLY_DATA
  514. Tell the TLS library to support TLS v1.3 early data (0-RTT) with the
  515. resulting security drawbacks. Only enable this if you really know what
  516. you are doing. MHD currently does NOT enforce that this only affects
  517. GET requests! You have been warned.
  518. This option will only work if the underyling TLS library
  519. supports it (i.e. GnuTLS after 3.6.3). If the TLS library
  520. does not support it, MHD may ignore the option and proceed
  521. without supporting this features.
  522. @end table
  523. @end deftp
  524. @deftp {Enumeration} MHD_OPTION
  525. MHD options. Passed in the varargs portion of
  526. @code{MHD_start_daemon()}.
  527. @table @code
  528. @item MHD_OPTION_END
  529. No more options / last option. This is used to terminate the VARARGs
  530. list.
  531. @item MHD_OPTION_CONNECTION_MEMORY_LIMIT
  532. @cindex memory, limiting memory utilization
  533. Maximum memory size per connection (followed by a @code{size_t}). The
  534. default is 32 kB (32*1024 bytes) as defined by the internal constant
  535. @code{MHD_POOL_SIZE_DEFAULT}. Values above 128k are unlikely to
  536. result in much benefit, as half of the memory will be typically used
  537. for IO, and TCP buffers are unlikely to support window sizes above 64k
  538. on most systems.
  539. @item MHD_OPTION_CONNECTION_MEMORY_INCREMENT
  540. @cindex memory
  541. Increment to use for growing the read buffer (followed by a
  542. @code{size_t}). The default is 1024 (bytes). Increasing this value
  543. will make MHD use memory for reading more aggressively, which can
  544. reduce the number of @code{recvfrom} calls but may increase the number
  545. of @code{sendto} calls. The given value must fit within
  546. MHD_OPTION_CONNECTION_MEMORY_LIMIT.
  547. @item MHD_OPTION_CONNECTION_LIMIT
  548. @cindex connection, limiting number of connections
  549. Maximum number of concurrent connections to accept (followed by an
  550. @code{unsigned int}). The default is @code{FD_SETSIZE - 4} (the
  551. maximum number of file descriptors supported by @code{select} minus
  552. four for @code{stdin}, @code{stdout}, @code{stderr} and the server
  553. socket). In other words, the default is as large as possible.
  554. If the connection limit is reached, MHD's behavior depends a bit on
  555. other options. If @code{MHD_USE_ITC} was given, MHD
  556. will stop accepting connections on the listen socket. This will cause
  557. the operating system to queue connections (up to the @code{listen()}
  558. limit) above the connection limit. Those connections will be held
  559. until MHD is done processing at least one of the active connections.
  560. If @code{MHD_USE_ITC} is not set, then MHD will continue
  561. to @code{accept()} and immediately @code{close()} these connections.
  562. Note that if you set a low connection limit, you can easily get into
  563. trouble with browsers doing request pipelining. For example, if your
  564. connection limit is ``1'', a browser may open a first connection to
  565. access your ``index.html'' file, keep it open but use a second
  566. connection to retrieve CSS files, images and the like. In fact, modern
  567. browsers are typically by default configured for up to 15 parallel
  568. connections to a single server. If this happens, MHD will refuse to
  569. even accept the second connection until the first connection is
  570. closed --- which does not happen until timeout. As a result, the
  571. browser will fail to render the page and seem to hang. If you expect
  572. your server to operate close to the connection limit, you should
  573. first consider using a lower timeout value and also possibly add
  574. a ``Connection: close'' header to your response to ensure that
  575. request pipelining is not used and connections are closed immediately
  576. after the request has completed:
  577. @example
  578. MHD_add_response_header (response,
  579. MHD_HTTP_HEADER_CONNECTION,
  580. "close");
  581. @end example
  582. @item MHD_OPTION_CONNECTION_TIMEOUT
  583. @cindex timeout
  584. After how many seconds of inactivity should a connection automatically
  585. be timed out? (followed by an @code{unsigned int}; use zero for no
  586. timeout). The default is zero (no timeout).
  587. @item MHD_OPTION_NOTIFY_COMPLETED
  588. Register a function that should be called whenever a request has been
  589. completed (this can be used for application-specific clean up).
  590. Requests that have never been presented to the application (via
  591. @code{MHD_AccessHandlerCallback()}) will not result in
  592. notifications.
  593. This option should be followed by @strong{TWO} pointers. First a
  594. pointer to a function of type @code{MHD_RequestCompletedCallback()}
  595. and second a pointer to a closure to pass to the request completed
  596. callback. The second pointer maybe @code{NULL}.
  597. @item MHD_OPTION_NOTIFY_CONNECTION
  598. Register a function that should be called when the TCP connection to a
  599. client is opened or closed. Note that
  600. @code{MHD_OPTION_NOTIFY_COMPLETED} and the @code{con_cls} argument to
  601. the @code{MHD_AccessHandlerCallback} are per HTTP request (and there
  602. can be multiple HTTP requests per TCP connection). The registered
  603. callback is called twice per TCP connection, with
  604. @code{MHD_CONNECTION_NOTIFY_STARTED} and
  605. @code{MHD_CONNECTION_NOTIFY_CLOSED} respectively. An additional
  606. argument can be used to store TCP connection specific information,
  607. which can be retrieved using @code{MHD_CONNECTION_INFO_SOCKET_CONTEXT}
  608. during the lifetime of the TCP connection. The respective location is
  609. not the same as the HTTP-request-specific @code{con_cls} from the
  610. @code{MHD_AccessHandlerCallback}.
  611. This option should be followed by @strong{TWO} pointers. First a
  612. pointer to a function of type @code{MHD_NotifyConnectionCallback()}
  613. and second a pointer to a closure to pass to the request completed
  614. callback. The second pointer maybe @code{NULL}.
  615. @item MHD_OPTION_PER_IP_CONNECTION_LIMIT
  616. Limit on the number of (concurrent) connections made to the
  617. server from the same IP address. Can be used to prevent one
  618. IP from taking over all of the allowed connections. If the
  619. same IP tries to establish more than the specified number of
  620. connections, they will be immediately rejected. The option
  621. should be followed by an @code{unsigned int}. The default is
  622. zero, which means no limit on the number of connections
  623. from the same IP address.
  624. @item MHD_OPTION_LISTEN_BACKLOG_SIZE
  625. Set the size of the @code{listen()} back log queue of the TCP socket.
  626. Takes an @code{unsigned int} as the argument. Default is the
  627. platform-specific value of @code{SOMAXCONN}.
  628. @item MHD_OPTION_STRICT_FOR_CLIENT
  629. Specify how strict we should enforce the HTTP protocol.
  630. Takes an @code{int} as the argument. Default is zero.
  631. If set to 1, MHD will be strict about the protocol. Specifically, at
  632. the moment, this flag uses MHD to reject HTTP 1.1 connections without
  633. a "Host" header. This is required by the standard, but of course in
  634. violation of the "be as liberal as possible in what you accept" norm.
  635. It is recommended to set this to 1 if you are testing clients against
  636. MHD, and 0 in production.
  637. If set to -1 MHD will be permissive about the protocol, allowing
  638. slight deviations that are technically not allowed by the
  639. RFC. Specifically, at the moment, this flag causes MHD to allow spaces
  640. in header field names. This is disallowed by the standard.
  641. It is not recommended to set it to -1 on publicly available servers as
  642. it may potentially lower level of protection.
  643. @item MHD_OPTION_SERVER_INSANITY
  644. @cindex testing
  645. Allows the application to disable certain sanity precautions in MHD. With
  646. these, the client can break the HTTP protocol, so this should never be used in
  647. production. The options are, however, useful for testing HTTP clients against
  648. "broken" server implementations. This argument must be followed by an
  649. @code{unsigned int}, corresponding to an @code{enum MHD_DisableSanityCheck}.
  650. Right now, no sanity checks can be disabled.
  651. @item MHD_OPTION_SOCK_ADDR
  652. @cindex bind, restricting bind
  653. Bind daemon to the supplied socket address. This option should be followed by a
  654. @code{struct sockaddr *}. If @code{MHD_USE_IPv6} is specified,
  655. the @code{struct sockaddr*} should point to a @code{struct sockaddr_in6},
  656. otherwise to a @code{struct sockaddr_in}. If this option is not specified,
  657. the daemon will listen to incoming connections from anywhere. If you use this
  658. option, the 'port' argument from @code{MHD_start_daemon} is ignored and the port
  659. from the given @code{struct sockaddr *} will be used instead.
  660. @item MHD_OPTION_URI_LOG_CALLBACK
  661. @cindex debugging
  662. @cindex logging
  663. @cindex query string
  664. Specify a function that should be called before parsing the URI from
  665. the client. The specified callback function can be used for processing
  666. the URI (including the options) before it is parsed. The URI after
  667. parsing will no longer contain the options, which maybe inconvenient for
  668. logging. This option should be followed by two arguments, the first
  669. one must be of the form
  670. @example
  671. void * my_logger(void * cls, const char * uri, struct MHD_Connection *con)
  672. @end example
  673. where the return value will be passed as
  674. @code{*con_cls} in calls to the @code{MHD_AccessHandlerCallback}
  675. when this request is processed later; returning a
  676. value of @code{NULL} has no special significance; (however,
  677. note that if you return non-@code{NULL}, you can no longer
  678. rely on the first call to the access handler having
  679. @code{NULL == *con_cls} on entry)
  680. @code{cls} will be set to the second argument following
  681. MHD_OPTION_URI_LOG_CALLBACK. Finally, @code{uri} will
  682. be the 0-terminated URI of the request.
  683. Note that during the time of this call, most of the connection's state
  684. is not initialized (as we have not yet parsed he headers). However,
  685. information about the connecting client (IP, socket) is available.
  686. @item MHD_OPTION_HTTPS_MEM_KEY
  687. @cindex SSL
  688. @cindex TLS
  689. Memory pointer to the private key to be used by the
  690. HTTPS daemon. This option should be followed by an
  691. "const char*" argument.
  692. This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_CERT'.
  693. @item MHD_OPTION_HTTPS_KEY_PASSWORD
  694. @cindex SSL
  695. @cindex TLS
  696. Memory pointer to the password that decrypts the
  697. private key to be used by the HTTPS daemon.
  698. This option should be followed by an
  699. "const char*" argument.
  700. This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_KEY'.
  701. The password (or passphrase) is only used immediately during
  702. @code{MHD_start_daemon()}. Thus, the application may want to
  703. erase it from memory afterwards for additional security.
  704. @item MHD_OPTION_HTTPS_MEM_CERT
  705. @cindex SSL
  706. @cindex TLS
  707. Memory pointer to the certificate to be used by the
  708. HTTPS daemon. This option should be followed by an
  709. "const char*" argument.
  710. This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_KEY'.
  711. @item MHD_OPTION_HTTPS_MEM_TRUST
  712. @cindex SSL
  713. @cindex TLS
  714. Memory pointer to the CA certificate to be used by the
  715. HTTPS daemon to authenticate and trust clients certificates.
  716. This option should be followed by an "const char*" argument.
  717. The presence of this option activates the request of certificate
  718. to the client. The request to the client is marked optional, and
  719. it is the responsibility of the server to check the presence
  720. of the certificate if needed.
  721. Note that most browsers will only present a client certificate
  722. only if they have one matching the specified CA, not sending
  723. any certificate otherwise.
  724. @item MHD_OPTION_HTTPS_CRED_TYPE
  725. @cindex SSL
  726. @cindex TLS
  727. Daemon credentials type. Either certificate or anonymous,
  728. this option should be followed by one of the values listed in
  729. "enum gnutls_credentials_type_t".
  730. @item MHD_OPTION_HTTPS_PRIORITIES
  731. @cindex SSL
  732. @cindex TLS
  733. @cindex cipher
  734. SSL/TLS protocol version and ciphers.
  735. This option must be followed by an "const char *" argument
  736. specifying the SSL/TLS protocol versions and ciphers that
  737. are acceptable for the application. The string is passed
  738. unchanged to gnutls_priority_init. If this option is not
  739. specified, ``NORMAL'' is used.
  740. @item MHD_OPTION_HTTPS_CERT_CALLBACK
  741. @cindex SSL
  742. @cindex TLS
  743. @cindex SNI
  744. Use a callback to determine which X.509 certificate should be used for
  745. a given HTTPS connection. This option should be followed by a
  746. argument of type "gnutls_certificate_retrieve_function2 *". This
  747. option provides an alternative to MHD_OPTION_HTTPS_MEM_KEY and
  748. MHD_OPTION_HTTPS_MEM_CERT. You must use this version if multiple
  749. domains are to be hosted at the same IP address using TLS's Server
  750. Name Indication (SNI) extension. In this case, the callback is
  751. expected to select the correct certificate based on the SNI
  752. information provided. The callback is expected to access the SNI data
  753. using gnutls_server_name_get(). Using this option requires GnuTLS 3.0
  754. or higher.
  755. @item MHD_OPTION_HTTPS_CERT_CALLBACK2
  756. @cindex SSL
  757. @cindex TLS
  758. @cindex SNI
  759. @cindex OCSP
  760. Use a callback to determine which X.509 certificate should be
  761. used for a given HTTPS connection. This option should be
  762. followed by a argument of type `gnutls_certificate_retrieve_function3 *`.
  763. This option provides an
  764. alternative/extension to #MHD_OPTION_HTTPS_CERT_CALLBACK.
  765. You must use this version if you want to use OCSP stapling.
  766. Using this option requires GnuTLS 3.6.3 or higher.
  767. @item MHD_OPTION_GNUTLS_PSK_CRED_HANDLER
  768. @cindex SSL
  769. @cindex TLS
  770. @cindex PSK
  771. Use pre-shared key for TLS credentials.
  772. Pass a pointer to callback of type
  773. @code{MHD_PskServerCredentialsCallback} and a closure.
  774. The function will be called to
  775. retrieve the shared key for a given username.
  776. @item MHD_OPTION_DIGEST_AUTH_RANDOM
  777. @cindex digest auth
  778. @cindex random
  779. Digest Authentication nonce's seed.
  780. This option should be followed by two arguments. First an integer of
  781. type "size_t" which specifies the size of the buffer pointed to by the
  782. second argument in bytes. Note that the application must ensure that
  783. the buffer of the second argument remains allocated and unmodified
  784. while the daemon is running. For security, you SHOULD provide a fresh
  785. random nonce when using MHD with Digest Authentication.
  786. @item MHD_OPTION_NONCE_NC_SIZE
  787. @cindex digest auth
  788. @cindex replay attack
  789. Size of an array of nonce and nonce counter map. This option must be
  790. followed by an "unsigned int" argument that have the size (number of
  791. elements) of a map of a nonce and a nonce-counter. If this option
  792. is not specified, a default value of 4 will be used (which might be
  793. too small for servers handling many requests). If you do not use
  794. digest authentication at all, you can specify a value of zero to
  795. save some memory.
  796. You should calculate the value of NC_SIZE based on the number of
  797. connections per second multiplied by your expected session duration
  798. plus a factor of about two for hash table collisions. For example, if
  799. you expect 100 digest-authenticated connections per second and the
  800. average user to stay on your site for 5 minutes, then you likely need
  801. a value of about 60000. On the other hand, if you can only expect
  802. only 10 digest-authenticated connections per second, tolerate browsers
  803. getting a fresh nonce for each request and expect a HTTP request
  804. latency of 250 ms, then a value of about 5 should be fine.
  805. @item MHD_OPTION_LISTEN_SOCKET
  806. @cindex systemd
  807. Listen socket to use. Pass a listen socket for MHD to use
  808. (systemd-style). If this option is used, MHD will not open its own
  809. listen socket(s). The argument passed must be of type "int" and refer
  810. to an existing socket that has been bound to a port and is listening.
  811. @item MHD_OPTION_EXTERNAL_LOGGER
  812. @cindex logging
  813. Use the given function for logging error messages.
  814. This option must be followed by two arguments; the
  815. first must be a pointer to a function
  816. of type 'void fun(void * arg, const char * fmt, va_list ap)'
  817. and the second a pointer of type 'void*' which will
  818. be passed as the "arg" argument to "fun".
  819. Note that MHD will not generate any log messages without
  820. the MHD_USE_ERROR_LOG flag set and if MHD was compiled
  821. with the "--disable-messages" flag.
  822. @item MHD_OPTION_THREAD_POOL_SIZE
  823. @cindex performance
  824. Number (unsigned int) of threads in thread pool. Enable
  825. thread pooling by setting this value to to something
  826. greater than 1. Currently, thread mode must be
  827. MHD_USE_INTERNAL_POLLING_THREAD if thread pooling is enabled
  828. (@code{MHD_start_daemon} returns @code{NULL} for an unsupported thread
  829. mode).
  830. @item MHD_OPTION_ARRAY
  831. @cindex options
  832. @cindex foreign-function interface
  833. This option can be used for initializing MHD using options from an
  834. array. A common use for this is writing an FFI for MHD. The actual
  835. options given are in an array of 'struct MHD_OptionItem', so this
  836. option requires a single argument of type 'struct MHD_OptionItem'.
  837. The array must be terminated with an entry @code{MHD_OPTION_END}.
  838. An example for code using MHD_OPTION_ARRAY is:
  839. @example
  840. struct MHD_OptionItem ops[] = @{
  841. @{ MHD_OPTION_CONNECTION_LIMIT, 100, NULL @},
  842. @{ MHD_OPTION_CONNECTION_TIMEOUT, 10, NULL @},
  843. @{ MHD_OPTION_END, 0, NULL @}
  844. @};
  845. d = MHD_start_daemon(0, 8080, NULL, NULL, dh, NULL,
  846. MHD_OPTION_ARRAY, ops,
  847. MHD_OPTION_END);
  848. @end example
  849. For options that expect a single pointer argument, the
  850. second member of the @code{struct MHD_OptionItem} is ignored.
  851. For options that expect two pointer arguments, the first
  852. argument must be cast to @code{intptr_t}.
  853. @item MHD_OPTION_UNESCAPE_CALLBACK
  854. @cindex internationalization
  855. @cindex escaping
  856. Specify a function that should be called for unescaping escape
  857. sequences in URIs and URI arguments. Note that this function will NOT
  858. be used by the MHD_PostProcessor. If this option is not specified,
  859. the default method will be used which decodes escape sequences of the
  860. form "%HH". This option should be followed by two arguments, the
  861. first one must be of the form
  862. @example
  863. size_t my_unescaper(void * cls, struct MHD_Connection *c, char *s)
  864. @end example
  865. where the return value must be @code{strlen(s)} and @code{s} should be
  866. updated. Note that the unescape function must not lengthen @code{s}
  867. (the result must be shorter than the input and still be 0-terminated).
  868. @code{cls} will be set to the second argument following
  869. MHD_OPTION_UNESCAPE_CALLBACK.
  870. @item MHD_OPTION_THREAD_STACK_SIZE
  871. @cindex stack
  872. @cindex thread
  873. @cindex pthread
  874. @cindex embedded systems
  875. Maximum stack size for threads created by MHD. This option must be
  876. followed by a @code{size_t}). Not specifying this option or using
  877. a value of zero means using the system default (which is likely to
  878. differ based on your platform).
  879. @item MHD_OPTION_TCP_FASTQUEUE_QUEUE_SIZE
  880. @cindex listen
  881. When the flag @code{MHD_USE_TCP_FASTOPEN} is used, this option sets the
  882. connection handshake queue size for the TCP FASTOPEN connections. Note
  883. that a TCP FASTOPEN connection handshake occupies more resources than a
  884. TCP handshake as the SYN packets also contain DATA which is kept in the
  885. associate state until handshake is completed. If this option is not
  886. given the queue size is set to a default value of 10. This option must
  887. be followed by a @code{unsigned int}.
  888. @item MHD_OPTION_HTTPS_MEM_DHPARAMS
  889. @cindex TLS
  890. @cindex SSL
  891. @cindex DH
  892. Memory pointer for the Diffie-Hellman parameters (dh.pem) to be used
  893. by the HTTPS daemon for key exchange. This option must be followed by
  894. a @code{const char *} argument. The argument would be a zero-terminated
  895. string with a PEM encoded PKCS3 DH parameters structure suitable
  896. for passing to @code{gnutls_dh_parms_import_pkcs3}.
  897. @item MHD_OPTION_LISTENING_ADDRESS_REUSE
  898. @cindex bind, restricting bind
  899. @cindex reusing listening address
  900. This option must be followed by a @code{unsigned int} argument.
  901. If this option is present and true (nonzero) parameter is given, allow reusing
  902. the address:port of the listening socket (using @code{SO_REUSEPORT} on most
  903. platforms, and @code{SO_REUSEADDR} on Windows). If a false (zero) parameter is
  904. given, disallow reusing the the address:port of the listening socket (this
  905. usually requires no special action, but @code{SO_EXCLUSIVEADDRUSE} is needed on
  906. Windows). If this option is not present @code{SO_REUSEADDR} is used on all
  907. platforms except Windows so reusing of address:port is disallowed.
  908. @end table
  909. @end deftp
  910. @deftp {C Struct} MHD_OptionItem
  911. Entry in an MHD_OPTION_ARRAY. See the @code{MHD_OPTION_ARRAY} option
  912. argument for its use.
  913. The @code{option} member is used to specify which option is specified
  914. in the array. The other members specify the respective argument.
  915. Note that for options taking only a single pointer, the
  916. @code{ptr_value} member should be set. For options taking two pointer
  917. arguments, the first pointer must be cast to @code{intptr_t} and both
  918. the @code{value} and the @code{ptr_value} members should be used to
  919. pass the two pointers.
  920. @end deftp
  921. @deftp {Enumeration} MHD_ValueKind
  922. The @code{MHD_ValueKind} specifies the source of the key-value pairs in
  923. the HTTP protocol.
  924. @table @code
  925. @item MHD_HEADER_KIND
  926. HTTP header.
  927. @item MHD_COOKIE_KIND
  928. @cindex cookie
  929. Cookies. Note that the original HTTP header containing the cookie(s)
  930. will still be available and intact.
  931. @item MHD_POSTDATA_KIND
  932. @cindex POST method
  933. @code{POST} data. This is available only if a content encoding
  934. supported by MHD is used (currently only @acronym{URL} encoding), and
  935. only if the posted content fits within the available memory pool. Note
  936. that in that case, the upload data given to the
  937. @code{MHD_AccessHandlerCallback()} will be empty (since it has
  938. already been processed).
  939. @item MHD_GET_ARGUMENT_KIND
  940. @code{GET} (URI) arguments.
  941. @item MHD_FOOTER_KIND
  942. HTTP footer (only for http 1.1 chunked encodings).
  943. @end table
  944. @end deftp
  945. @deftp {Enumeration} MHD_RequestTerminationCode
  946. The @code{MHD_RequestTerminationCode} specifies reasons why a request
  947. has been terminated (or completed).
  948. @table @code
  949. @item MHD_REQUEST_TERMINATED_COMPLETED_OK
  950. We finished sending the response.
  951. @item MHD_REQUEST_TERMINATED_WITH_ERROR
  952. Error handling the connection (resources exhausted, other side closed
  953. connection, application error accepting request, etc.)
  954. @item MHD_REQUEST_TERMINATED_TIMEOUT_REACHED
  955. No activity on the connection for the number of seconds specified using
  956. @code{MHD_OPTION_CONNECTION_TIMEOUT}.
  957. @item MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN
  958. We had to close the session since MHD was being shut down.
  959. @end table
  960. @end deftp
  961. @deftp {Enumeration} MHD_ResponseMemoryMode
  962. The @code{MHD_ResponeMemoryMode} specifies how MHD should treat
  963. the memory buffer given for the response in
  964. @code{MHD_create_response_from_buffer}.
  965. @table @code
  966. @item MHD_RESPMEM_PERSISTENT
  967. Buffer is a persistent (static/global) buffer that won't change
  968. for at least the lifetime of the response, MHD should just use
  969. it, not free it, not copy it, just keep an alias to it.
  970. @item MHD_RESPMEM_MUST_FREE
  971. Buffer is heap-allocated with @code{malloc} (or equivalent) and
  972. should be freed by MHD after processing the response has
  973. concluded (response reference counter reaches zero).
  974. @item MHD_RESPMEM_MUST_COPY
  975. Buffer is in transient memory, but not on the heap (for example,
  976. on the stack or non-malloc allocated) and only valid during the
  977. call to @code{MHD_create_response_from_buffer}. MHD must make its
  978. own private copy of the data for processing.
  979. @end table
  980. @end deftp
  981. @deftp {Enumeration} MHD_ResponseFlags
  982. Response-specific flags. Passed as an argument to
  983. @code{MHD_set_response_options()}.
  984. @table @code
  985. @item MHD_RF_NONE
  986. No special handling.
  987. @item MHD_RF_HTTP_VERSION_1_0_ONLY
  988. Only respond in conservative HTTP 1.0-mode. In particular,
  989. do not (automatically) sent "Connection" headers and always
  990. close the connection after generating the response.
  991. By default, MHD will respond using the same HTTP version which
  992. was set in the request. You can also set the
  993. @code{MHD_RF_HTTP_VERSION_1_0_RESPONSE} flag to force version 1.0
  994. in the response.
  995. @item MHD_RF_HTTP_VERSION_1_0_RESPONSE
  996. Only respond in HTTP 1.0-mode. Contrary to the
  997. @code{MHD_RF_HTTP_VERSION_1_0_ONLY} flag, the response's HTTP version will
  998. always be set to 1.0 and ``Connection'' headers are still supported.
  999. You can even combine this option with MHD_RF_HTTP_VERSION_1_0_ONLY to
  1000. change the response's HTTP version while maintaining strict compliance
  1001. with HTTP 1.0 regarding connection management.
  1002. This solution is not perfect as this flag is set on the response which
  1003. is created after header processing. So MHD will behave as a HTTP 1.1
  1004. server until the response is queued. It means that an invalid HTTP 1.1
  1005. request will fail even if the response is sent with HTTP 1.0 and the
  1006. request would be valid if interpreted with this version. For example,
  1007. this request will fail in strict mode:
  1008. @verbatim
  1009. GET / HTTP/1.1
  1010. @end verbatim
  1011. as the ``Host'' header is missing and is mandatory in HTTP 1.1, but it
  1012. should succeed when interpreted with HTTP 1.0.
  1013. @item MHD_RF_INSANITY_HEADER_CONTENT_LENGTH
  1014. Disable sanity check preventing clients from manually
  1015. setting the HTTP content length option.
  1016. @end table
  1017. @end deftp
  1018. @deftp {Enumeration} MHD_ResponseOptions
  1019. Response-specific options. Passed in the varargs portion of
  1020. @code{MHD_set_response_options()}.
  1021. @table @code
  1022. @item MHD_RO_END
  1023. No more options / last option. This is used to terminate the VARARGs
  1024. list.
  1025. @end table
  1026. @end deftp
  1027. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1028. @c ------------------------------------------------------------
  1029. @node microhttpd-struct
  1030. @chapter Structures type definition
  1031. @deftp {C Struct} MHD_Daemon
  1032. Handle for the daemon (listening on a socket for HTTP traffic).
  1033. @end deftp
  1034. @deftp {C Struct} MHD_Connection
  1035. Handle for a connection / HTTP request. With HTTP/1.1, multiple
  1036. requests can be run over the same connection. However, MHD will only
  1037. show one request per TCP connection to the client at any given time.
  1038. @end deftp
  1039. @deftp {C Struct} MHD_Response
  1040. Handle for a response.
  1041. @end deftp
  1042. @deftp {C Struct} MHD_PostProcessor
  1043. @cindex POST method
  1044. Handle for @code{POST} processing.
  1045. @end deftp
  1046. @deftp {C Union} MHD_ConnectionInfo
  1047. Information about a connection.
  1048. @end deftp
  1049. @deftp {C Union} MHD_DaemonInfo
  1050. Information about an MHD daemon.
  1051. @end deftp
  1052. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1053. @c ------------------------------------------------------------
  1054. @node microhttpd-cb
  1055. @chapter Callback functions definition
  1056. @deftypefn {Function Pointer} int {*MHD_AcceptPolicyCallback} (void *cls, const struct sockaddr * addr, socklen_t addrlen)
  1057. Invoked in the context of a connection to allow or deny a client to
  1058. connect. This callback return @code{MHD_YES} if connection is allowed,
  1059. @code{MHD_NO} if not.
  1060. @table @var
  1061. @item cls
  1062. custom value selected at callback registration time;
  1063. @item addr
  1064. address information from the client;
  1065. @item addrlen
  1066. length of the address information.
  1067. @end table
  1068. @end deftypefn
  1069. @deftypefn {Function Pointer} int {*MHD_AccessHandlerCallback} (void *cls, struct MHD_Connection * connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls)
  1070. Invoked in the context of a connection to answer a request from the
  1071. client. This callback must call MHD functions (example: the
  1072. @code{MHD_Response} ones) to provide content to give back to the client
  1073. and return an HTTP status code (i.e. @code{200} for OK, @code{404},
  1074. etc.).
  1075. @ref{microhttpd-post}, for details on how to code this callback.
  1076. Must return @code{MHD_YES} if the connection was handled successfully,
  1077. @code{MHD_NO} if the socket must be closed due to a serious error while
  1078. handling the request
  1079. @table @var
  1080. @item cls
  1081. custom value selected at callback registration time;
  1082. @item url
  1083. the URL requested by the client;
  1084. @item method
  1085. the HTTP method used by the client (@code{GET}, @code{PUT},
  1086. @code{DELETE}, @code{POST}, etc.);
  1087. @item version
  1088. the HTTP version string (i.e. @code{HTTP/1.1});
  1089. @item upload_data
  1090. the data being uploaded (excluding headers):
  1091. @cindex POST method
  1092. @cindex PUT method
  1093. @code{POST} data @strong{will} be made available
  1094. incrementally in @var{upload_data}; even if @code{POST}
  1095. data is available, the first time the callback is
  1096. invoked there won't be upload data, as this is done
  1097. just after MHD parses the headers. If supported by
  1098. the client and the HTTP version, the application can
  1099. at this point queue an error response to possibly
  1100. avoid the upload entirely. If no response is generated,
  1101. MHD will (if required) automatically send a 100 CONTINUE
  1102. reply to the client.
  1103. Afterwards, POST data will be passed to the callback
  1104. to be processed incrementally by the application. The
  1105. application may return @code{MHD_NO} to forcefully
  1106. terminate the TCP connection without generating a
  1107. proper HTTP response. Once all of the upload data has
  1108. been provided to the application, the application
  1109. will be called again with 0 bytes of upload data.
  1110. At this point, a response should be queued to complete
  1111. the handling of the request.
  1112. @item upload_data_size
  1113. set initially to the size of the @var{upload_data} provided; this
  1114. callback must update this value to the number of bytes @strong{NOT}
  1115. processed; unless external select is used, the callback maybe
  1116. required to process at least some data. If the callback fails to
  1117. process data in multi-threaded or internal-select mode and if the
  1118. read-buffer is already at the maximum size that MHD is willing to
  1119. use for reading (about half of the maximum amount of memory allowed
  1120. for the connection), then MHD will abort handling the connection
  1121. and return an internal server error to the client. In order to
  1122. avoid this, clients must be able to process upload data incrementally
  1123. and reduce the value of @code{upload_data_size}.
  1124. @item con_cls
  1125. reference to a pointer, initially set to @code{NULL}, that this callback can
  1126. set to some address and that will be preserved by MHD for future
  1127. calls for this request;
  1128. since the access handler may be called many times (i.e., for a
  1129. @code{PUT}/@code{POST} operation with plenty of upload data) this allows
  1130. the application to easily associate some request-specific state;
  1131. if necessary, this state can be cleaned up in the global
  1132. @code{MHD_RequestCompletedCallback} (which can be set with the
  1133. @code{MHD_OPTION_NOTIFY_COMPLETED}).
  1134. @end table
  1135. @end deftypefn
  1136. @deftypefn {Function Pointer} void {*MHD_RequestCompletedCallback} (void *cls, struct MHD_Connectionconnection, void **con_cls, enum MHD_RequestTerminationCode toe)
  1137. Signature of the callback used by MHD to notify the application about
  1138. completed requests.
  1139. @table @var
  1140. @item cls
  1141. custom value selected at callback registration time;
  1142. @item connection
  1143. connection handle;
  1144. @item con_cls
  1145. value as set by the last call to the
  1146. @code{MHD_AccessHandlerCallback};
  1147. @item toe
  1148. reason for request termination see @code{MHD_OPTION_NOTIFY_COMPLETED}.
  1149. @end table
  1150. @end deftypefn
  1151. @deftypefn {Function Pointer} int {*MHD_KeyValueIterator} (void *cls, enum MHD_ValueKind kind, const char *key, const char *value, size_t value_size)
  1152. Iterator over key-value pairs. This iterator can be used to iterate
  1153. over all of the cookies, headers, or @code{POST}-data fields of a
  1154. request, and also to iterate over the headers that have been added to a
  1155. response.
  1156. @table @var
  1157. @item cls
  1158. custom value specified when iteration was triggered;
  1159. @item kind
  1160. kind of the header we are looking at
  1161. @item key
  1162. key for the value, can be an empty string
  1163. @item value
  1164. value corresponding value, can be NULL
  1165. @item value_size
  1166. number of bytes in @code{value}. This argument was introduced in
  1167. @code{MHD_VERSION} 0x00096301 to allow applications to use binary
  1168. zeros in values. Applications using this argument must ensure that
  1169. they are using a sufficiently recent version of MHD, i.e. by testing
  1170. @code{MHD_get_version()} for values above or equal to 0.9.64.
  1171. Applications that do not need zeros in values and that want to compile
  1172. without warnings against newer versions of MHD should not declare this
  1173. argument and cast the function pointer argument to
  1174. @code{MHD_KeyValueIterator}.
  1175. @end table
  1176. Return @code{MHD_YES} to continue iterating, @code{MHD_NO} to abort the
  1177. iteration.
  1178. @end deftypefn
  1179. @deftypefn {Function Pointer} int {*MHD_ContentReaderCallback} (void *cls, uint64_t pos, char *buf, size_t max)
  1180. Callback used by MHD in order to obtain content. The callback has to
  1181. copy at most @var{max} bytes of content into @var{buf}. The total
  1182. number of bytes that has been placed into @var{buf} should be returned.
  1183. Note that returning zero will cause MHD to try again.
  1184. Thus, returning zero should only be used in conjunction
  1185. with @code{MHD_suspend_connection()} to avoid busy waiting.
  1186. While usually the callback simply returns the number of bytes written
  1187. into @var{buf}, there are two special return value:
  1188. @code{MHD_CONTENT_READER_END_OF_STREAM} (-1) should be returned
  1189. for the regular end of transmission (with chunked encoding, MHD will then
  1190. terminate the chunk and send any HTTP footers that might be
  1191. present; without chunked encoding and given an unknown
  1192. response size, MHD will simply close the connection; note
  1193. that while returning @code{MHD_CONTENT_READER_END_OF_STREAM} is not technically
  1194. legal if a response size was specified, MHD accepts this
  1195. and treats it just as @code{MHD_CONTENT_READER_END_WITH_ERROR}.
  1196. @code{MHD_CONTENT_READER_END_WITH_ERROR} (-2) is used to indicate a server
  1197. error generating the response; this will cause MHD to simply
  1198. close the connection immediately. If a response size was
  1199. given or if chunked encoding is in use, this will indicate
  1200. an error to the client. Note, however, that if the client
  1201. does not know a response size and chunked encoding is not in
  1202. use, then clients will not be able to tell the difference between
  1203. @code{MHD_CONTENT_READER_END_WITH_ERROR} and
  1204. @code{MHD_CONTENT_READER_END_OF_STREAM}.
  1205. This is not a limitation of MHD but rather of the HTTP protocol.
  1206. @table @var
  1207. @item cls
  1208. custom value selected at callback registration time;
  1209. @item pos
  1210. position in the datastream to access; note that if an
  1211. @code{MHD_Response} object is re-used, it is possible for the same
  1212. content reader to be queried multiple times for the same data; however,
  1213. if an @code{MHD_Response} is not re-used, MHD guarantees that
  1214. @var{pos} will be the sum of all non-negative return values obtained
  1215. from the content reader so far.
  1216. @end table
  1217. Return @code{-1} on error (MHD will no longer try to read content and
  1218. instead close the connection with the client).
  1219. @end deftypefn
  1220. @deftypefn {Function Pointer} void {*MHD_ContentReaderFreeCallback} (void *cls)
  1221. This method is called by MHD if we are done with a content reader.
  1222. It should be used to free resources associated with the content reader.
  1223. @end deftypefn
  1224. @deftypefn {Function Pointer} int {*MHD_PostDataIterator} (void *cls, enum MHD_ValueKind kind, const char *key, const char *filename, const char *content_type, const char *transfer_encoding, const char *data, uint64_t off, size_t size)
  1225. Iterator over key-value pairs where the value maybe made available in
  1226. increments and/or may not be zero-terminated. Used for processing
  1227. @code{POST} data.
  1228. @table @var
  1229. @item cls
  1230. custom value selected at callback registration time;
  1231. @item kind
  1232. type of the value;
  1233. @item key
  1234. zero-terminated key for the value;
  1235. @item filename
  1236. name of the uploaded file, @code{NULL} if not known;
  1237. @item content_type
  1238. mime-type of the data, @code{NULL} if not known;
  1239. @item transfer_encoding
  1240. encoding of the data, @code{NULL} if not known;
  1241. @item data
  1242. pointer to size bytes of data at the specified offset;
  1243. @item off
  1244. offset of data in the overall value;
  1245. @item size
  1246. number of bytes in data available.
  1247. @end table
  1248. Return @code{MHD_YES} to continue iterating, @code{MHD_NO} to abort the
  1249. iteration.
  1250. @end deftypefn
  1251. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1252. @c ------------------------------------------------------------
  1253. @node microhttpd-init
  1254. @chapter Starting and stopping the server
  1255. @deftypefun {void} MHD_set_panic_func (MHD_PanicCallback cb, void *cls)
  1256. Set a handler for fatal errors.
  1257. @table @var
  1258. @item cb
  1259. function to call if MHD encounters a fatal internal error. If no handler was set explicitly, MHD will call @code{abort}.
  1260. @item cls
  1261. closure argument for cb; the other arguments are the name of the source file, line number and a string describing the nature of the fatal error (which can be @code{NULL})
  1262. @end table
  1263. @end deftypefun
  1264. @deftypefun {struct MHD_Daemon *} MHD_start_daemon (unsigned int flags, unsigned short port, MHD_AcceptPolicyCallback apc, void *apc_cls, MHD_AccessHandlerCallback dh, void *dh_cls, ...)
  1265. Start a webserver on the given port.
  1266. @table @var
  1267. @item flags
  1268. OR-ed combination of @code{MHD_FLAG} values;
  1269. @item port
  1270. port to bind to;
  1271. @item apc
  1272. callback to call to check which clients will be allowed to connect; you
  1273. can pass @code{NULL} in which case connections from any @acronym{IP} will be
  1274. accepted;
  1275. @item apc_cls
  1276. extra argument to @var{apc};
  1277. @item dh
  1278. default handler for all URIs;
  1279. @item dh_cls
  1280. extra argument to @var{dh}.
  1281. @end table
  1282. Additional arguments are a list of options (type-value pairs,
  1283. terminated with @code{MHD_OPTION_END}). It is mandatory to use
  1284. @code{MHD_OPTION_END} as last argument, even when there are no
  1285. additional arguments.
  1286. Return @code{NULL} on error, handle to daemon on success.
  1287. @end deftypefun
  1288. @deftypefun int MHD_quiesce_daemon (struct MHD_Daemon *daemon)
  1289. @cindex quiesce
  1290. Stop accepting connections from the listening socket. Allows clients
  1291. to continue processing, but stops accepting new connections. Note
  1292. that the caller is responsible for closing the returned socket;
  1293. however, if MHD is run using threads (anything but external select
  1294. mode), it must not be closed until AFTER @code{MHD_stop_daemon} has
  1295. been called (as it is theoretically possible that an existing thread
  1296. is still using it).
  1297. This function is useful in the special case that a listen socket
  1298. is to be migrated to another process (i.e. a newer version of the
  1299. HTTP server) while existing connections should continue to be
  1300. processed until they are finished.
  1301. Return @code{-1} on error (daemon not listening), the handle to the
  1302. listen socket otherwise.
  1303. @end deftypefun
  1304. @deftypefun void MHD_stop_daemon (struct MHD_Daemon *daemon)
  1305. Shutdown an HTTP daemon.
  1306. @end deftypefun
  1307. @deftypefun int MHD_run (struct MHD_Daemon *daemon)
  1308. Run webserver operations (without blocking unless in client callbacks).
  1309. This method should be called by clients in combination with
  1310. @code{MHD_get_fdset()} if the client-controlled @code{select}-method is used.
  1311. @cindex select
  1312. @cindex poll
  1313. This function will work for external @code{poll} and @code{select} mode.
  1314. However, if using external @code{select} mode, you may want to
  1315. instead use @code{MHD_run_from_select}, as it is more efficient.
  1316. @table @var
  1317. @item daemon
  1318. daemon to process connections of
  1319. @end table
  1320. Return @code{MHD_YES} on success, @code{MHD_NO} if this daemon was not
  1321. started with the right options for this call.
  1322. @end deftypefun
  1323. @deftypefun int MHD_run_from_select (struct MHD_Daemon *daemon, const fd_set *read_fd_set, const fd_set *write_fd_set, const fd_set *except_fd_set)
  1324. Run webserver operations given sets of ready socket handles.
  1325. @cindex select
  1326. This method should be called by clients in combination with
  1327. @code{MHD_get_fdset} if the client-controlled (external)
  1328. select method is used.
  1329. You can use this function instead of @code{MHD_run} if you called
  1330. @code{select} on the result from @code{MHD_get_fdset}. File descriptors in
  1331. the sets that are not controlled by MHD will be ignored. Calling
  1332. this function instead of @code{MHD_run} is more efficient as MHD will
  1333. not have to call @code{select} again to determine which operations are
  1334. ready.
  1335. @table @var
  1336. @item daemon
  1337. daemon to process connections of
  1338. @item read_fd_set
  1339. set of descriptors that must be ready for reading without blocking
  1340. @item write_fd_set
  1341. set of descriptors that must be ready for writing without blocking
  1342. @item except_fd_set
  1343. ignored, can be NULL
  1344. @end table
  1345. Return @code{MHD_YES} on success, @code{MHD_NO} on serious internal
  1346. errors.
  1347. @end deftypefun
  1348. @deftypefun void MHD_add_connection (struct MHD_Daemon *daemon, int client_socket, const struct sockaddr *addr, socklen_t addrlen)
  1349. Add another client connection to the set of connections
  1350. managed by MHD. This API is usually not needed (since
  1351. MHD will accept inbound connections on the server socket).
  1352. Use this API in special cases, for example if your HTTP
  1353. server is behind NAT and needs to connect out to the
  1354. HTTP client, or if you are building a proxy.
  1355. If you use this API in conjunction with a internal select or a thread
  1356. pool, you must set the option @code{MHD_USE_ITC} to
  1357. ensure that the freshly added connection is immediately processed by
  1358. MHD.
  1359. The given client socket will be managed (and closed!) by MHD after
  1360. this call and must no longer be used directly by the application
  1361. afterwards.
  1362. @table @var
  1363. @item daemon
  1364. daemon that manages the connection
  1365. @item client_socket
  1366. socket to manage (MHD will expect to receive an HTTP request from this socket next).
  1367. @item addr
  1368. IP address of the client
  1369. @item addrlen
  1370. number of bytes in addr
  1371. @end table
  1372. This function will return @code{MHD_YES} on success,
  1373. @code{MHD_NO} if this daemon could
  1374. not handle the connection (i.e. malloc failed, etc).
  1375. The socket will be closed in any case; 'errno' is set
  1376. to indicate further details about the error.
  1377. @end deftypefun
  1378. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1379. @c -----------------------------------------------------------
  1380. @node microhttpd-inspect
  1381. @chapter Implementing external @code{select}
  1382. @deftypefun int MHD_get_fdset (struct MHD_Daemon *daemon, fd_set * read_fd_set, fd_set * write_fd_set, fd_set * except_fd_set, int *max_fd)
  1383. Obtain the @code{select()} sets for this daemon. The daemon's socket
  1384. is added to @var{read_fd_set}. The list of currently existent
  1385. connections is scanned and their file descriptors added to the correct
  1386. set.
  1387. When calling this function, FD_SETSIZE is assumed to be platform's
  1388. default. If you changed FD_SETSIZE for your application,
  1389. you should use @code{MHD_get_fdset2()} instead.
  1390. This function should only be called in when MHD is configured to use
  1391. external select with @code{select()} or with @code{epoll()}. In
  1392. the latter case, it will only add the single @code{epoll()} file
  1393. descriptor used by MHD to the sets.
  1394. After the call completed successfully: the variable referenced by
  1395. @var{max_fd} references the file descriptor with highest integer
  1396. identifier. The variable must be set to zero before invoking this
  1397. function.
  1398. Return @code{MHD_YES} on success, @code{MHD_NO} if: the arguments are
  1399. invalid (example: @code{NULL} pointers); this daemon was not started with
  1400. the right options for this call.
  1401. @end deftypefun
  1402. @deftypefun int MHD_get_fdset2 (struct MHD_Daemon *daemon, fd_set * read_fd_set, fd_set * write_fd_set, fd_set * except_fd_set, int *max_fd, unsigned int fd_setsize)
  1403. Like @code{MHD_get_fdset()}, except that you can manually specify the value of FD_SETSIZE used by your application.
  1404. @end deftypefun
  1405. @deftypefun int MHD_get_timeout (struct MHD_Daemon *daemon, unsigned long long *timeout)
  1406. @cindex timeout
  1407. Obtain timeout value for select for this daemon (only needed if
  1408. connection timeout is used). The returned value is how many
  1409. milliseconds @code{select} should at most block, not the timeout value
  1410. set for connections. This function must not be called if the
  1411. @code{MHD_USE_THREAD_PER_CONNECTION} mode is in use (since then it is
  1412. not meaningful to ask for a timeout, after all, there is concurrenct
  1413. activity). The function must also not be called by user-code if
  1414. @code{MHD_USE_INTERNAL_POLLING_THREAD} is in use. In the latter case, the
  1415. behavior is undefined.
  1416. @table @var
  1417. @item daemon
  1418. which daemon to obtain the timeout from.
  1419. @item timeout
  1420. will be set to the timeout (in milliseconds).
  1421. @end table
  1422. Return @code{MHD_YES} on success, @code{MHD_NO} if timeouts are not used
  1423. (or no connections exist that would necessiate the use of a timeout
  1424. right now).
  1425. @end deftypefun
  1426. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1427. @c -----------------------------------------------------------
  1428. @node microhttpd-requests
  1429. @chapter Handling requests
  1430. @deftypefun int MHD_get_connection_values (struct MHD_Connection *connection, enum MHD_ValueKind kind, MHD_KeyValueIterator iterator, void *iterator_cls)
  1431. Get all the headers matching @var{kind} from the request. The @var{kind}
  1432. argument can be a bitmask, ORing the various header kinds that are
  1433. requested.
  1434. The @var{iterator} callback is invoked once for each header, with
  1435. @var{iterator_cls} as first argument. After version 0.9.19, the
  1436. headers are iterated in the same order as they were received from
  1437. the network; previous versions iterated over the headers in reverse
  1438. order.
  1439. @code{MHD_get_connection_values} returns the number of entries
  1440. iterated over; this can be less than the number of headers if, while
  1441. iterating, @var{iterator} returns @code{MHD_NO}.
  1442. @var{iterator} can be @code{NULL}: in this case this function just counts
  1443. and returns the number of headers.
  1444. In the case of @code{MHD_GET_ARGUMENT_KIND}, the @var{value} argument
  1445. will be @code{NULL} if the URL contained a key without an equals operator.
  1446. For example, for a HTTP request to the URL ``http://foo/bar?key'', the
  1447. @var{value} argument is @code{NULL}; in contrast, a HTTP request to the URL
  1448. ``http://foo/bar?key='', the @var{value} argument is the empty string.
  1449. The normal case is that the URL contains ``http://foo/bar?key=value''
  1450. in which case @var{value} would be the string ``value'' and @var{key}
  1451. would contain the string ``key''.
  1452. @end deftypefun
  1453. @deftypefun int MHD_set_connection_value (struct MHD_Connection *connection, enum MHD_ValueKind kind, const char *key, const char *value)
  1454. This function can be used to append an entry to
  1455. the list of HTTP headers of a connection (so that the
  1456. @code{MHD_get_connection_values function} will return
  1457. them -- and the MHD PostProcessor will also
  1458. see them). This maybe required in certain
  1459. situations (see Mantis #1399) where (broken)
  1460. HTTP implementations fail to supply values needed
  1461. by the post processor (or other parts of the
  1462. application).
  1463. This function MUST only be called from within
  1464. the MHD_AccessHandlerCallback (otherwise, access
  1465. maybe improperly synchronized). Furthermore,
  1466. the client must guarantee that the key and
  1467. value arguments are 0-terminated strings that
  1468. are NOT freed until the connection is closed.
  1469. (The easiest way to do this is by passing only
  1470. arguments to permanently allocated strings.).
  1471. @var{connection} is the connection for which
  1472. the entry for @var{key} of the given @var{kind}
  1473. should be set to the given @var{value}.
  1474. The function returns @code{MHD_NO} if the operation
  1475. could not be performed due to insufficient memory
  1476. and @code{MHD_YES} on success.
  1477. @end deftypefun
  1478. @deftypefun {const char *} MHD_lookup_connection_value (struct MHD_Connection *connection, enum MHD_ValueKind kind, const char *key)
  1479. Get a particular header value. If multiple values match the
  1480. @var{kind}, return one of them (the ``first'', whatever that means).
  1481. @var{key} must reference a zero-terminated ASCII-coded string
  1482. representing the header to look for: it is compared against the
  1483. headers using @code{strcasecmp()}, so case is ignored. A value of
  1484. @code{NULL} for @var{key} can be used to lookup 'trailing' values without a
  1485. key, for example if a URI is of the form
  1486. ``http://example.com/?trailer'', a @var{key} of @code{NULL} can be used to
  1487. access ``tailer" The function returns @code{NULL} if no matching item
  1488. was found.
  1489. @end deftypefun
  1490. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1491. @c ------------------------------------------------------------
  1492. @node microhttpd-responses
  1493. @chapter Building responses to requests
  1494. @noindent
  1495. Response objects handling by MHD is asynchronous with respect to the
  1496. application execution flow. Instances of the @code{MHD_Response}
  1497. structure are not associated to a daemon and neither to a client
  1498. connection: they are managed with reference counting.
  1499. In the simplest case: we allocate a new @code{MHD_Response} structure
  1500. for each response, we use it once and finally we destroy it.
  1501. MHD allows more efficient resources usages.
  1502. Example: we allocate a new @code{MHD_Response} structure for each
  1503. response @strong{kind}, we use it every time we have to give that
  1504. response and we finally destroy it only when the daemon shuts down.
  1505. @menu
  1506. * microhttpd-response enqueue:: Enqueuing a response.
  1507. * microhttpd-response create:: Creating a response object.
  1508. * microhttpd-response headers:: Adding headers to a response.
  1509. * microhttpd-response options:: Setting response options.
  1510. * microhttpd-response inspect:: Inspecting a response object.
  1511. * microhttpd-response upgrade:: Creating a response for protocol upgrades.
  1512. @end menu
  1513. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1514. @c ------------------------------------------------------------
  1515. @node microhttpd-response enqueue
  1516. @section Enqueuing a response
  1517. @deftypefun int MHD_queue_response (struct MHD_Connection *connection, unsigned int status_code, struct MHD_Response *response)
  1518. Queue a response to be transmitted to the client as soon as possible
  1519. but only after MHD_AccessHandlerCallback returns. This function
  1520. checks that it is legal to queue a response at this time for the
  1521. given connection. It also increments the internal reference
  1522. counter for the response object (the counter will be decremented
  1523. automatically once the response has been transmitted).
  1524. @table @var
  1525. @item connection
  1526. the connection identifying the client;
  1527. @item status_code
  1528. HTTP status code (i.e. @code{200} for OK);
  1529. @item response
  1530. response to transmit.
  1531. @end table
  1532. Return @code{MHD_YES} on success or if message has been queued. Return
  1533. @code{MHD_NO}: if arguments are invalid (example: @code{NULL} pointer); on
  1534. error (i.e. reply already sent).
  1535. @end deftypefun
  1536. @deftypefun void MHD_destroy_response (struct MHD_Response *response)
  1537. Destroy a response object and associated resources (decrement the
  1538. reference counter). Note that MHD may keep some of the resources
  1539. around if the response is still in the queue for some clients, so the
  1540. memory may not necessarily be freed immediately.
  1541. @end deftypefun
  1542. An explanation of reference counting@footnote{Note to readers acquainted
  1543. to the Tcl API: reference counting on @code{MHD_Connection}
  1544. structures is handled in the same way as Tcl handles @code{Tcl_Obj}
  1545. structures through @code{Tcl_IncrRefCount()} and
  1546. @code{Tcl_DecrRefCount()}.}:
  1547. @enumerate
  1548. @item
  1549. a @code{MHD_Response} object is allocated:
  1550. @example
  1551. struct MHD_Response * response = MHD_create_response_from_buffer(...);
  1552. /* here: reference counter = 1 */
  1553. @end example
  1554. @item
  1555. the @code{MHD_Response} object is enqueued in a @code{MHD_Connection}:
  1556. @example
  1557. MHD_queue_response(connection, , response);
  1558. /* here: reference counter = 2 */
  1559. @end example
  1560. @item
  1561. the creator of the response object discharges responsibility for it:
  1562. @example
  1563. MHD_destroy_response(response);
  1564. /* here: reference counter = 1 */
  1565. @end example
  1566. @item
  1567. the daemon handles the connection sending the response's data to the
  1568. client then decrements the reference counter by calling
  1569. @code{MHD_destroy_response()}: the counter's value drops to zero and
  1570. the @code{MHD_Response} object is released.
  1571. @end enumerate
  1572. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1573. @c ------------------------------------------------------------
  1574. @node microhttpd-response create
  1575. @section Creating a response object
  1576. @deftypefun {struct MHD_Response *} MHD_create_response_from_callback (uint64_t size, size_t block_size, MHD_ContentReaderCallback crc, void *crc_cls, MHD_ContentReaderFreeCallback crfc)
  1577. Create a response object. The response object can be extended with
  1578. header information and then it can be used any number of times.
  1579. @table @var
  1580. @item size
  1581. size of the data portion of the response, @code{-1} for unknown;
  1582. @item block_size
  1583. preferred block size for querying @var{crc} (advisory only, MHD may
  1584. still call @var{crc} using smaller chunks); this is essentially the
  1585. buffer size used for @acronym{IO}, clients should pick a value that is
  1586. appropriate for @acronym{IO} and memory performance requirements;
  1587. @item crc
  1588. callback to use to obtain response data;
  1589. @item crc_cls
  1590. extra argument to @var{crc};
  1591. @item crfc
  1592. callback to call to free @var{crc_cls} resources.
  1593. @end table
  1594. Return @code{NULL} on error (i.e. invalid arguments, out of memory).
  1595. @end deftypefun
  1596. @deftypefun {struct MHD_Response *} MHD_create_response_from_fd (uint64_t size, int fd)
  1597. Create a response object. The response object can be extended with
  1598. header information and then it can be used any number of times.
  1599. @table @var
  1600. @item size
  1601. size of the data portion of the response (should be smaller or equal to the
  1602. size of the file)
  1603. @item fd
  1604. file descriptor referring to a file on disk with the data; will be
  1605. closed when response is destroyed; note that 'fd' must be an actual
  1606. file descriptor (not a pipe or socket) since MHD might use 'sendfile'
  1607. or 'seek' on it. The descriptor should be in blocking-IO mode.
  1608. @end table
  1609. Return @code{NULL} on error (i.e. invalid arguments, out of memory).
  1610. @end deftypefun
  1611. @deftypefun {struct MHD_Response *} MHD_create_response_from_fd_at_offset (size_t size, int fd, off_t offset)
  1612. Create a response object. The response object can be extended with
  1613. header information and then it can be used any number of times.
  1614. Note that you need to be a bit careful about @code{off_t} when
  1615. writing this code. Depending on your platform, MHD is likely
  1616. to have been compiled with support for 64-bit files. When you
  1617. compile your own application, you must make sure that @code{off_t}
  1618. is also a 64-bit value. If not, your compiler may pass a 32-bit
  1619. value as @code{off_t}, which will result in 32-bits of garbage.
  1620. If you use the autotools, use the @code{AC_SYS_LARGEFILE} autoconf
  1621. macro and make sure to include the generated @file{config.h} file
  1622. before @file{microhttpd.h} to avoid problems. If you do not have a
  1623. build system and only want to run on a GNU/Linux system, you could
  1624. also use
  1625. @verbatim
  1626. #define _FILE_OFFSET_BITS 64
  1627. #include <sys/types.h>
  1628. #include <sys/stat.h>
  1629. #include <fcntl.h>
  1630. #include <microhttpd.h>
  1631. @end verbatim
  1632. to ensure 64-bit @code{off_t}. Note that if your operating system
  1633. does not support 64-bit files, MHD will be compiled with a 32-bit
  1634. @code{off_t} (in which case the above would be wrong).
  1635. @table @var
  1636. @item size
  1637. size of the data portion of the response (number of bytes to transmit from the
  1638. file starting at offset).
  1639. @item fd
  1640. file descriptor referring to a file on disk with the data; will be
  1641. closed when response is destroyed; note that 'fd' must be an actual
  1642. file descriptor (not a pipe or socket) since MHD might use 'sendfile'
  1643. or 'seek' on it. The descriptor should be in blocking-IO mode.
  1644. @item offset
  1645. offset to start reading from in the file
  1646. @end table
  1647. Return @code{NULL} on error (i.e. invalid arguments, out of memory).
  1648. @end deftypefun
  1649. @deftypefun {struct MHD_Response *} MHD_create_response_from_buffer (size_t size, void *data, enum MHD_ResponseMemoryMode mode)
  1650. Create a response object. The response object can be extended with
  1651. header information and then it can be used any number of times.
  1652. @table @var
  1653. @item size
  1654. size of the data portion of the response;
  1655. @item buffer
  1656. the data itself;
  1657. @item mode
  1658. memory management options for buffer; use
  1659. MHD_RESPMEM_PERSISTENT if the buffer is static/global memory,
  1660. use MHD_RESPMEM_MUST_FREE if the buffer is heap-allocated and
  1661. should be freed by MHD and MHD_RESPMEM_MUST_COPY if the
  1662. buffer is in transient memory (i.e. on the stack) and must
  1663. be copied by MHD;
  1664. @end table
  1665. Return @code{NULL} on error (i.e. invalid arguments, out of memory).
  1666. @end deftypefun
  1667. @deftypefun {struct MHD_Response *} MHD_create_response_from_buffer_with_free_callback (size_t size, void *data, MHD_ContentReaderFreeCallback crfc)
  1668. Create a response object. The buffer at the end must be free'd
  1669. by calling the @var{crfc} function.
  1670. @table @var
  1671. @item size
  1672. size of the data portion of the response;
  1673. @item buffer
  1674. the data itself;
  1675. @item crfc
  1676. function to call at the end to free memory allocated at @var{buffer}.
  1677. @end table
  1678. Return @code{NULL} on error (i.e. invalid arguments, out of memory).
  1679. @end deftypefun
  1680. @deftypefun {struct MHD_Response *} MHD_create_response_from_data (size_t size, void *data, int must_free, int must_copy)
  1681. Create a response object. The response object can be extended with
  1682. header information and then it can be used any number of times.
  1683. This function is deprecated, use @code{MHD_create_response_from_buffer} instead.
  1684. @table @var
  1685. @item size
  1686. size of the data portion of the response;
  1687. @item data
  1688. the data itself;
  1689. @item must_free
  1690. if true: MHD should free data when done;
  1691. @item must_copy
  1692. if true: MHD allocates a block of memory and use it to make a copy of
  1693. @var{data} embedded in the returned @code{MHD_Response} structure;
  1694. handling of the embedded memory is responsibility of MHD; @var{data}
  1695. can be released anytime after this call returns.
  1696. @end table
  1697. Return @code{NULL} on error (i.e. invalid arguments, out of memory).
  1698. @end deftypefun
  1699. Example: create a response from a statically allocated string:
  1700. @example
  1701. const char * data = "<html><body><p>Error!</p></body></html>";
  1702. struct MHD_Connection * connection = ...;
  1703. struct MHD_Response * response;
  1704. response = MHD_create_response_from_buffer (strlen(data), data,
  1705. MHD_RESPMEM_PERSISTENT);
  1706. MHD_queue_response(connection, 404, response);
  1707. MHD_destroy_response(response);
  1708. @end example
  1709. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1710. @c ------------------------------------------------------------
  1711. @node microhttpd-response headers
  1712. @section Adding headers to a response
  1713. @deftypefun int MHD_add_response_header (struct MHD_Response *response, const char *header, const char *content)
  1714. Add a header line to the response. The strings referenced by
  1715. @var{header} and @var{content} must be zero-terminated and they are
  1716. duplicated into memory blocks embedded in @var{response}.
  1717. Notice that the strings must not hold newlines, carriage returns or tab
  1718. chars.
  1719. MHD_add_response_header() prevents applications from setting a
  1720. ``Transfer-Encoding'' header to values other than ``identity'' or
  1721. ``chunked'' as other transfer encodings are not supported by MHD. Note
  1722. that usually MHD will pick the transfer encoding correctly
  1723. automatically, but applications can use the header to force a
  1724. particular behavior.
  1725. MHD_add_response_header() also prevents applications from setting a
  1726. ``Content-Length'' header. MHD will automatically set a correct
  1727. ``Content-Length'' header if it is possible and allowed.
  1728. Return @code{MHD_NO} on error (i.e. invalid header or content format or
  1729. memory allocation error).
  1730. @end deftypefun
  1731. @deftypefun int MHD_add_response_footer (struct MHD_Response *response, const char *footer, const char *content)
  1732. Add a footer line to the response. The strings referenced by
  1733. @var{footer} and @var{content} must be zero-terminated and they are
  1734. duplicated into memory blocks embedded in @var{response}.
  1735. Notice that the strings must not hold newlines, carriage returns or tab
  1736. chars. You can add response footers at any time before signalling the
  1737. end of the response to MHD (not just before calling 'MHD_queue_response').
  1738. Footers are useful for adding cryptographic checksums to the reply or to
  1739. signal errors encountered during data generation. This call was introduced
  1740. in MHD 0.9.3.
  1741. Return @code{MHD_NO} on error (i.e. invalid header or content format or
  1742. memory allocation error).
  1743. @end deftypefun
  1744. @deftypefun int MHD_del_response_header (struct MHD_Response *response, const char *header, const char *content)
  1745. Delete a header (or footer) line from the response. Return @code{MHD_NO} on error
  1746. (arguments are invalid or no such header known).
  1747. @end deftypefun
  1748. @c ------------------------------------------------------------
  1749. @node microhttpd-response options
  1750. @section Setting response options
  1751. @deftypefun int MHD_set_response_options (struct MHD_Response *response, enum MHD_ResponseFlags flags, ...)
  1752. Set special flags and options for a response.
  1753. Calling this functions sets the given flags and options for the response.
  1754. @table @var
  1755. @item response
  1756. which response should be modified;
  1757. @item flags
  1758. flags to set for the response;
  1759. @end table
  1760. Additional arguments are a list of options (type-value pairs,
  1761. terminated with @code{MHD_RO_END}). It is mandatory to use
  1762. @code{MHD_RO_END} as last argument, even when there are no
  1763. additional arguments.
  1764. Return @code{MHD_NO} on error, @code{MHD_YES} on success.
  1765. @end deftypefun
  1766. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1767. @c ------------------------------------------------------------
  1768. @node microhttpd-response inspect
  1769. @section Inspecting a response object
  1770. @deftypefun int MHD_get_response_headers (struct MHD_Response *response, MHD_KeyValueIterator iterator, void *iterator_cls)
  1771. Get all of the headers added to a response.
  1772. Invoke the @var{iterator} callback for each header in the response,
  1773. using @var{iterator_cls} as first argument. Return number of entries
  1774. iterated over. @var{iterator} can be @code{NULL}: in this case the function
  1775. just counts headers.
  1776. @var{iterator} should not modify the its key and value arguments, unless
  1777. we know what we are doing.
  1778. @end deftypefun
  1779. @deftypefun {const char *} MHD_get_response_header (struct MHD_Response *response, const char *key)
  1780. Find and return a pointer to the value of a particular header from the
  1781. response. @var{key} must reference a zero-terminated string
  1782. representing the header to look for. The search is case sensitive.
  1783. Return @code{NULL} if header does not exist or @var{key} is @code{NULL}.
  1784. We should not modify the value, unless we know what we are doing.
  1785. @end deftypefun
  1786. @c ------------------------------------------------------------
  1787. @node microhttpd-response upgrade
  1788. @section Creating a response for protocol upgrades
  1789. @cindex WebSockets
  1790. @cindex Upgrade
  1791. @cindex HTTP2
  1792. @cindex RFC2817
  1793. With RFC 2817 a mechanism to switch protocols within HTTP was
  1794. introduced. Here, a client sends a request with a ``Connection:
  1795. Upgrade'' header. The server responds with a ``101 Switching
  1796. Protocols'' response header, after which the two parties begin to
  1797. speak a different (non-HTTP) protocol over the TCP connection.
  1798. This mechanism is used for upgrading HTTP 1.1 connections to HTTP2 or
  1799. HTTPS, as well as for implementing WebSockets. Which protocol
  1800. upgrade is performed is negotiated between server and client in
  1801. additional headers, in particular the ``Upgrade'' header.
  1802. MHD supports switching protocols using this mechanism only if the
  1803. @code{MHD_ALLOW_SUSPEND_RESUME} flag has been set when starting
  1804. the daemon. If this flag has been set, applications can upgrade
  1805. a connection by queueing a response (using the
  1806. @code{MHD_HTTP_SWITCHING_PROTOCOLS} status code) which must
  1807. have been created with the following function:
  1808. @deftypefun int MHD_create_response_for_upgrade (MHD_UpgradeHandler upgrade_handler, void *upgrade_handler_cls)
  1809. Create a response suitable for switching protocols. Returns @code{MHD_YES} on success. @code{upgrade_handler} must not be @code{NULL}.
  1810. When creating this type of response, the ``Connection: Upgrade''
  1811. header will be set automatically for you. MHD requires that you
  1812. additionally set an ``Upgrade:'' header. The ``Upgrade'' header
  1813. must simply exist, the specific value is completely up to the
  1814. application.
  1815. @end deftypefun
  1816. The @code{upgrade_handler} argument to the above has the following type:
  1817. @deftypefn {Function Pointer} void {*MHD_UpgradeHandler} (void *cls, struct MHD_Connection *connection, const char *extra_in, size_t extra_in_size, MHD_socket sock, struct MHD_UpgradeResponseHandle *urh)
  1818. This function will be called once MHD has transmitted the header of the response to the connection that is being upgraded. At this point, the application is expected to take over the socket @code{sock} and speak the non-HTTP protocol to which the connection was upgraded. MHD will no longer use the socket; this includes handling timeouts. The application must call @code{MHD_upgrade_action} with an upgrade action of @code{MHD_UPGRADE_ACTION_CLOSE} when it is done processing the connection to close the socket. The application must not call @code{MHD_stop_daemon} on the respective daemon as long as it is still handling the connection. The arguments given to the @code{upgrade_handler} have the following meaning:
  1819. @table @var
  1820. @item cls
  1821. matches the @code{upgrade_handler_cls} that was given to @code{MHD_create_response_for_upgrade}
  1822. @item connection
  1823. identifies the connection that is being upgraded;
  1824. @item con_cls
  1825. last value left in `*con_cls` in the `MHD_AccessHandlerCallback`
  1826. @item extra_in
  1827. buffer of bytes MHD read ``by accident'' from the socket already. This can happen if the client eagerly transmits more than just the HTTP request. The application should treat these as if it had read them from the socket.
  1828. @item extra_in_size
  1829. number of bytes in @code{extra_in}
  1830. @item sock
  1831. the socket which the application can now use directly for some bi-directional communication with the client. The application can henceforth use @code{recv()} and @code{send()} or @code{read()} and @code{write()} system calls on the socket. However, @code{ioctl()} and @code{setsockopt()} functions will not work as expected when using HTTPS. Such operations may be supported in the future via @code{MHD_upgrade_action}. Most importantly, the application must never call @code{close()} on this socket. Closing the socket must be done using @code{MHD_upgrade_action}. However, while close is forbidden, the application may call @code{shutdown()} on the socket.
  1832. @item urh
  1833. argument for calls to @code{MHD_upgrade_action}. Applications must eventually use this function to perform the @code{close()} action on the socket.
  1834. @end table
  1835. @end deftypefn
  1836. @deftypefun int MHD_upgrade_action (struct MHD_UpgradeResponseHandle *urh, enum MHD_UpgradeAction action, ...)
  1837. Perform special operations related to upgraded connections.
  1838. @table @var
  1839. @item urh
  1840. identifies the upgraded connection to perform an action on
  1841. @item action
  1842. specifies the action to perform; further arguments to the function depend on the specifics of the action.
  1843. @end table
  1844. @end deftypefun
  1845. @deftp {Enumeration} MHD_UpgradeAction
  1846. Set of actions to be performed on upgraded connections. Passed as an argument to
  1847. @code{MHD_upgrade_action()}.
  1848. @table @code
  1849. @item MHD_UPGRADE_ACTION_CLOSE
  1850. Closes the connection. Must be called once the application is done with the client. Takes no additional arguments.
  1851. @item MHD_UPGRADE_ACTION_CORK_ON
  1852. Enable corking on the underlying socket.
  1853. @item MHD_UPGRADE_ACTION_CORK_OFF
  1854. Disable corking on the underlying socket.
  1855. @end table
  1856. @end deftp
  1857. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1858. @c ------------------------------------------------------------
  1859. @node microhttpd-flow
  1860. @chapter Flow control.
  1861. @noindent
  1862. Sometimes it may be possible that clients upload data faster
  1863. than an application can process it, or that an application
  1864. needs an extended period of time to generate a response.
  1865. If @code{MHD_USE_THREAD_PER_CONNECTION} is used, applications
  1866. can simply deal with this by performing their logic within the
  1867. thread and thus effectively blocking connection processing
  1868. by MHD. In all other modes, blocking logic must not be
  1869. placed within the callbacks invoked by MHD as this would also
  1870. block processing of other requests, as a single thread may be
  1871. responsible for tens of thousands of connections.
  1872. Instead, applications using thread modes other than
  1873. @code{MHD_USE_THREAD_PER_CONNECTION} should use the
  1874. following functions to perform flow control.
  1875. @deftypefun int MHD_suspend_connection (struct MHD_Connection *connection)
  1876. Suspend handling of network data for a given connection. This can
  1877. be used to dequeue a connection from MHD's event loop (external
  1878. select, internal select or thread pool; not applicable to
  1879. thread-per-connection!) for a while.
  1880. If you use this API in conjunction with a internal select or a
  1881. thread pool, you must set the option @code{MHD_ALLOW_SUSPEND_RESUME} to
  1882. ensure that a resumed connection is immediately processed by MHD.
  1883. Suspended connections continue to count against the total number of
  1884. connections allowed (per daemon, as well as per IP, if such limits
  1885. are set). Suspended connections will NOT time out; timeouts will
  1886. restart when the connection handling is resumed. While a
  1887. connection is suspended, MHD will not detect disconnects by the
  1888. client.
  1889. The only safe time to suspend a connection is from the
  1890. @code{MHD_AccessHandlerCallback} or from the respective
  1891. @code{MHD_ContentReaderCallback} (but in this case the
  1892. response object must not be shared among multiple
  1893. connections).
  1894. Finally, it is an API violation to call @code{MHD_stop_daemon} while
  1895. having suspended connections (this will at least create memory and
  1896. socket leaks or lead to undefined behavior). You must explicitly
  1897. resume all connections before stopping the daemon.
  1898. @table @var
  1899. @item connection
  1900. the connection to suspend
  1901. @end table
  1902. @end deftypefun
  1903. @deftypefun int MHD_resume_connection (struct MHD_Connection *connection)
  1904. Resume handling of network data for suspended connection. It is safe
  1905. to resume a suspended connection at any time. Calling this function
  1906. on a connection that was not previously suspended will result in
  1907. undefined behavior.
  1908. If you are using this function in ``external'' select mode, you must
  1909. make sure to run @code{MHD_run} afterwards (before again calling
  1910. @code{MHD_get_fdset}), as otherwise the change may not be reflected in
  1911. the set returned by @code{MHD_get_fdset} and you may end up with a
  1912. connection that is stuck until the next network activity.
  1913. You can check whether a connection is currently suspended using
  1914. @code{MHD_get_connection_info} by querying for
  1915. @code{MHD_CONNECTION_INFO_CONNECTION_SUSPENDED}.
  1916. @table @var
  1917. @item connection
  1918. the connection to resume
  1919. @end table
  1920. @end deftypefun
  1921. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1922. @c ------------------------------------------------------------
  1923. @node microhttpd-dauth
  1924. @chapter Utilizing Authentication
  1925. @noindent
  1926. MHD support three types of client authentication.
  1927. Basic authentication uses a simple authentication method based
  1928. on BASE64 algorithm. Username and password are exchanged in clear
  1929. between the client and the server, so this method must only be used
  1930. for non-sensitive content or when the session is protected with https.
  1931. When using basic authentication MHD will have access to the clear
  1932. password, possibly allowing to create a chained authentication
  1933. toward an external authentication server.
  1934. Digest authentication uses a one-way authentication method based
  1935. on MD5 hash algorithm. Only the hash will transit over the network,
  1936. hence protecting the user password. The nonce will prevent replay
  1937. attacks. This method is appropriate for general use, especially
  1938. when https is not used to encrypt the session.
  1939. Client certificate authentication uses a X.509 certificate from
  1940. the client. This is the strongest authentication mechanism but it
  1941. requires the use of HTTPS. Client certificate authentication can
  1942. be used simultaneously with Basic or Digest Authentication in order
  1943. to provide a two levels authentication (like for instance separate
  1944. machine and user authentication). A code example for using
  1945. client certificates is presented in the MHD tutorial.
  1946. @menu
  1947. * microhttpd-dauth basic:: Using Basic Authentication.
  1948. * microhttpd-dauth digest:: Using Digest Authentication.
  1949. @end menu
  1950. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1951. @c ------------------------------------------------------------
  1952. @node microhttpd-dauth basic
  1953. @section Using Basic Authentication
  1954. @deftypefun {void} MHD_free (void *ptr)
  1955. Free the memory given at @code{ptr}. Used to free data structures allocated by MHD. Calls @code{free(ptr)}.
  1956. @end deftypefun
  1957. @deftypefun {char *} MHD_basic_auth_get_username_password (struct MHD_Connection *connection, char** password)
  1958. Get the username and password from the basic authorization header sent by the client.
  1959. Return @code{NULL} if no username could be found, a pointer to the username if found.
  1960. If returned value is not @code{NULL}, the value must be @code{MHD_free()}'ed.
  1961. @var{password} reference a buffer to store the password. It can be @code{NULL}.
  1962. If returned value is not @code{NULL}, the value must be @code{MHD_free()}'ed.
  1963. @end deftypefun
  1964. @deftypefun {int} MHD_queue_basic_auth_fail_response (struct MHD_Connection *connection, const char *realm, struct MHD_Response *response)
  1965. Queues a response to request basic authentication from the client.
  1966. Return @code{MHD_YES} if successful, otherwise @code{MHD_NO}.
  1967. @var{realm} must reference to a zero-terminated string representing the realm.
  1968. @var{response} a response structure to specify what shall be presented to the
  1969. client with a 401 HTTP status.
  1970. @end deftypefun
  1971. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1972. @c ------------------------------------------------------------
  1973. @node microhttpd-dauth digest
  1974. @section Using Digest Authentication
  1975. MHD supports MD5 (deprecated by IETF) and SHA-256 hash algorithms
  1976. for digest authentication. The @code{MHD_DigestAuthAlgorithm} enumeration
  1977. is used to specify which algorithm should be used.
  1978. @deftp {Enumeration} MHD_DigestAuthAlgorithm
  1979. Which digest algorithm should be used. Must be used consistently.
  1980. @table @code
  1981. @item MHD_DIGEST_ALG_AUTO
  1982. Have MHD pick an algorithm currently considered secure. For now defaults to SHA-256.
  1983. @item MHD_DIGEST_ALG_MD5
  1984. Force use of (deprecated, ancient, insecure) MD5.
  1985. @item MHD_DIGEST_ALG_SHA256
  1986. Force use of SHA-256.
  1987. @end table
  1988. @end deftp
  1989. @deftypefun {char *} MHD_digest_auth_get_username (struct MHD_Connection *connection)
  1990. Find and return a pointer to the username value from the request header.
  1991. Return @code{NULL} if the value is not found or header does not exist.
  1992. If returned value is not @code{NULL}, the value must be @code{MHD_free()}'ed.
  1993. @end deftypefun
  1994. @deftypefun int MHD_digest_auth_check2 (struct MHD_Connection *connection, const char *realm, const char *username, const char *password, unsigned int nonce_timeout, enum MHD_DigestAuthAlgorithm algo)
  1995. Checks if the provided values in the WWW-Authenticate header are valid
  1996. and sound according to RFC2716. If valid return @code{MHD_YES}, otherwise return @code{MHD_NO}.
  1997. @var{realm} must reference to a zero-terminated string representing the realm.
  1998. @var{username} must reference to a zero-terminated string representing the username,
  1999. it is usually the returned value from MHD_digest_auth_get_username.
  2000. @var{password} must reference to a zero-terminated string representing the password,
  2001. most probably it will be the result of a lookup of the username against a local database.
  2002. @var{nonce_timeout} is the amount of time in seconds for a nonce to be invalid.
  2003. Most of the time it is sound to specify 300 seconds as its values.
  2004. @var{algo} which digest algorithm should we use.
  2005. @end deftypefun
  2006. @deftypefun int MHD_digest_auth_check (struct MHD_Connection *connection, const char *realm, const char *username, const char *password, unsigned int nonce_timeout)
  2007. Checks if the provided values in the WWW-Authenticate header are valid
  2008. and sound according to RFC2716. If valid return @code{MHD_YES}, otherwise return @code{MHD_NO}.
  2009. Deprecated, use @code{MHD_digest_auth_check2} instead.
  2010. @var{realm} must reference to a zero-terminated string representing the realm.
  2011. @var{username} must reference to a zero-terminated string representing the username,
  2012. it is usually the returned value from MHD_digest_auth_get_username.
  2013. @var{password} must reference to a zero-terminated string representing the password,
  2014. most probably it will be the result of a lookup of the username against a local database.
  2015. @var{nonce_timeout} is the amount of time in seconds for a nonce to be invalid.
  2016. Most of the time it is sound to specify 300 seconds as its values.
  2017. @end deftypefun
  2018. @deftypefun int MHD_digest_auth_check_digest2 (struct MHD_Connection *connection, const char *realm, const char *username, const uint8_t *digest, unsigned int nonce_timeout, enum MHD_DigestAuthAlgorithm algo)
  2019. Checks if the provided values in the WWW-Authenticate header are valid
  2020. and sound according to RFC2716. If valid return @code{MHD_YES}, otherwise return @code{MHD_NO}.
  2021. @var{realm} must reference to a zero-terminated string representing the realm.
  2022. @var{username} must reference to a zero-terminated string representing the username,
  2023. it is usually the returned value from MHD_digest_auth_get_username.
  2024. @var{digest} pointer to the binary MD5 sum for the precalculated hash value ``userame:realm:password''. The size must match the selected @var{algo}!
  2025. @var{nonce_timeout} is the amount of time in seconds for a nonce to be invalid.
  2026. Most of the time it is sound to specify 300 seconds as its values.
  2027. @var{algo} digest authentication algorithm to use.
  2028. @end deftypefun
  2029. @deftypefun int MHD_digest_auth_check_digest (struct MHD_Connection *connection, const char *realm, const char *username, const unsigned char digest[MHD_MD5_DIGEST_SIZE], unsigned int nonce_timeout)
  2030. Checks if the provided values in the WWW-Authenticate header are valid
  2031. and sound according to RFC2716. If valid return @code{MHD_YES}, otherwise return @code{MHD_NO}.
  2032. Deprecated, use @code{MHD_digest_auth_check_digest2} instead.
  2033. @var{realm} must reference to a zero-terminated string representing the realm.
  2034. @var{username} must reference to a zero-terminated string representing the username,
  2035. it is usually the returned value from MHD_digest_auth_get_username.
  2036. @var{digest} pointer to the binary MD5 sum for the precalculated hash value ``userame:realm:password'' of @code{MHD_MD5_DIGEST_SIZE} bytes.
  2037. @var{nonce_timeout} is the amount of time in seconds for a nonce to be invalid.
  2038. Most of the time it is sound to specify 300 seconds as its values.
  2039. @end deftypefun
  2040. @deftypefun int MHD_queue_auth_fail_response2 (struct MHD_Connection *connection, const char *realm, const char *opaque, struct MHD_Response *response, int signal_stale, enum MHD_DigestAuthAlgorithm algo)
  2041. Queues a response to request authentication from the client,
  2042. return @code{MHD_YES} if successful, otherwise @code{MHD_NO}.
  2043. @var{realm} must reference to a zero-terminated string representing the realm.
  2044. @var{opaque} must reference to a zero-terminated string representing a value
  2045. that gets passed to the client and expected to be passed again to the server
  2046. as-is. This value can be a hexadecimal or base64 string.
  2047. @var{response} a response structure to specify what shall be presented to the
  2048. client with a 401 HTTP status.
  2049. @var{signal_stale} a value that signals "stale=true" in the response header to
  2050. indicate the invalidity of the nonce and no need to ask for authentication
  2051. parameters and only a new nonce gets generated. @code{MHD_YES} to generate a new
  2052. nonce, @code{MHD_NO} to ask for authentication parameters.
  2053. @var{algo} which digest algorithm should we use. The same algorithm
  2054. must then be selected when checking digests received from clients!
  2055. @end deftypefun
  2056. @deftypefun int MHD_queue_auth_fail_response (struct MHD_Connection *connection, const char *realm, const char *opaque, struct MHD_Response *response, int signal_stale)
  2057. Queues a response to request authentication from the client,
  2058. return @code{MHD_YES} if successful, otherwise @code{MHD_NO}.
  2059. @var{realm} must reference to a zero-terminated string representing the realm.
  2060. @var{opaque} must reference to a zero-terminated string representing a value
  2061. that gets passed to the client and expected to be passed again to the server
  2062. as-is. This value can be a hexadecimal or base64 string.
  2063. @var{response} a response structure to specify what shall be presented to the
  2064. client with a 401 HTTP status.
  2065. @var{signal_stale} a value that signals "stale=true" in the response header to
  2066. indicate the invalidity of the nonce and no need to ask for authentication
  2067. parameters and only a new nonce gets generated. @code{MHD_YES} to generate a new
  2068. nonce, @code{MHD_NO} to ask for authentication parameters.
  2069. @end deftypefun
  2070. Example: handling digest authentication requests and responses.
  2071. @example
  2072. #define PAGE "<html><head><title>libmicrohttpd demo</title></head><body>Access granted</body></html>"
  2073. #define DENIED "<html><head><title>libmicrohttpd demo</title></head><body>Access denied</body></html>"
  2074. #define OPAQUE "11733b200778ce33060f31c9af70a870ba96ddd4"
  2075. static int
  2076. ahc_echo (void *cls,
  2077. struct MHD_Connection *connection,
  2078. const char *url,
  2079. const char *method,
  2080. const char *version,
  2081. const char *upload_data, size_t *upload_data_size, void **ptr)
  2082. @{
  2083. struct MHD_Response *response;
  2084. char *username;
  2085. const char *password = "testpass";
  2086. const char *realm = "test@@example.com";
  2087. int ret;
  2088. username = MHD_digest_auth_get_username (connection);
  2089. if (username == NULL)
  2090. @{
  2091. response = MHD_create_response_from_buffer(strlen (DENIED),
  2092. DENIED,
  2093. MHD_RESPMEM_PERSISTENT);
  2094. ret = MHD_queue_auth_fail_response2 (connection,
  2095. realm,
  2096. OPAQUE,
  2097. response,
  2098. MHD_NO,
  2099. MHD_DIGEST_ALG_SHA256);
  2100. MHD_destroy_response(response);
  2101. return ret;
  2102. @}
  2103. ret = MHD_digest_auth_check2 (connection,
  2104. realm,
  2105. username,
  2106. password,
  2107. 300,
  2108. MHD_DIGEST_ALG_SHA256);
  2109. free(username);
  2110. if ( (ret == MHD_INVALID_NONCE) ||
  2111. (ret == MHD_NO) )
  2112. @{
  2113. response = MHD_create_response_from_buffer(strlen (DENIED),
  2114. DENIED,
  2115. MHD_RESPMEM_PERSISTENT);
  2116. if (NULL == response)
  2117. return MHD_NO;
  2118. ret = MHD_queue_auth_fail_response2 (connection,
  2119. realm,
  2120. OPAQUE,
  2121. response,
  2122. (ret == MHD_INVALID_NONCE) ? MHD_YES : MHD_NO,
  2123. MHD_DIGEST_ALG_SHA256);
  2124. MHD_destroy_response(response);
  2125. return ret;
  2126. @}
  2127. response = MHD_create_response_from_buffer (strlen(PAGE),
  2128. PAGE,
  2129. MHD_RESPMEM_PERSISTENT);
  2130. ret = MHD_queue_response (connection,
  2131. MHD_HTTP_OK,
  2132. response);
  2133. MHD_destroy_response(response);
  2134. return ret;
  2135. @}
  2136. @end example
  2137. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2138. @c ------------------------------------------------------------
  2139. @node microhttpd-post
  2140. @chapter Adding a @code{POST} processor
  2141. @cindex POST method
  2142. @menu
  2143. * microhttpd-post api:: Programming interface for the
  2144. @code{POST} processor.
  2145. @end menu
  2146. @noindent
  2147. MHD provides the post processor API to make it easier for applications to
  2148. parse the data of a client's @code{POST} request: the
  2149. @code{MHD_AccessHandlerCallback} will be invoked multiple times to
  2150. process data as it arrives; at each invocation a new chunk of data must
  2151. be processed. The arguments @var{upload_data} and @var{upload_data_size}
  2152. are used to reference the chunk of data.
  2153. When @code{MHD_AccessHandlerCallback} is invoked for a new connection:
  2154. its @code{*@var{con_cls}} argument is set to @code{NULL}. When @code{POST}
  2155. data comes in the upload buffer it is @strong{mandatory} to use the
  2156. @var{con_cls} to store a reference to per-connection data. The fact
  2157. that the pointer was initially @code{NULL} can be used to detect that
  2158. this is a new request.
  2159. One method to detect that a new connection was established is
  2160. to set @code{*con_cls} to an unused integer:
  2161. @example
  2162. int
  2163. access_handler (void *cls,
  2164. struct MHD_Connection * connection,
  2165. const char *url,
  2166. const char *method, const char *version,
  2167. const char *upload_data, size_t *upload_data_size,
  2168. void **con_cls)
  2169. @{
  2170. static int old_connection_marker;
  2171. int new_connection = (NULL == *con_cls);
  2172. if (new_connection)
  2173. @{
  2174. /* new connection with POST */
  2175. *con_cls = &old_connection_marker;
  2176. @}
  2177. ...
  2178. @}
  2179. @end example
  2180. @noindent
  2181. In contrast to the previous example, for @code{POST} requests in particular,
  2182. it is more common to use the value of @code{*con_cls} to keep track of
  2183. actual state used during processing, such as the post processor (or a
  2184. struct containing a post processor):
  2185. @example
  2186. int
  2187. access_handler (void *cls,
  2188. struct MHD_Connection * connection,
  2189. const char *url,
  2190. const char *method, const char *version,
  2191. const char *upload_data, size_t *upload_data_size,
  2192. void **con_cls)
  2193. @{
  2194. struct MHD_PostProcessor * pp = *con_cls;
  2195. if (pp == NULL)
  2196. @{
  2197. pp = MHD_create_post_processor(connection, ...);
  2198. *con_cls = pp;
  2199. return MHD_YES;
  2200. @}
  2201. if (*upload_data_size)
  2202. @{
  2203. MHD_post_process(pp, upload_data, *upload_data_size);
  2204. *upload_data_size = 0;
  2205. return MHD_YES;
  2206. @}
  2207. else
  2208. @{
  2209. MHD_destroy_post_processor(pp);
  2210. return MHD_queue_response(...);
  2211. @}
  2212. @}
  2213. @end example
  2214. Note that the callback from @code{MHD_OPTION_NOTIFY_COMPLETED}
  2215. should be used to destroy the post processor. This cannot be
  2216. done inside of the access handler since the connection may not
  2217. always terminate normally.
  2218. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2219. @c ------------------------------------------------------------
  2220. @node microhttpd-post api
  2221. @section Programming interface for the @code{POST} processor
  2222. @cindex POST method
  2223. @deftypefun {struct MHD_PostProcessor *} MHD_create_post_processor (struct MHD_Connection *connection, size_t buffer_size, MHD_PostDataIterator iterator, void *iterator_cls)
  2224. Create a PostProcessor. A PostProcessor can be used to (incrementally)
  2225. parse the data portion of a @code{POST} request.
  2226. @table @var
  2227. @item connection
  2228. the connection on which the @code{POST} is happening (used to determine
  2229. the @code{POST} format);
  2230. @item buffer_size
  2231. maximum number of bytes to use for internal buffering (used only for the
  2232. parsing, specifically the parsing of the keys). A tiny value (256-1024)
  2233. should be sufficient; do @strong{NOT} use a value smaller than 256;
  2234. for good performance, use 32k or 64k (i.e. 65536).
  2235. @item iterator
  2236. iterator to be called with the parsed data; must @strong{NOT} be
  2237. @code{NULL};
  2238. @item iterator_cls
  2239. custom value to be used as first argument to @var{iterator}.
  2240. @end table
  2241. Return @code{NULL} on error (out of memory, unsupported encoding), otherwise
  2242. a PP handle.
  2243. @end deftypefun
  2244. @deftypefun int MHD_post_process (struct MHD_PostProcessor *pp, const char *post_data, size_t post_data_len)
  2245. Parse and process @code{POST} data. Call this function when @code{POST}
  2246. data is available (usually during an @code{MHD_AccessHandlerCallback})
  2247. with the @var{upload_data} and @var{upload_data_size}. Whenever
  2248. possible, this will then cause calls to the
  2249. @code{MHD_IncrementalKeyValueIterator}.
  2250. @table @var
  2251. @item pp
  2252. the post processor;
  2253. @item post_data
  2254. @var{post_data_len} bytes of @code{POST} data;
  2255. @item post_data_len
  2256. length of @var{post_data}.
  2257. @end table
  2258. Return @code{MHD_YES} on success, @code{MHD_NO} on error
  2259. (out-of-memory, iterator aborted, parse error).
  2260. @end deftypefun
  2261. @deftypefun int MHD_destroy_post_processor (struct MHD_PostProcessor *pp)
  2262. Release PostProcessor resources. After this function is being called,
  2263. the PostProcessor is guaranteed to no longer call its iterator. There
  2264. is no special call to the iterator to indicate the end of the post processing
  2265. stream. After destroying the PostProcessor, the programmer should
  2266. perform any necessary work to complete the processing of the iterator.
  2267. Return @code{MHD_YES} if processing completed nicely, @code{MHD_NO}
  2268. if there were spurious characters or formatting problems with
  2269. the post request. It is common to ignore the return value
  2270. of this function.
  2271. @end deftypefun
  2272. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2273. @c ------------------------------------------------------------
  2274. @node microhttpd-info
  2275. @chapter Obtaining and modifying status information.
  2276. @menu
  2277. * microhttpd-info daemon:: State information about an MHD daemon
  2278. * microhttpd-info conn:: State information about a connection
  2279. * microhttpd-option conn:: Modify per-connection options
  2280. @end menu
  2281. @c ------------------------------------------------------------
  2282. @node microhttpd-info daemon
  2283. @section Obtaining state information about an MHD daemon
  2284. @deftypefun {const union MHD_DaemonInfo *} MHD_get_daemon_info (struct MHD_Daemon *daemon, enum MHD_DaemonInfoType infoType, ...)
  2285. Obtain information about the given daemon. This function
  2286. is currently not fully implemented.
  2287. @table @var
  2288. @item daemon
  2289. the daemon about which information is desired;
  2290. @item infoType
  2291. type of information that is desired
  2292. @item ...
  2293. additional arguments about the desired information (depending on
  2294. infoType)
  2295. @end table
  2296. Returns a union with the respective member (depending on
  2297. infoType) set to the desired information), or @code{NULL}
  2298. in case the desired information is not available or
  2299. applicable.
  2300. @end deftypefun
  2301. @deftp {Enumeration} MHD_DaemonInfoType
  2302. Values of this enum are used to specify what
  2303. information about a daemon is desired.
  2304. @table @code
  2305. @item MHD_DAEMON_INFO_KEY_SIZE
  2306. Request information about the key size for a particular cipher
  2307. algorithm. The cipher algorithm should be passed as an extra argument
  2308. (of type 'enum MHD_GNUTLS_CipherAlgorithm'). No longer supported,
  2309. using this value will cause @code{MHD_get_daemon_info} to return NULL.
  2310. @item MHD_DAEMON_INFO_MAC_KEY_SIZE
  2311. Request information about the key size for a particular cipher
  2312. algorithm. The cipher algorithm should be passed as an extra argument
  2313. (of type 'enum MHD_GNUTLS_HashAlgorithm'). No longer supported,
  2314. using this value will cause @code{MHD_get_daemon_info} to return NULL.
  2315. @item MHD_DAEMON_INFO_LISTEN_FD
  2316. @cindex listen
  2317. Request the file-descriptor number that MHD is using to listen to the
  2318. server socket. This can be useful if no port
  2319. was specified and a client needs to learn what port
  2320. is actually being used by MHD.
  2321. No extra arguments should be passed.
  2322. @item MHD_DAEMON_INFO_EPOLL_FD
  2323. @cindex epoll
  2324. Request the file-descriptor number that MHD is using for epoll. If
  2325. the build is not supporting epoll, NULL is returned; if we are using a
  2326. thread pool or this daemon was not started with
  2327. @code{MHD_USE_EPOLL}, (a pointer to) -1 is returned. If we are
  2328. using @code{MHD_USE_INTERNAL_POLLING_THREAD} or are in 'external' select mode, the
  2329. internal epoll FD is returned. This function must be used in external
  2330. select mode with epoll to obtain the FD to call epoll on. No extra
  2331. arguments should be passed.
  2332. @item MHD_DAEMON_INFO_CURRENT_CONNECTIONS
  2333. @cindex connection, limiting number of connections
  2334. Request the number of current connections handled by the daemon. No
  2335. extra arguments should be passed and a pointer to a @code{union
  2336. MHD_DaemonInfo} value is returned, with the @code{num_connections}
  2337. member of type @code{unsigned int} set to the number of active
  2338. connections.
  2339. Note that in multi-threaded or internal-select mode, the real number of current
  2340. connections may already be different when @code{MHD_get_daemon_info} returns.
  2341. The number of current connections can be used (even in multi-threaded and
  2342. internal-select mode) after @code{MHD_quiesce_daemon} to detect whether all
  2343. connections have been handled.
  2344. @end table
  2345. @end deftp
  2346. @c ------------------------------------------------------------
  2347. @node microhttpd-info conn
  2348. @section Obtaining state information about a connection
  2349. @deftypefun {const union MHD_ConnectionInfo *} MHD_get_connection_info (struct MHD_Connection *connection, enum MHD_ConnectionInfoType infoType, ...)
  2350. Obtain information about the given connection.
  2351. @table @var
  2352. @item connection
  2353. the connection about which information is desired;
  2354. @item infoType
  2355. type of information that is desired
  2356. @item ...
  2357. additional arguments about the desired information (depending on
  2358. infoType)
  2359. @end table
  2360. Returns a union with the respective member (depending on
  2361. infoType) set to the desired information), or @code{NULL}
  2362. in case the desired information is not available or
  2363. applicable.
  2364. @end deftypefun
  2365. @deftp {Enumeration} MHD_ConnectionInfoType
  2366. Values of this enum are used to specify what information about a
  2367. connection is desired.
  2368. @table @code
  2369. @item MHD_CONNECTION_INFO_CIPHER_ALGO
  2370. What cipher algorithm is being used (HTTPS connections only).
  2371. @code{NULL} is returned for non-HTTPS connections.
  2372. Takes no extra arguments.
  2373. @item MHD_CONNECTION_INFO_PROTOCOL,
  2374. Allows finding out the TLS/SSL protocol used
  2375. (HTTPS connections only).
  2376. @code{NULL} is returned for non-HTTPS connections.
  2377. Takes no extra arguments.
  2378. @item MHD_CONNECTION_INFO_CLIENT_ADDRESS
  2379. Returns information about the address of the client. Returns
  2380. essentially a @code{struct sockaddr **} (since the API returns
  2381. a @code{union MHD_ConnectionInfo *} and that union contains
  2382. a @code{struct sockaddr *}).
  2383. Takes no extra arguments.
  2384. @item MHD_CONNECTION_INFO_GNUTLS_SESSION,
  2385. Takes no extra arguments. Allows access to the underlying GNUtls session,
  2386. including access to the underlying GNUtls client certificate
  2387. (HTTPS connections only). Takes no extra arguments.
  2388. @code{NULL} is returned for non-HTTPS connections.
  2389. Takes no extra arguments.
  2390. @item MHD_CONNECTION_INFO_GNUTLS_CLIENT_CERT,
  2391. Dysfunctional (never implemented, deprecated). Use
  2392. MHD_CONNECTION_INFO_GNUTLS_SESSION to get the @code{gnutls_session_t}
  2393. and then call @code{gnutls_certificate_get_peers()}.
  2394. @item MHD_CONNECTION_INFO_DAEMON
  2395. Returns information about @code{struct MHD_Daemon} which manages
  2396. this connection.
  2397. Takes no extra arguments.
  2398. @item MHD_CONNECTION_INFO_CONNECTION_FD
  2399. Returns the file descriptor (usually a TCP socket) associated with
  2400. this connection (in the ``connect-fd'' member of the returned struct).
  2401. Note that manipulating the descriptor directly can have problematic
  2402. consequences (as in, break HTTP). Applications might use this access
  2403. to manipulate TCP options, for example to set the ``TCP-NODELAY''
  2404. option for COMET-like applications. Note that MHD will set TCP-CORK
  2405. after sending the HTTP header and clear it after finishing the footers
  2406. automatically (if the platform supports it). As the connection
  2407. callbacks are invoked in between, those might be used to set different
  2408. values for TCP-CORK and TCP-NODELAY in the meantime.
  2409. Takes no extra arguments.
  2410. @item MHD_CONNECTION_INFO_CONNECTION_SUSPENDED
  2411. Returns pointer to an integer that is @code{MHD_YES} if the connection
  2412. is currently suspended (and thus can be safely resumed) and
  2413. @code{MHD_NO} otherwise.
  2414. Takes no extra arguments.
  2415. @item MHD_CONNECTION_INFO_SOCKET_CONTEXT
  2416. Returns the client-specific pointer to a @code{void *} that was
  2417. (possibly) set during a @code{MHD_NotifyConnectionCallback} when the
  2418. socket was first accepted. Note that this is NOT the same as the
  2419. @code{con_cls} argument of the @code{MHD_AccessHandlerCallback}. The
  2420. @code{con_cls} is fresh for each HTTP request, while the
  2421. @code{socket_context} is fresh for each socket.
  2422. Takes no extra arguments.
  2423. @item MHD_CONNECTION_INFO_CONNECTION_TIMEOUT
  2424. Returns pointer to an @code{unsigned int} that is the current timeout
  2425. used for the connection (in seconds, 0 for no timeout). Note that
  2426. while suspended connections will not timeout, the timeout value
  2427. returned for suspended connections will be the timeout that the
  2428. connection will use after it is resumed, and thus might not be zero.
  2429. Takes no extra arguments.
  2430. @item MHD_CONNECTION_INFO_REQUEST_HEADER_SIZE
  2431. @cindex performance
  2432. Returns pointer to an @code{size_t} that represents the size of the
  2433. HTTP header received from the client. Only valid after the first callback
  2434. to the access handler.
  2435. Takes no extra arguments.
  2436. @end table
  2437. @end deftp
  2438. @c ------------------------------------------------------------
  2439. @node microhttpd-option conn
  2440. @section Setting custom options for an individual connection
  2441. @cindex timeout
  2442. @deftypefun {int} MHD_set_connection_option (struct MHD_Connection *daemon, enum MHD_CONNECTION_OPTION option, ...)
  2443. Set a custom option for the given connection.
  2444. @table @var
  2445. @item connection
  2446. the connection for which an option should be set or modified;
  2447. @item option
  2448. option to set
  2449. @item ...
  2450. additional arguments for the option (depending on option)
  2451. @end table
  2452. Returns @code{MHD_YES} on success, @code{MHD_NO} for errors
  2453. (i.e. option argument invalid or option unknown).
  2454. @end deftypefun
  2455. @deftp {Enumeration} MHD_CONNECTION_OPTION
  2456. Values of this enum are used to specify which option for a
  2457. connection should be changed.
  2458. @table @code
  2459. @item MHD_CONNECTION_OPTION_TIMEOUT
  2460. Set a custom timeout for the given connection. Specified
  2461. as the number of seconds, given as an @code{unsigned int}. Use
  2462. zero for no timeout.
  2463. @end table
  2464. @end deftp
  2465. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2466. @c ------------------------------------------------------------
  2467. @node microhttpd-util
  2468. @chapter Utility functions.
  2469. @menu
  2470. * microhttpd-util feature:: Test supported MHD features
  2471. * microhttpd-util unescape:: Unescape strings
  2472. @end menu
  2473. @c ------------------------------------------------------------
  2474. @node microhttpd-util feature
  2475. @section Testing for supported MHD features
  2476. @deftp {Enumeration} MHD_FEATURE
  2477. Values of this enum are used to specify what
  2478. information about a daemon is desired.
  2479. @table @code
  2480. @item MHD_FEATURE_MESSAGES
  2481. Get whether messages are supported. If supported then in debug
  2482. mode messages can be printed to stderr or to external logger.
  2483. @item MHD_FEATURE_SSL
  2484. Get whether HTTPS is supported. If supported then flag
  2485. MHD_USE_SSL and options MHD_OPTION_HTTPS_MEM_KEY,
  2486. MHD_OPTION_HTTPS_MEM_CERT, MHD_OPTION_HTTPS_MEM_TRUST,
  2487. MHD_OPTION_HTTPS_MEM_DHPARAMS, MHD_OPTION_HTTPS_CRED_TYPE,
  2488. MHD_OPTION_HTTPS_PRIORITIES can be used.
  2489. @item MHD_FEATURE_HTTPS_CERT_CALLBACK
  2490. Get whether option #MHD_OPTION_HTTPS_CERT_CALLBACK is
  2491. supported.
  2492. @item MHD_FEATURE_IPv6
  2493. Get whether IPv6 is supported. If supported then flag
  2494. MHD_USE_IPv6 can be used.
  2495. @item MHD_FEATURE_IPv6_ONLY
  2496. Get whether IPv6 without IPv4 is supported. If not supported
  2497. then IPv4 is always enabled in IPv6 sockets and
  2498. flag MHD_USE_DUAL_STACK if always used when MHD_USE_IPv6 is
  2499. specified.
  2500. @item MHD_FEATURE_POLL
  2501. Get whether @code{poll()} is supported. If supported then flag
  2502. MHD_USE_POLL can be used.
  2503. @item MHD_FEATURE_EPOLL
  2504. Get whether @code{epoll()} is supported. If supported then Flags
  2505. MHD_USE_EPOLL and
  2506. MHD_USE_EPOLL_INTERNAL_THREAD can be used.
  2507. @item MHD_FEATURE_SHUTDOWN_LISTEN_SOCKET
  2508. Get whether shutdown on listen socket to signal other
  2509. threads is supported. If not supported flag
  2510. MHD_USE_ITC is automatically forced.
  2511. @item MHD_FEATURE_SOCKETPAIR
  2512. Get whether a @code{socketpair()} is used internally instead of
  2513. a @code{pipe()} to signal other threads.
  2514. @item MHD_FEATURE_TCP_FASTOPEN
  2515. Get whether TCP Fast Open is supported. If supported then
  2516. flag MHD_USE_TCP_FASTOPEN and option
  2517. MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE can be used.
  2518. @item MHD_FEATURE_BASIC_AUTH
  2519. Get whether HTTP Basic authorization is supported. If supported
  2520. then functions @code{MHD_basic_auth_get_username_password()} and
  2521. @code{MHD_queue_basic_auth_fail_response()} can be used.
  2522. @item MHD_FEATURE_DIGEST_AUTH
  2523. Get whether HTTP Digest authorization is supported. If
  2524. supported then options MHD_OPTION_DIGEST_AUTH_RANDOM,
  2525. MHD_OPTION_NONCE_NC_SIZE and functions @code{MHD_digest_auth_check()},
  2526. can be used.
  2527. @item MHD_FEATURE_POSTPROCESSOR
  2528. Get whether postprocessor is supported. If supported then
  2529. functions @code{MHD_create_post_processor()},
  2530. @code{MHD_post_process()}, @code{MHD_destroy_post_processor()}
  2531. can be used.
  2532. @item MHD_FEATURE_SENDFILE
  2533. Get whether @code{sendfile()} is supported.
  2534. @end table
  2535. @end deftp
  2536. @deftypefun {int} MHD_is_feature_supported (enum MHD_FEATURE feature)
  2537. Get information about supported MHD features. Indicate that MHD was
  2538. compiled with or without support for particular feature. Some features
  2539. require additional support by the kernel. However, kernel support is not
  2540. checked by this function.
  2541. @table @var
  2542. @item feature
  2543. type of requested information
  2544. @end table
  2545. Returns @code{MHD_YES} if the feature is supported,
  2546. and @code{MHD_NO} if not.
  2547. @end deftypefun
  2548. @c ------------------------------------------------------------
  2549. @node microhttpd-util unescape
  2550. @section Unescape strings
  2551. @deftypefun {size_t} MHD_http_unescape (char *val)
  2552. Process escape sequences ('%HH') Updates val in place; the result
  2553. should be UTF-8 encoded and cannot be larger than the input. The
  2554. result must also still be 0-terminated.
  2555. @table @var
  2556. @item val
  2557. value to unescape (modified in the process), must be
  2558. a 0-terminated UTF-8 string.
  2559. @end table
  2560. Returns length of the resulting val (@code{strlen(val)} may be
  2561. shorter afterwards due to elimination of escape sequences).
  2562. @end deftypefun
  2563. @c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2564. @c **********************************************************
  2565. @c ******************* Appendices *************************
  2566. @c **********************************************************
  2567. @node GNU-LGPL
  2568. @unnumbered GNU-LGPL
  2569. @cindex license
  2570. @include lgpl.texi
  2571. @node eCos License
  2572. @unnumbered eCos License
  2573. @cindex license
  2574. @include ecos.texi
  2575. @node GNU-GPL
  2576. @unnumbered GNU General Public License
  2577. @cindex license
  2578. @include gpl-2.0.texi
  2579. @node GNU-FDL
  2580. @unnumbered GNU-FDL
  2581. @cindex license
  2582. @include fdl-1.3.texi
  2583. @node Concept Index
  2584. @unnumbered Concept Index
  2585. @printindex cp
  2586. @node Function and Data Index
  2587. @unnumbered Function and Data Index
  2588. @printindex fn
  2589. @node Type Index
  2590. @unnumbered Type Index
  2591. @printindex tp
  2592. @bye