gstreamer/subprojects/gst-plugins-good/ext/soup/gstsouphttpsrc.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

139 lines
4.9 KiB
C
Raw Normal View History

/* GStreamer
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
* Copyright (C) 2007-2008 Wouter Cloetens <wouter@mind.be>
* Copyright (C) 2021 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
*/
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
#ifndef __GST_SOUP_HTTP_SRC_H__
#define __GST_SOUP_HTTP_SRC_H__
#include "gstsouputils.h"
#include "gstsouploader.h"
#include <gio/gio.h>
#include <gst/base/gstpushsrc.h>
G_BEGIN_DECLS
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
#define GST_TYPE_SOUP_HTTP_SRC \
(gst_soup_http_src_get_type())
#define GST_SOUP_HTTP_SRC(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SOUP_HTTP_SRC,GstSoupHTTPSrc))
#define GST_SOUP_HTTP_SRC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass), \
GST_TYPE_SOUP_HTTP_SRC,GstSoupHTTPSrcClass))
#define GST_IS_SOUP_HTTP_SRC(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SOUP_HTTP_SRC))
#define GST_IS_SOUP_HTTP_SRC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SOUP_HTTP_SRC))
typedef struct _GstSoupHTTPSrc GstSoupHTTPSrc;
typedef struct _GstSoupHTTPSrcClass GstSoupHTTPSrcClass;
2008-01-30 13:06:01 +00:00
typedef enum {
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
GST_SOUP_HTTP_SRC_SESSION_IO_STATUS_IDLE,
GST_SOUP_HTTP_SRC_SESSION_IO_STATUS_QUEUED,
GST_SOUP_HTTP_SRC_SESSION_IO_STATUS_RUNNING,
GST_SOUP_HTTP_SRC_SESSION_IO_STATUS_CANCELLED,
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
} GstSoupHTTPSrcSessionIOStatus;
2008-01-30 13:06:01 +00:00
soup: move libsoup session into its own thread Starting with libsoup3, there is no attempt to handle thread safety inside the library, and it was never considered fully safe before either. Therefore, move all session handling into its own thread. The libsoup thread has its own context and main loop. When some request is made or a response needs to be read, an idle source is created to issue that; the gstreamer thread issuing that waits for that to be complete. There is a per-src condition variable to deal with that. Since the thread/loop needs to be longer-lived than the soup session itself, a wrapper object is provided to contain them. The soup session only has a single reference, owned by the wrapper object. It is no longer possible to force an external session, since this does not seem to be used anywhere within gstreamer and would be tricky to implement; this is because one would not have to provide just a session, but also the complete thread arrangement made in the same way as the system currently does internally, in order to be safe. Messages are still built gstreamer-side. It is safe to do so until the message is sent on the session. Headers are also processed on the gstreamer side, which should likewise be safe. All requests as well as reads on the libsoup thread are issued asynchronously. That allows libsoup to schedule things with as little blocking as possible, and means that concurrent access to the session is possible, when sharing the session. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/947 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1555>
2022-01-21 15:09:30 +00:00
/* opaque from here, implementation detail */
typedef struct _GstSoupSession GstSoupSession;
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
struct _GstSoupHTTPSrc {
GstPushSrc element;
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
gchar *location; /* Full URI. */
gchar *redirection_uri; /* Full URI after redirections. */
gboolean redirection_permanent; /* Permanent or temporary redirect? */
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
gchar *user_agent; /* User-Agent HTTP header. */
gboolean automatic_redirect; /* Follow redirects. */
GstSoupUri *proxy; /* HTTP proxy URI. */
gchar *user_id; /* Authentication user id for location URI. */
gchar *user_pw; /* Authentication user password for location URI. */
gchar *proxy_id; /* Authentication user id for proxy URI. */
gchar *proxy_pw; /* Authentication user password for proxy URI. */
gchar **cookies; /* HTTP request cookies. */
soup: move libsoup session into its own thread Starting with libsoup3, there is no attempt to handle thread safety inside the library, and it was never considered fully safe before either. Therefore, move all session handling into its own thread. The libsoup thread has its own context and main loop. When some request is made or a response needs to be read, an idle source is created to issue that; the gstreamer thread issuing that waits for that to be complete. There is a per-src condition variable to deal with that. Since the thread/loop needs to be longer-lived than the soup session itself, a wrapper object is provided to contain them. The soup session only has a single reference, owned by the wrapper object. It is no longer possible to force an external session, since this does not seem to be used anywhere within gstreamer and would be tricky to implement; this is because one would not have to provide just a session, but also the complete thread arrangement made in the same way as the system currently does internally, in order to be safe. Messages are still built gstreamer-side. It is safe to do so until the message is sent on the session. Headers are also processed on the gstreamer side, which should likewise be safe. All requests as well as reads on the libsoup thread are issued asynchronously. That allows libsoup to schedule things with as little blocking as possible, and means that concurrent access to the session is possible, when sharing the session. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/947 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1555>
2022-01-21 15:09:30 +00:00
GstSoupSession *session; /* Libsoup session wrapper. */
gboolean session_is_shared;
soup: move libsoup session into its own thread Starting with libsoup3, there is no attempt to handle thread safety inside the library, and it was never considered fully safe before either. Therefore, move all session handling into its own thread. The libsoup thread has its own context and main loop. When some request is made or a response needs to be read, an idle source is created to issue that; the gstreamer thread issuing that waits for that to be complete. There is a per-src condition variable to deal with that. Since the thread/loop needs to be longer-lived than the soup session itself, a wrapper object is provided to contain them. The soup session only has a single reference, owned by the wrapper object. It is no longer possible to force an external session, since this does not seem to be used anywhere within gstreamer and would be tricky to implement; this is because one would not have to provide just a session, but also the complete thread arrangement made in the same way as the system currently does internally, in order to be safe. Messages are still built gstreamer-side. It is safe to do so until the message is sent on the session. Headers are also processed on the gstreamer side, which should likewise be safe. All requests as well as reads on the libsoup thread are issued asynchronously. That allows libsoup to schedule things with as little blocking as possible, and means that concurrent access to the session is possible, when sharing the session. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/947 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1555>
2022-01-21 15:09:30 +00:00
GstSoupSession *external_session; /* Shared via GstContext */
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
SoupMessage *msg; /* Request message. */
gint retry_count; /* Number of retries since we received data */
gint max_retries; /* Maximum number of retries */
gchar *method; /* HTTP method */
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
soup: move libsoup session into its own thread Starting with libsoup3, there is no attempt to handle thread safety inside the library, and it was never considered fully safe before either. Therefore, move all session handling into its own thread. The libsoup thread has its own context and main loop. When some request is made or a response needs to be read, an idle source is created to issue that; the gstreamer thread issuing that waits for that to be complete. There is a per-src condition variable to deal with that. Since the thread/loop needs to be longer-lived than the soup session itself, a wrapper object is provided to contain them. The soup session only has a single reference, owned by the wrapper object. It is no longer possible to force an external session, since this does not seem to be used anywhere within gstreamer and would be tricky to implement; this is because one would not have to provide just a session, but also the complete thread arrangement made in the same way as the system currently does internally, in order to be safe. Messages are still built gstreamer-side. It is safe to do so until the message is sent on the session. Headers are also processed on the gstreamer side, which should likewise be safe. All requests as well as reads on the libsoup thread are issued asynchronously. That allows libsoup to schedule things with as little blocking as possible, and means that concurrent access to the session is possible, when sharing the session. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/947 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1555>
2022-01-21 15:09:30 +00:00
GstFlowReturn headers_ret;
gboolean got_headers; /* Already received headers from the server */
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
gboolean have_size; /* Received and parsed Content-Length
header. */
guint64 content_size; /* Value of Content-Length header. */
guint64 read_position; /* Current position. */
gboolean seekable; /* FALSE if the server does not support
Range. */
guint64 request_position; /* Seek to this position. */
guint64 stop_position; /* Stop at this position. */
gboolean have_body; /* Indicates if it has just been signaled the
* end of the message body. This is used to
* decide if an out of range request should be
* handled as an error or EOS when the content
* size is unknown */
gboolean keep_alive; /* Use keep-alive sessions */
gboolean ssl_strict;
gchar *ssl_ca_file;
gboolean ssl_use_system_ca_file;
GTlsDatabase *tls_database;
GTlsInteraction *tls_interaction;
GCancellable *cancellable;
GInputStream *input_stream;
gint reduce_blocksize_count;
gint increase_blocksize_count;
guint minimum_blocksize;
/* Shoutcast/icecast metadata extraction handling. */
gboolean iradio_mode;
GstCaps *src_caps;
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
gchar *iradio_name;
gchar *iradio_genre;
gchar *iradio_url;
GstStructure *extra_headers;
SoupLoggerLogLevel log_level;/* Soup HTTP session logger level */
gboolean compress;
guint timeout;
soup: move libsoup session into its own thread Starting with libsoup3, there is no attempt to handle thread safety inside the library, and it was never considered fully safe before either. Therefore, move all session handling into its own thread. The libsoup thread has its own context and main loop. When some request is made or a response needs to be read, an idle source is created to issue that; the gstreamer thread issuing that waits for that to be complete. There is a per-src condition variable to deal with that. Since the thread/loop needs to be longer-lived than the soup session itself, a wrapper object is provided to contain them. The soup session only has a single reference, owned by the wrapper object. It is no longer possible to force an external session, since this does not seem to be used anywhere within gstreamer and would be tricky to implement; this is because one would not have to provide just a session, but also the complete thread arrangement made in the same way as the system currently does internally, in order to be safe. Messages are still built gstreamer-side. It is safe to do so until the message is sent on the session. Headers are also processed on the gstreamer side, which should likewise be safe. All requests as well as reads on the libsoup thread are issued asynchronously. That allows libsoup to schedule things with as little blocking as possible, and means that concurrent access to the session is possible, when sharing the session. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/947 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1555>
2022-01-21 15:09:30 +00:00
/* This mutex-cond pair is used to talk to the soup session thread; it is
* per src to allow concurrent access to shared sessions (if it was inside
* the shared session structure, it would be effectively global)
*/
GMutex session_mutex;
GCond session_cond;
GstEvent *http_headers_event;
gint64 last_socket_read_time;
};
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
struct _GstSoupHTTPSrcClass {
GstPushSrcClass parent_class;
};
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
GType gst_soup_http_src_get_type (void);
G_END_DECLS
Make coding style more consistent, including class renaming. Original commit message from CVS: Patch by: Wouter Cloetens <wouter at mind dot be> * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/inspect/plugin-soup.xml: (gst_soup_http_src_base_init), (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_unicodify), (gst_soup_http_src_cancel_message), (gst_soup_http_src_queue_message), (gst_soup_http_src_add_range_header), (gst_soup_http_src_session_unpause_message), (gst_soup_http_src_session_pause_message), (gst_soup_http_src_session_close), (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_got_body_cb), (gst_soup_http_src_finished_cb), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_response_cb), (gst_soup_http_src_parse_status), (gst_soup_http_src_create), (gst_soup_http_src_start), (gst_soup_http_src_stop), (gst_soup_http_src_unlock), (gst_soup_http_src_unlock_stop), (gst_soup_http_src_get_size), (gst_soup_http_src_is_seekable), (gst_soup_http_src_do_seek), (gst_soup_http_src_set_location), (gst_soup_http_src_set_proxy), (gst_soup_http_src_uri_get_type), (gst_soup_http_src_uri_get_protocols), (gst_soup_http_src_uri_get_uri), (gst_soup_http_src_uri_set_uri), (gst_soup_http_src_uri_handler_init), (plugin_init): * ext/soup/gstsouphttpsrc.h: Make coding style more consistent, including class renaming.
2008-01-31 08:57:16 +00:00
#endif /* __GST_SOUP_HTTP_SRC_H__ */