From: hj kim Date: Thu, 30 Jan 2020 04:55:20 +0000 (+0900) Subject: Unify duplicated code regarding sending command to server X-Git-Tag: submit/tizen/20200205.015006~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=85b251eec1a4facc8c474015ca573abdf221bb30;p=platform%2Fcore%2Fapi%2Fscreen-mirroring.git Unify duplicated code regarding sending command to server Change-Id: I49fe79c1dbed385b715d88331ffc615d290427a8 --- diff --git a/include/scmirroring_private.h b/include/scmirroring_private.h index 85731fb..af9f8b5 100644 --- a/include/scmirroring_private.h +++ b/include/scmirroring_private.h @@ -292,6 +292,15 @@ int _scmirroring_sink_get_negotiated_audio_channel(MMHandleType handle, int *cha int _scmirroring_sink_get_negotiated_audio_sample_rate(MMHandleType handle, int *sample_rate); int _scmirroring_sink_get_negotiated_audio_bitwidth(MMHandleType handle, int *bitwidth); int _scmirroring_sink_get_current_state(MMHandleType handle, scmirroring_sink_state_e *state); +int _scmirroring_src_send_cmd_to_server(int sock, const char *cmd); +int _scmirroring_src_send_set_cm(int sock, int connect_mode); +int _scmirroring_src_send_set_ip(int sock, const char *ip, const char *port); +int _scmirroring_src_send_set_reso(int sock, int resolution); +int _scmirroring_src_send_set_multisink(int sock, scmirroring_multisink_e multisink); +int _scmirroring_src_send_set_coupling_mode(int sock, scmirroring_coupling_mode_e coupling_mode); +int _scmirroring_src_send_set_direct_streaming(int sock, scmirroring_direct_streaming_e direct_streaming, const char *filesrc); +int _scmirroring_src_send_switch_transport(int sock, scmirroring_av_transport_e av_transport); + #ifdef __cplusplus } diff --git a/src/scmirroring_primary_sink.c b/src/scmirroring_primary_sink.c index a709928..5b0f3fe 100644 --- a/src/scmirroring_primary_sink.c +++ b/src/scmirroring_primary_sink.c @@ -430,36 +430,6 @@ static gboolean __scmirroring_primary_src_callback_call(gpointer data) return FALSE; } -static int __scmirroring_primary_src_send_cmd_to_server(scmirroring_primary_sink_s *scmirroring, const char *cmd) -{ - int ret = SCMIRRORING_ERROR_NONE; - char *_cmd = NULL; - int _cmdLen = 0; - - scmirroring_retvm_if(scmirroring == NULL, SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is NULL"); - 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; - } - - _cmdLen = strlen(_cmd) + 1; - if (write(scmirroring->sock, _cmd, _cmdLen) != _cmdLen) { - char buf[255] = {0, }; - strerror_r(errno, buf, sizeof(buf)); - scmirroring_error("sendto failed [%s]", buf); - ret = SCMIRRORING_ERROR_INVALID_OPERATION; - } else { - scmirroring_debug("Sent message [%s] successfully", _cmd); - } - - SCMIRRORING_SAFE_G_FREE(_cmd); - - return ret; -} - static int __miracast_server_launch(scmirroring_primary_sink_s *scmirroring) { int ret = SCMIRRORING_ERROR_NONE; @@ -669,149 +639,6 @@ gboolean __scmirroring_primary_src_read_cb(GIOChannel *src, GIOCondition conditi return TRUE; } -static int __scmirroring_primary_src_send_set_cm(scmirroring_primary_sink_h scmirroring) -{ - /* Set connection mode to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - - cmd = g_strdup_printf("SET CM %d", _scmirroring->connect_mode); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - -static int __scmirroring_primary_src_send_set_ip(scmirroring_primary_sink_h scmirroring) -{ - /* Set IP and Port to server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - - cmd = g_strdup_printf("SET IP %s:%s", _scmirroring->ip, _scmirroring->port); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - -static int __scmirroring_primary_src_send_set_reso(scmirroring_primary_sink_h scmirroring) -{ - /* Set resolution to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - - cmd = g_strdup_printf("SET RESO %d", _scmirroring->resolution); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - -static int __scmirroring_primary_src_send_set_multisink(scmirroring_primary_sink_h scmirroring) -{ - /* Set resolution to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - - cmd = g_strdup_printf("SET MULTISINK %d", _scmirroring->multisink); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - -static int __scmirroring_primary_src_send_set_direct_streaming(scmirroring_primary_sink_h scmirroring) -{ - /* Set resolution to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - - scmirroring_retvm_if(_scmirroring == NULL, SCMIRRORING_ERROR_INVALID_PARAMETER, "Handle is NULL"); - - cmd = g_strdup_printf("SET STREAMING %d %s", _scmirroring->direct_streaming, _scmirroring->filesrc); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_FREE(cmd); - scmirroring_error("Failed to enable direct streaming [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_FREE(cmd); - - return ret; -} - -static int __scmirroring_primary_src_send_set_coupling_mode(scmirroring_primary_sink_h scmirroring) -{ - /* Set coupling mode to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - - cmd = g_strdup_printf("SET COUPLING_MODE %d", _scmirroring->coupling_mode); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - -static int __scmirroring_primary_src_send_switch_transport(scmirroring_primary_sink_h scmirroring) -{ - /* Set tranport protocol to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - const char *tr = _scmirroring->av_transport == SCMIRRORING_AV_TRANSPORT_UDP ? "UDP" : "TCP"; - - cmd = g_strdup_printf("SWITCH %s", tr); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - int scmirroring_primary_src_create(scmirroring_primary_sink_h *scmirroring) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); @@ -871,7 +698,7 @@ int scmirroring_primary_src_set_connection_mode(scmirroring_primary_sink_h scmir _scmirroring->connect_mode = connect_mode; if (_scmirroring->connected) - ret = __scmirroring_primary_src_send_set_cm(_scmirroring); + ret = _scmirroring_src_send_set_cm(_scmirroring->sock, _scmirroring->connect_mode); scmirroring_debug_fleave(); @@ -953,7 +780,7 @@ int scmirroring_primary_src_set_ip_and_port(scmirroring_primary_sink_h scmirrori scmirroring_retvm_if(_scmirroring->port == NULL, SCMIRRORING_ERROR_OUT_OF_MEMORY, "Out of memory for PORT"); if (_scmirroring->connected) - ret = __scmirroring_primary_src_send_set_ip(_scmirroring); + ret = _scmirroring_src_send_set_ip(_scmirroring->sock, _scmirroring->ip, _scmirroring->port); scmirroring_debug_fleave(); @@ -980,7 +807,7 @@ int scmirroring_primary_src_set_resolution(scmirroring_primary_sink_h scmirrorin _scmirroring->resolution = resolution; if (_scmirroring->connected) - ret = __scmirroring_primary_src_send_set_reso(_scmirroring); + ret = _scmirroring_src_send_set_reso(_scmirroring->sock, _scmirroring->resolution); scmirroring_debug_fleave(); @@ -1028,7 +855,7 @@ int scmirroring_primary_src_set_multisink_ability(scmirroring_primary_sink_h scm _scmirroring->multisink = multisink; if (_scmirroring->connected) - ret = __scmirroring_primary_src_send_set_multisink(_scmirroring); + ret = _scmirroring_src_send_set_multisink(_scmirroring->sock, _scmirroring->multisink); scmirroring_debug_fleave(); @@ -1137,13 +964,13 @@ try: __scmirroring_primary_src_set_callback_info(_scmirroring, SCMIRRORING_ERROR_NONE, SCMIRRORING_STATE_READY); if ((_scmirroring->ip != NULL) || (_scmirroring->port != NULL)) { - ret = __scmirroring_primary_src_send_set_ip(_scmirroring); - ret = __scmirroring_primary_src_send_set_cm(_scmirroring); - ret = __scmirroring_primary_src_send_set_reso(_scmirroring); + ret = _scmirroring_src_send_set_ip(_scmirroring->sock, _scmirroring->ip, _scmirroring->port); + ret = _scmirroring_src_send_set_cm(_scmirroring->sock, _scmirroring->connect_mode); + ret = _scmirroring_src_send_set_reso(_scmirroring->sock, _scmirroring->resolution); } if (_scmirroring->multisink == SCMIRRORING_MULTISINK_ENABLE) - ret = __scmirroring_primary_src_send_set_multisink(_scmirroring); + ret = _scmirroring_src_send_set_multisink(_scmirroring->sock, _scmirroring->multisink); scmirroring_debug_fleave(); @@ -1163,7 +990,7 @@ int scmirroring_primary_src_disconnect(scmirroring_primary_sink_h scmirroring) scmirroring_retvm_if(!__is_valid_handle(_scmirroring), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is invalid"); scmirroring_retvm_if(_scmirroring->connected == NOT_CONNECTED_TO_SERVER, SCMIRRORING_ERROR_NONE, "Already disconnected"); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_DESTROY); + ret = _scmirroring_src_send_cmd_to_server(_scmirroring->sock, SCMIRRORING_STATE_CMD_DESTROY); if (ret != SCMIRRORING_ERROR_NONE) scmirroring_error("Failed to destroy miracast server [%d]", ret); @@ -1190,60 +1017,33 @@ int scmirroring_primary_src_start(scmirroring_primary_sink_h scmirroring) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); - int ret = SCMIRRORING_ERROR_NONE; scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - scmirroring_debug_fenter(); - scmirroring_retvm_if(!__is_valid_handle(_scmirroring), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is invalid"); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_START); - if (ret != SCMIRRORING_ERROR_NONE) - scmirroring_error("Failed to start [%d]", ret); - - scmirroring_debug_fleave(); - - return ret; + return _scmirroring_src_send_cmd_to_server(_scmirroring->sock, SCMIRRORING_STATE_CMD_START); } int scmirroring_primary_src_pause(scmirroring_primary_sink_h scmirroring) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); - int ret = SCMIRRORING_ERROR_NONE; scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - scmirroring_debug_fenter(); - scmirroring_retvm_if(!__is_valid_handle(_scmirroring), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is invalid"); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_PAUSE); - if (ret != SCMIRRORING_ERROR_NONE) - scmirroring_error("Failed to pause [%d]", ret); - - scmirroring_debug_fleave(); - - return ret; + return _scmirroring_src_send_cmd_to_server(_scmirroring->sock, SCMIRRORING_STATE_CMD_PAUSE); } int scmirroring_primary_src_resume(scmirroring_primary_sink_h scmirroring) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); - int ret = SCMIRRORING_ERROR_NONE; scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - scmirroring_debug_fenter(); - scmirroring_retvm_if(!__is_valid_handle(_scmirroring), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is invalid"); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_RESUME); - if (ret != SCMIRRORING_ERROR_NONE) - scmirroring_error("Failed to resume [%d]", ret); - - scmirroring_debug_fleave(); - - return ret; + return _scmirroring_src_send_cmd_to_server(_scmirroring->sock, SCMIRRORING_STATE_CMD_RESUME); } int scmirroring_primary_src_set_direct_streaming(scmirroring_primary_sink_h scmirroring_primary_src, @@ -1273,7 +1073,7 @@ int scmirroring_primary_src_set_direct_streaming(scmirroring_primary_sink_h scmi return SCMIRRORING_ERROR_OUT_OF_MEMORY; } - ret = __scmirroring_primary_src_send_set_direct_streaming(_scmirroring); + ret = _scmirroring_src_send_set_direct_streaming(_scmirroring->sock, _scmirroring->direct_streaming, _scmirroring->filesrc); scmirroring_debug_fleave(); @@ -1301,7 +1101,7 @@ int scmirroring_primary_src_set_coupling_mode(scmirroring_primary_sink_h scmirro _scmirroring->coupling_mode = coupling_mode; if (_scmirroring->connected) - ret = __scmirroring_primary_src_send_set_coupling_mode(_scmirroring); + ret = _scmirroring_src_send_set_coupling_mode(_scmirroring->sock, coupling_mode); scmirroring_debug_fleave(); @@ -1327,7 +1127,7 @@ int scmirroring_primary_src_AV_transport_switch(scmirroring_primary_sink_h scmir _scmirroring->av_transport = transport; - ret = __scmirroring_primary_src_send_switch_transport(_scmirroring); + ret = _scmirroring_src_send_switch_transport(_scmirroring->sock, transport); scmirroring_debug_fleave(); @@ -1338,20 +1138,11 @@ int scmirroring_primary_src_stop(scmirroring_primary_sink_h scmirroring) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); - int ret = SCMIRRORING_ERROR_NONE; scmirroring_primary_sink_s *_scmirroring = (scmirroring_primary_sink_s *)scmirroring; - scmirroring_debug_fenter(); - scmirroring_retvm_if(!__is_valid_handle(_scmirroring), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is invalid"); - ret = __scmirroring_primary_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_STOP); - if (ret != SCMIRRORING_ERROR_NONE) - scmirroring_error("Failed to be stop [%d]", ret); - - scmirroring_debug_fleave(); - - return ret; + return _scmirroring_src_send_cmd_to_server(_scmirroring->sock, SCMIRRORING_STATE_CMD_STOP); } int scmirroring_primary_src_destroy(scmirroring_primary_sink_h scmirroring) diff --git a/src/scmirroring_src.c b/src/scmirroring_src.c index ab2a12e..dc3e5ff 100644 --- a/src/scmirroring_src.c +++ b/src/scmirroring_src.c @@ -1,4 +1,3 @@ - /* * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved * @@ -69,36 +68,6 @@ static gboolean __scmirroring_src_callback_call(gpointer data) return FALSE; } -static int __scmirroring_src_send_cmd_to_server(scmirroring_src_s *scmirroring, const char *cmd) -{ - int ret = SCMIRRORING_ERROR_NONE; - char *_cmd = NULL; - int _cmdLen = 0; - - scmirroring_retvm_if(scmirroring == NULL, SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is NULL"); - 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; - } - - _cmdLen = strlen(_cmd) + 1; - if (write(scmirroring->sock, _cmd, _cmdLen) != _cmdLen) { - char buf[255] = {0, }; - strerror_r(errno, buf, sizeof(buf)); - scmirroring_error("sendto failed [%s]", buf); - ret = SCMIRRORING_ERROR_INVALID_OPERATION; - } else { - scmirroring_debug("Sent message [%s] successfully", _cmd); - } - - SCMIRRORING_SAFE_G_FREE(_cmd); - - return ret; -} - static int __miracast_server_launch(scmirroring_src_s *scmirroring) { int ret = SCMIRRORING_ERROR_NONE; @@ -294,149 +263,6 @@ gboolean __scmirroring_src_read_cb(GIOChannel *src, GIOCondition condition, gpoi return TRUE; } -static int __scmirroring_src_send_set_cm(scmirroring_src_h scmirroring) -{ - /* Set connection mode to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - - cmd = g_strdup_printf("SET CM %d", _scmirroring->connect_mode); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - -static int __scmirroring_src_send_set_ip(scmirroring_src_h scmirroring) -{ - /* Set IP and Port to server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - - cmd = g_strdup_printf("SET IP %s:%s", _scmirroring->ip, _scmirroring->port); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - -static int __scmirroring_src_send_set_reso(scmirroring_src_h scmirroring) -{ - /* Set resolution to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - - cmd = g_strdup_printf("SET RESO %d", _scmirroring->resolution); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - -static int __scmirroring_src_send_set_multisink(scmirroring_src_h scmirroring) -{ - /* Set resolution to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - - cmd = g_strdup_printf("SET MULTISINK %d", _scmirroring->multisink); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - -static int __scmirroring_src_send_set_coupling_mode(scmirroring_src_h scmirroring) -{ - /* Set coupling mode to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - - cmd = g_strdup_printf("SET COUPLING_MODE %d", _scmirroring->coupling_mode); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - -static int __scmirroring_src_send_set_direct_streaming(scmirroring_src_h scmirroring) -{ - /* Set resolution to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - - scmirroring_retvm_if(_scmirroring == NULL, SCMIRRORING_ERROR_INVALID_PARAMETER, "Handle is NULL"); - - cmd = g_strdup_printf("SET STREAMING %d %s", _scmirroring->direct_streaming, _scmirroring->filesrc); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_FREE(cmd); - scmirroring_error("Failed to enable direct streaming [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_FREE(cmd); - - return ret; -} - -static int __scmirroring_src_send_switch_transport(scmirroring_src_h scmirroring) -{ - /* Set tranport protocol to miracast server */ - char *cmd = NULL; - int ret = SCMIRRORING_ERROR_NONE; - scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - const char *tr = _scmirroring->av_transport == SCMIRRORING_AV_TRANSPORT_UDP ? "UDP" : "TCP"; - - cmd = g_strdup_printf("SWITCH %s", tr); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, cmd); - if (ret != SCMIRRORING_ERROR_NONE) { - SCMIRRORING_SAFE_G_FREE(cmd); - scmirroring_error("Failed to be ready [%d]", ret); - return SCMIRRORING_ERROR_INVALID_OPERATION; - } - - SCMIRRORING_SAFE_G_FREE(cmd); - - return ret; -} - int scmirroring_src_create(scmirroring_src_h *scmirroring) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); @@ -495,7 +321,7 @@ int scmirroring_src_set_connection_mode(scmirroring_src_h scmirroring, scmirrori _scmirroring->connect_mode = connect_mode; if (_scmirroring->connected) - ret = __scmirroring_src_send_set_cm(_scmirroring); + ret = _scmirroring_src_send_set_cm(_scmirroring->sock, _scmirroring->connect_mode); scmirroring_debug_fleave(); @@ -577,7 +403,7 @@ int scmirroring_src_set_ip_and_port(scmirroring_src_h scmirroring, const char *i scmirroring_retvm_if(_scmirroring->port == NULL, SCMIRRORING_ERROR_OUT_OF_MEMORY, "Out of memory for PORT"); if (_scmirroring->connected) - ret = __scmirroring_src_send_set_ip(_scmirroring); + ret = _scmirroring_src_send_set_ip(_scmirroring->sock, _scmirroring->ip, _scmirroring->port); scmirroring_debug_fleave(); @@ -604,7 +430,7 @@ int scmirroring_src_set_resolution(scmirroring_src_h scmirroring, scmirroring_re _scmirroring->resolution = resolution; if (_scmirroring->connected) - ret = __scmirroring_src_send_set_reso(_scmirroring); + ret = _scmirroring_src_send_set_reso(_scmirroring->sock, _scmirroring->resolution); scmirroring_debug_fleave(); @@ -652,7 +478,7 @@ int scmirroring_src_set_multisink_ability(scmirroring_src_h scmirroring, scmirro _scmirroring->multisink = multisink; if (_scmirroring->connected) - ret = __scmirroring_src_send_set_multisink(_scmirroring); + ret = _scmirroring_src_send_set_multisink(_scmirroring->sock, _scmirroring->multisink); scmirroring_debug_fleave(); @@ -678,7 +504,7 @@ int scmirroring_src_set_coupling_mode(scmirroring_src_h scmirroring, scmirroring _scmirroring->coupling_mode = coupling_mode; if (_scmirroring->connected) - ret = __scmirroring_src_send_set_coupling_mode(_scmirroring); + ret = _scmirroring_src_send_set_coupling_mode(_scmirroring->sock, coupling_mode); scmirroring_debug_fleave(); @@ -788,13 +614,13 @@ try: __scmirroring_src_set_callback_info(_scmirroring, SCMIRRORING_ERROR_NONE, SCMIRRORING_STATE_READY); if ((_scmirroring->ip != NULL) || (_scmirroring->port != NULL)) { - ret = __scmirroring_src_send_set_ip(_scmirroring); - ret = __scmirroring_src_send_set_cm(_scmirroring); - ret = __scmirroring_src_send_set_reso(_scmirroring); + ret = _scmirroring_src_send_set_ip(_scmirroring->sock, _scmirroring->ip, _scmirroring->port); + ret = _scmirroring_src_send_set_cm(_scmirroring->sock, _scmirroring->connect_mode); + ret = _scmirroring_src_send_set_reso(_scmirroring->sock, _scmirroring->resolution); } if (_scmirroring->multisink == SCMIRRORING_MULTISINK_ENABLE) - ret = __scmirroring_src_send_set_multisink(_scmirroring); + ret = _scmirroring_src_send_set_multisink(_scmirroring->sock, _scmirroring->multisink); scmirroring_debug_fleave(); @@ -814,7 +640,7 @@ int scmirroring_src_disconnect(scmirroring_src_h scmirroring) scmirroring_retvm_if(!__is_valid_handle(_scmirroring), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is invalid"); 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); + ret = _scmirroring_src_send_cmd_to_server(_scmirroring->sock, SCMIRRORING_STATE_CMD_DESTROY); if (ret != SCMIRRORING_ERROR_NONE) scmirroring_error("Failed to destroy miracast server [%d]", ret); @@ -841,60 +667,33 @@ int scmirroring_src_start(scmirroring_src_h scmirroring) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); - int ret = SCMIRRORING_ERROR_NONE; scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - scmirroring_debug_fenter(); - scmirroring_retvm_if(!__is_valid_handle(_scmirroring), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is invalid"); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_START); - if (ret != SCMIRRORING_ERROR_NONE) - scmirroring_error("Failed to start [%d]", ret); - - scmirroring_debug_fleave(); - - return ret; + return _scmirroring_src_send_cmd_to_server(_scmirroring->sock, SCMIRRORING_STATE_CMD_START); } int scmirroring_src_pause(scmirroring_src_h scmirroring) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); - int ret = SCMIRRORING_ERROR_NONE; scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - scmirroring_debug_fenter(); - scmirroring_retvm_if(!__is_valid_handle(_scmirroring), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is invalid"); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_PAUSE); - if (ret != SCMIRRORING_ERROR_NONE) - scmirroring_error("Failed to pause [%d]", ret); - - scmirroring_debug_fleave(); - - return ret; + return _scmirroring_src_send_cmd_to_server(_scmirroring->sock, SCMIRRORING_STATE_CMD_PAUSE); } int scmirroring_src_resume(scmirroring_src_h scmirroring) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); - int ret = SCMIRRORING_ERROR_NONE; scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - scmirroring_debug_fenter(); - scmirroring_retvm_if(!__is_valid_handle(_scmirroring), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is invalid"); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_RESUME); - if (ret != SCMIRRORING_ERROR_NONE) - scmirroring_error("Failed to resume [%d]", ret); - - scmirroring_debug_fleave(); - - return ret; + return _scmirroring_src_send_cmd_to_server(_scmirroring->sock, SCMIRRORING_STATE_CMD_RESUME); } int scmirroring_src_set_direct_streaming(scmirroring_src_h scmirroring_src, @@ -924,15 +723,14 @@ int scmirroring_src_set_direct_streaming(scmirroring_src_h scmirroring_src, return SCMIRRORING_ERROR_OUT_OF_MEMORY; } - ret = __scmirroring_src_send_set_direct_streaming(_scmirroring); + ret = _scmirroring_src_send_set_direct_streaming(_scmirroring->sock, _scmirroring->direct_streaming, _scmirroring->filesrc); scmirroring_debug_fleave(); return ret; } -int scmirroring_src_AV_transport_switch(scmirroring_src_h scmirroring, - scmirroring_av_transport_e transport) +int scmirroring_src_AV_transport_switch(scmirroring_src_h scmirroring, scmirroring_av_transport_e transport) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); @@ -950,7 +748,7 @@ int scmirroring_src_AV_transport_switch(scmirroring_src_h scmirroring, _scmirroring->av_transport = transport; - ret = __scmirroring_src_send_switch_transport(_scmirroring); + ret = _scmirroring_src_send_switch_transport(_scmirroring->sock, transport); scmirroring_debug_fleave(); @@ -961,20 +759,11 @@ int scmirroring_src_stop(scmirroring_src_h scmirroring) { CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); - int ret = SCMIRRORING_ERROR_NONE; scmirroring_src_s *_scmirroring = (scmirroring_src_s *)scmirroring; - scmirroring_debug_fenter(); - scmirroring_retvm_if(!__is_valid_handle(_scmirroring), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring is invalid"); - ret = __scmirroring_src_send_cmd_to_server(_scmirroring, SCMIRRORING_STATE_CMD_STOP); - if (ret != SCMIRRORING_ERROR_NONE) - scmirroring_error("Failed to be stop [%d]", ret); - - scmirroring_debug_fleave(); - - return ret; + return _scmirroring_src_send_cmd_to_server(_scmirroring->sock, SCMIRRORING_STATE_CMD_STOP); } int scmirroring_src_destroy(scmirroring_src_h scmirroring) diff --git a/src/scmirroring_util.c b/src/scmirroring_util.c index 75f2a0f..91aa36f 100644 --- a/src/scmirroring_util.c +++ b/src/scmirroring_util.c @@ -15,6 +15,7 @@ */ #include +#include #include scmirroring_error_e _scmirroring_error_convert(const char *func, int error) @@ -387,3 +388,116 @@ int _scmirroring_sink_get_current_state(MMHandleType handle, scmirroring_sink_st return SCMIRRORING_ERROR_NONE; } + +int _scmirroring_src_send_cmd_to_server(int sock, const char *cmd) +{ + int cmd_len = 0; + + scmirroring_retvm_if(!cmd, SCMIRRORING_ERROR_INVALID_PARAMETER, "cmd is NULL"); + + cmd_len = strlen(cmd) + 1; + if (write(sock, cmd, cmd_len) != cmd_len) { + char buf[255] = {0, }; + strerror_r(errno, buf, sizeof(buf)); + scmirroring_error("sendto failed [%s] [%s]", buf, cmd); + return SCMIRRORING_ERROR_INVALID_OPERATION; + } + + scmirroring_debug("Sent message [%s] successfully", cmd); + + return SCMIRRORING_ERROR_NONE; +} + +int _scmirroring_src_send_set_cm(int sock, int connect_mode) +{ + char *cmd = NULL; + int ret = SCMIRRORING_ERROR_NONE; + + cmd = g_strdup_printf("SET CM %d", connect_mode); + ret = _scmirroring_src_send_cmd_to_server(sock, cmd); + + SCMIRRORING_SAFE_G_FREE(cmd); + + return ret; +} + +int _scmirroring_src_send_set_ip(int sock, const char *ip, const char *port) +{ + char *cmd = NULL; + int ret = SCMIRRORING_ERROR_NONE; + + cmd = g_strdup_printf("SET IP %s:%s", ip, port); + ret = _scmirroring_src_send_cmd_to_server(sock, cmd); + + SCMIRRORING_SAFE_G_FREE(cmd); + + return ret; +} + +int _scmirroring_src_send_set_reso(int sock, int resolution) +{ + char *cmd = NULL; + int ret = SCMIRRORING_ERROR_NONE; + + cmd = g_strdup_printf("SET RESO %d", resolution); + ret = _scmirroring_src_send_cmd_to_server(sock, cmd); + + SCMIRRORING_SAFE_G_FREE(cmd); + + return ret; +} + +int _scmirroring_src_send_set_multisink(int sock, scmirroring_multisink_e multisink) +{ + char *cmd = NULL; + int ret = SCMIRRORING_ERROR_NONE; + + cmd = g_strdup_printf("SET MULTISINK %d", multisink); + ret = _scmirroring_src_send_cmd_to_server(sock, cmd); + + SCMIRRORING_SAFE_G_FREE(cmd); + + return ret; +} + +int _scmirroring_src_send_set_coupling_mode(int sock, scmirroring_coupling_mode_e coupling_mode) +{ + char *cmd = NULL; + int ret = SCMIRRORING_ERROR_NONE; + + cmd = g_strdup_printf("SET COUPLING_MODE %d", coupling_mode); + ret = _scmirroring_src_send_cmd_to_server(sock, cmd); + + SCMIRRORING_SAFE_G_FREE(cmd); + + return ret; +} + +int _scmirroring_src_send_set_direct_streaming(int sock, scmirroring_direct_streaming_e direct_streaming, const char *filesrc) +{ + char *cmd = NULL; + int ret = SCMIRRORING_ERROR_NONE; + + cmd = g_strdup_printf("SET STREAMING %d %s", direct_streaming, filesrc); + ret = _scmirroring_src_send_cmd_to_server(sock, cmd); + + SCMIRRORING_SAFE_FREE(cmd); + + return ret; +} + +int _scmirroring_src_send_switch_transport(int sock, scmirroring_av_transport_e av_transport) +{ + + char *cmd = NULL; + int ret = SCMIRRORING_ERROR_NONE; + + const char *tr = av_transport == SCMIRRORING_AV_TRANSPORT_UDP ? "UDP" : "TCP"; + + cmd = g_strdup_printf("SWITCH %s", tr); + ret = _scmirroring_src_send_cmd_to_server(sock, cmd); + + SCMIRRORING_SAFE_G_FREE(cmd); + + return ret; +}