From fdecf9f85f604fc3e2034e1053586c3ca8d128c9 Mon Sep 17 00:00:00 2001 From: SeokHoon Lee Date: Wed, 10 May 2017 13:52:41 +0900 Subject: [PATCH] Change src_destroy precedure - Change SCMIRRORING_STATR_CREATED order for destory mira castserver It need to destroy miracst server after scmirroring_src_connect. - Add scmirroring_src_disconnect process in scmirroring_src_destroy, in case of connected. - Add OUT_OF_MEMORY error return in function __scmirroring_src_send_cmd_to_server Signed-off-by: SeokHoon Lee Change-Id: I6b8c4ae3ae19e2c3328dbe98dbc01c31d48bfa77 --- include/scmirroring_internal.h | 2 +- packaging/capi-media-screen-mirroring.spec | 2 +- src/scmirroring_src.c | 29 +++++++++++++++------- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/include/scmirroring_internal.h b/include/scmirroring_internal.h index e47494f..ece8e68 100644 --- a/include/scmirroring_internal.h +++ b/include/scmirroring_internal.h @@ -47,13 +47,13 @@ typedef enum { */ typedef enum { SCMIRRORING_STATE_NULL = 0, /**< Screen mirroring is not created yet */ + SCMIRRORING_STATE_CREATED, /**< Screen mirroring is created, but not realized yet */ SCMIRRORING_STATE_READY, /**< Screen mirroring is ready to play media */ SCMIRRORING_STATE_CONNECTION_WAIT, /**< Screen mirroring is waiting for connection */ SCMIRRORING_STATE_CONNECTED, /**< Screen mirroring is connected */ SCMIRRORING_STATE_PLAYING, /**< Screen mirroring is now playing media */ SCMIRRORING_STATE_PAUSED, /**< Screen mirroring is paused while playing media */ SCMIRRORING_STATE_TEARDOWN, /**< Teardown Screen mirroring */ - SCMIRRORING_STATE_CREATED, /**< Screen mirroring is created, but not realized yet */ SCMIRRORING_STATE_MAX /* Number of screen mirroring states */ } scmirroring_state_e; diff --git a/packaging/capi-media-screen-mirroring.spec b/packaging/capi-media-screen-mirroring.spec index 26b3953..3ae4925 100644 --- a/packaging/capi-media-screen-mirroring.spec +++ b/packaging/capi-media-screen-mirroring.spec @@ -1,6 +1,6 @@ Name: capi-media-screen-mirroring Summary: A screen mirroring library in Tizen C API -Version: 0.1.77 +Version: 0.1.78 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/scmirroring_src.c b/src/scmirroring_src.c index 235d603..3102e9b 100644 --- a/src/scmirroring_src.c +++ b/src/scmirroring_src.c @@ -69,6 +69,11 @@ static int __scmirroring_src_send_cmd_to_server(scmirroring_src_s *scmirroring, scmirroring_retvm_if(cmd == NULL, SCMIRRORING_ERROR_INVALID_PARAMETER, "cmd is NULL"); _cmd = g_strdup(cmd); + if (_cmd == NULL) { + scmirroring_error("Out of memory for command buffer"); + return SCMIRRORING_ERROR_OUT_OF_MEMORY; + } + _cmd[strlen(_cmd)] = '\0'; if (write(scmirroring->sock, _cmd, strlen(_cmd) + 1) != (signed int) strlen(_cmd) + 1) { @@ -645,7 +650,7 @@ int scmirroring_src_connect(scmirroring_src_h scmirroring) scmirroring_retvm_if(_scmirroring == NULL, SCMIRRORING_ERROR_INVALID_PARAMETER, "Handle is NULL"); scmirroring_retvm_if(_scmirroring->magic_num != SCMIRRORING_MAGIC_NUMBER, SCMIRRORING_ERROR_INVALID_PARAMETER, "Invalid handle"); - scmirroring_retvm_if(_scmirroring->connected == CONNECTED_TO_SERVER, SCMIRRORING_ERROR_INVALID_OPERATION, "INVALID OPERATION, already connected to server."); + scmirroring_retvm_if(_scmirroring->connected == CONNECTED_TO_SERVER, SCMIRRORING_ERROR_NONE, "already connected to server."); /*Create TCP Socket*/ if ((sock = socket(PF_FILE, SOCK_STREAM, 0)) < 0) { @@ -754,6 +759,11 @@ int scmirroring_src_disconnect(scmirroring_src_h scmirroring) scmirroring_retvm_if(_scmirroring == NULL, SCMIRRORING_ERROR_INVALID_PARAMETER, "Handle is NULL"); scmirroring_retvm_if(_scmirroring->magic_num != SCMIRRORING_MAGIC_NUMBER, SCMIRRORING_ERROR_INVALID_PARAMETER, "Invalid handle"); + scmirroring_retvm_if(_scmirroring->connected == NOT_CONNECTED_TO_SERVER, SCMIRRORING_ERROR_NONE, "Already disconnected"); + + ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_DESTROY); + if (ret != SCMIRRORING_ERROR_NONE) + scmirroring_error("Failed to destroy miracast server [%d]", ret); if (_scmirroring->channel != NULL) { g_io_channel_shutdown(_scmirroring->channel, FALSE, NULL); @@ -898,18 +908,19 @@ int scmirroring_src_destroy(scmirroring_src_h scmirroring) scmirroring_retvm_if(_scmirroring->magic_num != SCMIRRORING_MAGIC_NUMBER, SCMIRRORING_ERROR_INVALID_PARAMETER, "Invalid handle"); if (_scmirroring->connected == CONNECTED_TO_SERVER) { - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_DESTROY); + ret = scmirroring_src_disconnect(scmirroring); if (ret != SCMIRRORING_ERROR_NONE) - scmirroring_error("Failed to destroy [%d]", ret); - } else { - SCMIRRORING_SAFE_FREE(_scmirroring->ip); - SCMIRRORING_SAFE_FREE(_scmirroring->port); - SCMIRRORING_SAFE_FREE(_scmirroring->scmirroring_state_cb); - SCMIRRORING_SAFE_G_FREE(_scmirroring->server_name); - SCMIRRORING_SAFE_FREE(_scmirroring); + scmirroring_error("Failed to disconnect server [%d]", ret); } + _scmirroring->magic_num = 0; + SCMIRRORING_SAFE_FREE(_scmirroring->ip); + SCMIRRORING_SAFE_FREE(_scmirroring->port); + SCMIRRORING_SAFE_FREE(_scmirroring->scmirroring_state_cb); + SCMIRRORING_SAFE_G_FREE(_scmirroring->server_name); + SCMIRRORING_SAFE_FREE(_scmirroring); + scmirroring_debug_fleave(); return ret; -- 2.34.1