/* HTTP source element for use in tests * * Copyright (c) <2015> YouView TV Ltd * * 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; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef __GST_TEST_HTTP_SRC_H__ #define __GST_TEST_HTTP_SRC_H__ #include G_BEGIN_DECLS #define GST_TYPE_TEST_HTTP_SRC (gst_test_http_src_get_type ()) /** * TEST_HTTP_SRC_REQUEST_HEADERS_NAME: * The name of the #GstStructure that will contain all the HTTP request * headers */ #define TEST_HTTP_SRC_REQUEST_HEADERS_NAME "request-headers" /** * TEST_HTTP_SRC_RESPONSE_HEADERS_NAME: * The name of the #GstStructure that will contain all the HTTP response * headers */ #define TEST_HTTP_SRC_RESPONSE_HEADERS_NAME "response-headers" /* structure used by src_start function to configure the * GstTestHTTPSrc plugin. * It specifies information about a given URI. */ typedef struct _GstTestHTTPSrcInput { gpointer context; /* opaque pointer that can be used in callbacks */ guint64 size; /* size of resource, in bytes */ GstStructure *request_headers; GstStructure *response_headers; guint status_code; /* HTTP status code */ } GstTestHTTPSrcInput; /* Opaque structure used by GstTestHTTPSrc */ typedef struct _GstTestHTTPSrc GstTestHTTPSrc; typedef struct _GstTestHTTPSrcCallbacks { /** * src_start: * @src: The #GstTestHTTPSrc calling this callback * @uri: The URI that is being requested * @input_data: (out) The implementation of this callback is * responsible for filling in this #GstTestHTTPSrcInput * with the appropriate information, return returning %TRUE. * If returning %FALSE, only GstTestHTTPSrcInput::status_code * should be updated. * Returns: %TRUE if GstTestHTTPSrc should respond to this URI, * using the supplied input_data. * * src_start is used to "open" the given URI. The callback must return * %TRUE to simulate a success, and set appropriate fields in input_data. * Returning %FALSE indicates that the request URI is not found. * In this situation GstTestHTTPSrc will cause the appropriate * 404 error to be posted to the bus */ gboolean (*src_start)(GstTestHTTPSrc *src, const gchar *uri, GstTestHTTPSrcInput *input_data, gpointer user_data); /** * src_create: * @src: the #GstTestHTTPSrc calling this callback * @offset: the offset from the start of the resource * @length: requested number of bytes * @retbuf: (out) used to return a newly allocated #GstBuffer * @context: (allow none) the value of the context field * in #GstTestHTTPSrcInput. * @user_data: the value of user_data provided to * #gst_test_http_src_install_callbacks * Returns: %GST_FLOW_OK to indicate success, or some other value of * #GstFlowReturn to indicate EOS or error. * * The src_create function is used to create a #GstBuffer for * simulating the data that is returned when accessing this * "open" stream. It can also be used to simulate various error * conditions by returning something other than %GST_FLOW_OK */ GstFlowReturn (*src_create)(GstTestHTTPSrc *src, guint64 offset, guint length, GstBuffer ** retbuf, gpointer context, gpointer user_data); } GstTestHTTPSrcCallbacks; GType gst_test_http_src_get_type (void); /** * gst_test_http_src_register_plugin: * @registry: the #GstRegistry to use for registering this plugin * @name: the name to use for this plugin * Returns: true if successful * * Registers this plugin with the GstRegitry using the given name. It will * be given a high rank, so that it will be picked in preference to any * other element that implements #GstURIHandler. */ gboolean gst_test_http_src_register_plugin (GstRegistry * registry, const gchar * name); /** * gst_test_http_src_install_callbacks: * @callbacks: the #GstTestHTTPSrcCallbacks callback functions that will * be called every time this element is asked to open a URI or provide data * for an open URI. * @user_data: a pointer that is passed to every callback */ void gst_test_http_src_install_callbacks (const GstTestHTTPSrcCallbacks *callbacks, gpointer user_data); /** * gst_test_http_src_set_default_blocksize: * @blocksize: the default block size to use (0=use #GstBaseSrc default) * * Set the default blocksize that will be used by instances of * #GstTestHTTPSrc. It specifies the size (in bytes) that will be * returned in each #GstBuffer. This default can be overridden * by an instance of #GstTestHTTPSrc using the "blocksize" property * of #GstBaseSrc */ void gst_test_http_src_set_default_blocksize (guint blocksize); G_END_DECLS #endif /* __GST_TEST_HTTP_SRC_H__ */