libmicrohttpd.pp 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. {
  2. This file is part of the Free Pascal packages
  3. Copyright (c) 2015 by Silvio Clecio, Gilson Nunes and Joao Morais
  4. See the file COPYING.FPC, included in this distribution,
  5. for details about the copyright.
  6. This program is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  9. **********************************************************************
  10. The GNU libmicrohttpd library is governed by GNU copyright, see the
  11. GNU libmicrohttpd website for this:
  12. https://www.gnu.org/software/libmicrohttpd/
  13. }
  14. unit libmicrohttpd;
  15. interface
  16. uses
  17. {$IFDEF MSWINDOWS}
  18. WinSock2,
  19. {$ENDIF}
  20. {$IFDEF FPC}
  21. {$IFDEF UNIX}BaseUnix, Unix,{$ENDIF}CTypes, Sockets
  22. {$ELSE}
  23. WinTypes
  24. {$ENDIF};
  25. const
  26. MHD_LIB_NAME = {$IFDEF MSWINDOWS}'libmicrohttpd-10'{$ELSE}'microhttpd'{$ENDIF};
  27. {$IFDEF FPC}
  28. {$PACKRECORDS C}
  29. {$ENDIF}
  30. {$IFDEF UNIX}
  31. FD_SETSIZE = 64;
  32. {$ENDIF}
  33. {$IFDEF UINT64_MAX}
  34. MHD_SIZE_UNKNOWN = UINT64_MAX;
  35. {$ELSE}
  36. MHD_SIZE_UNKNOWN = -1;
  37. {$ENDIF}
  38. {$IFDEF SIZE_MAX}
  39. MHD_CONTENT_READER_END_OF_STREAM = SIZE_MAX;
  40. MHD_CONTENT_READER_END_WITH_ERROR = SIZE_MAX - 1;
  41. {$ELSE}
  42. MHD_CONTENT_READER_END_OF_STREAM = -1;
  43. MHD_CONTENT_READER_END_WITH_ERROR = -2;
  44. {$ENDIF}
  45. {$IFNDEF MHD_SOCKET_DEFINED}
  46. {$IF NOT DEFINED(WIN32) OR DEFINED(_SYS_TYPES_FD_SET)}
  47. MHD_POSIX_SOCKETS = 1;
  48. MHD_INVALID_SOCKET = -1;
  49. {$ELSE}
  50. MHD_WINSOCK_SOCKETS = 1;
  51. MHD_INVALID_SOCKET = INVALID_SOCKET;
  52. {$ENDIF}
  53. MHD_SOCKET_DEFINED = 1;
  54. {$ENDIF}
  55. MHD_VERSION = $00094601;
  56. MHD_YES = 1;
  57. MHD_NO = 0;
  58. MHD_INVALID_NONCE = -1;
  59. MHD_ICY_FLAG = -2147483648;
  60. MHD_LONG_LONG_PRINTF = 'll';
  61. MHD_UNSIGNED_LONG_LONG_PRINTF = '%llu';
  62. // HTTP codes
  63. MHD_HTTP_CONTINUE = 100;
  64. MHD_HTTP_SWITCHING_PROTOCOLS = 101;
  65. MHD_HTTP_PROCESSING = 102;
  66. MHD_HTTP_OK = 200;
  67. MHD_HTTP_CREATED = 201;
  68. MHD_HTTP_ACCEPTED = 202;
  69. MHD_HTTP_NON_AUTHORITATIVE_INFORMATION = 203;
  70. MHD_HTTP_NO_CONTENT = 204;
  71. MHD_HTTP_RESET_CONTENT = 205;
  72. MHD_HTTP_PARTIAL_CONTENT = 206;
  73. MHD_HTTP_MULTI_STATUS = 207;
  74. MHD_HTTP_MULTIPLE_CHOICES = 300;
  75. MHD_HTTP_MOVED_PERMANENTLY = 301;
  76. MHD_HTTP_FOUND = 302;
  77. MHD_HTTP_SEE_OTHER = 303;
  78. MHD_HTTP_NOT_MODIFIED = 304;
  79. MHD_HTTP_USE_PROXY = 305;
  80. MHD_HTTP_SWITCH_PROXY = 306;
  81. MHD_HTTP_TEMPORARY_REDIRECT = 307;
  82. MHD_HTTP_BAD_REQUEST = 400;
  83. MHD_HTTP_UNAUTHORIZED = 401;
  84. MHD_HTTP_PAYMENT_REQUIRED = 402;
  85. MHD_HTTP_FORBIDDEN = 403;
  86. MHD_HTTP_NOT_FOUND = 404;
  87. MHD_HTTP_METHOD_NOT_ALLOWED = 405;
  88. MHD_HTTP_NOT_ACCEPTABLE = 406;
  89. MHD_HTTP_PROXY_AUTHENTICATION_REQUIRED = 407;
  90. MHD_HTTP_REQUEST_TIMEOUT = 408;
  91. MHD_HTTP_CONFLICT = 409;
  92. MHD_HTTP_GONE = 410;
  93. MHD_HTTP_LENGTH_REQUIRED = 411;
  94. MHD_HTTP_PRECONDITION_FAILED = 412;
  95. MHD_HTTP_REQUEST_ENTITY_TOO_LARGE = 413;
  96. MHD_HTTP_REQUEST_URI_TOO_LONG = 414;
  97. MHD_HTTP_UNSUPPORTED_MEDIA_TYPE = 415;
  98. MHD_HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
  99. MHD_HTTP_EXPECTATION_FAILED = 417;
  100. MHD_HTTP_UNPROCESSABLE_ENTITY = 422;
  101. MHD_HTTP_LOCKED = 423;
  102. MHD_HTTP_FAILED_DEPENDENCY = 424;
  103. MHD_HTTP_UNORDERED_COLLECTION = 425;
  104. MHD_HTTP_UPGRADE_REQUIRED = 426;
  105. MHD_HTTP_NO_RESPONSE = 444;
  106. MHD_HTTP_RETRY_WITH = 449;
  107. MHD_HTTP_BLOCKED_BY_WINDOWS_PARENTAL_CONTROLS = 450;
  108. MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451;
  109. MHD_HTTP_INTERNAL_SERVER_ERROR = 500;
  110. MHD_HTTP_NOT_IMPLEMENTED = 501;
  111. MHD_HTTP_BAD_GATEWAY = 502;
  112. MHD_HTTP_SERVICE_UNAVAILABLE = 503;
  113. MHD_HTTP_GATEWAY_TIMEOUT = 504;
  114. MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED = 505;
  115. MHD_HTTP_VARIANT_ALSO_NEGOTIATES = 506;
  116. MHD_HTTP_INSUFFICIENT_STORAGE = 507;
  117. MHD_HTTP_BANDWIDTH_LIMIT_EXCEEDED = 509;
  118. MHD_HTTP_NOT_EXTENDED = 510;
  119. // HTTP headers
  120. MHD_HTTP_HEADER_ACCEPT = 'Accept';
  121. MHD_HTTP_HEADER_ACCEPT_CHARSET = 'Accept-Charset';
  122. MHD_HTTP_HEADER_ACCEPT_ENCODING = 'Accept-Encoding';
  123. MHD_HTTP_HEADER_ACCEPT_LANGUAGE = 'Accept-Language';
  124. MHD_HTTP_HEADER_ACCEPT_RANGES = 'Accept-Ranges';
  125. MHD_HTTP_HEADER_AGE = 'Age';
  126. MHD_HTTP_HEADER_ALLOW = 'Allow';
  127. MHD_HTTP_HEADER_AUTHORIZATION = 'Authorization';
  128. MHD_HTTP_HEADER_CACHE_CONTROL = 'Cache-Control';
  129. MHD_HTTP_HEADER_CONNECTION = 'Connection';
  130. MHD_HTTP_HEADER_CONTENT_ENCODING = 'Content-Encoding';
  131. MHD_HTTP_HEADER_CONTENT_LANGUAGE = 'Content-Language';
  132. MHD_HTTP_HEADER_CONTENT_LENGTH = 'Content-Length';
  133. MHD_HTTP_HEADER_CONTENT_LOCATION = 'Content-Location';
  134. MHD_HTTP_HEADER_CONTENT_MD5 = 'Content-MD5';
  135. MHD_HTTP_HEADER_CONTENT_RANGE = 'Content-Range';
  136. MHD_HTTP_HEADER_CONTENT_TYPE = 'Content-Type';
  137. MHD_HTTP_HEADER_COOKIE = 'Cookie';
  138. MHD_HTTP_HEADER_DATE = 'Date';
  139. MHD_HTTP_HEADER_ETAG = 'ETag';
  140. MHD_HTTP_HEADER_EXPECT = 'Expect';
  141. MHD_HTTP_HEADER_EXPIRES = 'Expires';
  142. MHD_HTTP_HEADER_FROM = 'From';
  143. MHD_HTTP_HEADER_HOST = 'Host';
  144. MHD_HTTP_HEADER_IF_MATCH = 'If-Match';
  145. MHD_HTTP_HEADER_IF_MODIFIED_SINCE = 'If-Modified-Since';
  146. MHD_HTTP_HEADER_IF_NONE_MATCH = 'If-None-Match';
  147. MHD_HTTP_HEADER_IF_RANGE = 'If-Range';
  148. MHD_HTTP_HEADER_IF_UNMODIFIED_SINCE = 'If-Unmodified-Since';
  149. MHD_HTTP_HEADER_LAST_MODIFIED = 'Last-Modified';
  150. MHD_HTTP_HEADER_LOCATION = 'Location';
  151. MHD_HTTP_HEADER_MAX_FORWARDS = 'Max-Forwards';
  152. MHD_HTTP_HEADER_PRAGMA = 'Pragma';
  153. MHD_HTTP_HEADER_PROXY_AUTHENTICATE = 'Proxy-Authenticate';
  154. MHD_HTTP_HEADER_PROXY_AUTHORIZATION = 'Proxy-Authorization';
  155. MHD_HTTP_HEADER_RANGE = 'Range';
  156. MHD_HTTP_HEADER_REFERER = 'Referer';
  157. MHD_HTTP_HEADER_RETRY_AFTER = 'Retry-After';
  158. MHD_HTTP_HEADER_SERVER = 'Server';
  159. MHD_HTTP_HEADER_SET_COOKIE = 'Set-Cookie';
  160. MHD_HTTP_HEADER_SET_COOKIE2 = 'Set-Cookie2';
  161. MHD_HTTP_HEADER_TE = 'TE';
  162. MHD_HTTP_HEADER_TRAILER = 'Trailer';
  163. MHD_HTTP_HEADER_TRANSFER_ENCODING = 'Transfer-Encoding';
  164. MHD_HTTP_HEADER_UPGRADE = 'Upgrade';
  165. MHD_HTTP_HEADER_USER_AGENT = 'User-Agent';
  166. MHD_HTTP_HEADER_VARY = 'Vary';
  167. MHD_HTTP_HEADER_VIA = 'Via';
  168. MHD_HTTP_HEADER_WARNING = 'Warning';
  169. MHD_HTTP_HEADER_WWW_AUTHENTICATE = 'WWW-Authenticate';
  170. MHD_HTTP_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN = 'Access-Control-Allow-Origin';
  171. MHD_HTTP_HEADER_CONTENT_DISPOSITION = 'Content-Disposition';
  172. MHD_HTTP_VERSION_1_0 = 'HTTP/1.0';
  173. MHD_HTTP_VERSION_1_1 = 'HTTP/1.1';
  174. MHD_HTTP_METHOD_CONNECT = 'CONNECT';
  175. MHD_HTTP_METHOD_DELETE = 'DELETE';
  176. MHD_HTTP_METHOD_GET = 'GET';
  177. MHD_HTTP_METHOD_HEAD = 'HEAD';
  178. MHD_HTTP_METHOD_OPTIONS = 'OPTIONS';
  179. MHD_HTTP_METHOD_POST = 'POST';
  180. MHD_HTTP_METHOD_PUT = 'PUT';
  181. MHD_HTTP_METHOD_PATCH = 'PATCH';
  182. MHD_HTTP_METHOD_TRACE = 'TRACE';
  183. MHD_HTTP_POST_ENCODING_FORM_URLENCODED = 'application/x-www-form-urlencoded';
  184. MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA = 'multipart/form-data';
  185. // MHD_ValueKind enum items
  186. MHD_RESPONSE_HEADER_KIND = 0;
  187. MHD_HEADER_KIND = 1;
  188. MHD_COOKIE_KIND = 2;
  189. MHD_POSTDATA_KIND = 4;
  190. MHD_GET_ARGUMENT_KIND = 8;
  191. MHD_FOOTER_KIND = 16;
  192. // MHD_FLAG enum items
  193. MHD_NO_FLAG = 0;
  194. MHD_USE_DEBUG = 1;
  195. MHD_USE_SSL = 2;
  196. MHD_USE_THREAD_PER_CONNECTION = 4;
  197. MHD_USE_SELECT_INTERNALLY = 8;
  198. MHD_USE_IPv6 = 16;
  199. MHD_USE_PEDANTIC_CHECKS = 32;
  200. MHD_USE_POLL = 64;
  201. MHD_USE_POLL_INTERNALLY = MHD_USE_SELECT_INTERNALLY or MHD_USE_POLL;
  202. MHD_SUPPRESS_DATE_NO_CLOCK = 128;
  203. MHD_USE_NO_LISTEN_SOCKET = 256;
  204. MHD_USE_EPOLL_LINUX_ONLY = 512;
  205. MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY = MHD_USE_SELECT_INTERNALLY or MHD_USE_EPOLL_LINUX_ONLY;
  206. MHD_USE_PIPE_FOR_SHUTDOWN = 1024;
  207. MHD_USE_DUAL_STACK = MHD_USE_IPv6 or 2048;
  208. MHD_USE_EPOLL_TURBO = 4096;
  209. MHD_USE_SUSPEND_RESUME = 8192 or MHD_USE_PIPE_FOR_SHUTDOWN;
  210. MHD_USE_TCP_FASTOPEN = 16384;
  211. // MHD_OPTION enum items
  212. MHD_OPTION_END = 0;
  213. MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1;
  214. MHD_OPTION_CONNECTION_LIMIT = 2;
  215. MHD_OPTION_CONNECTION_TIMEOUT = 3;
  216. MHD_OPTION_NOTIFY_COMPLETED = 4;
  217. MHD_OPTION_PER_IP_CONNECTION_LIMIT = 5;
  218. MHD_OPTION_SOCK_ADDR = 6;
  219. MHD_OPTION_URI_LOG_CALLBACK = 7;
  220. MHD_OPTION_HTTPS_MEM_KEY = 8;
  221. MHD_OPTION_HTTPS_MEM_CERT = 9;
  222. MHD_OPTION_HTTPS_CRED_TYPE = 10;
  223. MHD_OPTION_HTTPS_PRIORITIES = 11;
  224. MHD_OPTION_LISTEN_SOCKET = 12;
  225. MHD_OPTION_EXTERNAL_LOGGER = 13;
  226. MHD_OPTION_THREAD_POOL_SIZE = 14;
  227. MHD_OPTION_ARRAY = 15;
  228. MHD_OPTION_UNESCAPE_CALLBACK = 16;
  229. MHD_OPTION_DIGEST_AUTH_RANDOM = 17;
  230. MHD_OPTION_NONCE_NC_SIZE = 18;
  231. MHD_OPTION_THREAD_STACK_SIZE = 19;
  232. MHD_OPTION_HTTPS_MEM_TRUST = 20;
  233. MHD_OPTION_CONNECTION_MEMORY_INCREMENT = 21;
  234. MHD_OPTION_HTTPS_CERT_CALLBACK = 22;
  235. MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE = 23;
  236. MHD_OPTION_HTTPS_MEM_DHPARAMS = 24;
  237. MHD_OPTION_LISTENING_ADDRESS_REUSE = 25;
  238. MHD_OPTION_HTTPS_KEY_PASSWORD = 26;
  239. MHD_OPTION_NOTIFY_CONNECTION = 27;
  240. // MHD_RequestTerminationCode enum items
  241. MHD_REQUEST_TERMINATED_COMPLETED_OK = 0;
  242. MHD_REQUEST_TERMINATED_WITH_ERROR = 1;
  243. MHD_REQUEST_TERMINATED_TIMEOUT_REACHED = 2;
  244. MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN = 3;
  245. MHD_REQUEST_TERMINATED_READ_ERROR = 4;
  246. MHD_REQUEST_TERMINATED_CLIENT_ABORT = 5;
  247. // MHD_ConnectionNotificationCode enum items
  248. MHD_CONNECTION_NOTIFY_STARTED = 0;
  249. MHD_CONNECTION_NOTIFY_CLOSED = 1;
  250. // MHD_ConnectionInfoType enum items
  251. MHD_CONNECTION_INFO_CIPHER_ALGO = 0;
  252. MHD_CONNECTION_INFO_PROTOCOL = 1;
  253. MHD_CONNECTION_INFO_CLIENT_ADDRESS = 2;
  254. MHD_CONNECTION_INFO_GNUTLS_SESSION = 3;
  255. MHD_CONNECTION_INFO_GNUTLS_CLIENT_CERT = 4;
  256. MHD_CONNECTION_INFO_DAEMON = 5;
  257. MHD_CONNECTION_INFO_CONNECTION_FD = 6;
  258. MHD_CONNECTION_INFO_SOCKET_CONTEXT = 7;
  259. // MHD_DaemonInfoType enum items
  260. MHD_DAEMON_INFO_KEY_SIZE = 0;
  261. MHD_DAEMON_INFO_MAC_KEY_SIZE = 1;
  262. MHD_DAEMON_INFO_LISTEN_FD = 2;
  263. MHD_DAEMON_INFO_EPOLL_FD_LINUX_ONLY = 3;
  264. MHD_DAEMON_INFO_CURRENT_CONNECTIONS = 4;
  265. // MHD_ResponseFlags enum items
  266. MHD_RF_NONE = 0;
  267. MHD_RF_HTTP_VERSION_1_0_ONLY = 1;
  268. // MHD_ResponseOptions enum items
  269. MHD_RO_END = 0;
  270. // MHD_ResponseMemoryMode enum items
  271. MHD_RESPMEM_PERSISTENT = 0;
  272. MHD_RESPMEM_MUST_FREE = 1;
  273. MHD_RESPMEM_MUST_COPY = 2;
  274. // MHD_CONNECTION_OPTION enum items
  275. MHD_CONNECTION_OPTION_TIMEOUT = 0;
  276. // MHD_FEATURE enum items
  277. MHD_FEATURE_MESSGES = 1;
  278. MHD_FEATURE_SSL = 2;
  279. MHD_FEATURE_HTTPS_CERT_CALLBACK = 3;
  280. MHD_FEATURE_IPv6 = 4;
  281. MHD_FEATURE_IPv6_ONLY = 5;
  282. MHD_FEATURE_POLL = 6;
  283. MHD_FEATURE_EPOLL = 7;
  284. MHD_FEATURE_SHUTDOWN_LISTEN_SOCKET = 8;
  285. MHD_FEATURE_SOCKETPAIR = 9;
  286. MHD_FEATURE_TCP_FASTOPEN = 10;
  287. MHD_FEATURE_BASIC_AUTH = 11;
  288. MHD_FEATURE_DIGEST_AUTH = 12;
  289. MHD_FEATURE_POSTPROCESSOR = 13;
  290. MHD_FEATURE_HTTPS_KEY_PASSWORD = 14;
  291. MHD_FEATURE_LARGE_FILE = 15;
  292. type
  293. Pcchar = PAnsiChar;
  294. Ppcchar = ^Pcchar;
  295. va_list = Pointer;
  296. {$IFDEF FPC}
  297. cint = CTypes.cint;
  298. cuint = CTypes.cuint;
  299. cuint16 = CTypes.cuint16;
  300. cuint64 = CTypes.cuint64;
  301. culonglong = CTypes.culonglong;
  302. socklen_t = {$IFDEF UNIX}BaseUnix.socklen_t{$ELSE}LongInt{$ENDIF};
  303. size_t = {$IFDEF UNIX}BaseUnix{$ELSE}Sockets{$ENDIF}.size_t;
  304. Psize_t = {$IFDEF UNIX}BaseUnix.pSize_t{$ELSE}^Sockets.size_t{$ENDIF};
  305. Pfd_set = {$IFDEF UNIX}BaseUnix.pFDSet{$ELSE}WinSock2.PFDSet{$ENDIF};
  306. ssize_t = {$IFDEF UNIX}BaseUnix{$ELSE}Sockets{$ENDIF}.ssize_t;
  307. psockaddr = Sockets.psockaddr;
  308. {$ELSE}
  309. cint = LongInt;
  310. cuint = LongWord;
  311. cuint16 = Word;
  312. cuint64 = UInt64;
  313. culonglong = UInt64;
  314. socklen_t = LongInt;
  315. size_t = WinTypes.SIZE_T;
  316. Psize_t = WinTypes.PSIZE_T;
  317. Pfd_set = WinSock2.PFdSet;
  318. ssize_t = WinTypes.SSIZE_T;
  319. psockaddr = WinSock2.PSockAddr;
  320. {$ENDIF}
  321. {$IFNDEF MHD_SOCKET_DEFINED}
  322. PMHD_socket = ^MHD_socket;
  323. {$IF NOT DEFINED(WIN32) OR DEFINED(_SYS_TYPES_FD_SET)}
  324. MHD_socket = cint;
  325. {$ELSE}
  326. MHD_socket = TSocket;
  327. {$ENDIF}
  328. {$ENDIF}
  329. MHD_LONG_LONG = clonglong;
  330. PMHD_LONG_LONG = ^MHD_LONG_LONG;
  331. MHD_UNSIGNED_LONG_LONG = culonglong;
  332. PMHD_UNSIGNED_LONG_LONG = ^MHD_UNSIGNED_LONG_LONG;
  333. // enums
  334. MHD_ValueKind = LongInt;
  335. MHD_FLAG = LongInt;
  336. MHD_OPTION = LongInt;
  337. MHD_RequestTerminationCode = LongInt;
  338. MHD_ConnectionNotificationCode = LongInt;
  339. MHD_ConnectionInfoType = LongInt;
  340. MHD_DaemonInfoType = LongInt;
  341. MHD_ResponseFlags = LongInt;
  342. MHD_ResponseOptions = LongInt;
  343. MHD_ResponseMemoryMode = LongInt;
  344. MHD_CONNECTION_OPTION = LongInt;
  345. MHD_FEATURE = LongInt;
  346. MHD_Daemon = record
  347. end;
  348. PMHD_Daemon = ^MHD_Daemon;
  349. MHD_Connection = record
  350. end;
  351. PMHD_Connection = ^MHD_Connection;
  352. MHD_Response = record
  353. end;
  354. PMHD_Response = ^MHD_Response;
  355. MHD_PostProcessor = record
  356. end;
  357. PMHD_PostProcessor = ^MHD_PostProcessor;
  358. MHD_OptionItem = record
  359. option: MHD_OPTION;
  360. value: ssize_t;
  361. ptr_value: Pointer;
  362. end;
  363. PMHD_OptionItem = ^MHD_OptionItem;
  364. MHD_ConnectionInfo = record
  365. case LongInt of
  366. 0: (cipher_algorithm: cint);
  367. 1: (protocol: cint);
  368. 2: (connect_fd: MHD_socket);
  369. 3: (tls_session: Pointer);
  370. 4: (client_cert: Pointer);
  371. 5: (client_addr: psockaddr);
  372. 6: (daemon: PMHD_Daemon);
  373. 7: (socket_context: ^Pointer);
  374. end;
  375. PMHD_ConnectionInfo = ^MHD_ConnectionInfo;
  376. MHD_DaemonInfo = record
  377. case LongInt of
  378. 0: (key_size: size_t);
  379. 1: (mac_key_size: size_t);
  380. 2: (listen_fd: MHD_socket);
  381. 3: (num_connections: cuint);
  382. end;
  383. PMHD_DaemonInfo = ^MHD_DaemonInfo;
  384. MHD_LogCallback = procedure(cls: Pointer; fm: Pcchar; ap: va_list); cdecl;
  385. MHD_PanicCallback = procedure(cls: Pointer; &file: Pcchar; line: cuint; reason: Pcchar); cdecl;
  386. MHD_AcceptPolicyCallback = function(cls: Pointer; addr: psockaddr; addrlen: socklen_t): cint; cdecl;
  387. MHD_AccessHandlerCallback = function(cls: Pointer; connection: PMHD_Connection; url: Pcchar; method: Pcchar; version: Pcchar; upload_data: Pcchar; upload_data_size: pSize_t; con_cls: PPointer): cint; cdecl;
  388. MHD_RequestCompletedCallback = procedure(cls: Pointer; connection: PMHD_Connection; con_cls: PPointer; toe: MHD_RequestTerminationCode); cdecl;
  389. MHD_NotifyConnectionCallback = procedure(cls: Pointer; connection: PMHD_Connection; socket_context: PPointer; toe: MHD_ConnectionNotificationCode); cdecl;
  390. MHD_KeyValueIterator = function(cls: Pointer; kind: MHD_ValueKind; key: Pcchar; value: Pcchar): cint; cdecl;
  391. MHD_ContentReaderCallback = function(cls: pointer; pos: cuint64; buf: Pcchar; max: size_t): ssize_t; cdecl;
  392. MHD_ContentReaderFreeCallback = procedure(cls: Pointer); cdecl;
  393. MHD_PostDataIterator = function(cls: Pointer; kind: MHD_ValueKind; key: Pcchar; filename: Pcchar; content_type: Pcchar; transfer_encoding: Pcchar; data: Pcchar; off: cuint64; size: size_t): cint; cdecl;
  394. function MHD_get_reason_phrase_for(code: cuint): Pcchar; cdecl; external MHD_LIB_NAME name 'MHD_get_reason_phrase_for';
  395. function MHD_start_daemon_va(flags: cuint; port: cuint16; apc: MHD_AcceptPolicyCallback; apc_cls: Pointer; dh: MHD_AccessHandlerCallback; dh_cls: Pointer; ap: va_list): PMHD_Daemon; cdecl; external MHD_LIB_NAME name 'MHD_start_daemon_va';
  396. function MHD_start_daemon(flags: cuint; port: cuint16; apc: MHD_AcceptPolicyCallback; apc_cls: Pointer; dh: MHD_AccessHandlerCallback; dh_cls: Pointer): PMHD_Daemon; cdecl; varargs; external MHD_LIB_NAME name 'MHD_start_daemon';
  397. function MHD_quiesce_daemon(daemon: PMHD_Daemon): MHD_socket; cdecl; external MHD_LIB_NAME name 'MHD_quiesce_daemon';
  398. procedure MHD_stop_daemon(daemon: PMHD_Daemon); cdecl; external MHD_LIB_NAME name 'MHD_stop_daemon';
  399. function MHD_add_connection(daemon: PMHD_Daemon; client_socket: MHD_socket; addr: psockaddr; addrlen: socklen_t): cint; cdecl; external MHD_LIB_NAME name 'MHD_add_connection';
  400. function MHD_get_fdset(daemon: PMHD_Daemon; read_fd_set: Pfd_set; write_fd_set: Pfd_set; except_fd_set: Pfd_set; max_fd: PMHD_socket): cint; cdecl; external MHD_LIB_NAME name 'MHD_get_fdset';
  401. function MHD_get_fdset2(daemon: PMHD_Daemon; read_fd_set: Pfd_set; write_fd_set: Pfd_set; except_fd_set: Pfd_set; max_fd: PMHD_socket; fd_setsize: cuint): cint; cdecl; external MHD_LIB_NAME name 'MHD_get_fdset2';
  402. function MHD_get_timeout(daemon: PMHD_Daemon; timeout: PMHD_UNSIGNED_LONG_LONG): cint; cdecl; external MHD_LIB_NAME name 'MHD_get_timeout';
  403. function MHD_run(daemon: PMHD_Daemon): cint; cdecl; external MHD_LIB_NAME name 'MHD_run';
  404. function MHD_run_from_select(daemon: PMHD_Daemon; read_fd_set: Pfd_set; write_fd_set: Pfd_set; except_fd_set: Pfd_set): cint; cdecl; external MHD_LIB_NAME name 'MHD_run_from_select';
  405. function MHD_get_connection_values(connection: PMHD_Connection; kind: MHD_ValueKind; iterator: MHD_KeyValueIterator; iterator_cls: pointer): cint; cdecl; external MHD_LIB_NAME name 'MHD_get_connection_values';
  406. function MHD_set_connection_value(connection: PMHD_Connection; kind: MHD_ValueKind; key: Pcchar; value: Pcchar): cint; cdecl; external MHD_LIB_NAME name 'MHD_set_connection_value';
  407. procedure MHD_set_panic_func(cb: MHD_PanicCallback; cls: Pointer); cdecl; external MHD_LIB_NAME name 'MHD_set_panic_func';
  408. function MHD_http_unescape(val: Pcchar): size_t; cdecl; external MHD_LIB_NAME name 'MHD_http_unescape';
  409. function MHD_lookup_connection_value(connection: PMHD_Connection; kind: MHD_ValueKind; key: Pcchar): Pcchar; cdecl; external MHD_LIB_NAME name 'MHD_lookup_connection_value';
  410. function MHD_queue_response(connection: PMHD_Connection; status_code: cuint; response: PMHD_Response): cint; cdecl; external MHD_LIB_NAME name 'MHD_queue_response';
  411. procedure MHD_suspend_connection(connection: PMHD_Connection); cdecl; external MHD_LIB_NAME name 'MHD_suspend_connection';
  412. procedure MHD_resume_connection(connection: PMHD_Connection); cdecl; external MHD_LIB_NAME name 'MHD_resume_connection';
  413. function MHD_set_response_options(response: PMHD_Response; flags: MHD_ResponseFlags): cint; cdecl; varargs; external MHD_LIB_NAME name 'MHD_set_response_options';
  414. function MHD_create_response_from_callback(size: cuint64; block_size: size_t; crc: MHD_ContentReaderCallback; crc_cls: pointer; crfc: MHD_ContentReaderFreeCallback): PMHD_Response; cdecl; external MHD_LIB_NAME name 'MHD_create_response_from_callback';
  415. function MHD_create_response_from_buffer(size: size_t; buffer: Pointer; mode: MHD_ResponseMemoryMode): PMHD_Response; cdecl; external MHD_LIB_NAME name 'MHD_create_response_from_buffer';
  416. function MHD_create_response_from_fd(size: size_t; fd: cint): PMHD_Response; cdecl; external MHD_LIB_NAME name 'MHD_create_response_from_fd';
  417. function MHD_create_response_from_fd64(size: cuint64; fd: cint): PMHD_Response; cdecl; external MHD_LIB_NAME name 'MHD_create_response_from_fd64';
  418. function MHD_create_response_from_fd_at_offset64(size: cuint64; fd: cint; offset: cuint64): PMHD_Response;cdecl;external MHD_LIB_NAME name 'MHD_create_response_from_fd_at_offset64';
  419. procedure MHD_destroy_response(response: PMHD_Response); cdecl; external MHD_LIB_NAME name 'MHD_destroy_response';
  420. function MHD_add_response_header(response: PMHD_Response; header: Pcchar; content: Pcchar): cint; cdecl; external MHD_LIB_NAME name 'MHD_add_response_header';
  421. function MHD_add_response_footer(response: PMHD_Response; footer: Pcchar; content: Pcchar): cint; cdecl; external MHD_LIB_NAME name 'MHD_add_response_footer';
  422. function MHD_del_response_header(response: PMHD_Response; header: Pcchar; content: Pcchar): cint; cdecl; external MHD_LIB_NAME name 'MHD_del_response_header';
  423. function MHD_get_response_headers(response: PMHD_Response; iterator: MHD_KeyValueIterator; iterator_cls: Pointer): cint; cdecl; external MHD_LIB_NAME name 'MHD_get_response_headers';
  424. function MHD_get_response_header(response: PMHD_Response; key: Pcchar): Pcchar; cdecl; external MHD_LIB_NAME name 'MHD_get_response_header';
  425. function MHD_create_post_processor(connection: PMHD_Connection; buffer_size: size_t; iter: MHD_PostDataIterator; iter_cls: pointer): PMHD_PostProcessor; cdecl; external MHD_LIB_NAME name 'MHD_create_post_processor';
  426. function MHD_post_process(pp: PMHD_PostProcessor; post_data: Pcchar; post_data_len: size_t): cint; cdecl; external MHD_LIB_NAME name 'MHD_post_process';
  427. function MHD_destroy_post_processor(pp: PMHD_PostProcessor): cint; cdecl; external MHD_LIB_NAME name 'MHD_destroy_post_processor';
  428. function MHD_digest_auth_get_username(connection: PMHD_Connection): Pcchar; cdecl; external MHD_LIB_NAME name 'MHD_digest_auth_get_username';
  429. function MHD_digest_auth_check(connection: PMHD_Connection; realm: Pcchar; username: Pcchar; password: Pcchar; nonce_timeout: cuint): cint; cdecl; external MHD_LIB_NAME name 'MHD_digest_auth_check';
  430. function MHD_queue_auth_fail_response(connection: PMHD_Connection; realm: Pcchar; opaque: Pcchar; response: PMHD_Response; signal_stale: cint): cint; cdecl; external MHD_LIB_NAME name 'MHD_queue_auth_fail_response';
  431. function MHD_basic_auth_get_username_password(connection: PMHD_Connection; password: PPcchar): Pcchar; cdecl; external MHD_LIB_NAME name 'MHD_basic_auth_get_username_password';
  432. function MHD_queue_basic_auth_fail_response(connection: PMHD_Connection; realm: Pcchar; response: PMHD_Response): cint; cdecl; external MHD_LIB_NAME name 'MHD_queue_basic_auth_fail_response';
  433. function MHD_get_connection_info(connection: PMHD_Connection; info_type: MHD_ConnectionInfoType): PMHD_ConnectionInfo; cdecl; varargs; external MHD_LIB_NAME name 'MHD_get_connection_info';
  434. function MHD_set_connection_option(connection: PMHD_Connection; option: MHD_CONNECTION_OPTION): cint; cdecl; varargs; external MHD_LIB_NAME name 'MHD_set_connection_option';
  435. function MHD_get_daemon_info(daemon: PMHD_Daemon; info_type: MHD_DaemonInfoType): PMHD_DaemonInfo; cdecl; varargs; external MHD_LIB_NAME name 'MHD_get_daemon_info';
  436. function MHD_get_version: Pcchar; cdecl; external MHD_LIB_NAME name 'MHD_get_version';
  437. function MHD_is_feature_supported(feature: MHD_FEATURE): cint; cdecl; external MHD_LIB_NAME name 'MHD_is_feature_supported';
  438. implementation
  439. end.