Add magic number to source structure 87/125187/1
authorSeokHoon Lee <andy.shlee@samsung.com>
Fri, 14 Apr 2017 05:45:53 +0000 (14:45 +0900)
committerSeokHoon Lee <andy.shlee@samsung.com>
Fri, 14 Apr 2017 05:47:26 +0000 (14:47 +0900)
- add magic number to check handle integrity

Signed-off-by: SeokHoon Lee <andy.shlee@samsung.com>
Change-Id: I543efcf7fd8d05afcdb93e505fca59a04ec66c16

include/scmirroring_private.h
packaging/capi-media-screen-mirroring.spec
src/scmirroring_src.c

index 4ac4aff8d2b442388919e53ba000d18bb72d9549..4e1f79ec02dd257f1a1dfd5db63451a60835c39e 100644 (file)
@@ -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"
index 8e944f4a7edfabac9c91eaf333c35e73ff5fafaa..5e6269cd0e4f6fa61b8c9efd6777626e4c6ec94f 100644 (file)
@@ -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
index 9681f4c45ea13b504be0aab4c5d45de09dad99ab..21267615664e06c0021ab19d71c5b49b6da2f481 100644 (file)
@@ -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();