[gnome-network-displays/cc-tmp: 49/80] cc: better error handling
- From: Benjamin Berg <bberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-network-displays/cc-tmp: 49/80] cc: better error handling
- Date: Fri, 9 Sep 2022 12:03:51 +0000 (UTC)
commit 36f097c44d77accf1b927427f24c771f90f7ed4c
Author: Anupam Kumar <kyteinsky gmail com>
Date: Sun Sep 4 14:08:25 2022 +0530
cc: better error handling
src/cc/cc-comm.c | 37 ++++-----
src/cc/cc-comm.h | 5 +-
src/cc/cc-ctrl.c | 236 ++++++++++++++++++++++++++++++++-----------------------
src/cc/cc-ctrl.h | 2 +-
src/nd-cc-sink.c | 9 ++-
5 files changed, 164 insertions(+), 125 deletions(-)
---
diff --git a/src/cc/cc-comm.c b/src/cc/cc-comm.c
index c9d6814..42fd397 100644
--- a/src/cc/cc-comm.c
+++ b/src/cc/cc-comm.c
@@ -134,7 +134,7 @@ cc_comm_message_read_cb (GObject *source_object,
if (error)
{
g_error ("CcComm: Error reading message from stream: %s", error->message);
- comm->closure->fatal_error_cb (comm->closure, &error);
+ comm->closure->fatal_error_cb (comm->closure, g_steal_pointer (&error));
return;
}
g_error ("CcComm: Error reading message from stream.");
@@ -189,7 +189,7 @@ cc_comm_header_read_cb (GObject *source_object,
if (error)
{
g_error ("CcComm: Error reading header from stream: %s", error->message);
- comm->closure->fatal_error_cb (comm->closure, &error);
+ comm->closure->fatal_error_cb (comm->closure, g_steal_pointer (&error));
return;
}
g_error ("CcComm: Error reading header from stream.");
@@ -307,12 +307,10 @@ void
cc_comm_close_connection (CcComm *comm)
{
g_autoptr (GError) error = NULL;
- gboolean close_ok;
if (comm->con != NULL)
{
- close_ok = g_io_stream_close (G_IO_STREAM (comm->con), NULL, &error);
- if (!close_ok)
+ if (!g_io_stream_close (G_IO_STREAM (comm->con), NULL, &error))
{
if (error != NULL)
g_warning ("CcComm: Error closing communication client connection: %s", error->message);
@@ -328,16 +326,19 @@ cc_comm_close_connection (CcComm *comm)
static gboolean
cc_comm_tls_send (CcComm * comm,
uint8_t * message,
- gssize size,
- GError **error)
+ gssize size)
{
GOutputStream *ostream;
gssize io_bytes;
+ g_autoptr (GError) err = NULL;
+
+ if (g_cancellable_is_cancelled (comm->cancellable))
+ return FALSE;
if (!G_IS_TLS_CONNECTION (comm->con))
{
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_CONNECTED,
- "Connection has not been established");
+ g_error ("Connection has not been established");
+ comm->closure->fatal_error_cb (comm->closure, NULL);
return FALSE;
}
@@ -348,13 +349,12 @@ cc_comm_tls_send (CcComm * comm,
/* start sending data synchronously */
while (size > 0)
{
- io_bytes = g_output_stream_write (ostream, message, size, comm->cancellable, error);
+ io_bytes = g_output_stream_write (ostream, message, size, comm->cancellable, &err);
if (io_bytes <= 0)
{
- g_warning ("CcComm: Failed to write: %s", (*error)->message);
- comm->closure->fatal_error_cb (comm->closure, error);
- g_clear_error (error);
+ g_warning ("CcComm: Failed to write: %s", err->message);
+ comm->closure->fatal_error_cb (comm->closure, g_steal_pointer (&err));
return FALSE;
}
@@ -435,8 +435,7 @@ gboolean
cc_comm_send_request (CcComm *comm,
gchar *destination_id,
CcMessageType message_type,
- gchar *utf8_payload,
- GError **error)
+ gchar *utf8_payload)
{
Cast__Channel__CastMessage message;
guint32 packed_size = 0;
@@ -458,7 +457,7 @@ cc_comm_send_request (CcComm *comm,
&binary_payload,
NULL))
{
- *error = g_error_new (1, 1, "Auth message building failed!");
+ g_error ("Auth message building failed!");
return FALSE;
}
break;
@@ -472,10 +471,9 @@ cc_comm_send_request (CcComm *comm,
NULL,
utf8_payload))
{
- *error = g_error_new (1, 1, "Message building failed for message type: %d", message_type);
+ g_error ("Message building failed for message type: %d", message_type);
return FALSE;
}
- break;
}
packed_size = cast__channel__cast_message__get_packed_size (&message);
@@ -496,6 +494,5 @@ cc_comm_send_request (CcComm *comm,
return cc_comm_tls_send (comm,
sock_buffer,
- packed_size + 4,
- error);
+ packed_size + 4);
}
diff --git a/src/cc/cc-comm.h b/src/cc/cc-comm.h
index 6f68224..17f96d5 100644
--- a/src/cc/cc-comm.h
+++ b/src/cc/cc-comm.h
@@ -31,7 +31,7 @@ struct _CcCommClosure
gpointer userdata;
void (*message_received_cb) (struct _CcCommClosure *closure,
Cast__Channel__CastMessage *message);
- void (*fatal_error_cb) (struct _CcCommClosure *closure, GError **error);
+ void (*fatal_error_cb) (struct _CcCommClosure *closure, GError *error);
};
typedef struct _CcCommClosure CcCommClosure;
@@ -71,7 +71,6 @@ void cc_comm_close_connection (CcComm *comm);
gboolean cc_comm_send_request (CcComm *comm,
gchar *destination_id,
CcMessageType message_type,
- gchar *utf8_payload,
- GError **error);
+ gchar *utf8_payload);
G_END_DECLS
diff --git a/src/cc/cc-ctrl.c b/src/cc/cc-ctrl.c
index c67a755..0682b7c 100644
--- a/src/cc/cc-ctrl.c
+++ b/src/cc/cc-ctrl.c
@@ -19,6 +19,9 @@
#include "cc-ctrl.h"
#include "cc-comm.h"
+/* FUNCTION DECLS */
+static void cc_ctrl_fatal_error (CcCtrl *ctrl);
+
/* WAITING FOR */
static void
@@ -42,22 +45,25 @@ cc_ctrl_is_waiting_for (CcCtrl *ctrl, CcWaitingFor waiting_for)
/* SEND HELPER FUNCTIONS */
static gboolean
-cc_ctrl_send_auth (CcCtrl *ctrl, GError **error)
+cc_ctrl_send_auth (CcCtrl *ctrl)
{
- g_debug ("CcCtrl: Sending auth");
-
- return cc_comm_send_request (&ctrl->comm,
+ gboolean send_ok = cc_comm_send_request (&ctrl->comm,
CC_DEFAULT_RECEIVER_ID,
CC_MESSAGE_TYPE_AUTH,
- NULL,
- error);
+ NULL);
+
+ if (!send_ok)
+ {
+ g_error ("CcCtrl: Failed to send auth message");
+ cc_ctrl_fatal_error (ctrl);
+ }
+
+ return send_ok;
}
static gboolean
-cc_ctrl_send_connect (CcCtrl *ctrl, gchar *destination_id, GError **error)
+cc_ctrl_send_connect (CcCtrl *ctrl, gchar *destination_id)
{
- g_debug ("CcCtrl: Sending CONNECT");
-
JsonNode *origin = cc_json_helper_build_node (NULL);
JsonNode *senderInfo = cc_json_helper_build_node (
"sdkType", CC_JSON_TYPE_INT, 2,
@@ -75,34 +81,44 @@ cc_ctrl_send_connect (CcCtrl *ctrl, gchar *destination_id, GError **error)
"senderInfo", CC_JSON_TYPE_OBJECT, senderInfo,
NULL);
- return cc_comm_send_request (&ctrl->comm,
+ gboolean send_ok = cc_comm_send_request (&ctrl->comm,
destination_id,
CC_MESSAGE_TYPE_CONNECT,
- json,
- error);
+ json);
+
+ if (!send_ok)
+ {
+ g_error ("CcCtrl: Failed to send connect message");
+ cc_ctrl_fatal_error (ctrl);
+ }
+
+ return send_ok;
}
static gboolean
-cc_ctrl_send_disconnect (CcCtrl *ctrl, gchar *destination_id, GError **error)
+cc_ctrl_send_disconnect (CcCtrl *ctrl, gchar *destination_id)
{
- g_debug ("CcCtrl: Sending CLOSE");
-
gchar *json = cc_json_helper_build_string (
"type", CC_JSON_TYPE_STRING, "CLOSE",
NULL);
- return cc_comm_send_request (&ctrl->comm,
+ gboolean send_ok = cc_comm_send_request (&ctrl->comm,
destination_id,
CC_MESSAGE_TYPE_DISCONNECT,
- json,
- error);
+ json);
+
+ if (!send_ok)
+ {
+ g_error ("CcCtrl: Failed to send disconnect message");
+ cc_ctrl_fatal_error (ctrl);
+ }
+
+ return send_ok;
}
static gboolean
-cc_ctrl_send_get_status (CcCtrl *ctrl, gchar *destination_id, GError **error)
+cc_ctrl_send_get_status (CcCtrl *ctrl, gchar *destination_id)
{
- g_debug ("CcCtrl: Sending GET_STATUS");
-
gchar *json = cc_json_helper_build_string (
"type", CC_JSON_TYPE_STRING, "GET_STATUS",
"requestId", CC_JSON_TYPE_INT, ctrl->request_id++,
@@ -111,19 +127,22 @@ cc_ctrl_send_get_status (CcCtrl *ctrl, gchar *destination_id, GError **error)
gboolean send_ok = cc_comm_send_request (&ctrl->comm,
destination_id,
CC_MESSAGE_TYPE_RECEIVER,
- json,
- error);
+ json);
+
if (send_ok)
cc_ctrl_set_waiting_for (ctrl, CC_RWAIT_TYPE_RECEIVER_STATUS);
+ else
+ {
+ g_error ("CcCtrl: Failed to send get status message");
+ cc_ctrl_fatal_error (ctrl);
+ }
return send_ok;
}
static gboolean
-cc_ctrl_send_get_app_availability (CcCtrl *ctrl, gchar *destination_id, gchar *appId, GError **error)
+cc_ctrl_send_get_app_availability (CcCtrl *ctrl, gchar *destination_id, gchar *appId)
{
- g_debug ("CcCtrl: Sending GET_APP_AVAILABILITY");
-
g_autoptr (GArray) appIds = g_array_new (FALSE, FALSE, sizeof (gchar *));
g_array_append_val (appIds, CC_MIRRORING_APP_ID);
@@ -136,19 +155,22 @@ cc_ctrl_send_get_app_availability (CcCtrl *ctrl, gchar *destination_id, gchar *a
gboolean send_ok = cc_comm_send_request (&ctrl->comm,
destination_id,
CC_MESSAGE_TYPE_RECEIVER,
- json,
- error);
+ json);
if (send_ok)
cc_ctrl_set_waiting_for (ctrl, CC_RWAIT_TYPE_GET_APP_AVAILABILITY);
+ else
+ {
+ g_error ("CcCtrl: Failed to send get app availability message");
+ cc_ctrl_fatal_error (ctrl);
+ }
+
return send_ok;
}
static gboolean
-cc_ctrl_send_launch_app (CcCtrl *ctrl, gchar *destination_id, gchar *appId, GError **error)
+cc_ctrl_send_launch_app (CcCtrl *ctrl, gchar *destination_id, gchar *appId)
{
- g_debug ("CcCtrl: Sending LAUNCH");
-
gchar *json = cc_json_helper_build_string (
"type", CC_JSON_TYPE_STRING, "LAUNCH",
"launguage", CC_JSON_TYPE_STRING, "en-US",
@@ -159,19 +181,22 @@ cc_ctrl_send_launch_app (CcCtrl *ctrl, gchar *destination_id, gchar *appId, GErr
gboolean send_ok = cc_comm_send_request (&ctrl->comm,
destination_id,
CC_MESSAGE_TYPE_RECEIVER,
- json,
- error);
+ json);
if (send_ok)
cc_ctrl_set_waiting_for (ctrl, CC_RWAIT_TYPE_RECEIVER_STATUS);
+ else
+ {
+ g_error ("CcCtrl: Failed to send launch app message");
+ cc_ctrl_fatal_error (ctrl);
+ }
+
return send_ok;
}
static gboolean
-cc_ctrl_send_close_app (CcCtrl *ctrl, gchar *sessionId, GError **error)
+cc_ctrl_send_close_app (CcCtrl *ctrl, gchar *sessionId)
{
- g_debug ("CcCtrl: Sending STOP");
-
gchar *json = cc_json_helper_build_string (
"type", CC_JSON_TYPE_STRING, "STOP",
"sessionId", CC_JSON_TYPE_STRING, sessionId,
@@ -181,11 +206,16 @@ cc_ctrl_send_close_app (CcCtrl *ctrl, gchar *sessionId, GError **error)
gboolean send_ok = cc_comm_send_request (&ctrl->comm,
sessionId,
CC_MESSAGE_TYPE_RECEIVER,
- json,
- error);
+ json);
if (send_ok)
cc_ctrl_set_waiting_for (ctrl, CC_RWAIT_TYPE_RECEIVER_STATUS);
+ else
+ {
+ g_error ("CcCtrl: Failed to send close app message");
+ cc_ctrl_fatal_error (ctrl);
+ }
+
return send_ok;
}
@@ -277,11 +307,16 @@ cc_ctrl_send_offer (CcCtrl *ctrl, gchar *destination_id, GError **error)
gboolean send_ok = cc_comm_send_request (&ctrl->comm,
destination_id,
CC_MESSAGE_TYPE_WEBRTC,
- cc_json_helper_node_to_string (root),
- error);
+ cc_json_helper_node_to_string (root));
if (send_ok)
cc_ctrl_set_waiting_for (ctrl, CC_RWAIT_TYPE_ANSWER);
+ else
+ {
+ g_error ("CcCtrl: Failed to send OFFER message");
+ cc_ctrl_fatal_error (ctrl);
+ }
+
return send_ok;
}
@@ -294,8 +329,8 @@ cc_ctrl_check_waiting_for (CcCtrl *ctrl)
if (ctrl->waiting_for == CC_RWAIT_TYPE_NONE)
return G_SOURCE_CONTINUE;
- g_warning ("CcCtrl: Timed out waiting for %d", ctrl->waiting_for);
- ctrl->closure->end_stream (ctrl->closure);
+ g_error ("CcCtrl: Timed out waiting for %d", ctrl->waiting_for);
+ cc_ctrl_fatal_error (ctrl);
return G_SOURCE_REMOVE;
}
@@ -310,15 +345,9 @@ cc_ctrl_send_ping (CcCtrl *ctrl)
if (!cc_comm_send_request (&ctrl->comm,
CC_DEFAULT_RECEIVER_ID,
CC_MESSAGE_TYPE_PING,
- NULL,
- &error))
+ NULL))
{
- if (error != NULL)
- {
- g_warning ("CcCtrl: Failed to send ping message: %s", error->message);
- return G_SOURCE_REMOVE;
- }
- g_warning ("CcCtrl: Failed to send ping message");
+ g_error ("CcCtrl: Failed to send ping message");
return G_SOURCE_REMOVE;
}
@@ -332,16 +361,22 @@ cc_ctrl_send_offer_cb (CcCtrl *ctrl)
{
g_autoptr (GError) error = NULL;
if (!cc_ctrl_send_offer (ctrl, ctrl->session_id, &error))
- g_warning ("CcCtrl: Failed to send OFFER to the mirroring app: %s", error->message);
+ {
+ if (error)
+ g_warning ("CcCtrl: Failed to send OFFER to the mirroring app: %s", error->message);
+ else
+ g_warning ("CcCtrl: Failed to send OFFER to the mirroring app");
+ }
return G_SOURCE_REMOVE;
}
static void
-cc_ctrl_mirroring_app_init (CcCtrl *ctrl, GError **error)
+cc_ctrl_mirroring_app_init (CcCtrl *ctrl)
{
- if (!cc_ctrl_send_connect (ctrl, ctrl->session_id, error))
+ g_autoptr (GError) err = NULL;
+ if (!cc_ctrl_send_connect (ctrl, ctrl->session_id))
{
- g_warning ("CcCtrl: Failed to send CONNECT to the mirroring app: %s", (*error)->message);
+ g_error ("CcCtrl: Failed to send CONNECT to the mirroring app");
return;
}
@@ -364,16 +399,16 @@ cc_ctrl_handle_get_app_availability (CcCtrl *ctrl, JsonReader *reader)
if (g_strcmp0 (available, "APP_AVAILABLE"))
{
/* launch the app now */
- if (!cc_ctrl_send_launch_app (ctrl, CC_DEFAULT_RECEIVER_ID, CC_MIRRORING_APP_ID, &error))
+ if (!cc_ctrl_send_launch_app (ctrl, CC_DEFAULT_RECEIVER_ID, CC_MIRRORING_APP_ID))
{
- g_warning ("CcCtrl: Failed to launch the app: %s", error->message);
+ g_error ("CcCtrl: Failed to launch the app");
return;
}
}
/* since the app is not available, stop attempts */
g_warning ("CcCtrl: %s app is not available, quiting", CC_MIRRORING_APP_ID);
- ctrl->closure->end_stream (ctrl->closure);
+ cc_ctrl_fatal_error (ctrl);
}
}
}
@@ -407,9 +442,9 @@ cc_ctrl_handle_receiver_status (CcCtrl *ctrl, JsonParser *parser)
if (ctrl->state >= CC_CTRL_STATE_APP_OPEN) /* app closed unexpectedly */
g_debug ("CcCtrl: App closed unexpectedly");
- if (!cc_ctrl_send_launch_app (ctrl, CC_DEFAULT_RECEIVER_ID, CC_MIRRORING_APP_ID, &error))
+ if (!cc_ctrl_send_launch_app (ctrl, CC_DEFAULT_RECEIVER_ID, CC_MIRRORING_APP_ID))
{
- g_warning ("CcCtrl: Failed to launch the app: %s", error->message);
+ g_error ("CcCtrl: Failed to launch the app");
return;
}
@@ -441,14 +476,14 @@ cc_ctrl_handle_receiver_status (CcCtrl *ctrl, JsonParser *parser)
g_clear_pointer (&ctrl->session_id, g_free);
ctrl->session_id = g_strdup (sessionId);
- cc_ctrl_mirroring_app_init (ctrl, &error);
+ cc_ctrl_mirroring_app_init (ctrl);
return;
}
/* some other app is open, check if `CC_MIRRORING_APP_ID` is available */
- if (!cc_ctrl_send_get_app_availability (ctrl, CC_MIRRORING_APP_ID, CC_DEFAULT_RECEIVER_ID,
&error))
+ if (!cc_ctrl_send_get_app_availability (ctrl, CC_MIRRORING_APP_ID, CC_DEFAULT_RECEIVER_ID))
{
- g_warning ("CcCtrl: Failed to send GET_APP_AVAILABILITY: %s", error->message);
+ g_error ("CcCtrl: Failed to send GET_APP_AVAILABILITY");
return;
}
}
@@ -475,16 +510,14 @@ cc_ctrl_handle_close (CcCtrl *ctrl, Cast__Channel__CastMessage *message)
if (g_strcmp0 (message->source_id, CC_DEFAULT_RECEIVER_ID) == 0)
{
g_warning ("CcCtrl: Receiver closed the connection");
- ctrl->closure->end_stream (ctrl->closure);
+ cc_ctrl_fatal_error (ctrl);
return;
}
/* the app closed */
g_debug ("CcCtrl: App sent a close message, launching again");
- if (!cc_ctrl_send_launch_app (ctrl, CC_DEFAULT_RECEIVER_ID, CC_MIRRORING_APP_ID, &error))
- {
- g_warning ("CcCtrl: Failed to launch app");
- }
+ if (!cc_ctrl_send_launch_app (ctrl, CC_DEFAULT_RECEIVER_ID, CC_MIRRORING_APP_ID))
+ g_error ("CcCtrl: Failed to launch app");
}
void
@@ -526,7 +559,7 @@ cc_ctrl_handle_received_msg (CcCommClosure *closure,
break;
case CC_RWAIT_TYPE_LAUNCH_ERROR:
g_warning ("CcCtrl: Failed to launch app");
- ctrl->closure->end_stream (ctrl->closure);
+ cc_ctrl_fatal_error (ctrl);
break;
case CC_RWAIT_TYPE_ANSWER:
cc_ctrl_unset_waiting_for (ctrl, CC_RWAIT_TYPE_ANSWER);
@@ -548,17 +581,32 @@ cc_ctrl_handle_received_msg (CcCommClosure *closure,
case CC_RWAIT_TYPE_UNKNOWN:
default:
g_warning ("CcCtrl: Unknown message type");
- ctrl->closure->end_stream (ctrl->closure);
+ cc_ctrl_fatal_error (ctrl);
break;
}
}
+static void
+cc_ctrl_fatal_error (CcCtrl *ctrl)
+{
+ if (ctrl->state == CC_CTRL_STATE_ERROR) /* function has already been called */
+ return;
+
+ ctrl->closure->end_stream (ctrl->closure);
+ ctrl->state = CC_CTRL_STATE_ERROR;
+}
+
void
-cc_ctrl_fatal_error (CcCommClosure *closure, GError **error)
+cc_ctrl_fatal_error_closure (CcCommClosure *closure, GError *error)
{
/* XXX: add error arg in end_stream and display an error message to user */
+ if (error)
+ g_warning ("CcCtrl: Fatal error: %s", error->message);
+ else
+ g_error ("CcCtrl: Fatal error");
+
CcCtrl *ctrl = (CcCtrl *) closure->userdata;
- ctrl->closure->end_stream (ctrl->closure);
+ cc_ctrl_fatal_error (ctrl);
}
CcCommClosure *
@@ -567,7 +615,7 @@ cc_ctrl_get_callback_closure (CcCtrl *ctrl)
CcCommClosure *closure = (CcCommClosure *) g_malloc (sizeof (CcCommClosure));
closure->userdata = ctrl;
closure->message_received_cb = cc_ctrl_handle_received_msg;
- closure->fatal_error_cb = cc_ctrl_fatal_error;
+ closure->fatal_error_cb = cc_ctrl_fatal_error_closure;
return closure;
}
@@ -584,22 +632,22 @@ cc_ctrl_connection_init (CcCtrl *ctrl, gchar *remote_address)
if (!cc_comm_make_connection (&ctrl->comm, remote_address, &error))
{
- g_warning ("CcCtrl: Failed to make connection to %s: %s", remote_address, error->message);
+ if (error != NULL)
+ g_warning ("CcCtrl: Failed to make connection to %s: %s", remote_address, error->message);
+ else
+ g_warning ("CcCtrl: Failed to make connection to %s", remote_address);
return FALSE;
}
- if (!cc_ctrl_send_auth (ctrl, &error))
- {
- g_warning ("CcCtrl: Failed to send auth: %s", error->message);
- return FALSE;
- }
+ if (!cc_ctrl_send_auth (ctrl))
+ return FALSE;
- if (!cc_ctrl_send_connect (ctrl, CC_DEFAULT_RECEIVER_ID, &error))
+ if (!cc_ctrl_send_connect (ctrl, CC_DEFAULT_RECEIVER_ID))
{
- g_warning ("CcCtrl: Failed to send connect: %s", error->message);
+ g_warning ("CcCtrl: Failed to send connect");
return FALSE;
}
-
+
/* since tls_send is a synchronous call */
ctrl->state = CC_CTRL_STATE_CONNECTED;
@@ -612,9 +660,9 @@ cc_ctrl_connection_init (CcCtrl *ctrl, gchar *remote_address)
ctrl);
/* we can skip some message interchange if the mirroring app is already up */
- if (!cc_ctrl_send_get_status (ctrl, CC_DEFAULT_RECEIVER_ID, &error))
+ if (!cc_ctrl_send_get_status (ctrl, CC_DEFAULT_RECEIVER_ID))
{
- g_warning ("CcCtrl: Failed to send get status: %s", error->message);
+ g_error ("CcCtrl: Failed to send get status");
return FALSE;
}
@@ -622,32 +670,24 @@ cc_ctrl_connection_init (CcCtrl *ctrl, gchar *remote_address)
}
void
-cc_ctrl_finish (CcCtrl *ctrl, GError **r_error)
+cc_ctrl_finish (CcCtrl *ctrl)
{
- g_autoptr(GError) err = NULL;
-
g_clear_handle_id (&ctrl->ping_timeout_handle, g_source_remove);
g_clear_handle_id (&ctrl->waiting_check_timeout_handle, g_source_remove);
/* close app if open */
if (ctrl->state >= CC_CTRL_STATE_APP_OPEN)
{
- if (!cc_ctrl_send_disconnect (ctrl, CC_DEFAULT_RECEIVER_ID, &err))
- {
- g_warning ("CcCtrl: Error closing virtual connection to app: %s", err->message);
- g_clear_error (&err);
- }
- if (!cc_ctrl_send_close_app (ctrl, ctrl->session_id, &err))
- {
- g_warning ("CcCtrl: Error closing app: %s", err->message);
- g_clear_error (&err);
- }
+ if (!cc_ctrl_send_disconnect (ctrl, CC_DEFAULT_RECEIVER_ID))
+ g_error ("CcCtrl: Error closing virtual connection to app");
+ if (!cc_ctrl_send_close_app (ctrl, ctrl->session_id))
+ g_error ("CcCtrl: Error closing app");
g_clear_pointer (&ctrl->session_id, g_free);
}
/* close the virtual connection */
- if (!cc_ctrl_send_disconnect (ctrl, CC_DEFAULT_RECEIVER_ID, NULL))
- g_warning ("CcCtrl: Error closing virtual connection: %s", err->message);
+ if (!cc_ctrl_send_disconnect (ctrl, CC_DEFAULT_RECEIVER_ID))
+ g_error ("CcCtrl: Error closing virtual connection");
/* free up the resources */
g_clear_pointer (&ctrl->comm.closure, g_free);
diff --git a/src/cc/cc-ctrl.h b/src/cc/cc-ctrl.h
index bc9ef7f..50a6f10 100644
--- a/src/cc/cc-ctrl.h
+++ b/src/cc/cc-ctrl.h
@@ -66,7 +66,7 @@ typedef struct _CcCtrl CcCtrl;
/* public functions */
gboolean cc_ctrl_connection_init (CcCtrl *ctrl, gchar *remote_address);
-void cc_ctrl_finish (CcCtrl *ctrl, GError **error);
+void cc_ctrl_finish (CcCtrl *ctrl);
// XXX: is this required?
// G_DEFINE_AUTOPTR_CLEANUP_FUNC (CcCtrl, g_object_unref)
diff --git a/src/nd-cc-sink.c b/src/nd-cc-sink.c
index 7799f65..0cacc81 100644
--- a/src/nd-cc-sink.c
+++ b/src/nd-cc-sink.c
@@ -354,8 +354,11 @@ nd_cc_sink_sink_start_stream (NdSink *sink)
if (!cc_ctrl_connection_init (&self->ctrl, self->remote_address))
{
g_warning ("NdCCSink: Failed to init cc-ctrl");
- self->state = ND_SINK_STATE_ERROR;
- g_object_notify (G_OBJECT (self), "state");
+ if (self->state != ND_SINK_STATE_ERROR)
+ {
+ self->state = ND_SINK_STATE_ERROR;
+ g_object_notify (G_OBJECT (self), "state");
+ }
g_clear_object (&self->server);
return NULL;
@@ -410,7 +413,7 @@ nd_cc_sink_sink_start_stream (NdSink *sink)
static void
nd_cc_sink_sink_stop_stream_int (NdCCSink *self)
{
- cc_ctrl_finish (&self->ctrl, NULL);
+ cc_ctrl_finish (&self->ctrl);
self->cancellable = g_cancellable_new ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]