1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */ 2 /* 3 * Copyright (C) 2000-2003, Ximian, Inc. 4 */ 5 6 #pragma once 7 8 #include "soup-types.h" 9 #include "soup-uri-utils.h" 10 #include "soup-websocket-connection.h" 11 12 G_BEGIN_DECLS 13 14 #define SOUP_TYPE_SERVER (soup_server_get_type ()) 15 SOUP_AVAILABLE_IN_ALL 16 G_DECLARE_DERIVABLE_TYPE (SoupServer, soup_server, SOUP, SERVER, GObject) 17 18 typedef enum { 19 SOUP_SERVER_LISTEN_HTTPS = (1 << 0), 20 SOUP_SERVER_LISTEN_IPV4_ONLY = (1 << 1), 21 SOUP_SERVER_LISTEN_IPV6_ONLY = (1 << 2) 22 } SoupServerListenOptions; 23 24 struct _SoupServerClass { 25 GObjectClass parent_class; 26 27 /* signals */ 28 void (*request_started) (SoupServer *server, 29 SoupServerMessage *msg); 30 void (*request_read) (SoupServer *server, 31 SoupServerMessage *msg); 32 void (*request_finished) (SoupServer *server, 33 SoupServerMessage *msg); 34 void (*request_aborted) (SoupServer *server, 35 SoupServerMessage *msg); 36 37 gpointer padding[6]; 38 }; 39 40 SOUP_AVAILABLE_IN_ALL 41 SoupServer *soup_server_new (const char *optname1, 42 ...) G_GNUC_NULL_TERMINATED; 43 44 SOUP_AVAILABLE_IN_ALL 45 void soup_server_set_tls_certificate (SoupServer *server, 46 GTlsCertificate *certificate); 47 SOUP_AVAILABLE_IN_ALL 48 GTlsCertificate *soup_server_get_tls_certificate (SoupServer *server); 49 50 SOUP_AVAILABLE_IN_ALL 51 void soup_server_set_tls_database (SoupServer *server, 52 GTlsDatabase *tls_database); 53 SOUP_AVAILABLE_IN_ALL 54 GTlsDatabase *soup_server_get_tls_database (SoupServer *server); 55 56 SOUP_AVAILABLE_IN_ALL 57 void soup_server_set_tls_auth_mode (SoupServer *server, 58 GTlsAuthenticationMode mode); 59 SOUP_AVAILABLE_IN_ALL 60 GTlsAuthenticationMode soup_server_get_tls_auth_mode (SoupServer *server); 61 62 SOUP_AVAILABLE_IN_ALL 63 gboolean soup_server_is_https (SoupServer *server); 64 65 SOUP_AVAILABLE_IN_ALL 66 gboolean soup_server_listen (SoupServer *server, 67 GSocketAddress *address, 68 SoupServerListenOptions options, 69 GError **error); 70 SOUP_AVAILABLE_IN_ALL 71 gboolean soup_server_listen_all (SoupServer *server, 72 guint port, 73 SoupServerListenOptions options, 74 GError **error); 75 SOUP_AVAILABLE_IN_ALL 76 gboolean soup_server_listen_local (SoupServer *server, 77 guint port, 78 SoupServerListenOptions options, 79 GError **error); 80 SOUP_AVAILABLE_IN_ALL 81 gboolean soup_server_listen_socket (SoupServer *server, 82 GSocket *socket, 83 SoupServerListenOptions options, 84 GError **error); 85 SOUP_AVAILABLE_IN_ALL 86 GSList *soup_server_get_uris (SoupServer *server); 87 SOUP_AVAILABLE_IN_ALL 88 GSList *soup_server_get_listeners (SoupServer *server); 89 90 SOUP_AVAILABLE_IN_ALL 91 void soup_server_disconnect (SoupServer *server); 92 93 SOUP_AVAILABLE_IN_ALL 94 gboolean soup_server_accept_iostream (SoupServer *server, 95 GIOStream *stream, 96 GSocketAddress *local_addr, 97 GSocketAddress *remote_addr, 98 GError **error); 99 100 /* Handlers and auth */ 101 102 typedef void (*SoupServerCallback) (SoupServer *server, 103 SoupServerMessage *msg, 104 const char *path, 105 GHashTable *query, 106 gpointer user_data); 107 108 SOUP_AVAILABLE_IN_ALL 109 void soup_server_add_handler (SoupServer *server, 110 const char *path, 111 SoupServerCallback callback, 112 gpointer user_data, 113 GDestroyNotify destroy); 114 SOUP_AVAILABLE_IN_ALL 115 void soup_server_add_early_handler (SoupServer *server, 116 const char *path, 117 SoupServerCallback callback, 118 gpointer user_data, 119 GDestroyNotify destroy); 120 121 typedef void (*SoupServerWebsocketCallback) (SoupServer *server, 122 SoupServerMessage *msg, 123 const char *path, 124 SoupWebsocketConnection *connection, 125 gpointer user_data); 126 SOUP_AVAILABLE_IN_ALL 127 void soup_server_add_websocket_handler (SoupServer *server, 128 const char *path, 129 const char *origin, 130 char **protocols, 131 SoupServerWebsocketCallback callback, 132 gpointer user_data, 133 GDestroyNotify destroy); 134 SOUP_AVAILABLE_IN_ALL 135 void soup_server_add_websocket_extension (SoupServer *server, 136 GType extension_type); 137 SOUP_AVAILABLE_IN_ALL 138 void soup_server_remove_websocket_extension (SoupServer *server, 139 GType extension_type); 140 141 SOUP_AVAILABLE_IN_ALL 142 void soup_server_remove_handler (SoupServer *server, 143 const char *path); 144 145 SOUP_AVAILABLE_IN_ALL 146 void soup_server_add_auth_domain (SoupServer *server, 147 SoupAuthDomain *auth_domain); 148 SOUP_AVAILABLE_IN_ALL 149 void soup_server_remove_auth_domain (SoupServer *server, 150 SoupAuthDomain *auth_domain); 151 152 /* I/O */ 153 SOUP_AVAILABLE_IN_ALL 154 void soup_server_pause_message (SoupServer *server, 155 SoupServerMessage *msg); 156 SOUP_AVAILABLE_IN_ALL 157 void soup_server_unpause_message (SoupServer *server, 158 SoupServerMessage *msg); 159 160 G_END_DECLS 161