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