soup-server.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
  2. /*
  3. * Copyright (C) 2000-2003, Ximian, Inc.
  4. */
  5. #ifndef SOUP_SERVER_H
  6. #define SOUP_SERVER_H 1
  7. #include <libsoup/soup-types.h>
  8. #include <libsoup/soup-uri.h>
  9. #include <libsoup/soup-websocket-connection.h>
  10. G_BEGIN_DECLS
  11. #define SOUP_TYPE_SERVER (soup_server_get_type ())
  12. #define SOUP_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SOUP_TYPE_SERVER, SoupServer))
  13. #define SOUP_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SOUP_TYPE_SERVER, SoupServerClass))
  14. #define SOUP_IS_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SOUP_TYPE_SERVER))
  15. #define SOUP_IS_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), SOUP_TYPE_SERVER))
  16. #define SOUP_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SOUP_TYPE_SERVER, SoupServerClass))
  17. typedef struct SoupClientContext SoupClientContext;
  18. SOUP_AVAILABLE_IN_2_4
  19. GType soup_client_context_get_type (void);
  20. #define SOUP_TYPE_CLIENT_CONTEXT (soup_client_context_get_type ())
  21. typedef enum {
  22. SOUP_SERVER_LISTEN_HTTPS = (1 << 0),
  23. SOUP_SERVER_LISTEN_IPV4_ONLY = (1 << 1),
  24. SOUP_SERVER_LISTEN_IPV6_ONLY = (1 << 2)
  25. } SoupServerListenOptions;
  26. struct _SoupServer {
  27. GObject parent;
  28. };
  29. typedef struct {
  30. GObjectClass parent_class;
  31. /* signals */
  32. void (*request_started) (SoupServer *server, SoupMessage *msg,
  33. SoupClientContext *client);
  34. void (*request_read) (SoupServer *server, SoupMessage *msg,
  35. SoupClientContext *client);
  36. void (*request_finished) (SoupServer *server, SoupMessage *msg,
  37. SoupClientContext *client);
  38. void (*request_aborted) (SoupServer *server, SoupMessage *msg,
  39. SoupClientContext *client);
  40. /* Padding for future expansion */
  41. void (*_libsoup_reserved1) (void);
  42. void (*_libsoup_reserved2) (void);
  43. void (*_libsoup_reserved3) (void);
  44. void (*_libsoup_reserved4) (void);
  45. } SoupServerClass;
  46. SOUP_AVAILABLE_IN_2_4
  47. GType soup_server_get_type (void);
  48. #define SOUP_SERVER_TLS_CERTIFICATE "tls-certificate"
  49. #define SOUP_SERVER_RAW_PATHS "raw-paths"
  50. #define SOUP_SERVER_SERVER_HEADER "server-header"
  51. #define SOUP_SERVER_HTTP_ALIASES "http-aliases"
  52. #define SOUP_SERVER_HTTPS_ALIASES "https-aliases"
  53. SOUP_AVAILABLE_IN_2_4
  54. SoupServer *soup_server_new (const char *optname1,
  55. ...) G_GNUC_NULL_TERMINATED;
  56. SOUP_AVAILABLE_IN_2_48
  57. gboolean soup_server_set_ssl_cert_file (SoupServer *server,
  58. const char *ssl_cert_file,
  59. const char *ssl_key_file,
  60. GError **error);
  61. SOUP_AVAILABLE_IN_2_4
  62. gboolean soup_server_is_https (SoupServer *server);
  63. SOUP_AVAILABLE_IN_2_48
  64. gboolean soup_server_listen (SoupServer *server,
  65. GSocketAddress *address,
  66. SoupServerListenOptions options,
  67. GError **error);
  68. SOUP_AVAILABLE_IN_2_48
  69. gboolean soup_server_listen_all (SoupServer *server,
  70. guint port,
  71. SoupServerListenOptions options,
  72. GError **error);
  73. SOUP_AVAILABLE_IN_2_48
  74. gboolean soup_server_listen_local (SoupServer *server,
  75. guint port,
  76. SoupServerListenOptions options,
  77. GError **error);
  78. SOUP_AVAILABLE_IN_2_48
  79. gboolean soup_server_listen_socket (SoupServer *server,
  80. GSocket *socket,
  81. SoupServerListenOptions options,
  82. GError **error);
  83. SOUP_AVAILABLE_IN_2_48
  84. gboolean soup_server_listen_fd (SoupServer *server,
  85. int fd,
  86. SoupServerListenOptions options,
  87. GError **error);
  88. SOUP_AVAILABLE_IN_2_48
  89. GSList *soup_server_get_uris (SoupServer *server);
  90. SOUP_AVAILABLE_IN_2_48
  91. GSList *soup_server_get_listeners (SoupServer *server);
  92. SOUP_AVAILABLE_IN_2_4
  93. void soup_server_disconnect (SoupServer *server);
  94. SOUP_AVAILABLE_IN_2_50
  95. gboolean soup_server_accept_iostream (SoupServer *server,
  96. GIOStream *stream,
  97. GSocketAddress *local_addr,
  98. GSocketAddress *remote_addr,
  99. GError **error);
  100. /* Handlers and auth */
  101. typedef void (*SoupServerCallback) (SoupServer *server,
  102. SoupMessage *msg,
  103. const char *path,
  104. GHashTable *query,
  105. SoupClientContext *client,
  106. gpointer user_data);
  107. SOUP_AVAILABLE_IN_2_4
  108. void soup_server_add_handler (SoupServer *server,
  109. const char *path,
  110. SoupServerCallback callback,
  111. gpointer user_data,
  112. GDestroyNotify destroy);
  113. SOUP_AVAILABLE_IN_2_50
  114. void soup_server_add_early_handler (SoupServer *server,
  115. const char *path,
  116. SoupServerCallback callback,
  117. gpointer user_data,
  118. GDestroyNotify destroy);
  119. typedef void (*SoupServerWebsocketCallback) (SoupServer *server,
  120. SoupWebsocketConnection *connection,
  121. const char *path,
  122. SoupClientContext *client,
  123. gpointer user_data);
  124. SOUP_AVAILABLE_IN_2_50
  125. void soup_server_add_websocket_handler (SoupServer *server,
  126. const char *path,
  127. const char *origin,
  128. char **protocols,
  129. SoupServerWebsocketCallback callback,
  130. gpointer user_data,
  131. GDestroyNotify destroy);
  132. SOUP_AVAILABLE_IN_2_4
  133. void soup_server_remove_handler (SoupServer *server,
  134. const char *path);
  135. SOUP_AVAILABLE_IN_2_4
  136. void soup_server_add_auth_domain (SoupServer *server,
  137. SoupAuthDomain *auth_domain);
  138. SOUP_AVAILABLE_IN_2_4
  139. void soup_server_remove_auth_domain (SoupServer *server,
  140. SoupAuthDomain *auth_domain);
  141. /* I/O */
  142. SOUP_AVAILABLE_IN_2_4
  143. void soup_server_pause_message (SoupServer *server,
  144. SoupMessage *msg);
  145. SOUP_AVAILABLE_IN_2_4
  146. void soup_server_unpause_message (SoupServer *server,
  147. SoupMessage *msg);
  148. /* Client context */
  149. SOUP_AVAILABLE_IN_2_48
  150. GSocket *soup_client_context_get_gsocket (SoupClientContext *client);
  151. SOUP_AVAILABLE_IN_2_48
  152. GSocketAddress *soup_client_context_get_local_address (SoupClientContext *client);
  153. SOUP_AVAILABLE_IN_2_48
  154. GSocketAddress *soup_client_context_get_remote_address (SoupClientContext *client);
  155. SOUP_AVAILABLE_IN_2_4
  156. const char *soup_client_context_get_host (SoupClientContext *client);
  157. SOUP_AVAILABLE_IN_2_4
  158. SoupAuthDomain *soup_client_context_get_auth_domain (SoupClientContext *client);
  159. SOUP_AVAILABLE_IN_2_4
  160. const char *soup_client_context_get_auth_user (SoupClientContext *client);
  161. SOUP_AVAILABLE_IN_2_50
  162. GIOStream *soup_client_context_steal_connection (SoupClientContext *client);
  163. /* Legacy API */
  164. #define SOUP_SERVER_PORT "port"
  165. #define SOUP_SERVER_INTERFACE "interface"
  166. #define SOUP_SERVER_ASYNC_CONTEXT "async-context"
  167. #define SOUP_SERVER_SSL_CERT_FILE "ssl-cert-file"
  168. #define SOUP_SERVER_SSL_KEY_FILE "ssl-key-file"
  169. SOUP_AVAILABLE_IN_2_4
  170. SOUP_DEPRECATED_IN_2_48
  171. guint soup_server_get_port (SoupServer *server);
  172. SOUP_AVAILABLE_IN_2_4
  173. SOUP_DEPRECATED_IN_2_48
  174. SoupSocket *soup_server_get_listener (SoupServer *server);
  175. SOUP_AVAILABLE_IN_2_4
  176. SOUP_DEPRECATED_IN_2_48
  177. GMainContext *soup_server_get_async_context (SoupServer *server);
  178. SOUP_AVAILABLE_IN_2_4
  179. SOUP_DEPRECATED_IN_2_48
  180. void soup_server_run (SoupServer *server);
  181. SOUP_AVAILABLE_IN_2_4
  182. SOUP_DEPRECATED_IN_2_48
  183. void soup_server_run_async (SoupServer *server);
  184. SOUP_AVAILABLE_IN_2_4
  185. SOUP_DEPRECATED_IN_2_48
  186. void soup_server_quit (SoupServer *server);
  187. SOUP_AVAILABLE_IN_2_4
  188. SOUP_DEPRECATED_IN_2_48
  189. SoupAddress *soup_client_context_get_address (SoupClientContext *client);
  190. SOUP_AVAILABLE_IN_2_4
  191. SOUP_DEPRECATED_IN_2_48
  192. SoupSocket *soup_client_context_get_socket (SoupClientContext *client);
  193. G_END_DECLS
  194. #endif /* SOUP_SERVER_H */