gstreamer/subprojects/gst-plugins-good/ext/soup/stub/soup.h
Philippe Normand c3455def2e soup: Runtime compatibility support for libsoup2 and libsoup3
The src and sink elements no longer link against libsoup. It is now loaded at
runtime. If any version is resident already, it is used. Otherwise we first try
to load libsoup3 and if it's not found we fallback to libsoup2.

For the unit-tests, we now build one version of the test unit file per libsoup
version found. So if both libsoup2 and libsoup3 are available on the host, the
CI will cover them both.

Based on initial patch by Daniel Kolesa <dkolesa@igalia.com> and
Patrick Griffis <pgriffis@igalia.com>.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1044>
2021-10-13 08:32:25 +00:00

208 lines
6.9 KiB
C

/* GStreamer
* 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
*/
#ifndef __GST_SOUP_STUB_H__
#define __GST_SOUP_STUB_H__
#include <glib.h>
#include <glib-object.h>
G_BEGIN_DECLS
typedef enum {
SOUP_LOGGER_LOG_NONE,
SOUP_LOGGER_LOG_MINIMAL,
SOUP_LOGGER_LOG_HEADERS,
SOUP_LOGGER_LOG_BODY
} SoupLoggerLogLevel;
typedef enum {
SOUP_MEMORY_STATIC,
SOUP_MEMORY_TAKE,
SOUP_MEMORY_COPY,
SOUP_MEMORY_TEMPORARY
} SoupMemoryUse;
typedef enum {
SOUP_MESSAGE_NO_REDIRECT = (1 << 1),
/* Removed from libsoup2. In libsoup3 this enum value is allocated to
SOUP_MESSAGE_IDEMPOTENT which we don't use in GStreamer. */
SOUP_MESSAGE_OVERWRITE_CHUNKS = (1 << 3),
} SoupMessageFlags;
typedef enum {
SOUP_ENCODING_UNRECOGNIZED,
SOUP_ENCODING_NONE,
SOUP_ENCODING_CONTENT_LENGTH,
SOUP_ENCODING_EOF,
SOUP_ENCODING_CHUNKED,
SOUP_ENCODING_BYTERANGES
} SoupEncoding;
typedef enum {
SOUP_STATUS_NONE,
/* Transport Errors */
SOUP_STATUS_CANCELLED = 1,
SOUP_STATUS_CANT_RESOLVE,
SOUP_STATUS_CANT_RESOLVE_PROXY,
SOUP_STATUS_CANT_CONNECT,
SOUP_STATUS_CANT_CONNECT_PROXY,
SOUP_STATUS_SSL_FAILED,
SOUP_STATUS_IO_ERROR,
SOUP_STATUS_MALFORMED,
SOUP_STATUS_TRY_AGAIN,
SOUP_STATUS_TOO_MANY_REDIRECTS,
SOUP_STATUS_TLS_FAILED,
SOUP_STATUS_CONTINUE = 100,
SOUP_STATUS_SWITCHING_PROTOCOLS = 101,
SOUP_STATUS_PROCESSING = 102, /* WebDAV */
SOUP_STATUS_OK = 200,
SOUP_STATUS_CREATED = 201,
SOUP_STATUS_ACCEPTED = 202,
SOUP_STATUS_NON_AUTHORITATIVE = 203,
SOUP_STATUS_NO_CONTENT = 204,
SOUP_STATUS_RESET_CONTENT = 205,
SOUP_STATUS_PARTIAL_CONTENT = 206,
SOUP_STATUS_MULTI_STATUS = 207, /* WebDAV */
SOUP_STATUS_MULTIPLE_CHOICES = 300,
SOUP_STATUS_MOVED_PERMANENTLY = 301,
SOUP_STATUS_FOUND = 302,
SOUP_STATUS_MOVED_TEMPORARILY = 302, /* RFC 2068 */
SOUP_STATUS_SEE_OTHER = 303,
SOUP_STATUS_NOT_MODIFIED = 304,
SOUP_STATUS_USE_PROXY = 305,
SOUP_STATUS_NOT_APPEARING_IN_THIS_PROTOCOL = 306, /* (reserved) */
SOUP_STATUS_TEMPORARY_REDIRECT = 307,
SOUP_STATUS_PERMANENT_REDIRECT = 308,
SOUP_STATUS_BAD_REQUEST = 400,
SOUP_STATUS_UNAUTHORIZED = 401,
SOUP_STATUS_PAYMENT_REQUIRED = 402, /* (reserved) */
SOUP_STATUS_FORBIDDEN = 403,
SOUP_STATUS_NOT_FOUND = 404,
SOUP_STATUS_METHOD_NOT_ALLOWED = 405,
SOUP_STATUS_NOT_ACCEPTABLE = 406,
SOUP_STATUS_PROXY_AUTHENTICATION_REQUIRED = 407,
SOUP_STATUS_PROXY_UNAUTHORIZED = SOUP_STATUS_PROXY_AUTHENTICATION_REQUIRED,
SOUP_STATUS_REQUEST_TIMEOUT = 408,
SOUP_STATUS_CONFLICT = 409,
SOUP_STATUS_GONE = 410,
SOUP_STATUS_LENGTH_REQUIRED = 411,
SOUP_STATUS_PRECONDITION_FAILED = 412,
SOUP_STATUS_REQUEST_ENTITY_TOO_LARGE = 413,
SOUP_STATUS_REQUEST_URI_TOO_LONG = 414,
SOUP_STATUS_UNSUPPORTED_MEDIA_TYPE = 415,
SOUP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE = 416,
SOUP_STATUS_INVALID_RANGE = SOUP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE,
SOUP_STATUS_EXPECTATION_FAILED = 417,
SOUP_STATUS_MISDIRECTED_REQUEST = 421, /* HTTP/2 */
SOUP_STATUS_UNPROCESSABLE_ENTITY = 422, /* WebDAV */
SOUP_STATUS_LOCKED = 423, /* WebDAV */
SOUP_STATUS_FAILED_DEPENDENCY = 424, /* WebDAV */
SOUP_STATUS_INTERNAL_SERVER_ERROR = 500,
SOUP_STATUS_NOT_IMPLEMENTED = 501,
SOUP_STATUS_BAD_GATEWAY = 502,
SOUP_STATUS_SERVICE_UNAVAILABLE = 503,
SOUP_STATUS_GATEWAY_TIMEOUT = 504,
SOUP_STATUS_HTTP_VERSION_NOT_SUPPORTED = 505,
SOUP_STATUS_INSUFFICIENT_STORAGE = 507, /* WebDAV search */
SOUP_STATUS_NOT_EXTENDED = 510 /* RFC 2774 */
} SoupStatus;
#define SOUP_STATUS_IS_SUCCESSFUL(status) ((status) >= 200 && (status) < 300)
#define SOUP_STATUS_IS_REDIRECTION(status) ((status) >= 300 && (status) < 400)
#define SOUP_STATUS_IS_CLIENT_ERROR(status) ((status) >= 400 && (status) < 500)
#define SOUP_STATUS_IS_SERVER_ERROR(status) ((status) >= 500 && (status) < 600)
#define SOUP_STATUS_IS_TRANSPORT_ERROR(status) ((status) > 0 && (status) < 100)
typedef gpointer SoupSession;
typedef gpointer SoupMessage;
typedef gpointer SoupLogger;
typedef gpointer SoupSessionFeature;
typedef gpointer SoupURI;
typedef gpointer SoupMessageBody;
typedef gpointer SoupMessageHeaders;
typedef gpointer SoupAuth;
typedef struct _SoupMessage2 {
GObject parent;
/*< public >*/
const char *method;
guint status_code;
char *reason_phrase;
SoupMessageBody *request_body;
SoupMessageHeaders *request_headers;
SoupMessageBody *response_body;
SoupMessageHeaders *response_headers;
} SoupMessage2;
typedef void (*SoupLoggerPrinter)(SoupLogger *logger,
SoupLoggerLogLevel level,
char direction,
const char *data,
gpointer user_data);
#define SOUP_HTTP_URI_FLAGS \
(G_URI_FLAGS_HAS_PASSWORD | G_URI_FLAGS_ENCODED_PATH | \
G_URI_FLAGS_ENCODED_QUERY | G_URI_FLAGS_ENCODED_FRAGMENT | \
G_URI_FLAGS_SCHEME_NORMALIZE)
typedef void (*SoupMessageHeadersForeachFunc)(const char *name,
const char *value,
gpointer user_data);
/* Do not use these variables directly; use the macros above, which
* ensure that they get initialized properly.
*/
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
#endif
static gpointer _SOUP_METHOD_OPTIONS;
static gpointer _SOUP_METHOD_GET;
static gpointer _SOUP_METHOD_HEAD;
static gpointer _SOUP_METHOD_POST;
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
#define _SOUP_ATOMIC_INTERN_STRING(variable, value) \
((const char *)(g_atomic_pointer_get(&(variable)) \
? (variable) \
: (g_atomic_pointer_set( \
&(variable), \
(gpointer)g_intern_static_string(value)), \
(variable))))
#define _SOUP_INTERN_METHOD(method) \
(_SOUP_ATOMIC_INTERN_STRING(_SOUP_METHOD_##method, #method))
#define SOUP_METHOD_OPTIONS _SOUP_INTERN_METHOD(OPTIONS)
#define SOUP_METHOD_GET _SOUP_INTERN_METHOD(GET)
#define SOUP_METHOD_HEAD _SOUP_INTERN_METHOD(HEAD)
#define SOUP_METHOD_POST _SOUP_INTERN_METHOD(POST)
G_END_DECLS
#endif /* __GST_SOUP_STUB_H__ */