*/
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;
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) {
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) {
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);
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;