Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

port to libsoup3 #326

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
sudo apt update
sudo apt install automake libtool pkg-config libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install libglib2.0-dev libjson-glib-dev gtk-doc-tools libedit-dev libncursesw5-dev
sudo apt install libdaemon-dev libjansson-dev python3-pip python3-setuptools libsoup2.4-dev
sudo apt install libdaemon-dev libjansson-dev python3-pip python3-setuptools libsoup-3.0-dev
- name: Generate
run: ./autogen.sh
- name: Configure
Expand Down Expand Up @@ -72,7 +72,7 @@ jobs:
sudo apt update
sudo apt install automake libtool pkg-config libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install libglib2.0-dev libjson-glib-dev gtk-doc-tools libedit-dev libncursesw5-dev
sudo apt install libdaemon-dev libjansson-dev python3-pip python3-setuptools libsoup2.4-dev
sudo apt install libdaemon-dev libjansson-dev python3-pip python3-setuptools libsoup-3.0-dev
sudo apt install ninja-build python3-wheel
sudo pip3 install meson

Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ PKG_CHECK_MODULES(GST, [
])
])

PKG_CHECK_MODULES(LIBSOUP, [libsoup-2.4 >= 2.32])
PKG_CHECK_MODULES(LIBSOUP, [libsoup-3.0 >= 2.99])
AC_SUBST(LIBSOUP_CFLAGS)
AC_SUBST(LIBSOUP_LIBS)

