/* GStreamer * * Copyright (C) 2014 Samsung Electronics. All rights reserved. * @Author: Reynaldo H. Verdejo Pinochet * * 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 #include #include #include "gstsouputils.h" /** * 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; if (G_UNLIKELY ((gint) level > 9)) 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); }