# HG changeset patch
# User leo_sobral
# Date 1174690464 0
# Node ID d260ed30f4decc0dbdb72d7c54474d5408c999d1
# Parent b17cf9627ade7009a6c6a8996299d33a597f0d9d
[svn r451] various memory leaks and object counting fixed
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_backendinfo.c
--- a/gmyth/src/gmyth_backendinfo.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_backendinfo.c Fri Mar 23 22:54:24 2007 +0000
@@ -158,9 +158,11 @@
gmyth_backend_info_set_password (backend_info, gmyth_uri_get_password (uri) );
/* gets the path info to database name, from the URI, and removes the trash chars */
- gmyth_backend_info_set_db_name (backend_info, path_parts != NULL && path_parts[0] != NULL
- && strlen( path_parts[0] ) > 0 ? g_strstrip( g_strdup( g_strdelimit( path_parts[0], "/?", ' ' ) ) )
- : gmyth_uri_get_path (uri) );
+ gmyth_backend_info_set_db_name (backend_info, path_parts != NULL &&
+ strlen( path_parts[0] ) > 0 ?
+ g_strstrip( g_strdelimit( path_parts[0], "/?", ' ' ) )
+ : gmyth_uri_get_path (uri) );
+
gmyth_backend_info_set_port ( backend_info, gmyth_uri_get_port (uri) );
g_object_unref (uri);
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_common.c
--- a/gmyth/src/gmyth_common.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_common.c Fri Mar 23 22:54:24 2007 +0000
@@ -45,12 +45,12 @@
* @param list the GList containing a list of GMythChannelInfo to free.
*/
void
-gmyth_free_channel_list (GList *list)
+gmyth_free_channel_list (GSList *list)
{
g_return_if_fail (list != NULL);
- g_list_foreach (list, free_channel_data, NULL);
- g_list_free (list);
+ g_slist_foreach (list, free_channel_data, NULL);
+ g_slist_free (list);
}
/**
@@ -61,12 +61,12 @@
* @param list the GList containing a list of GMythProgramInfo to free.
*/
void
-gmyth_free_program_list(GList *list)
+gmyth_free_program_list(GSList *list)
{
g_return_if_fail (list != NULL);
- g_list_foreach (list, free_program_data, NULL);
- g_list_free (list);
+ g_slist_foreach (list, free_program_data, NULL);
+ g_slist_free (list);
}
#ifdef GMYTH_USE_DEBUG
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_common.h
--- a/gmyth/src/gmyth_common.h Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_common.h Fri Mar 23 22:54:24 2007 +0000
@@ -51,8 +51,8 @@
} GMythChannelInfo;
-void gmyth_free_channel_list(GList *list);
-void gmyth_free_program_list(GList *list);
+void gmyth_free_channel_list(GSList *list);
+void gmyth_free_program_list(GSList *list);
#ifdef GMYTH_USE_DEBUG
void gmyth_channel_info_print (GMythChannelInfo *channel_info);
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_epg.c
--- a/gmyth/src/gmyth_epg.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_epg.c Fri Mar 23 22:54:24 2007 +0000
@@ -142,11 +142,11 @@
/** Retrieves the available list of channels from the backend Mysql database.
*
* @param gmyth_epg the GMythEPG instance.
- * @param glist_ptr the GList pointer to be filled with the loaded list address.
+ * @param glist_ptr the GSList pointer to be filled with the loaded list address.
* @return The amount of channels retrieved from database, or -1 if error.
*/
gint
-gmyth_epg_get_channel_list (GMythEPG *gmyth_epg, GList **glist_ptr)
+gmyth_epg_get_channel_list (GMythEPG *gmyth_epg, GSList **glist_ptr)
{
MYSQL_RES *msql_res;
@@ -173,26 +173,26 @@
#ifdef GMYTH_USE_DEBUG
gmyth_channel_info_print(channel_info);
#endif
- (*glist_ptr) = g_list_append ((*glist_ptr), channel_info);
+ (*glist_ptr) = g_slist_append ((*glist_ptr), channel_info);
}
}
mysql_free_result (msql_res);
- return (!(*glist_ptr)) ? 0 : g_list_length (*glist_ptr);
+ return (!(*glist_ptr)) ? 0 : g_slist_length (*glist_ptr);
}
/**
* Retrieves the available list of channels from the backend Mysql database.
*
* @param gmyth_epg the GMythEPG instance.
- * @param proglist the GList pointer to be filled with the loaded list.
+ * @param proglist the GSList pointer to be filled with the loaded list.
* @param chan_num the channel num on which to search for program.
* @param starttime the start time to search for programs.
* @param endtime the end time to search for programs.
* @return The amount of channels retrieved from database, or -1 if error.
*/
gint
-gmyth_epg_get_program_list (GMythEPG *gmyth_epg, GList **proglist,
+gmyth_epg_get_program_list (GMythEPG *gmyth_epg, GSList **proglist,
const gint chan_num, GTimeVal *starttime, GTimeVal *endtime)
{
@@ -290,7 +290,7 @@
p->catType = g_string_new (row[18]);
- *proglist = g_list_append((*proglist), p);
+ *proglist = g_slist_append((*proglist), p);
#ifdef GMYTH_USE_DEBUG
gmyth_program_info_print (p);
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_epg.h
--- a/gmyth/src/gmyth_epg.h Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_epg.h Fri Mar 23 22:54:24 2007 +0000
@@ -68,8 +68,8 @@
gboolean gmyth_epg_connect (GMythEPG *gmyth_epg, GMythBackendInfo *backend_info);
gboolean gmyth_epg_disconnect (GMythEPG *gmyth_epg);
-gint gmyth_epg_get_channel_list (GMythEPG *gmyth_epg, GList **glist_ptr);
-gint gmyth_epg_get_program_list (GMythEPG *gmyth_epg, GList **proglist,
+gint gmyth_epg_get_channel_list (GMythEPG *gmyth_epg, GSList **glist_ptr);
+gint gmyth_epg_get_program_list (GMythEPG *gmyth_epg, GSList **proglist,
const gint chanNum, GTimeVal *starttime, GTimeVal *endtime);
#endif /*GMYTH_EPG_H_*/
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_file_transfer.c
--- a/gmyth/src/gmyth_file_transfer.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_file_transfer.c Fri Mar 23 22:54:24 2007 +0000
@@ -799,8 +799,8 @@
{
GMythRecorder *recorder = GMYTH_RECORDER( livetv_recorder );
- gmyth_debug( "Program info changed! ( file transfer orig. = %p, ptr. = [%s], user data = [%s] )", transfer,
- livetv_recorder != NULL ? "[NOT NULL]" : "[NULL]", livetv != NULL ? "[NOT NULL]" : "[NULL]" );
+ gmyth_debug( "Program info changed! ( file transfer orig. = %p, ptr. = [%s] )", transfer,
+ livetv_recorder != NULL ? "[NOT NULL]" : "[NULL]");
if ( NULL != recorder )
{
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_monitor_handler.c
--- a/gmyth/src/gmyth_monitor_handler.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_monitor_handler.c Fri Mar 23 22:54:24 2007 +0000
@@ -83,6 +83,9 @@
static gboolean gmyth_connect_to_backend_monitor (GMythMonitorHandler *monitor);
+static gboolean gmyth_monitor_handler_setup( GMythMonitorHandler *monitor,
+ GIOChannel *channel );
+
void gmyth_monitor_handler_close( GMythMonitorHandler *monitor );
G_DEFINE_TYPE(GMythMonitorHandler, gmyth_monitor_handler, G_TYPE_OBJECT)
@@ -550,12 +553,10 @@
* @return Pointer to the boolean value, and it is true only if the
* GMythMonitorHandler could be configured.
*/
-static gboolean*
+static gboolean
gmyth_monitor_handler_setup( GMythMonitorHandler *monitor, GIOChannel *channel )
{
- gboolean *ret = g_new0( gboolean, 1 );
-
- *ret = TRUE;
+ gboolean ret = TRUE;
if ( channel != NULL ) {
@@ -564,13 +565,13 @@
monitor->sid_io_watch = g_io_add_watch( channel, G_IO_IN | G_IO_HUP,
(GIOFunc)gmyth_monitor_handler_listener, monitor );
} else {
- *ret = FALSE;
+ ret = FALSE;
goto cleanup;
}
if (monitor->sid_io_watch < 0){
gmyth_debug( "[%s] Error adding watch listener function to the IO control channel!\n", __FUNCTION__ );
- *ret = FALSE;
+ ret = FALSE;
goto cleanup;
}
@@ -590,23 +591,21 @@
gboolean
gmyth_monitor_handler_start (GMythMonitorHandler *monitor)
{
- gboolean *ret = g_new0( gboolean, 1 );
- *ret = TRUE;
+ gboolean ret = TRUE;
ret = gmyth_monitor_handler_setup( monitor, monitor->event_sock->sd_io_ch );
- if ( *ret )
- {
+ if ( ret ) {
gmyth_debug ( "\n[%s]\tOK! Starting listener on the MONITOR event socket...[thread location = %p]\n",
__FUNCTION__, g_thread_self( ) );
- *ret = TRUE;
+ ret = TRUE;
} else {
gmyth_debug ( "\n[%s]\tERROR! Coudn't start listener on the MONITOR event socket...[thread location = %p]\n",
__FUNCTION__, g_thread_self( ) );
- *ret = FALSE;
+ ret = FALSE;
}
gmyth_debug( "[%s] Watch listener function over the IO control channel? %s!!!\n",
- __FUNCTION__, ( *ret == TRUE ? "YES" : "NO" ) );
+ __FUNCTION__, ( ret == TRUE ? "YES" : "NO" ) );
- return *ret;
+ return ret;
}
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_programinfo.h
--- a/gmyth/src/gmyth_programinfo.h Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_programinfo.h Fri Mar 23 22:54:24 2007 +0000
@@ -159,7 +159,8 @@
const gchar* gmyth_program_info_to_string( const GMythProgramInfo* prog );
-gboolean gmyth_program_info_is_equals( const GMythProgramInfo* prog1, const GMythProgramInfo* prog2 );
+gboolean gmyth_program_info_is_equals( const GMythProgramInfo* prog1,
+ const GMythProgramInfo* prog2 );
G_END_DECLS
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_recorder.c
--- a/gmyth/src/gmyth_recorder.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_recorder.c Fri Mar 23 22:54:24 2007 +0000
@@ -38,6 +38,7 @@
#include "gmyth_stringlist.h"
#include "gmyth_util.h"
+#include "gmyth_common.h"
#include "gmyth_debug.h"
#define GMYTHTV_RECORDER_HEADER "QUERY_RECORDER"
@@ -62,11 +63,13 @@
}
static void
-gmyth_recorder_init(GMythRecorder *gmyth_remote_encoder) {
+gmyth_recorder_init(GMythRecorder *gmyth_remote_encoder)
+{
}
static void
-gmyth_recorder_dispose(GObject *object) {
+gmyth_recorder_dispose(GObject *object)
+{
GMythRecorder *recorder= GMYTH_RECORDER(object);
gmyth_recorder_close(recorder);
@@ -76,19 +79,25 @@
recorder->myth_socket = NULL;
}
+ gmyth_free_program_list (recorder->progs_info_list);
+
+ g_string_free (recorder->hostname, TRUE);
+
G_OBJECT_CLASS (gmyth_recorder_parent_class)->dispose (object);
}
static void
-gmyth_recorder_finalize(GObject *object) {
+gmyth_recorder_finalize(GObject *object)
+{
g_signal_handlers_destroy(object);
G_OBJECT_CLASS (gmyth_recorder_parent_class)->finalize (object);
}
void
-gmyth_recorder_close(GMythRecorder *recorder) {
- gmyth_recorder_finish_recording( recorder);
+gmyth_recorder_close(GMythRecorder *recorder)
+{
+ gmyth_recorder_finish_recording(recorder);
}
/** Creates a new instance of GMythRecorder.
@@ -96,9 +105,10 @@
* @return a new instance of GMythRecorder.
*/
GMythRecorder*
-gmyth_recorder_new(int num, GString *hostname, gshort port) {
- GMythRecorder *encoder= GMYTH_RECORDER ( g_object_new (
- GMYTH_RECORDER_TYPE, FALSE ));
+gmyth_recorder_new(int num, GString *hostname, gshort port)
+{
+ GMythRecorder *encoder=
+ GMYTH_RECORDER ( g_object_new (GMYTH_RECORDER_TYPE, FALSE ) );
encoder->recorder_num = num;
encoder->hostname = g_string_new(hostname->str);
@@ -114,20 +124,20 @@
* @return TRUE if successfull, FALSE if any error happens.
*/
gboolean
-gmyth_recorder_setup(GMythRecorder *recorder) {
+gmyth_recorder_setup(GMythRecorder *recorder)
+{
assert (recorder);
gmyth_debug ("[%s] Creating socket and connecting to backend", __FUNCTION__);
if (recorder->myth_socket == NULL) {
-
recorder->myth_socket = gmyth_socket_new ();
- if (!gmyth_socket_connect_to_backend ( recorder->myth_socket, recorder->hostname->str,
+ if (!gmyth_socket_connect_to_backend ( recorder->myth_socket,
+ recorder->hostname->str,
recorder->port, TRUE ) ) {
gmyth_debug ("GMythRemoteEncoder: Connection to backend failed");
return FALSE;
}
-
} else {
gmyth_debug("Remote encoder socket already created\n");
}
@@ -143,9 +153,11 @@
* @return true if success, false if any error happens.
*/
gboolean
-gmyth_recorder_spawntv(GMythRecorder *recorder, GString *tvchain_id) {
+gmyth_recorder_spawntv(GMythRecorder *recorder, GString *tvchain_id)
+{
GMythStringList *str_list;
- GString *tmp_str = g_string_new( GMYTHTV_RECORDER_HEADER);
+ GString *tmp_str = g_string_new(GMYTHTV_RECORDER_HEADER);
+ gboolean ret = TRUE;
gmyth_debug ("[%s] Spawntv with tvchain_id = %s", __FUNCTION__, tvchain_id->str);
@@ -154,29 +166,34 @@
g_string_append_printf ( tmp_str, " %d", recorder->recorder_num );
gmyth_string_list_append_string (str_list, tmp_str);
- gmyth_string_list_append_string (str_list, g_string_new ("SPAWN_LIVETV"));
+ g_string_free (tmp_str, TRUE);
+
+ gmyth_string_list_append_char_array (str_list, "SPAWN_LIVETV");
+
gmyth_string_list_append_string (str_list, tvchain_id);
gmyth_string_list_append_int (str_list, 0); // PIP = FALSE (0)
gmyth_socket_sendreceive_stringlist (recorder->myth_socket, str_list);
- g_string_free (tmp_str, TRUE);
+ tmp_str = gmyth_string_list_get_string (str_list, 0);
- tmp_str = gmyth_string_list_get_string (str_list, 0);
if (tmp_str == NULL) {
gmyth_debug ("[%s] Spawntv request returned %s", __FUNCTION__, tmp_str->str);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
if (g_ascii_strncasecmp (tmp_str->str, "ok", 2)) {
gmyth_debug ("[%s] Spawntv request returned %s", __FUNCTION__, tmp_str->str);
- g_object_unref (str_list);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
+cleanup:
+ g_string_free (tmp_str, TRUE);
g_object_unref (str_list);
- return TRUE;
+ return ret;
}
/**
@@ -190,7 +207,8 @@
gboolean
gmyth_recorder_spawntv_no_tvchain(GMythRecorder *recorder) {
GMythStringList *str_list;
- GString *tmp_str = g_string_new( GMYTHTV_RECORDER_HEADER);
+ GString *tmp_str = g_string_new(GMYTHTV_RECORDER_HEADER);
+ gboolean ret = TRUE;
gmyth_debug ("[%s] Spawntv, no TV chain!", __FUNCTION__);
@@ -199,27 +217,31 @@
g_string_append_printf ( tmp_str, " %d", recorder->recorder_num );
gmyth_string_list_append_string (str_list, tmp_str);
- gmyth_string_list_append_string (str_list, g_string_new ("SPAWN_LIVETV"));
+ g_string_free (tmp_str, TRUE);
+
+ gmyth_string_list_append_char_array (str_list, "SPAWN_LIVETV");
gmyth_socket_sendreceive_stringlist (recorder->myth_socket, str_list);
- g_string_free (tmp_str, TRUE);
+ tmp_str = gmyth_string_list_get_string (str_list, 0);
- tmp_str = gmyth_string_list_get_string (str_list, 0);
if (tmp_str == NULL) {
- gmyth_debug ("[%s] Spawntv request returned %s", __FUNCTION__, tmp_str->str);
- return FALSE;
+ gmyth_debug ("[%s] Spawntv request returned %s", __FUNCTION__, tmp_str->str);
+ ret = FALSE;
+ goto cleanup;
}
if (g_ascii_strncasecmp (tmp_str->str, "ok", 2)) {
gmyth_debug ("[%s] Spawntv request returned %s", __FUNCTION__, tmp_str->str);
- g_object_unref (str_list);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
+cleanup:
+ g_string_free (tmp_str, TRUE);
g_object_unref (str_list);
- return TRUE;
+ return ret;
}
/** Sends the command STOP_LIVETV to Mythtv backend.
@@ -230,29 +252,35 @@
gboolean
gmyth_recorder_stop_livetv(GMythRecorder *recorder) {
GMythStringList *str_list;
- GString *tmp_str = g_string_new( GMYTHTV_RECORDER_HEADER);
+ GString *tmp_str = g_string_new(GMYTHTV_RECORDER_HEADER);
+ gboolean ret = TRUE;
gmyth_debug ("[%s]", __FUNCTION__);
str_list = gmyth_string_list_new ();
g_string_append_printf ( tmp_str, " %d", recorder->recorder_num );
+
+ gmyth_string_list_append_string (str_list, tmp_str);
+ g_string_free (tmp_str, TRUE);
+
gmyth_string_list_append_char_array( str_list, "STOP_LIVETV" );
gmyth_socket_sendreceive_stringlist (recorder->myth_socket, str_list);
- g_string_free (tmp_str, TRUE);
+ tmp_str = gmyth_string_list_get_string (str_list, 0);
- tmp_str = gmyth_string_list_get_string (str_list, 0);
if (g_ascii_strncasecmp (tmp_str->str, "ok", 2)) {
gmyth_debug ("[%s] Stop livetv request returned %s", __FUNCTION__, tmp_str->str);
- g_object_unref (str_list);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
+cleanup:
+ g_string_free (tmp_str, TRUE);
g_object_unref (str_list);
- return TRUE;
+ return ret;
}
/** Sends the FRONTEND_READY command through Mythtv protocol. This command
@@ -264,7 +292,8 @@
gboolean
gmyth_recorder_send_frontend_ready_command(GMythRecorder *recorder) {
GMythStringList *str_list;
- GString *tmp_str = g_string_new( GMYTHTV_RECORDER_HEADER);
+ GString *tmp_str = g_string_new(GMYTHTV_RECORDER_HEADER);
+ gboolean ret = TRUE;
gmyth_debug ( "[%s] FRONTEND_READY with recorder id = %d", __FUNCTION__, recorder->recorder_num );
@@ -273,27 +302,32 @@
g_string_append_printf ( tmp_str, " %d", recorder->recorder_num );
gmyth_string_list_append_string (str_list, tmp_str);
- gmyth_string_list_append_string (str_list, g_string_new ("FRONTEND_READY"));
+ g_string_free (tmp_str, TRUE);
+
+ gmyth_string_list_append_char_array (str_list, "FRONTEND_READY");
gmyth_socket_sendreceive_stringlist (recorder->myth_socket, str_list);
- g_string_free (tmp_str, TRUE);
+ tmp_str = gmyth_string_list_get_string (str_list, 0);
- tmp_str = gmyth_string_list_get_string (str_list, 0);
if (tmp_str == NULL) {
- gmyth_debug ("[%s] FRONTEND_READY command request couldn't returns, reason: %s", __FUNCTION__, tmp_str->str);
- return FALSE;
+ gmyth_debug ("[%s] FRONTEND_READY command request couldn't returns, reason: %s",
+ __FUNCTION__, tmp_str->str);
+ ret = FALSE;
+ goto cleanup;
}
if (g_ascii_strncasecmp (tmp_str->str, "ok", 2)) {
gmyth_debug ("[%s] FRONTEND_READY request returned %s", __FUNCTION__, tmp_str->str);
- g_object_unref (str_list);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
+cleanup:
+ g_string_free (tmp_str, TRUE);
g_object_unref (str_list);
- return TRUE;
+ return ret;
}
/** Send a CHECK_CHANNEL command request to the backend, in order to find if a
@@ -307,7 +341,8 @@
gmyth_recorder_check_channel_name(GMythRecorder *recorder,
gchar* channel) {
GMythStringList *str_list;
- GString *tmp_str = g_string_new( GMYTHTV_RECORDER_HEADER);
+ GString *tmp_str = g_string_new(GMYTHTV_RECORDER_HEADER);
+ gboolean ret = TRUE;
gmyth_debug ("[%s] CHECK_CHANNEL with channel = %s", __FUNCTION__, channel);
@@ -316,28 +351,33 @@
g_string_append_printf ( tmp_str, " %d", recorder->recorder_num );
gmyth_string_list_append_string (str_list, tmp_str);
- gmyth_string_list_append_string (str_list, g_string_new ("CHECK_CHANNEL"));
+ g_string_free (tmp_str, TRUE);
+
+ gmyth_string_list_append_char_array (str_list, "CHECK_CHANNEL");
+
gmyth_string_list_append_char_array (str_list, channel);
gmyth_socket_sendreceive_stringlist (recorder->myth_socket, str_list);
- g_string_free (tmp_str, TRUE);
+ tmp_str = gmyth_string_list_get_string (str_list, 0);
- tmp_str = gmyth_string_list_get_string (str_list, 0);
if (tmp_str == NULL) {
gmyth_debug ("[%s] CHECK_CHANNEL request returned %s", __FUNCTION__, tmp_str->str);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
if (g_ascii_strncasecmp (tmp_str->str, "ok", 2) == 0 || g_ascii_strncasecmp (tmp_str->str, "0", 1) == 0 ) {
gmyth_debug ("[%s] CHECK_CHANNEL request returned %s", __FUNCTION__, tmp_str->str);
- g_object_unref (str_list);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
+cleanup:
+ g_string_free (tmp_str, TRUE);
g_object_unref (str_list);
- return TRUE;
+ return ret;
}
/** Send a CHECK_CHANNEL command request to the backend, in order to find if a
@@ -363,7 +403,8 @@
gboolean
gmyth_recorder_set_channel(GMythRecorder *recorder, gint channel) {
GMythStringList *str_list;
- GString *tmp_str = g_string_new( GMYTHTV_RECORDER_HEADER);
+ GString *tmp_str = g_string_new(GMYTHTV_RECORDER_HEADER);
+ gboolean ret = TRUE;
gmyth_debug ("[%s] SET_CHANNEL with channel = %d", __FUNCTION__, channel);
@@ -372,28 +413,33 @@
g_string_append_printf ( tmp_str, " %d", recorder->recorder_num );
gmyth_string_list_append_string (str_list, tmp_str);
- gmyth_string_list_append_string (str_list, g_string_new ("SET_CHANNEL"));
+ g_string_free (tmp_str, TRUE);
+
+ gmyth_string_list_append_char_array (str_list, "SET_CHANNEL");
+
gmyth_string_list_append_int (str_list, channel);
gmyth_socket_sendreceive_stringlist (recorder->myth_socket, str_list);
- g_string_free (tmp_str, TRUE);
+ tmp_str = gmyth_string_list_get_string (str_list, 0);
- tmp_str = gmyth_string_list_get_string (str_list, 0);
if (tmp_str == NULL) {
gmyth_debug ("[%s] SET_CHANNEL request returned %s", __FUNCTION__, tmp_str->str);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
if (g_ascii_strncasecmp (tmp_str->str, "ok", 2)) {
gmyth_debug ("[%s] SET_CHANNEL request returned %s", __FUNCTION__, tmp_str->str);
- g_object_unref (str_list);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
+cleanup:
+ g_string_free (tmp_str, TRUE);
g_object_unref (str_list);
- return TRUE;
+ return ret;
}
/** Send a SET_CHANNEL command request to the backend, to start streaming on another
@@ -408,6 +454,7 @@
const gchar* channel) {
GMythStringList *str_list;
GString *tmp_str = g_string_new( GMYTHTV_RECORDER_HEADER);
+ gboolean ret = TRUE;
gmyth_debug ("[%s] SET_CHANNEL with channel name = %s", __FUNCTION__, channel);
@@ -416,28 +463,32 @@
g_string_append_printf ( tmp_str, " %d", recorder->recorder_num );
gmyth_string_list_append_string (str_list, tmp_str);
- gmyth_string_list_append_string (str_list, g_string_new ("SET_CHANNEL"));
+ g_string_free (tmp_str, TRUE);
+
+ gmyth_string_list_append_char_array (str_list, "SET_CHANNEL");
gmyth_string_list_append_char_array (str_list, channel);
gmyth_socket_sendreceive_stringlist (recorder->myth_socket, str_list);
- g_string_free (tmp_str, TRUE);
+ tmp_str = gmyth_string_list_get_string (str_list, 0);
- tmp_str = gmyth_string_list_get_string (str_list, 0);
if (tmp_str == NULL) {
gmyth_debug ("[%s] SET_CHANNEL name request returned NULL!", __FUNCTION__);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
if (tmp_str!= NULL && g_ascii_strncasecmp (tmp_str->str, "ok", 2) /*|| g_ascii_strtoull( tmp_str->str, NULL, 10 ) == 0 */) {
gmyth_debug ("XXXXXX[%s] SET_CHANNEL name request returned not ok", __FUNCTION__);
- g_object_unref (str_list);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
+cleanup:
+ g_string_free (tmp_str, TRUE);
g_object_unref (str_list);
- return TRUE;
+ return ret;
}
/**
@@ -460,6 +511,7 @@
const GMythRecorderChannelChangeDirection direction) {
GMythStringList *str_list;
GString *tmp_str = g_string_new( GMYTHTV_RECORDER_HEADER);
+ gboolean ret = TRUE;
gmyth_debug ("[%s] CHANGE_CHANNEL to the channel direction = %u", __FUNCTION__, direction);
@@ -468,28 +520,32 @@
g_string_append_printf ( tmp_str, " %d", recorder->recorder_num );
gmyth_string_list_append_string (str_list, tmp_str);
- gmyth_string_list_append_string (str_list, g_string_new ("CHANGE_CHANNEL"));
+ g_string_free (tmp_str, TRUE);
+
+ gmyth_string_list_append_char_array (str_list, "CHANGE_CHANNEL");
gmyth_string_list_append_int (str_list, direction);
gmyth_socket_sendreceive_stringlist (recorder->myth_socket, str_list);
- g_string_free (tmp_str, TRUE);
+ tmp_str = gmyth_string_list_get_string (str_list, 0);
- tmp_str = gmyth_string_list_get_string (str_list, 0);
if (tmp_str == NULL) {
gmyth_debug ("[%s] CHANGE_CHANNEL name request returned %s", __FUNCTION__, tmp_str->str );
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
if (g_ascii_strncasecmp (tmp_str->str, "ok", 2) || g_ascii_strtoull( tmp_str->str, NULL, 10 ) == 0 ) {
gmyth_debug ("[%s] CHANGE_CHANNEL name request returned %s", __FUNCTION__, tmp_str->str);
- g_object_unref (str_list);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
+cleanup:
+ g_string_free (tmp_str, TRUE);
g_object_unref (str_list);
- return TRUE;
+ return ret;
}
/** Send a PAUSE command request to the backend, to pause streaming on another
@@ -502,6 +558,7 @@
gmyth_recorder_pause_recording( GMythRecorder *recorder) {
GMythStringList *str_list;
GString *tmp_str = g_string_new( GMYTHTV_RECORDER_HEADER);
+ gboolean ret = TRUE;
gmyth_debug ("[%s] PAUSE", __FUNCTION__);
@@ -510,27 +567,31 @@
g_string_append_printf ( tmp_str, " %d", recorder->recorder_num );
gmyth_string_list_append_string (str_list, tmp_str);
- gmyth_string_list_append_string (str_list, g_string_new ("PAUSE"));
+ g_string_free (tmp_str, TRUE);
+
+ gmyth_string_list_append_char_array (str_list, "PAUSE");
gmyth_socket_sendreceive_stringlist (recorder->myth_socket, str_list);
- g_string_free (tmp_str, TRUE);
+ tmp_str = gmyth_string_list_get_string (str_list, 0);
- tmp_str = gmyth_string_list_get_string (str_list, 0);
if (tmp_str == NULL) {
gmyth_debug ("[%s] PAUSE name request returned %s", __FUNCTION__, tmp_str->str);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
if (g_ascii_strncasecmp (tmp_str->str, "ok", 2)) {
gmyth_debug ("[%s] PAUSE name request returned %s", __FUNCTION__, tmp_str->str);
- g_object_unref (str_list);
- return FALSE;
+ ret = FALSE;
+ goto cleanup;
}
+cleanup:
+ g_string_free (tmp_str, TRUE);
g_object_unref (str_list);
- return TRUE;
+ return ret;
}
static gboolean
@@ -555,10 +616,10 @@
* @return The actual program info.
*/
GMythProgramInfo *
-gmyth_recorder_get_current_program_info(
- GMythRecorder *recorder) {
- GMythStringList *str_list;
- GMythProgramInfo *program_info = gmyth_program_info_new();
+gmyth_recorder_get_current_program_info(GMythRecorder *recorder)
+{
+ GMythStringList *str_list = NULL;
+ GMythProgramInfo *program_info = NULL;
GString *tmp_str = g_string_new( GMYTHTV_RECORDER_HEADER);
str_list = gmyth_string_list_new();
@@ -568,21 +629,17 @@
gmyth_string_list_append_string(str_list, tmp_str);
if ( recorder->myth_socket->mythtv_version >= 26)
- gmyth_string_list_append_string(str_list,
- g_string_new("GET_CURRENT_RECORDING"));
+ gmyth_string_list_append_char_array (str_list, "GET_CURRENT_RECORDING");
else
- gmyth_string_list_append_string(str_list,
- g_string_new("GET_PROGRAM_INFO"));
+ gmyth_string_list_append_char_array (str_list, "GET_PROGRAM_INFO");
gmyth_socket_sendreceive_stringlist(recorder->myth_socket, str_list);
- g_string_free(tmp_str, TRUE);
-
if (str_list == NULL) {
gmyth_debug(
"[%s] GET_PROGRAM_INFO request returned. Error getting program info, string list equals to NULL!",
- __FUNCTION__);
- return FALSE;
+ __FUNCTION__);
+ goto cleanup;
}
program_info = gmyth_program_info_from_string_list( str_list );
@@ -590,16 +647,23 @@
if ( NULL == program_info || NULL == program_info->pathname || program_info->pathname->len <= 0) {
gmyth_debug(
"GET_PROGRAM_INFO request returned. Error getting program info, it is equals to NULL!!!");
- g_object_unref(program_info);
- return NULL;
+
+ if (program_info)
+ g_object_unref(program_info);
+
+ program_info = NULL;
+
+ goto cleanup;
}
if ( !gmyth_recorder_find_if_program_exists( recorder, program_info ) )
- recorder->progs_info_list = g_slist_append( recorder->progs_info_list, program_info );
+ recorder->progs_info_list = g_slist_append( recorder->progs_info_list,
+ g_object_ref(program_info) );
+cleanup:
+ g_string_free (tmp_str, TRUE);
+ g_object_unref (str_list);
- g_object_unref(str_list);
return program_info;
-
}
/**
@@ -609,7 +673,8 @@
* @return The GMythRecorder instance.
*/
GMythRecorder *
-gmyth_recorder_get_recorder_from_num( gint rec_id) {
+gmyth_recorder_get_recorder_from_num( gint rec_id)
+{
GMythRecorder* recorder= NULL;
GMythStringList *str_list;
GString *tmp_str = g_string_new( "GET_RECORDER_FROM_NUM");
@@ -623,13 +688,12 @@
/* g_string_append_printf ( tmp_str, " %d", recorder->recorder_num ); */
gmyth_string_list_append_string(str_list, tmp_str);
+
gmyth_string_list_append_int(str_list, rec_id);
command_size = gmyth_socket_sendreceive_stringlist(recorder->myth_socket,
str_list);
- g_string_free(tmp_str, TRUE);
-
if (str_list == NULL) {
gmyth_debug(
"[%s] GET_RECORDER_FROM_NUM request returned. Error getting recorder number %d, it is equals to NULL!!!",
@@ -664,8 +728,9 @@
g_object_unref(str_list);
- if ( recorder_host != NULL)
- g_free( recorder_host);
+ g_string_free(tmp_str, TRUE);
+
+ g_free( recorder_host);
return recorder;
@@ -678,8 +743,8 @@
* @return The GMythProgramInfo next program info instance.
*/
GMythProgramInfo *
-gmyth_recorder_get_next_program_info(
- GMythRecorder *recorder, const GMythRecorderBrowseDirection direction) {
+gmyth_recorder_get_next_program_info( GMythRecorder *recorder,
+ const GMythRecorderBrowseDirection direction) {
GMythProgramInfo* actual_proginfo= NULL;
GMythProgramInfo* program_info= NULL;
GMythStringList *str_list;
@@ -754,15 +819,17 @@
} /* if */
- done: g_string_free(tmp_str, TRUE);
+done:
+ g_object_unref(actual_proginfo);
g_object_unref(str_list);
- if ( date != NULL)
- g_free( date);
+ g_string_free(tmp_str, TRUE);
+
+ g_free(date);
+ g_free (tm);
return program_info;
-
}
/**
@@ -795,11 +862,13 @@
#ifndef GMYTHTV_ENABLE_DEBUG
g_print( "[%s] Got file position = %lld\n", __FUNCTION__, pos);
#endif
+
if (str_list!=NULL)
g_object_unref(str_list);
+ g_string_free (query, TRUE);
+
return pos;
-
}
/**
@@ -811,7 +880,7 @@
*/
gboolean
gmyth_recorder_is_recording( GMythRecorder *recorder) {
- gboolean ret= TRUE;
+ gboolean ret = TRUE;
g_return_val_if_fail( recorder != NULL, FALSE );
@@ -821,7 +890,7 @@
g_string_printf( message, "%s %d", GMYTHTV_RECORDER_HEADER,
recorder->recorder_num);
gmyth_string_list_append_string(str_list, message);
- gmyth_string_list_append_string(str_list, g_string_new("IS_RECORDING"));
+ gmyth_string_list_append_char_array(str_list, "IS_RECORDING");
gmyth_socket_sendreceive_stringlist( recorder->myth_socket, str_list);
@@ -834,12 +903,16 @@
else
ret = FALSE;
}
+ g_string_free (str, TRUE);
}
+
gmyth_debug( "%s, stream is %s being recorded!\n", ret ? "YES" : "NO", ret ? "" : "NOT" );
//g_static_mutex_unlock (&mutex);
if ( str_list != NULL )
- g_object_unref (str_list);
+ g_object_unref (str_list);
+
+ g_string_free (message, TRUE);
return ret;
@@ -854,7 +927,7 @@
*/
gboolean
gmyth_recorder_finish_recording( GMythRecorder *recorder) {
- gboolean ret= TRUE;
+ gboolean ret = TRUE;
g_return_val_if_fail( recorder != NULL, FALSE );
@@ -864,26 +937,30 @@
g_string_printf( message, "%s %d", GMYTHTV_RECORDER_HEADER,
recorder->recorder_num);
gmyth_string_list_append_string(str_list, message);
- gmyth_string_list_append_string(str_list, g_string_new("FINISH_RECORDING"));
+ gmyth_string_list_append_char_array(str_list, "FINISH_RECORDING");
gmyth_socket_sendreceive_stringlist( recorder->myth_socket, str_list);
if ( str_list != NULL && gmyth_string_list_length(str_list)> 0) {
GString *str= NULL;
- if ( ( str = gmyth_string_list_get_string( str_list, 0 ) ) != NULL && strcmp( str->str, "ok")!= 0) {
+ if ( ( str = gmyth_string_list_get_string( str_list, 0 ) ) != NULL &&
+ strcmp( str->str, "ok")!= 0) {
gint is_rec = gmyth_string_list_get_int( str_list, 0);
if ( is_rec != 0)
ret = TRUE;
else
ret = FALSE;
}
+ g_string_free (str, TRUE);
}
+
gmyth_debug( "%s, stream is %s being recorded!\n", ret ? "YES" : "NO", ret ? "" : "NOT" );
//g_static_mutex_unlock (&mutex);
if ( str_list != NULL )
- g_object_unref (str_list);
+ g_object_unref (str_list);
+
+ g_string_free (message, TRUE);
return ret;
-
}
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_remote_util.c
--- a/gmyth/src/gmyth_remote_util.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_remote_util.c Fri Mar 23 22:54:24 2007 +0000
@@ -76,7 +76,8 @@
recorder = gmyth_recorder_new (num, hostname, port);
clean_up:
-
+
+ g_string_free (hostname, TRUE);
g_object_unref (strlist);
return recorder;
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_socket.c
--- a/gmyth/src/gmyth_socket.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_socket.c Fri Mar 23 22:54:24 2007 +0000
@@ -46,6 +46,7 @@
#include
#include
#include
+#include
#include
#include
@@ -116,7 +117,6 @@
g_return_val_if_fail ( addr != NULL, -1 );
- /* hints = g_malloc0 ( sizeof(struct addrinfo) ); */
memset ( &hints, 0, sizeof(struct addrinfo) );
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
@@ -125,21 +125,22 @@
if ( port != -1 )
portStr = g_strdup_printf ( "%d", port );
else
- portStr = NULL;
+ portStr = NULL;
gmyth_debug ("Getting name resolution for: %s, %d\n", addr, port);
if ( ( errorn = getaddrinfo(addr, portStr, &hints, addrInfo) ) != 0 ) {
g_debug( "[%s] Socket ERROR: %s\n", __FUNCTION__, gai_strerror(errorn) );
}
+
g_free (portStr);
- /* g_free (hints); */
+
return errorn;
}
static gint
-gmyth_socket_find_match_address_uri( GMythURI* uri, gchar *address ) {
-
+gmyth_socket_find_match_address_uri( GMythURI* uri, gchar *address )
+{
if ( g_ascii_strcasecmp( gmyth_uri_get_host( uri ), address ) == 0 ) {
//g_debug( "Found URI: %s !!!\n", rui_uri_getvalue(uri) );
return 0;
@@ -212,7 +213,6 @@
static gchar *
gmyth_socket_get_primary_addr()
{
-
gchar *if_eth0 = g_new0( gchar, sizeof(struct ifaddr)-1 );
GList *if_tmp = NULL;
@@ -240,9 +240,8 @@
* @return GString* get local hostname.
*/
GString *
-gmyth_socket_get_local_hostname ()
+gmyth_socket_get_local_hostname ()
{
-
char hname[50];
gint res = gethostname (hname, 50);
@@ -338,14 +337,12 @@
gmyth_socket_close_connection (gmyth_socket);
g_free (gmyth_socket->hostname);
- gmyth_socket->hostname = NULL;
g_free (local_hostname);
local_hostname = NULL;
- if ( gmyth_socket->mutex != NULL )
- {
+ if ( gmyth_socket->mutex != NULL ) {
g_mutex_free( gmyth_socket->mutex );
gmyth_socket->mutex = NULL;
}
@@ -379,11 +376,11 @@
/** Try to open an asynchronous connection to the MythTV backend.
*
- * @param fd Socket descriptor.
+ * @param fd Socket descriptor.
* @param remote Remote address.
* @param len Newly created socket length field.
* @param timeout Timeval argument with the time interval to timeout before closing.
- * @param err Error message number.
+ * @param err Error message number.
* @return Any numerical value below 0, if an error had been found.
*/
static gint
@@ -490,7 +487,11 @@
const gchar *hostname, gint port, guint timeout)
{
struct addrinfo *addr_info_data = NULL, *addr_info0 = NULL;
+ struct linger* ling = NULL;
+ gchar *tmp_str;
gint ret_code = 0; /* -1 */
+ /* FIXME: add as function parameter */
+ gint err;
gint errno;
gboolean ret = TRUE;
@@ -500,18 +501,21 @@
gmyth_debug ( "Invalid hostname parameter!\n");
/* store hostname and port number */
- if (gmyth_socket->hostname != NULL) {
- //g_free (gmyth_socket->hostname);
- gmyth_socket->hostname = NULL;
- }
+ gmyth_debug ("CONNECTING %s:%d", hostname, port);
errno = gmyth_socket_toaddrinfo ( hostname, port, &addr_info_data );
g_return_val_if_fail( addr_info_data != NULL && hostname != NULL, FALSE );
+ /* hack to avoid deleting the hostname when
+ * gmyth_socket->hostname == hostname */
+ tmp_str = gmyth_socket->hostname;
+
gmyth_socket->hostname = g_strdup( hostname );
gmyth_socket->port = port;
+ g_free (tmp_str);
+
for ( addr_info0 = addr_info_data; addr_info0; addr_info0 = addr_info_data->ai_next ) {
/* init socket descriptor */
gmyth_socket->sd = socket( addr_info0->ai_family, addr_info0->ai_socktype,
@@ -521,19 +525,16 @@
continue;
struct timeval *timeout_val = g_new0 (struct timeval, 1);
- if (timeout != 0) {
- /*timeout_val = g_new0 (struct timeval, 1);*/
-
+ if (timeout != 0) {
timeout_val->tv_sec = timeout;
timeout_val->tv_usec = 0;
- } else {
+ } else {
timeout_val->tv_sec = 5;
timeout_val->tv_usec = 100;
- }
+ }
if (gmyth_socket_try_connect (gmyth_socket->sd, (struct sockaddr *)addr_info0->ai_addr,
- addr_info0->ai_addrlen, timeout_val, &ret_code ) < 0 )
- {
+ addr_info0->ai_addrlen, timeout_val, &ret_code ) < 0 ) {
g_debug( "[%s] Error connecting to backend!\n", __FUNCTION__ );
if (ret_code == ETIMEDOUT)
g_debug( "[%s]\tBackend host unreachable!\n", __FUNCTION__ );
@@ -541,11 +542,11 @@
close (gmyth_socket->sd);
gmyth_socket->sd = -1;
g_debug ("ERROR: %s\n", gai_strerror(ret_code));
- g_free (timeout_val);
+ g_free (timeout_val);
continue;
}
- g_free (timeout_val);
+ g_free (timeout_val);
/* only will be reached if none of the error above occurred */
break;
@@ -559,12 +560,19 @@
gmyth_socket->sd_io_ch = NULL;
}
- struct linger* ling = g_malloc0( sizeof(struct linger) );
+ ling = g_malloc0( sizeof(struct linger) );
ling->l_onoff = TRUE;
ling->l_linger = 1;
- setsockopt(gmyth_socket->sd, SOL_SOCKET, SO_LINGER, ling, sizeof(struct linger));
-
+ err = setsockopt(gmyth_socket->sd, SOL_SOCKET, SO_LINGER, ling, sizeof(struct linger));
+
+ if( err < 0 ) {
+ g_debug( "[%s] Setting connection unsucessfull.\n", __FUNCTION__ );
+ err=errno;
+ ret = FALSE;
+ goto cleanup;
+ }
+
gmyth_socket->sd_io_ch = g_io_channel_unix_new (gmyth_socket->sd);
g_io_channel_set_close_on_unref (gmyth_socket->sd_io_ch, TRUE);
@@ -578,6 +586,11 @@
g_io_channel_set_flags (gmyth_socket->sd_io_ch, flags, NULL);
ret = ( ret_code == 0 ) ? TRUE : FALSE ;
+
+cleanup:
+ if ( !ling )
+ g_free (ling);
+
if ( !ret )
gmyth_debug("GMythSocket error - return code error!");
@@ -732,36 +745,35 @@
}
if ( gmyth_socket_check_protocol_version (gmyth_socket) ) {
+ GString *result;
+ GString *base_str = g_string_new("");
+ GString *hostname = NULL;
- GString *result;
- GString *base_str = g_string_new("");
- GString *hostname = NULL;
+ hostname = gmyth_socket_get_local_hostname();
+ if (hostname == NULL) {
+ g_debug ("Hostname not available, setting to n800frontend\n");
+ hostname = g_string_new ("n800frontend");
+ }
+
+ g_string_printf(base_str, "ANN %s %s %u",
+ (blocking_client ? "Playback" : "Monitor"),
+ hostname->str, with_events);
- hostname = gmyth_socket_get_local_hostname();
- if (hostname == NULL) {
- g_debug ("Hostname not available, setting to n800frontend\n");
- hostname = g_string_new ("n800frontend");
- }
-
- g_string_printf(base_str, "ANN %s %s %u",
- (blocking_client ? "Playback" : "Monitor"),
- hostname->str, with_events);
-
- gmyth_socket_send_command (gmyth_socket, base_str);
- result = gmyth_socket_receive_response (gmyth_socket);
-
- if (result != NULL) {
- gmyth_debug ("Response received from backend: %s", result->str);
- g_string_free (result, TRUE);
- }
-
- g_string_free (hostname, TRUE);
- g_string_free (base_str, TRUE);
-
- return TRUE;
+ gmyth_socket_send_command (gmyth_socket, base_str);
+ result = gmyth_socket_receive_response (gmyth_socket);
+
+ if (result != NULL) {
+ gmyth_debug ("Response received from backend: %s", result->str);
+ g_string_free (result, TRUE);
+ }
+
+ g_string_free (hostname, TRUE);
+ g_string_free (base_str, TRUE);
+
+ return TRUE;
} else {
- g_debug ("[%s] GMythSocket could not connect to the backend", __FUNCTION__);
- return FALSE;
+ g_debug ("[%s] GMythSocket could not connect to the backend", __FUNCTION__);
+ return FALSE;
}
}
@@ -852,6 +864,8 @@
gint mythtv_new_version = MYTHTV_CANNOT_NEGOTIATE_VERSION;
guint max_iterations = MYTHTV_MAX_VERSION_CHECKS;
+ assert (gmyth_socket);
+
try_new_version:
payload = g_string_new ("MYTH_PROTO_VERSION");
g_string_append_printf( payload, " %d", mythtv_version );
@@ -867,26 +881,30 @@
res = g_str_has_prefix (response->str, "ACCEPT");
if (!res) {
- g_debug ("[%s] Protocol version request error: %s", __FUNCTION__, response->str);
- /* get the version number returned by the REJECT message */
- if ( ( res = g_str_has_prefix (response->str, "REJECT") ) == TRUE ) {
- gchar *new_version = NULL;
- new_version = g_strrstr( response->str, "]" );
- if (new_version!=NULL) {
- ++new_version; /* skip ']' character */
- if ( new_version != NULL ) {
- gmyth_debug ( "[%s] got MythTV version = %s.\n", __FUNCTION__, new_version );
- mythtv_version = (gint)g_ascii_strtoull (new_version, NULL, 10 );
- /* do reconnection to the socket (socket is closed if the MythTV version was wrong) */
- gmyth_socket_connect( gmyth_socket, gmyth_socket->hostname, gmyth_socket->port );
- new_version =NULL;
- if ( --max_iterations > 0 )
- goto try_new_version;
- else
- goto done;
- }
- }
- }
+ g_debug ("[%s] Protocol version request error: %s", __FUNCTION__, response->str);
+ /* get the version number returned by the REJECT message */
+ if ( ( res = g_str_has_prefix (response->str, "REJECT") ) == TRUE ) {
+ gchar *new_version = NULL;
+ new_version = g_strrstr( response->str, "]" );
+ if (new_version!=NULL) {
+ ++new_version; /* skip ']' character */
+ if ( new_version != NULL ) {
+ gmyth_debug ( "[%s] got MythTV version = %s.\n",
+ __FUNCTION__, new_version );
+ mythtv_version = (gint)g_ascii_strtoull (new_version, NULL, 10 );
+ /* do reconnection to the socket (socket is closed if the MythTV version was wrong) */
+ gmyth_socket_connect( gmyth_socket, gmyth_socket->hostname,
+ gmyth_socket->port );
+ new_version = NULL;
+ if ( --max_iterations > 0 ) {
+ g_string_free (payload, TRUE);
+ g_string_free (response, TRUE);
+ goto try_new_version;
+ } else
+ goto done;
+ }
+ }
+ }
}
/* change the return value to a valid one */
@@ -896,10 +914,8 @@
}
done:
- if ( payload != NULL )
- g_string_free (payload, TRUE);
- if ( response != NULL )
- g_string_free (response, TRUE);
+ g_string_free (payload, TRUE);
+ g_string_free (response, TRUE);
return mythtv_new_version;
}
@@ -945,8 +961,8 @@
gsize bytes_read = 0;
gint len = 0;
- if ( !( gmyth_socket != NULL) )
- return NULL;
+ if ( gmyth_socket == NULL )
+ return NULL;
GIOCondition io_cond;
@@ -965,7 +981,11 @@
*/
if ( gmyth_socket->sd_io_ch->is_readable /*&& !( ( io_cond & G_IO_IN ) == 0 )*/ )
- io_status = g_io_channel_read_chars (gmyth_socket->sd_io_ch, buffer, MYTH_PROTOCOL_FIELD_SIZE, &bytes_read, &error);
+ io_status = g_io_channel_read_chars (gmyth_socket->sd_io_ch,
+ buffer,
+ MYTH_PROTOCOL_FIELD_SIZE,
+ &bytes_read,
+ &error);
else
return g_string_new("");
@@ -979,25 +999,22 @@
if( (io_status == G_IO_STATUS_ERROR) || (bytes_read <= 0) ) {
g_debug ("[%s] Error in mythprotocol response from backend\n", __FUNCTION__);
- str = NULL;
- //return NULL;
+ str = NULL;
+ //return NULL;
} else if ( buffer != NULL && strlen(buffer) > 0 ) {
- //io_status = g_io_channel_flush( gmyth_socket->sd_io_ch, &error );
- /* verify if the input (read) buffer is ready to receive data */
- //io_cond = g_io_channel_get_buffer_condition( gmyth_socket->sd_io_ch );
+ //io_status = g_io_channel_flush( gmyth_socket->sd_io_ch, &error );
+ /* verify if the input (read) buffer is ready to receive data */
+ //io_cond = g_io_channel_get_buffer_condition( gmyth_socket->sd_io_ch );
- //if ( ( io_cond & G_IO_IN ) != 0 ) {
+ //if ( ( io_cond & G_IO_IN ) != 0 ) {
//gchar *buffer_aux = NULL;
/* removes trailing whitespace */
//buffer_aux = g_strstrip (buffer);
len = (gint)g_ascii_strtoull ( g_strstrip (buffer), NULL, 10 );
- if (buffer != NULL) {
- g_free (buffer);
- buffer = NULL;
- }
+ g_free (buffer);
/*
if (buffer_aux != NULL) {
@@ -1010,10 +1027,11 @@
bytes_read = 0;
if ( !( gmyth_socket != NULL && gmyth_socket->sd_io_ch != NULL) )
- return NULL;
+ return NULL;
- if ( gmyth_socket->sd_io_ch->is_readable )
- io_status = g_io_channel_read_chars( gmyth_socket->sd_io_ch, buffer, len, &bytes_read, &error);
+ if ( gmyth_socket->sd_io_ch->is_readable )
+ io_status = g_io_channel_read_chars( gmyth_socket->sd_io_ch, buffer,
+ len, &bytes_read, &error);
else
return g_string_new("");
@@ -1026,14 +1044,15 @@
gmyth_debug ("Response received from backend: ----- {%s}\n", buffer);
if ( ( bytes_read != len ) || ( io_status == G_IO_STATUS_ERROR ) )
- str = NULL;
+ str = NULL;
else
- str = g_string_new (buffer);
+ str = g_string_new (buffer);
if ( error != NULL ) {
- g_debug( "[%s] Error found receiving response from the IO channel: (%d, %s)\n", __FUNCTION__, error->code, error->message );
- str = NULL;
- g_error_free (error);
+ g_debug( "[%s] Error found receiving response from the IO channel: (%d, %s)\n",
+ __FUNCTION__, error->code, error->message );
+ str = NULL;
+ g_error_free (error);
}
g_free (buffer);
@@ -1062,11 +1081,11 @@
// FIXME: change this implementation!
tmp_list = str_list->glist;
for(; tmp_list; tmp_list = tmp_list->next) {
- if ( tmp_list->data != NULL ) {
- g_ptr_array_add(ptr_array, ((GString*)tmp_list->data)->str);
- } else {
- g_ptr_array_add (ptr_array, "");
- }
+ if ( tmp_list->data != NULL ) {
+ g_ptr_array_add(ptr_array, ((GString*)tmp_list->data)->str);
+ } else {
+ g_ptr_array_add (ptr_array, "");
+ }
}
g_ptr_array_add(ptr_array, NULL); // g_str_joinv() needs a NULL terminated string
@@ -1081,10 +1100,13 @@
// TODO: implement looping to send remaining data, and add timeout testing!
GString *command = g_string_new(str_array);
gmyth_socket_send_command(gmyth_socket, command);
+
g_string_free (command, TRUE);
g_free (str_array);
- g_ptr_array_free (ptr_array, TRUE);
+
+ /* ptr_array is pointing to data inside str_list->glist */
+ g_ptr_array_free (ptr_array, FALSE);
return TRUE;
}
@@ -1098,17 +1120,16 @@
gint
gmyth_socket_read_stringlist (GMythSocket *gmyth_socket, GMythStringList* str_list)
{
- GString *response;
- gchar **str_array = NULL;
+ GString *response;
gint i;
+ gmyth_string_list_clear_all (str_list);
+
response = gmyth_socket_receive_response(gmyth_socket);
- if ( response != NULL && response->str != NULL && response->len > 0 )
- {
-
- g_mutex_lock( gmyth_socket->mutex );
+ if ( response != NULL && response->str != NULL && response->len > 0 ) {
+ gchar **str_array;
+ g_mutex_lock( gmyth_socket->mutex );
- gmyth_string_list_clear_all (str_list);
str_array = g_strsplit (response->str, MYTH_SEPARATOR, -1);
for ( i=0; i< g_strv_length (str_array); i++ ) {
@@ -1117,11 +1138,10 @@
}
g_mutex_unlock( gmyth_socket->mutex );
-
+ g_strfreev (str_array);
}
g_string_free (response, TRUE);
- g_strfreev (str_array);
return gmyth_string_list_length (str_list);
}
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_socket.h
--- a/gmyth/src/gmyth_socket.h Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_socket.h Fri Mar 23 22:54:24 2007 +0000
@@ -86,9 +86,6 @@
GMythSocket * gmyth_socket_new ();
-gboolean gmyth_socket_connect (GMythSocket *gmyth_socket, const gchar *hostname, gint port);
-
-
GIOChannel * gmyth_socket_get_io_channel (GMythSocket *gmyth_socket );
gboolean gmyth_socket_is_able_to_read (GMythSocket *gmyth_socket );
@@ -103,7 +100,7 @@
gboolean gmyth_socket_connect (GMythSocket *gmyth_socket,
const gchar *hostname, gint port);
gboolean gmyth_socket_connect_with_timeout (GMythSocket *gmyth_socket,
- const gchar *hostname, gint port, guint timeout);
+ const gchar *hostname, gint port, guint timeout);
gboolean gmyth_socket_connect_to_backend (GMythSocket *gmyth_socket,
const gchar *hostname_backend, gint port,
@@ -118,14 +115,14 @@
void gmyth_socket_close_connection (GMythSocket *gmyth_socket);
gboolean gmyth_socket_check_protocol_version (GMythSocket *gmyth_socket);
-gint gmyth_socket_check_protocol_version_number (GMythSocket *gmyth_socket,
+gint gmyth_socket_check_protocol_version_number (GMythSocket *gmyth_socket,
gint mythtv_version);
-gint gmyth_socket_get_protocol_version (GMythSocket *gmyth_socket);
+gint gmyth_socket_get_protocol_version (GMythSocket *gmyth_socket);
gboolean gmyth_socket_write_stringlist(GMythSocket *gmyth_socket,
GMythStringList* str_list);
-gint gmyth_socket_read_stringlist(GMythSocket *gmyth_socket,
+gint gmyth_socket_read_stringlist(GMythSocket *gmyth_socket,
GMythStringList* str_list);
G_END_DECLS
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_stringlist.c
--- a/gmyth/src/gmyth_stringlist.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_stringlist.c Fri Mar 23 22:54:24 2007 +0000
@@ -194,9 +194,6 @@
tmp_str = g_string_new (value);
- if ( NULL == tmp_str )
- return NULL;
-
strlist->glist = g_list_append (strlist->glist, tmp_str);
return tmp_str;
@@ -361,9 +358,7 @@
static void
gmyth_string_list_clear_element( GString *str_elem, void *data_aux )
{
- if ( str_elem != NULL ) {
- g_string_free( str_elem, TRUE );
- }
+ g_string_free( str_elem, TRUE );
}
/** Removes all strings from the string list.
@@ -374,9 +369,9 @@
gmyth_string_list_clear_all ( GMythStringList *strlist )
{
if ( strlist != NULL && strlist->glist ) {
- g_list_foreach( strlist->glist, (GFunc)gmyth_string_list_clear_element, NULL );
- g_list_free (strlist->glist);
- strlist->glist = NULL;
+ g_list_foreach( strlist->glist, (GFunc)gmyth_string_list_clear_element, NULL );
+ g_list_free (strlist->glist);
+ strlist->glist = NULL;
}
}
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_tvchain.c
--- a/gmyth/src/gmyth_tvchain.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_tvchain.c Fri Mar 23 22:54:24 2007 +0000
@@ -50,6 +50,8 @@
static void gmyth_tvchain_dispose (GObject *object);
static void gmyth_tvchain_finalize (GObject *object);
+static void free_tvchain_entry(gpointer data, gpointer user_data);
+
G_DEFINE_TYPE(GMythTVChain, gmyth_tvchain, G_TYPE_OBJECT)
static void
@@ -87,25 +89,19 @@
{
GMythTVChain *tvchain = GMYTH_TVCHAIN(object);
- if ( tvchain->tvchain_id != NULL ) {
- g_string_free( tvchain->tvchain_id, TRUE );
- tvchain->tvchain_id = NULL;
- }
+ g_string_free( tvchain->tvchain_id, TRUE );
if ( tvchain->mutex != NULL ) {
g_mutex_free( tvchain->mutex );
tvchain->mutex = NULL;
}
- if ( tvchain->tvchain_list != NULL ) {
- g_list_free( tvchain->tvchain_list );
- tvchain->tvchain_list = NULL;
+ if (tvchain->tvchain_list != NULL) {
+ g_list_foreach (tvchain->tvchain_list, free_tvchain_entry, NULL);
+ g_list_free( tvchain->tvchain_list );
}
- if ( tvchain->cur_chanid != NULL ) {
g_string_free( tvchain->cur_chanid, TRUE );
- tvchain->cur_chanid = NULL;
- }
if ( tvchain->backend_info) {
g_object_unref (tvchain->backend_info);
@@ -148,7 +144,8 @@
//struct tm* gmyth_util_time_val_to_date ( const GTimeVal* time )
g_get_current_time(cur_time);
- isodate = gmyth_util_time_to_isoformat_from_time_val_fmt ( "%Y-%m-%dT%H:%M:%S", cur_time );
+ isodate = gmyth_util_time_to_isoformat_from_time_val_fmt ( "%Y-%m-%dT%H:%M:%S",
+ cur_time );
tvchain->tvchain_id = g_string_sized_new (7 + strlen (hostname) + strlen(isodate));
g_string_printf(tvchain->tvchain_id,
@@ -156,11 +153,8 @@
gmyth_debug ("[%s] tv_chain_id: %s", __FUNCTION__, tvchain->tvchain_id->str);
- if (isodate)
- g_free(isodate);
-
- if ( cur_time )
- g_free( cur_time );
+ g_free(isodate);
+ g_free( cur_time );
} else {
g_warning ("[%s] TVchain already initialized", __FUNCTION__);
}
@@ -178,7 +172,7 @@
{
g_return_val_if_fail( tvchain != NULL && tvchain->tvchain_id != NULL, NULL );
- return g_string_new (tvchain->tvchain_id->str);
+ return tvchain->tvchain_id;
}
/** Reloads all tvchain entries in the database.
@@ -401,3 +395,23 @@
return proginfo;
}
+
+static void
+free_tvchain_entry(gpointer data, gpointer user_data)
+{
+ struct LiveTVChainEntry *entry;
+
+ g_return_if_fail (data != NULL);
+
+ entry = (struct LiveTVChainEntry *) data;
+
+ g_string_free (entry->chanid, TRUE);
+ g_free (entry->starttime);
+ g_free (entry->endtime);
+ g_string_free (entry->hostprefix, TRUE);
+ g_string_free (entry->cardtype, TRUE);
+ g_string_free (entry->channum, TRUE);
+ g_string_free (entry->inputname, TRUE);
+
+ g_free(entry);
+}
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_uri.c
--- a/gmyth/src/gmyth_uri.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_uri.c Fri Mar 23 22:54:24 2007 +0000
@@ -262,7 +262,7 @@
gint colonIdx;
gint shashIdx;
gint eIdx;
- gchar *host;
+ gchar *host;
gint eblacketIdx;
gint hostLen;
gint sharpIdx;
@@ -272,7 +272,7 @@
*/
uriLen = strlen(value);
- uri->uri = g_string_new( g_strdup (value) );
+ uri->uri = g_string_new( value );
currIdx = 0;
@@ -374,9 +374,13 @@
}
gmyth_debug( "[%s] GMythURI: host = %s, port = %d, path = %s, query = %s, fragment = %s, "\
- "user = %s, password = %s.\n", __FUNCTION__, gmyth_uri_print_field( uri->host ), uri->port,
- gmyth_uri_print_field( uri->path ), gmyth_uri_print_field( uri->query ), gmyth_uri_print_field( uri->fragment ),
- gmyth_uri_print_field ( uri->user ), gmyth_uri_print_field( uri->password ) );
+ "user = %s, password = %s.\n", __FUNCTION__,
+ gmyth_uri_print_field( uri->host ), uri->port,
+ gmyth_uri_print_field( uri->path ),
+ gmyth_uri_print_field( uri->query ),
+ gmyth_uri_print_field( uri->fragment ),
+ gmyth_uri_print_field ( uri->user ),
+ gmyth_uri_print_field( uri->password ) );
}
diff -r b17cf9627ade -r d260ed30f4de gmyth/src/gmyth_util.c
--- a/gmyth/src/gmyth_util.c Fri Mar 23 18:42:07 2007 +0000
+++ b/gmyth/src/gmyth_util.c Fri Mar 23 22:54:24 2007 +0000
@@ -122,21 +122,19 @@
if ( NULL == localtime_r( &time, tm_time ) ) {
g_warning ("gmyth_util_time_to_isoformat convertion error!\n");
- } else {
-
- /* we first check the return of strftime to allocate a buffer of the correct size */
- buffer_len = strftime( NULL, SSIZE_MAX, fmt_string, tm_time );
- if ( buffer_len > 0 ) {
- result = g_malloc0( buffer_len + 1 );
- if( result == NULL ){
- g_static_mutex_unlock ( &mutex );
- g_warning ("gmyth_util_time_to_isoformat convertion error!\n");
- return NULL;
- }
- strftime( result, buffer_len + 1, fmt_string, tm_time );
- gmyth_debug( "Dateline (ISO result): %s", result );
- }
-
+ } else {
+ /* we first check the return of strftime to allocate a buffer of the correct size */
+ buffer_len = strftime( NULL, SSIZE_MAX, fmt_string, tm_time );
+ if ( buffer_len > 0 ) {
+ result = g_malloc0( buffer_len + 1 );
+ if( result == NULL ) {
+ g_static_mutex_unlock ( &mutex );
+ g_warning ("gmyth_util_time_to_isoformat convertion error!\n");
+ return NULL;
+ }
+ strftime( result, buffer_len + 1, fmt_string, tm_time );
+ gmyth_debug( "Dateline (ISO result): %s", result );
+ }
} /* if */
gmyth_debug( "Result (strftime) = %s", result );
@@ -145,12 +143,13 @@
//strftime( result, strlen(result), fmt_string, tm_time );
+ g_free (tm_time);
+
g_static_mutex_unlock ( &mutex );
gmyth_debug( "Result (ISO 8601) = %s", result );
- return result;
-
+ return result;
}
/** Converts a time_t struct in a GString at ISO standard format