Expand Down
59 changes: 31 additions & 28 deletions libgstd/gstd_http.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ GST_DEBUG_CATEGORY_STATIC (gstd_http_debug);
typedef struct _GstdHttpRequest
{
SoupServer *server;
SoupMessage *msg;
SoupServerMessage *msg;
GstdSession *session;
const char *path;
GHashTable *query;
Expand Down Expand Up @@ -73,19 +73,18 @@ static GstdReturnCode gstd_http_stop (GstdIpc * base);
static gboolean gstd_http_init_get_option_group (GstdIpc * base,
GOptionGroup ** group);
static SoupStatus get_status_code (GstdReturnCode ret);
static GstdReturnCode do_get (SoupServer * server, SoupMessage * msg,
static GstdReturnCode do_get (SoupServer * server, SoupServerMessage * msg,
char **output, const char *path, GstdSession * session);
static GstdReturnCode do_post (SoupServer * server, SoupMessage * msg,
static GstdReturnCode do_post (SoupServer * server, SoupServerMessage * msg,
char *name, char *description, char **output, const char *path,
GstdSession * session);
static GstdReturnCode do_put (SoupServer * server, SoupMessage * msg,
static GstdReturnCode do_put (SoupServer * server, SoupServerMessage * msg,
char *name, char **output, const char *path, GstdSession * session);
static GstdReturnCode do_delete (SoupServer * server, SoupMessage * msg,
static GstdReturnCode do_delete (SoupServer * server, SoupServerMessage * msg,
char *name, char **output, const char *path, GstdSession * session);
static void do_request (gpointer data_request, gpointer eval);
static void server_callback (SoupServer * server, SoupMessage * msg,
const char *path, GHashTable * query, SoupClientContext * context,
gpointer data);
static void server_callback (SoupServer * server, SoupServerMessage * msg,
const char *path, GHashTable * query, gpointer data);

static void
gstd_http_class_init (GstdHttpClass * klass)
Expand Down Expand Up @@ -168,7 +167,7 @@ get_status_code (GstdReturnCode ret)
}

static GstdReturnCode
do_get (SoupServer * server, SoupMessage * msg, char **output, const char *path,
do_get (SoupServer * server, SoupServerMessage * msg, char **output, const char *path,
GstdSession * session)
{
gchar *message = NULL;
Expand All @@ -189,7 +188,7 @@ do_get (SoupServer * server, SoupMessage * msg, char **output, const char *path,
}

static GstdReturnCode
do_post (SoupServer * server, SoupMessage * msg, char *name,
do_post (SoupServer * server, SoupServerMessage * msg, char *name,
char *description, char **output, const char *path, GstdSession * session)
{
gchar *message = NULL;
Expand Down Expand Up @@ -224,7 +223,7 @@ do_post (SoupServer * server, SoupMessage * msg, char *name,
}

static GstdReturnCode
do_put (SoupServer * server, SoupMessage * msg, char *name, char **output,
do_put (SoupServer * server, SoupServerMessage * msg, char *name, char **output,
const char *path, GstdSession * session)
{
gchar *message = NULL;
Expand Down Expand Up @@ -254,7 +253,7 @@ do_put (SoupServer * server, SoupMessage * msg, char *name, char **output,
}

static GstdReturnCode
do_delete (SoupServer * server, SoupMessage * msg, char *name,
do_delete (SoupServer * server, SoupServerMessage * msg, char *name,
char **output, const char *path, GstdSession * session)
{
gchar *message = NULL;
Expand Down Expand Up @@ -294,11 +293,12 @@ do_request (gpointer data_request, gpointer eval)
const gchar *description = NULL;
SoupStatus status = SOUP_STATUS_OK;
SoupServer *server = NULL;
SoupMessage *msg = NULL;
SoupServerMessage *msg = NULL;
GstdSession *session = NULL;
const char *path = NULL;
GHashTable *query = NULL;
GstdHttpRequest *data_request_local = NULL;
const char *method;

g_return_if_fail (data_request);

Expand All @@ -316,15 +316,16 @@ do_request (gpointer data_request, gpointer eval)
description_pipe = g_hash_table_lookup (query, "description");
}

if (msg->method == SOUP_METHOD_GET) {
method = soup_server_message_get_method (msg);
if (method == SOUP_METHOD_GET) {
ret = do_get (server, msg, &output, path, session);
} else if (msg->method == SOUP_METHOD_POST) {
} else if (method == SOUP_METHOD_POST) {
ret = do_post (server, msg, name, description_pipe, &output, path, session);
} else if (msg->method == SOUP_METHOD_PUT) {
} else if (method == SOUP_METHOD_PUT) {
ret = do_put (server, msg, name, &output, path, session);
} else if (msg->method == SOUP_METHOD_DELETE) {
} else if (method == SOUP_METHOD_DELETE) {
ret = do_delete (server, msg, name, &output, path, session);
} else if (msg->method == SOUP_METHOD_OPTIONS) {
} else if (method == SOUP_METHOD_OPTIONS) {
ret = GSTD_EOK;
}

Expand All @@ -336,15 +337,15 @@ do_request (gpointer data_request, gpointer eval)
g_free (output);
output = NULL;

soup_message_set_response (msg, "application/json", SOUP_MEMORY_COPY,
soup_server_message_set_response (msg, "application/json", SOUP_MEMORY_COPY,
response, strlen (response));
g_free (response);
response = NULL;

status = get_status_code (ret);
soup_message_set_status (msg, status);
soup_server_message_set_status (msg, status, NULL);
g_mutex_lock (data_request_local->mutex);
soup_server_unpause_message (server, msg);
soup_server_message_unpause (msg);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change was added since libsoup 3.2, for versions minor to 3.2 it will fail as it expect to use soup_server_unpause_message(). There are some distributions that manage libsoup 3.0.7 version like Ubuntu 22.04. For this case, we will need to add conditional logic to support versions < 3.2 and >= 3.2.

g_mutex_unlock (data_request_local->mutex);

if (query != NULL) {
Expand All @@ -357,13 +358,14 @@ do_request (gpointer data_request, gpointer eval)
}

static void
server_callback (SoupServer * server, SoupMessage * msg,
server_callback (SoupServer * server, SoupServerMessage * msg,
const char *path, GHashTable * query,
SoupClientContext * context, gpointer data)
gpointer data)
{
GstdSession *session = NULL;
GstdHttp *self = NULL;
GstdHttpRequest *data_request = NULL;
SoupMessageHeaders *response_headers = NULL;

g_return_if_fail (server);
g_return_if_fail (msg);
Expand All @@ -385,14 +387,15 @@ server_callback (SoupServer * server, SoupMessage * msg,
}
data_request->mutex = &self->mutex;

soup_message_headers_append (msg->response_headers,
response_headers = soup_server_message_get_request_headers (msg);
soup_message_headers_append (response_headers,
"Access-Control-Allow-Origin", "*");
soup_message_headers_append (msg->response_headers,
soup_message_headers_append (response_headers,
"Access-Control-Allow-Headers", "origin,range,content-type");
soup_message_headers_append (msg->response_headers,
soup_message_headers_append (response_headers,
"Access-Control-Allow-Methods", "PUT, GET, POST, DELETE");
g_mutex_lock (&self->mutex);
soup_server_pause_message (server, msg);
soup_server_message_pause (msg);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change was added since libsoup 3.2, for versions minor to 3.2 it will fail as it expect to use soup_server_pause_message(). There are some distributions that manage libsoup 3.0.7 version like Ubuntu 22.04. For this case, we will need to add conditional logic to support versions < 3.2 and >= 3.2.

g_mutex_unlock (&self->mutex);
if (!g_thread_pool_push (self->pool, (gpointer) data_request, NULL)) {
GST_ERROR_OBJECT (self->pool, "Thread pool push failed");
Expand Down Expand Up @@ -420,7 +423,7 @@ gstd_http_start (GstdIpc * base, GstdSession * session)
gstd_http_stop (base);

GST_DEBUG_OBJECT (self, "Initializing HTTP server");
self->server = soup_server_new (SOUP_SERVER_SERVER_HEADER, "Gstd-1.0", NULL);
self->server = soup_server_new ("server-header", "Gstd-1.0", NULL);
if (!self->server) {
goto noconnection;
}
Expand Down
2 changes: 1 addition & 1 deletion meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ json_glib_dep = dependency('json-glib-1.0', version : '>=0.16.2')
libd_dep = dependency('libdaemon', version : '>=0.14')
jansson_dep = dependency('jansson', version : '>=2.7')
thread_dep = dependency('threads')
libsoup_dep = dependency('libsoup-2.4', version : '>=2.4')
libsoup_dep = dependency('libsoup-3.0', version : '>=2.99')
libedit_dep = dependency('libedit', version : '>=3.0')

gst_check_required = get_option('enable-tests').enabled()
Expand Down