2014-01-08 02:00:56 +00:00
|
|
|
/* GStreamer
|
|
|
|
*
|
|
|
|
* Copyright (C) 2014 Samsung Electronics. All rights reserved.
|
|
|
|
* @Author: Reynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com>
|
|
|
|
*
|
|
|
|
* 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
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#include <glib.h>
|
|
|
|
#include <gst/gst.h>
|
|
|
|
#include <libsoup/soup.h>
|
|
|
|
#include "gstsouputils.h"
|
|
|
|
|
2019-04-23 16:28:23 +00:00
|
|
|
/*
|
2014-01-08 02:00:56 +00:00
|
|
|
* Soup logger funcs
|
|
|
|
*/
|
|
|
|
|
|
|
|
GST_DEBUG_CATEGORY_EXTERN (soup_utils_debug);
|
|
|
|
#define GST_CAT_DEFAULT soup_utils_debug
|
|
|
|
|
|
|
|
static inline gchar
|
|
|
|
gst_soup_util_log_make_level_tag (SoupLoggerLogLevel level)
|
|
|
|
{
|
|
|
|
gchar c;
|
|
|
|
|
2014-02-12 09:08:50 +00:00
|
|
|
if (G_UNLIKELY ((gint) level > 9))
|
2014-01-08 02:00:56 +00:00
|
|
|
return '?';
|
|
|
|
|
|
|
|
switch (level) {
|
|
|
|
case SOUP_LOGGER_LOG_MINIMAL:
|
|
|
|
c = 'M';
|
|
|
|
break;
|
|
|
|
case SOUP_LOGGER_LOG_HEADERS:
|
|
|
|
c = 'H';
|
|
|
|
break;
|
|
|
|
case SOUP_LOGGER_LOG_BODY:
|
|
|
|
c = 'B';
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
/* Unknown level. If this is hit libsoup likely added a new
|
|
|
|
* log level to SoupLoggerLogLevel and it should be added
|
|
|
|
* as a case */
|
|
|
|
c = level + '0';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return c;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gst_soup_util_log_printer_cb (SoupLogger G_GNUC_UNUSED * logger,
|
|
|
|
SoupLoggerLogLevel level, char direction, const char *data,
|
|
|
|
gpointer user_data)
|
|
|
|
{
|
|
|
|
gchar c;
|
|
|
|
c = gst_soup_util_log_make_level_tag (level);
|
|
|
|
GST_TRACE_OBJECT (GST_ELEMENT (user_data), "HTTP_SESSION(%c): %c %s", c,
|
|
|
|
direction, data);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gst_soup_util_log_setup (SoupSession * session, SoupLoggerLogLevel level,
|
|
|
|
GstElement * element)
|
|
|
|
{
|
|
|
|
SoupLogger *logger;
|
|
|
|
|
|
|
|
if (!level) {
|
|
|
|
GST_INFO_OBJECT (element, "Not attaching a logger with level 0");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
g_assert (session && element);
|
|
|
|
|
|
|
|
if (gst_debug_category_get_threshold (GST_CAT_DEFAULT)
|
|
|
|
< GST_LEVEL_TRACE) {
|
|
|
|
GST_INFO_OBJECT (element, "Not setting up HTTP session logger. "
|
|
|
|
"Need at least GST_LEVEL_TRACE");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Create a new logger and set body_size_limit to -1 (no limit) */
|
|
|
|
logger = soup_logger_new (level, -1);
|
|
|
|
soup_logger_set_printer (logger, gst_soup_util_log_printer_cb,
|
|
|
|
gst_object_ref (element), (GDestroyNotify) gst_object_unref);
|
|
|
|
|
|
|
|
/* Attach logger to session */
|
|
|
|
soup_session_add_feature (session, SOUP_SESSION_FEATURE (logger));
|
|
|
|
g_object_unref (logger);
|
|
|
|
}
|