From a5dd0866c408009b0db5219db93e73f7281a9ada Mon Sep 17 00:00:00 2001 From: montellese Date: Mon, 17 Feb 2014 21:37:49 +0100 Subject: [PATCH 1/3] upnp: executing Stop() in state NO_MEDIA_PRESENT is not allowed --- xbmc/network/upnp/UPnPPlayer.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/xbmc/network/upnp/UPnPPlayer.cpp b/xbmc/network/upnp/UPnPPlayer.cpp index 72c7e96c8998e..c9fa211f7a117 100644 --- a/xbmc/network/upnp/UPnPPlayer.cpp +++ b/xbmc/network/upnp/UPnPPlayer.cpp @@ -250,7 +250,17 @@ int CUPnPPlayer::PlayFile(const CFileItem& file, const CPlayerOptions& options, NPT_Cardinal res_index; NPT_CHECK_LABEL_SEVERE(m_control->FindBestResource(m_delegate->m_device, *obj, res_index), failed); + // get the transport info to evaluate the TransportState to be able to + // determine whether we first need to call Stop() + timeout.Set(timeout.GetInitialTimeoutValue()); + NPT_CHECK_LABEL_SEVERE(m_control->GetTransportInfo(m_delegate->m_device + , m_delegate->m_instance + , m_delegate), failed); + NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_traevnt, timeout, dialog), failed); + if (m_delegate->m_trainfo.cur_transport_state != "NO_MEDIA_PRESENT" && + m_delegate->m_trainfo.cur_transport_state != "STOPPED") + { timeout.Set(timeout.GetInitialTimeoutValue()); /* dlna specifies that a return code of 705 should be returned * if TRANSPORT_STATE is not STOPPED or NO_MEDIA_PRESENT */ @@ -259,6 +269,7 @@ int CUPnPPlayer::PlayFile(const CFileItem& file, const CPlayerOptions& options, , m_delegate), failed); NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_resevent, timeout, dialog), failed); NPT_CHECK_LABEL_SEVERE(m_delegate->m_resstatus, failed); + } timeout.Set(timeout.GetInitialTimeoutValue()); From 79c0433e512d6e599d306c3b9d1add7a855bcf4e Mon Sep 17 00:00:00 2001 From: montellese Date: Mon, 17 Feb 2014 21:38:41 +0100 Subject: [PATCH 2/3] upnp: fix indentation in player after previous commit --- xbmc/network/upnp/UPnPPlayer.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/xbmc/network/upnp/UPnPPlayer.cpp b/xbmc/network/upnp/UPnPPlayer.cpp index c9fa211f7a117..5a73d41514d4b 100644 --- a/xbmc/network/upnp/UPnPPlayer.cpp +++ b/xbmc/network/upnp/UPnPPlayer.cpp @@ -261,14 +261,14 @@ int CUPnPPlayer::PlayFile(const CFileItem& file, const CPlayerOptions& options, if (m_delegate->m_trainfo.cur_transport_state != "NO_MEDIA_PRESENT" && m_delegate->m_trainfo.cur_transport_state != "STOPPED") { - timeout.Set(timeout.GetInitialTimeoutValue()); - /* dlna specifies that a return code of 705 should be returned - * if TRANSPORT_STATE is not STOPPED or NO_MEDIA_PRESENT */ - NPT_CHECK_LABEL_SEVERE(m_control->Stop(m_delegate->m_device - , m_delegate->m_instance - , m_delegate), failed); - NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_resevent, timeout, dialog), failed); - NPT_CHECK_LABEL_SEVERE(m_delegate->m_resstatus, failed); + timeout.Set(timeout.GetInitialTimeoutValue()); + /* dlna specifies that a return code of 705 should be returned + * if TRANSPORT_STATE is not STOPPED or NO_MEDIA_PRESENT */ + NPT_CHECK_LABEL_SEVERE(m_control->Stop(m_delegate->m_device + , m_delegate->m_instance + , m_delegate), failed); + NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_resevent, timeout, dialog), failed); + NPT_CHECK_LABEL_SEVERE(m_delegate->m_resstatus, failed); } From 4bed85e35cefccd255728af714bef3e3ce93ffff Mon Sep 17 00:00:00 2001 From: montellese Date: Mon, 17 Feb 2014 21:40:47 +0100 Subject: [PATCH 3/3] upnp: remove invalid/unnecessary comment --- xbmc/network/upnp/UPnPPlayer.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/xbmc/network/upnp/UPnPPlayer.cpp b/xbmc/network/upnp/UPnPPlayer.cpp index 5a73d41514d4b..c5912032d1413 100644 --- a/xbmc/network/upnp/UPnPPlayer.cpp +++ b/xbmc/network/upnp/UPnPPlayer.cpp @@ -262,8 +262,6 @@ int CUPnPPlayer::PlayFile(const CFileItem& file, const CPlayerOptions& options, m_delegate->m_trainfo.cur_transport_state != "STOPPED") { timeout.Set(timeout.GetInitialTimeoutValue()); - /* dlna specifies that a return code of 705 should be returned - * if TRANSPORT_STATE is not STOPPED or NO_MEDIA_PRESENT */ NPT_CHECK_LABEL_SEVERE(m_control->Stop(m_delegate->m_device , m_delegate->m_instance , m_delegate), failed);