libmicrohttpd.vapi 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  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. [SimpleType]
  52. [CCode (cname = "struct MHD_Connection*")]
  53. public struct Connection {}
  54. [CCode (cname = "int", cprefix = "MHD_")]
  55. public enum Result {
  56. YES = 1,
  57. NO = 0
  58. }
  59. [Compact]
  60. [CCode (cname = "struct MHD_Response", free_function = "MHD_destroy_response")]
  61. public class Response {
  62. [CCode (cname = "MHD_create_response_from_buffer")]
  63. public Response.from_buffer (size_t size, [CCode(array_length=false)] uint8[] buffer, ResponseMemoryMode mode);
  64. [CCode (cname = "MHD_create_response_from_callback")]
  65. public Response.from_callback (uint64 size, size_t block_size, ContentReaderCallback crc, void* crc_cls, ContentReaderFreeCallback? crfc);
  66. [CCode (cname = "MHD_add_response_header")]
  67. public int add_header (string header, string content);
  68. }
  69. [Compact]
  70. [CCode (cname = "struct MHD_Daemon", free_function = "MHD_stop_daemon")]
  71. public class Daemon {
  72. [CCode (cname = "MHD_start_daemon")]
  73. public static Daemon start (uint flags, uint16 port,
  74. AcceptPolicyCallback? apc,
  75. AccessHandlerCallback dh,
  76. ...);
  77. }
  78. [CCode (instance_pos = 0)]
  79. public delegate int AcceptPolicyCallback (void* cls, void* addr, uint addrlen);
  80. [CCode (instance_pos = 0)]
  81. public delegate int AccessHandlerCallback (Connection connection,
  82. string? url, string? method, string? version,
  83. string? upload_data, [CCode(array_length=false)] size_t* upload_data_size,
  84. void** con_cls);
  85. [CCode (has_target = false)]
  86. public delegate ssize_t ContentReaderCallback (void* cls, uint64 pos, char* buf, size_t max);
  87. [CCode (has_target = false, cname = "MHD_ContentReaderFreeCallback")]
  88. public delegate void ContentReaderFreeCallback (void* cls);
  89. [CCode (cname = "MHD_queue_response")]
  90. public int queue_response (Connection connection, uint status_code, Response response);
  91. [CCode (cname = "MHD_suspend_connection")]
  92. public int suspend_connection (Connection connection);
  93. [CCode (cname = "MHD_resume_connection")]
  94. public int resume_connection (Connection connection);
  95. [CCode (cname = "MHD_lookup_connection_value")]
  96. public unowned string? lookup_connection_value (Connection connection, ValueKind kind, string key);
  97. [CCode (has_target = false)]
  98. public delegate Result KeyValueIterator (void* cls, ValueKind kind, string key, string? value);
  99. [CCode (has_target = false, cname = "MHD_RequestCompletedCallback")]
  100. public delegate void RequestCompletedCallback (void* cls, Connection connection, void** con_cls, RequestTerminationCode toe);
  101. [CCode (cname = "MHD_get_connection_values")]
  102. public int get_connection_values (Connection connection, ValueKind kind, KeyValueIterator? iterator, void* iterator_cls = null);
  103. [CCode (cname = "enum MHD_ConnectionInfoType", cprefix = "MHD_CONNECTION_INFO_")]
  104. public enum ConnectionInfoType {
  105. CIPHER_ALGO,
  106. PROTOCOL,
  107. CLIENT_ADDRESS,
  108. GNUTLS_SESSION,
  109. GNUTLS_CLIENT_CERT,
  110. DAEMON,
  111. CONNECTION_FD,
  112. SOCKET_CONTEXT,
  113. CONNECTION_SUSPENDED,
  114. CONNECTION_TIMEOUT,
  115. REQUEST_HEADER_SIZE,
  116. HTTP_STATUS
  117. }
  118. [CCode (cname = "union MHD_ConnectionInfo", has_type_id = false)]
  119. public struct ConnectionInfo {
  120. [CCode (cname = "cipher_algorithm")]
  121. public int cipher_algorithm;
  122. [CCode (cname = "protocol")]
  123. public int protocol;
  124. [CCode (cname = "client_cert")]
  125. public void* client_cert;
  126. [CCode (cname = "tls_session")]
  127. public void* tls_session;
  128. [CCode (cname = "daemon")]
  129. public Daemon* daemon;
  130. [CCode (cname = "connect_fd")]
  131. public int connect_fd;
  132. [CCode (cname = "socket_context")]
  133. public void* socket_context;
  134. [CCode (cname = "suspended")]
  135. public int suspended;
  136. [CCode (cname = "connection_timeout")]
  137. public uint connection_timeout;
  138. [CCode (cname = "client_addr")]
  139. public void* client_addr;
  140. [CCode (cname = "header_size")]
  141. public size_t header_size;
  142. [CCode (cname = "http_status")]
  143. public uint http_status;
  144. }
  145. [CCode (cname = "MHD_get_connection_info")]
  146. public unowned ConnectionInfo? get_connection_info (Connection connection, ConnectionInfoType info_type);
  147. // FDSet structure for external select mode
  148. // Note: fd_set is a struct containing an array of long integers
  149. // The actual size varies by platform but FD_SETSIZE is typically 1024
  150. [CCode (cname = "fd_set", has_type_id = false, destroy_function = "")]
  151. public struct FDSet {
  152. // Internal storage - size for FD_SETSIZE=1024 on Linux (16 * 8 bytes = 128 bytes = 1024 bits)
  153. [CCode (cname = "__fds_bits", array_length = false)]
  154. private ulong fds_bits[16];
  155. [CCode (cname = "FD_ZERO")]
  156. public static void zero(ref FDSet set);
  157. [CCode (cname = "FD_SET")]
  158. public static void set(int fd, ref FDSet set);
  159. [CCode (cname = "FD_CLR")]
  160. public static void clr(int fd, ref FDSet set);
  161. [CCode (cname = "FD_ISSET")]
  162. public static bool is_set(int fd, ref FDSet set);
  163. }
  164. // External select mode functions
  165. [CCode (cname = "MHD_run")]
  166. public Result run(Daemon daemon);
  167. [CCode (cname = "MHD_get_fdset")]
  168. public Result get_fdset(Daemon daemon, ref FDSet read_fds, ref FDSet write_fds, ref FDSet error_fds, int* max_fd);
  169. [CCode (cname = "MHD_get_timeout")]
  170. public Result get_timeout(Daemon daemon, uint64* timeout);
  171. }