libmicrohttpd.vapi 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. [CCode (cheader_filename = "microhttpd.h")]
  2. namespace MHD {
  3. [CCode (cname = "enum MHD_ValueKind", cprefix = "MHD_")]
  4. public enum ValueKind {
  5. RESPONSE_HEADER_KIND,
  6. HEADER_KIND,
  7. COOKIE_KIND,
  8. POSTDATA_KIND,
  9. GET_ARGUMENT_KIND,
  10. FOOTER_KIND
  11. }
  12. [CCode (cname = "enum MHD_RequestTerminationCode", cprefix = "MHD_REQUEST_TERMINATED_")]
  13. public enum RequestTerminationCode {
  14. COMPLETED_OK,
  15. WITH_ERROR,
  16. TIMEOUT_REACHED,
  17. DAEMON_SHUTDOWN,
  18. READ_ERROR,
  19. CLIENT_ABORT
  20. }
  21. [CCode (cname = "enum MHD_ResponseMemoryMode", cprefix = "MHD_")]
  22. public enum ResponseMemoryMode {
  23. RESPMEM_PERSISTENT,
  24. RESPMEM_MUST_FREE,
  25. RESPMEM_MUST_COPY
  26. }
  27. [CCode (cname = "MHD_CONTENT_READER_END_OF_STREAM")]
  28. public const ssize_t CONTENT_READER_END_OF_STREAM;
  29. [CCode (cname = "MHD_CONTENT_READER_END_WITH_ERROR")]
  30. public const ssize_t CONTENT_READER_END_WITH_ERROR;
  31. [CCode (cname = "MHD_USE_SELECT_INTERNALLY")]
  32. public const uint USE_SELECT_INTERNALLY;
  33. [CCode (cname = "MHD_USE_THREAD_PER_CONNECTION")]
  34. public const uint USE_THREAD_PER_CONNECTION;
  35. [CCode (cname = "MHD_USE_DEBUG")]
  36. public const uint USE_DEBUG;
  37. [CCode (cname = "MHD_ALLOW_SUSPEND_RESUME")]
  38. public const uint ALLOW_SUSPEND_RESUME;
  39. [CCode (cname = "MHD_USE_TURBO")]
  40. public const uint USE_TURBO;
  41. [CCode (cname = "MHD_USE_EPOLL")]
  42. public const uint USE_EPOLL;
  43. [CCode (cname = "MHD_USE_POLL")]
  44. public const uint USE_POLL;
  45. [CCode (cname = "MHD_USE_AUTO")]
  46. public const uint USE_AUTO;
  47. [CCode (cname = "MHD_OPTION_END")]
  48. public const int OPTION_END;
  49. [CCode (cname = "MHD_OPTION_NOTIFY_COMPLETED")]
  50. public const int OPTION_NOTIFY_COMPLETED;
  51. [CCode (cname = "MHD_OPTION_CONNECTION_MEMORY_LIMIT")]
  52. public const int OPTION_CONNECTION_MEMORY_LIMIT;
  53. [CCode (cname = "MHD_OPTION_CONNECTION_LIMIT")]
  54. public const int OPTION_CONNECTION_LIMIT;
  55. [CCode (cname = "MHD_OPTION_CONNECTION_TIMEOUT")]
  56. public const int OPTION_CONNECTION_TIMEOUT;
  57. [CCode (cname = "MHD_OPTION_PER_IP_CONNECTION_LIMIT")]
  58. public const int OPTION_PER_IP_CONNECTION_LIMIT;
  59. [SimpleType]
  60. [CCode (cname = "struct MHD_Connection*")]
  61. public struct Connection {}
  62. [CCode (cname = "int", cprefix = "MHD_")]
  63. public enum Result {
  64. YES = 1,
  65. NO = 0
  66. }
  67. [Compact]
  68. [CCode (cname = "struct MHD_Response", free_function = "MHD_destroy_response")]
  69. public class Response {
  70. [CCode (cname = "MHD_create_response_from_buffer")]
  71. public Response.from_buffer (size_t size, [CCode(array_length=false)] uint8[] buffer, ResponseMemoryMode mode);
  72. [CCode (cname = "MHD_create_response_from_callback")]
  73. public Response.from_callback (uint64 size, size_t block_size, ContentReaderCallback crc, void* crc_cls, ContentReaderFreeCallback? crfc);
  74. [CCode (cname = "MHD_add_response_header")]
  75. public int add_header (string header, string content);
  76. }
  77. [Compact]
  78. [CCode (cname = "struct MHD_Daemon", free_function = "MHD_stop_daemon")]
  79. public class Daemon {
  80. [CCode (cname = "MHD_start_daemon")]
  81. public static Daemon start (uint flags, uint16 port,
  82. AcceptPolicyCallback? apc,
  83. AccessHandlerCallback dh,
  84. ...);
  85. }
  86. [CCode (instance_pos = 0)]
  87. public delegate int AcceptPolicyCallback (void* cls, void* addr, uint addrlen);
  88. [CCode (instance_pos = 0)]
  89. public delegate int AccessHandlerCallback (Connection connection,
  90. string? url, string? method, string? version,
  91. string? upload_data, [CCode(array_length=false)] size_t* upload_data_size,
  92. void** con_cls);
  93. [CCode (has_target = false)]
  94. public delegate ssize_t ContentReaderCallback (void* cls, uint64 pos, char* buf, size_t max);
  95. [CCode (has_target = false, cname = "MHD_ContentReaderFreeCallback")]
  96. public delegate void ContentReaderFreeCallback (void* cls);
  97. [CCode (cname = "MHD_queue_response")]
  98. public int queue_response (Connection connection, uint status_code, Response response);
  99. [CCode (cname = "MHD_suspend_connection")]
  100. public int suspend_connection (Connection connection);
  101. [CCode (cname = "MHD_resume_connection")]
  102. public int resume_connection (Connection connection);
  103. [CCode (cname = "MHD_lookup_connection_value")]
  104. public unowned string? lookup_connection_value (Connection connection, ValueKind kind, string key);
  105. [CCode (has_target = false)]
  106. public delegate Result KeyValueIterator (void* cls, ValueKind kind, string key, string? value);
  107. [CCode (has_target = false, cname = "MHD_RequestCompletedCallback")]
  108. public delegate void RequestCompletedCallback (void* cls, Connection connection, void** con_cls, RequestTerminationCode toe);
  109. [CCode (cname = "MHD_get_connection_values")]
  110. public int get_connection_values (Connection connection, ValueKind kind, KeyValueIterator? iterator, void* iterator_cls = null);
  111. [CCode (cname = "enum MHD_ConnectionInfoType", cprefix = "MHD_CONNECTION_INFO_")]
  112. public enum ConnectionInfoType {
  113. CIPHER_ALGO,
  114. PROTOCOL,
  115. CLIENT_ADDRESS,
  116. GNUTLS_SESSION,
  117. GNUTLS_CLIENT_CERT,
  118. DAEMON,
  119. CONNECTION_FD,
  120. SOCKET_CONTEXT,
  121. CONNECTION_SUSPENDED,
  122. CONNECTION_TIMEOUT,
  123. REQUEST_HEADER_SIZE,
  124. HTTP_STATUS
  125. }
  126. [CCode (cname = "union MHD_ConnectionInfo", has_type_id = false)]
  127. public struct ConnectionInfo {
  128. [CCode (cname = "cipher_algorithm")]
  129. public int cipher_algorithm;
  130. [CCode (cname = "protocol")]
  131. public int protocol;
  132. [CCode (cname = "client_cert")]
  133. public void* client_cert;
  134. [CCode (cname = "tls_session")]
  135. public void* tls_session;
  136. [CCode (cname = "daemon")]
  137. public Daemon* daemon;
  138. [CCode (cname = "connect_fd")]
  139. public int connect_fd;
  140. [CCode (cname = "socket_context")]
  141. public void* socket_context;
  142. [CCode (cname = "suspended")]
  143. public int suspended;
  144. [CCode (cname = "connection_timeout")]
  145. public uint connection_timeout;
  146. [CCode (cname = "client_addr")]
  147. public void* client_addr;
  148. [CCode (cname = "header_size")]
  149. public size_t header_size;
  150. [CCode (cname = "http_status")]
  151. public uint http_status;
  152. }
  153. [CCode (cname = "MHD_get_connection_info")]
  154. public unowned ConnectionInfo? get_connection_info (Connection connection, ConnectionInfoType info_type);
  155. // FDSet structure for external select mode
  156. // Note: fd_set is a struct containing an array of long integers
  157. // The actual size varies by platform but FD_SETSIZE is typically 1024
  158. [CCode (cname = "fd_set", has_type_id = false, destroy_function = "")]
  159. public struct FDSet {
  160. // Internal storage - size for FD_SETSIZE=1024 on Linux (16 * 8 bytes = 128 bytes = 1024 bits)
  161. [CCode (cname = "__fds_bits", array_length = false)]
  162. private ulong fds_bits[16];
  163. [CCode (cname = "FD_ZERO")]
  164. public static void zero(ref FDSet set);
  165. [CCode (cname = "FD_SET")]
  166. public static void set(int fd, ref FDSet set);
  167. [CCode (cname = "FD_CLR")]
  168. public static void clr(int fd, ref FDSet set);
  169. [CCode (cname = "FD_ISSET")]
  170. public static bool is_set(int fd, ref FDSet set);
  171. }
  172. // External select mode functions
  173. [CCode (cname = "MHD_run")]
  174. public Result run(Daemon daemon);
  175. [CCode (cname = "MHD_get_fdset")]
  176. public Result get_fdset(Daemon daemon, ref FDSet read_fds, ref FDSet write_fds, ref FDSet error_fds, int* max_fd);
  177. [CCode (cname = "MHD_get_timeout")]
  178. public Result get_timeout(Daemon daemon, uint64* timeout);
  179. [CCode (cname = "enum MHD_DaemonInfoType", cprefix = "MHD_DAEMON_INFO_")]
  180. public enum DaemonInfoType {
  181. KEY_SIZE,
  182. MAC_KEY_SIZE,
  183. LISTEN_FD,
  184. EPOLL_FD,
  185. CURRENT_CONNECTIONS,
  186. FLAGS,
  187. BIND_PORT
  188. }
  189. [CCode (cname = "union MHD_DaemonInfo", has_type_id = false)]
  190. public struct DaemonInfo {
  191. public size_t key_size;
  192. public size_t mac_key_size;
  193. public int listen_fd;
  194. public uint16 port;
  195. public int epoll_fd;
  196. public uint num_connections;
  197. }
  198. [CCode (cname = "MHD_get_daemon_info")]
  199. public unowned DaemonInfo? get_daemon_info(Daemon daemon, DaemonInfoType info_type, ...);
  200. }