static guint get_port_from_server (SoupServer * server) { GSList *uris; guint port; uris = soup_server_get_uris (server); g_assert (g_slist_length (uris) == 1); port = soup_uri_get_port (uris->data); g_slist_free_full (uris, (GDestroyNotify) soup_uri_free); return port; }
static char * get_server_uri (SoupServer *server, const char *filename) { GSList *uris; SoupURI *uri; char *ret; uris = soup_server_get_uris (server); g_assert (uris); uri = uris->data; ret = g_strdup_printf ("%s://%s:%d/%s", soup_uri_get_scheme (uri), soup_uri_get_host (uri), soup_uri_get_port (uri), filename); g_slist_free_full (uris, (GDestroyNotify) soup_uri_free); return ret; }
int main (int argc, char **argv) { GOptionContext *opts; GMainLoop *loop; SoupServer *server; GSList *uris, *u; char *str; GTlsCertificate *cert; GError *error = NULL; opts = g_option_context_new (NULL); g_option_context_add_main_entries (opts, entries, NULL); if (!g_option_context_parse (opts, &argc, &argv, &error)) { g_printerr ("Could not parse arguments: %s\n", error->message); g_printerr ("%s", g_option_context_get_help (opts, TRUE, NULL)); exit (1); } if (argc != 1) { g_printerr ("%s", g_option_context_get_help (opts, TRUE, NULL)); exit (1); } g_option_context_free (opts); signal (SIGINT, quit); if (tls_cert_file && tls_key_file) { cert = g_tls_certificate_new_from_files (tls_cert_file, tls_key_file, &error); if (error) { g_printerr ("Unable to create server: %s\n", error->message); exit (1); } server = soup_server_new (SOUP_SERVER_SERVER_HEADER, "simple-httpd ", SOUP_SERVER_TLS_CERTIFICATE, cert, NULL); g_object_unref (cert); soup_server_listen_all (server, port, SOUP_SERVER_LISTEN_HTTPS, &error); } else { server = soup_server_new (SOUP_SERVER_SERVER_HEADER, "simple-httpd ", NULL); soup_server_listen_all (server, port, 0, &error); } soup_server_add_handler (server, NULL, server_callback, NULL, NULL); uris = soup_server_get_uris (server); for (u = uris; u; u = u->next) { str = soup_uri_to_string (u->data, FALSE); g_print ("Listening on %s\n", str); g_free (str); soup_uri_free (u->data); } g_slist_free (uris); g_print ("\nWaiting for requests...\n"); loop = g_main_loop_new (NULL, TRUE); g_main_loop_run (loop); return 0; }
int main (int argc, char **argv) { GOptionContext *opts; GMainLoop *loop; GSList *uris, *u; char *str; GError *error = NULL; opts = g_option_context_new (NULL); g_option_context_add_main_entries (opts, entries, NULL); if (!g_option_context_parse (opts, &argc, &argv, &error)) { g_printerr ("Could not parse arguments: %s\n", error->message); g_printerr ("%s", g_option_context_get_help (opts, TRUE, NULL)); exit (1); } if (argc != 1) { g_printerr ("%s", g_option_context_get_help (opts, TRUE, NULL)); exit (1); } g_option_context_free (opts); signal (SIGINT, quit); server = g_object_new (SOUP_TYPE_SERVER, NULL); soup_server_add_handler (server, NULL, server_callback, NULL, NULL); if (require_auth) { SoupAuthDomain *auth_domain; auth_domain = soup_auth_domain_basic_new ( SOUP_AUTH_DOMAIN_REALM, "simple-proxy", SOUP_AUTH_DOMAIN_PROXY, TRUE, SOUP_AUTH_DOMAIN_BASIC_AUTH_CALLBACK, auth_callback, NULL); soup_server_add_auth_domain (server, auth_domain); g_object_unref (auth_domain); } soup_server_listen_all (server, port, 0, &error); if (error) { g_printerr ("Unable to create server: %s\n", error->message); exit (1); } uris = soup_server_get_uris (server); for (u = uris; u; u = u->next) { str = soup_uri_to_string (u->data, FALSE); g_print ("Listening on %s\n", str); g_free (str); soup_uri_free (u->data); } g_slist_free (uris); session = soup_session_new (); g_print ("\nWaiting for requests...\n"); loop = g_main_loop_new (NULL, TRUE); g_main_loop_run (loop); g_main_loop_unref (loop); return 0; }