| /* 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" | 
 |  | 
 | /** | 
 |  * 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); | 
 | } |