summaryrefslogtreecommitdiff
path: root/libsoup/soup-request-http.c
diff options
context:
space:
mode:
Diffstat (limited to 'libsoup/soup-request-http.c')
-rw-r--r--libsoup/soup-request-http.c243
1 files changed, 0 insertions, 243 deletions
diff --git a/libsoup/soup-request-http.c b/libsoup/soup-request-http.c
deleted file mode 100644
index 5dbfe0e9..00000000
--- a/libsoup/soup-request-http.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * soup-request-http.c: http: URI request object
- *
- * Copyright (C) 2009, 2010 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n-lib.h>
-
-#include "soup-request-http.h"
-#include "soup.h"
-#include "soup-message-private.h"
-#include "soup-session-private.h"
-
-/**
- * SECTION:soup-request-http
- * @short_description: SoupRequest support for "http" and "https" URIs
- *
- * #SoupRequestHTTP implements #SoupRequest for "http" and "https"
- * URIs.
- *
- * To do more complicated HTTP operations using the #SoupRequest APIs,
- * call soup_request_http_get_message() to get the request's
- * #SoupMessage.
- */
-
-struct _SoupRequestHTTP {
- SoupRequest parent;
-};
-
-typedef struct {
- SoupMessage *msg;
- char *content_type;
-} SoupRequestHTTPPrivate;
-
-G_DEFINE_TYPE_WITH_PRIVATE (SoupRequestHTTP, soup_request_http, SOUP_TYPE_REQUEST)
-
-static void content_sniffed (SoupMessage *msg,
- const char *content_type,
- GHashTable *params,
- gpointer user_data);
-
-static void
-soup_request_http_init (SoupRequestHTTP *http)
-{
-}
-
-static gboolean
-soup_request_http_check_uri (SoupRequest *request,
- SoupURI *uri,
- GError **error)
-{
- SoupRequestHTTP *http = SOUP_REQUEST_HTTP (request);
- SoupRequestHTTPPrivate *priv = soup_request_http_get_instance_private (http);
-
- if (!SOUP_URI_VALID_FOR_HTTP (uri))
- return FALSE;
-
- priv->msg = soup_message_new_from_uri (SOUP_METHOD_GET, uri);
- soup_message_set_soup_request (priv->msg, request);
-
- g_signal_connect (priv->msg, "content-sniffed",
- G_CALLBACK (content_sniffed), http);
- return TRUE;
-}
-
-static void
-soup_request_http_finalize (GObject *object)
-{
- SoupRequestHTTP *http = SOUP_REQUEST_HTTP (object);
- SoupRequestHTTPPrivate *priv = soup_request_http_get_instance_private (http);
-
- if (priv->msg) {
- g_signal_handlers_disconnect_by_func (priv->msg,
- G_CALLBACK (content_sniffed),
- http);
- g_object_unref (priv->msg);
- }
-
- g_free (priv->content_type);
-
- G_OBJECT_CLASS (soup_request_http_parent_class)->finalize (object);
-}
-
-static GInputStream *
-soup_request_http_send (SoupRequest *request,
- GCancellable *cancellable,
- GError **error)
-{
- SoupRequestHTTP *http = SOUP_REQUEST_HTTP (request);
- SoupRequestHTTPPrivate *priv = soup_request_http_get_instance_private (http);
- SoupSession *session = soup_request_get_session (request);
-
- return soup_session_send (session, priv->msg,
- cancellable, error);
-}
-
-
-static void
-http_input_stream_ready_cb (GObject *source, GAsyncResult *result, gpointer user_data)
-{
- GTask *task = user_data;
- GError *error = NULL;
- GInputStream *stream;
-
- stream = soup_session_send_finish (SOUP_SESSION (source), result, &error);
- if (stream)
- g_task_return_pointer (task, stream, g_object_unref);
- else
- g_task_return_error (task, error);
- g_object_unref (task);
-}
-
-static void
-soup_request_http_send_async (SoupRequest *request,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- SoupRequestHTTP *http = SOUP_REQUEST_HTTP (request);
- SoupRequestHTTPPrivate *priv = soup_request_http_get_instance_private (http);
- SoupSession *session = soup_request_get_session (request);
- GTask *task;
-
- task = g_task_new (request, cancellable, callback, user_data);
- soup_session_send_async (session, priv->msg,
- G_PRIORITY_DEFAULT,
- cancellable,
- http_input_stream_ready_cb, task);
-}
-
-static GInputStream *
-soup_request_http_send_finish (SoupRequest *request,
- GAsyncResult *result,
- GError **error)
-{
- g_return_val_if_fail (g_task_is_valid (result, request), NULL);
-
- return g_task_propagate_pointer (G_TASK (result), error);
-}
-
-static goffset
-soup_request_http_get_content_length (SoupRequest *request)
-{
- SoupRequestHTTP *http = SOUP_REQUEST_HTTP (request);
- SoupRequestHTTPPrivate *priv = soup_request_http_get_instance_private (http);
-
- return soup_message_headers_get_content_length (priv->msg->response_headers);
-}
-
-static void
-content_sniffed (SoupMessage *msg,
- const char *content_type,
- GHashTable *params,
- gpointer user_data)
-{
- SoupRequestHTTP *http = user_data;
- SoupRequestHTTPPrivate *priv = soup_request_http_get_instance_private (http);
- GString *sniffed_type;
-
- sniffed_type = g_string_new (content_type);
- if (params) {
- GHashTableIter iter;
- gpointer key, value;
-
- g_hash_table_iter_init (&iter, params);
- while (g_hash_table_iter_next (&iter, &key, &value)) {
- g_string_append (sniffed_type, "; ");
- soup_header_g_string_append_param (sniffed_type, key, value);
- }
- }
- g_free (priv->content_type);
- priv->content_type = g_string_free (sniffed_type, FALSE);
-}
-
-static const char *
-soup_request_http_get_content_type (SoupRequest *request)
-{
- SoupRequestHTTP *http = SOUP_REQUEST_HTTP (request);
- SoupRequestHTTPPrivate *priv = soup_request_http_get_instance_private (http);
-
- return priv->content_type;
-}
-
-static const char *http_schemes[] = { "http", "https", NULL };
-
-static void
-soup_request_http_class_init (SoupRequestHTTPClass *request_http_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (request_http_class);
- SoupRequestClass *request_class =
- SOUP_REQUEST_CLASS (request_http_class);
-
- request_class->schemes = http_schemes;
-
- object_class->finalize = soup_request_http_finalize;
-
- request_class->check_uri = soup_request_http_check_uri;
- request_class->send = soup_request_http_send;
- request_class->send_async = soup_request_http_send_async;
- request_class->send_finish = soup_request_http_send_finish;
- request_class->get_content_length = soup_request_http_get_content_length;
- request_class->get_content_type = soup_request_http_get_content_type;
-}
-
-/**
- * soup_request_http_get_message:
- * @http: a #SoupRequestHTTP object
- *
- * Gets a new reference to the #SoupMessage associated to this SoupRequest
- *
- * Returns: (transfer full): a new reference to the #SoupMessage
- *
- * Since: 2.40
- */
-SoupMessage *
-soup_request_http_get_message (SoupRequestHTTP *http)
-{
- g_return_val_if_fail (SOUP_IS_REQUEST_HTTP (http), NULL);
- SoupRequestHTTPPrivate *priv = soup_request_http_get_instance_private (http);
-
- return g_object_ref (priv->msg);
-}