From: SeokHoon Lee Date: Fri, 14 Apr 2017 05:45:53 +0000 (+0900) Subject: Add magic number to source structure X-Git-Tag: submit/tizen/20170516.041041~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F87%2F125187%2F1;p=platform%2Fcore%2Fapi%2Fscreen-mirroring.git Add magic number to source structure - add magic number to check handle integrity Signed-off-by: SeokHoon Lee Change-Id: I543efcf7fd8d05afcdb93e505fca59a04ec66c16 --- diff --git a/include/scmirroring_private.h b/include/scmirroring_private.h index 4ac4aff..4e1f79e 100644 --- a/include/scmirroring_private.h +++ b/include/scmirroring_private.h @@ -114,6 +114,7 @@ typedef struct { } scmirroring_sink_state_cb_s; typedef struct { + unsigned int magic_num; char *ip; char *port; char *server_name; @@ -133,12 +134,12 @@ typedef struct { } scmirroring_src_s; typedef struct { + unsigned int magic_num; MMHandleType mm_handle; char *ip; char *port; bool use_hdcp; scmirroring_sink_state_cb_s *scmirroring_sink_state_cb; - unsigned int magic_num; } scmirroring_sink_s; #define WIFIDIRECT_DISPLAY_FEATURE "http://tizen.org/feature/network.wifi.direct.display" diff --git a/packaging/capi-media-screen-mirroring.spec b/packaging/capi-media-screen-mirroring.spec index 8e944f4..5e6269c 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.73 +Version: 0.1.74 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/scmirroring_src.c b/src/scmirroring_src.c index 9681f4c..2126761 100644 --- a/src/scmirroring_src.c +++ b/src/scmirroring_src.c @@ -403,9 +403,16 @@ int scmirroring_src_create(scmirroring_src_h *scmirroring) scmirroring_retvm_if(scmirroring == NULL, SCMIRRORING_ERROR_INVALID_PARAMETER, "Handle is NULL"); + scmirroring_src_s *mhandle = (scmirroring_src_s *)(*scmirroring); + if (mhandle != NULL && mhandle->magic_num == SCMIRRORING_MAGIC_NUMBER) { + scmirroring_error("Already created handle"); + return SCMIRRORING_ERROR_INVALID_PARAMETER; + } + _scmirroring = (scmirroring_src_s *)calloc(1, sizeof(scmirroring_src_s)); scmirroring_retvm_if(_scmirroring == NULL, SCMIRRORING_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY"); + _scmirroring->magic_num = SCMIRRORING_MAGIC_NUMBER; _scmirroring->ip = NULL; _scmirroring->port = NULL; _scmirroring->connected = NOT_CONNECTED_TO_SERVER; @@ -439,6 +446,7 @@ int scmirroring_src_set_connection_mode(scmirroring_src_h scmirroring, scmirrori scmirroring_debug_fenter(); 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"); if ((connect_mode < SCMIRRORING_CONNECTION_WIFI_DIRECT) || (connect_mode >= SCMIRRORING_CONNECTION_MAX)) { scmirroring_error("INVALID Connection mode : %d", connect_mode); @@ -466,6 +474,7 @@ int scmirroring_src_set_state_changed_cb(scmirroring_src_h scmirroring, scmirror scmirroring_debug_fenter(); 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(callback == NULL, SCMIRRORING_ERROR_INVALID_PARAMETER, "callback is NULL"); if (_scmirroring->scmirroring_state_cb == NULL) { @@ -494,6 +503,7 @@ int scmirroring_src_unset_state_changed_cb(scmirroring_src_h scmirroring) scmirroring_debug_fenter(); 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"); if (_scmirroring->scmirroring_state_cb != NULL) { _scmirroring->scmirroring_state_cb->user_data = NULL; @@ -518,6 +528,7 @@ int scmirroring_src_set_ip_and_port(scmirroring_src_h scmirroring, const char *i scmirroring_debug_fenter(); 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(!STRING_VALID(ip), SCMIRRORING_ERROR_INVALID_PARAMETER, "INVALID IP"); scmirroring_retvm_if(!STRING_VALID(port), SCMIRRORING_ERROR_INVALID_PARAMETER, "INVALID PORT"); @@ -548,6 +559,7 @@ int scmirroring_src_set_resolution(scmirroring_src_h scmirroring, scmirroring_re scmirroring_debug_fenter(); 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"); if ((resolution < SCMIRRORING_RESOLUTION_1920x1080_P30) || (resolution >= SCMIRRORING_RESOLUTION_MAX)) { scmirroring_error("INVALID resolution : %d", resolution); @@ -575,6 +587,7 @@ int scmirroring_src_set_server_name(scmirroring_src_h scmirroring, const char *n scmirroring_debug_fenter(); 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"); if (_scmirroring->server_name) g_free(_scmirroring->server_name); _scmirroring->server_name = g_strdup(name); @@ -595,6 +608,8 @@ int scmirroring_src_set_multisink_ability(scmirroring_src_h scmirroring, scmirro scmirroring_debug_fenter(); 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"); + if ((multisink < SCMIRRORING_MULTISINK_DISABLE) || (multisink >= SCMIRRORING_MULTISINK_ENABLE)) { scmirroring_error("INVALID multisink ability : %d", multisink); return SCMIRRORING_ERROR_INVALID_PARAMETER; @@ -627,6 +642,8 @@ int scmirroring_src_connect(scmirroring_src_h scmirroring) scmirroring_debug_fenter(); 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."); /*Create TCP Socket*/ @@ -735,6 +752,7 @@ int scmirroring_src_disconnect(scmirroring_src_h scmirroring) scmirroring_debug_fenter(); 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"); if (_scmirroring->channel != NULL) { g_io_channel_shutdown(_scmirroring->channel, FALSE, NULL); @@ -765,6 +783,7 @@ int scmirroring_src_start(scmirroring_src_h scmirroring) scmirroring_debug_fenter(); 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"); ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_START); if (ret != SCMIRRORING_ERROR_NONE) @@ -785,6 +804,7 @@ int scmirroring_src_pause(scmirroring_src_h scmirroring) scmirroring_debug_fenter(); 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"); ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_PAUSE); if (ret != SCMIRRORING_ERROR_NONE) @@ -805,6 +825,7 @@ int scmirroring_src_resume(scmirroring_src_h scmirroring) scmirroring_debug_fenter(); 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"); ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_RESUME); if (ret != SCMIRRORING_ERROR_NONE) @@ -826,6 +847,7 @@ int scmirroring_src_AV_transport_switch(scmirroring_src_h scmirroring, scmirroring_debug_fenter(); 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"); if (transport < SCMIRRORING_AV_TRANSPORT_UDP || transport > SCMIRRORING_AV_TRANSPORT_TCP) { scmirroring_error("Invalid transport"); @@ -851,6 +873,7 @@ int scmirroring_src_stop(scmirroring_src_h scmirroring) scmirroring_debug_fenter(); 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"); ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_STOP); if (ret != SCMIRRORING_ERROR_NONE) @@ -871,6 +894,7 @@ int scmirroring_src_destroy(scmirroring_src_h scmirroring) scmirroring_debug_fenter(); 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"); if (_scmirroring->connected == CONNECTED_TO_SERVER) { ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_DESTROY); @@ -883,6 +907,7 @@ int scmirroring_src_destroy(scmirroring_src_h scmirroring) SCMIRRORING_SAFE_G_FREE(_scmirroring->server_name); SCMIRRORING_SAFE_FREE(_scmirroring); } + _scmirroring->magic_num = 0; scmirroring_debug_fleave();