Skip to content

Commit

Permalink
Merge branch 'master' of github.com:MythTV/mythtv
Browse files Browse the repository at this point in the history
  • Loading branch information
cpinkham committed Mar 30, 2011
2 parents 3e4b37e + 34623a0 commit 40aecb4
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 84 deletions.
81 changes: 32 additions & 49 deletions mythtv/libs/libmythupnp/mythxmlclient.cpp
Expand Up @@ -63,62 +63,40 @@ UPnPResultCode MythXMLClient::GetConnectionInfo( const QString &sPin, DatabasePa

list.insert( "Pin", sPin );

if (SendSOAPRequest( "GetConnectionInfo", list, nErrCode, sErrDesc, m_bInQtThread ))
{
QString sXml = "<Info>" + list[ "Info" ] + "</Info>";

sMsg = sErrDesc;

QDomDocument doc;

if ( !doc.setContent( sXml, false, &sErrDesc, &nErrCode ))
{
sMsg = QObject::tr("Error Requesting Connection Info");

VERBOSE( VB_UPNP, QString( "Error Requesting Connection Info : (%1) - %2" )
.arg( nErrCode )
.arg( sErrDesc ) );
QDomDocument xmlResults = SendSOAPRequest( "GetConnectionInfo", list, nErrCode, sErrDesc, m_bInQtThread );

return UPnPResult_ActionFailed;
}
// --------------------------------------------------------------
// Is this a valid response?
// --------------------------------------------------------------

// --------------------------------------------------------------
// Is this a valid response?
// --------------------------------------------------------------
QDomNode oNode = xmlResults.namedItem( "GetConnectionInfoResult" );

QDomNode infoNode = doc.namedItem( "Info" );

if (!infoNode.isNull())
{
QDomNode dbNode = infoNode.namedItem( "Database" );

pParams->dbHostName = GetNodeValue( dbNode, "Host" , QString( ));
pParams->dbPort = GetNodeValue( dbNode, "Port" , 0 );
pParams->dbUserName = GetNodeValue( dbNode, "UserName" , QString( ));
pParams->dbPassword = GetNodeValue( dbNode, "Password" , QString( ));
pParams->dbName = GetNodeValue( dbNode, "Name" , QString( ));
pParams->dbType = GetNodeValue( dbNode, "Type" , QString( ));
if (!oNode.isNull())
{
QDomNode dbNode = oNode.namedItem( "Database" );

QDomNode wolNode = infoNode.namedItem( "WOL" );
pParams->dbHostName = GetNodeValue( dbNode, "Host" , QString( ));
pParams->dbPort = GetNodeValue( dbNode, "Port" , 0 );
pParams->dbUserName = GetNodeValue( dbNode, "UserName" , QString( ));
pParams->dbPassword = GetNodeValue( dbNode, "Password" , QString( ));
pParams->dbName = GetNodeValue( dbNode, "Name" , QString( ));
pParams->dbType = GetNodeValue( dbNode, "Type" , QString( ));

pParams->wolEnabled = GetNodeValue( wolNode, "Enabled" , false );
pParams->wolReconnect = GetNodeValue( wolNode, "Reconnect", 0 );
pParams->wolRetry = GetNodeValue( wolNode, "Retry" , 0 );
pParams->wolCommand = GetNodeValue( wolNode, "Command" , QString( ));
QDomNode wolNode = oNode.namedItem( "WOL" );

return UPnPResult_Success;
}
else
{
if (sMsg.isEmpty())
sMsg = QObject::tr("Unexpected Response");
pParams->wolEnabled = GetNodeValue( wolNode, "Enabled" , false );
pParams->wolReconnect = GetNodeValue( wolNode, "Reconnect", 0 );
pParams->wolRetry = GetNodeValue( wolNode, "Retry" , 0 );
pParams->wolCommand = GetNodeValue( wolNode, "Command" , QString( ));

VERBOSE( VB_IMPORTANT, QString( "MythXMLClient::GetConnectionInfo Failed : Unexpected Response - %1" )
.arg( sXml ));
}
return UPnPResult_Success;
}
else
{

nErrCode = GetNodeValue( xmlResults, "Fault/detail/UPnPResult/errorCode" , 500 );
sErrDesc = GetNodeValue( xmlResults, "Fault/detail/UPnPResult/errorDescription", QString( "Unknown" ));

sMsg = sErrDesc;

if (sMsg.isEmpty())
Expand All @@ -129,9 +107,14 @@ UPnPResultCode MythXMLClient::GetConnectionInfo( const QString &sPin, DatabasePa
.arg( sErrDesc ));
}

if (UPnPResult_HumanInterventionRequired == nErrCode
|| UPnPResult_ActionNotAuthorized == nErrCode)
return (UPnPResultCode)nErrCode;
if (( nErrCode == UPnPResult_HumanInterventionRequired ) ||
( nErrCode == UPnPResult_ActionNotAuthorized ) ||
( nErrCode == 501 ))
{
// Service calls no longer return UPnPResult codes,
// convert standard 501 to UPnPResult code for now.
return UPnPResult_ActionNotAuthorized;
}

return UPnPResult_ActionFailed;
}
49 changes: 19 additions & 30 deletions mythtv/libs/libmythupnp/soapclient.cpp
Expand Up @@ -149,11 +149,11 @@ QString SOAPClient::GetNodeValue( QDomNode &node, const QString &sName, const QS
//
/////////////////////////////////////////////////////////////////////////////

bool SOAPClient::SendSOAPRequest( const QString &sMethod,
QStringMap &list,
int &nErrCode,
QString &sErrDesc,
bool bInQtThread )
QDomDocument SOAPClient::SendSOAPRequest( const QString &sMethod,
QStringMap &list,
int &nErrCode,
QString &sErrDesc,
bool bInQtThread )
{
QUrl url( m_url );

Expand Down Expand Up @@ -222,14 +222,15 @@ bool SOAPClient::SendSOAPRequest( const QString &sMethod,

list.clear();

QDomDocument xmlResult;
QDomDocument doc;

if ( !doc.setContent( sXml, true, &sErrDesc, &nErrCode ))
{
VERBOSE( VB_UPNP, QString( "MythXMLClient::SendSOAPRequest( %1 ) - Invalid response from %2" )
.arg( sMethod )
.arg( url.toString() ));
return false;
return QDomDocument();
}

// --------------------------------------------------------------
Expand All @@ -243,39 +244,27 @@ bool SOAPClient::SendSOAPRequest( const QString &sMethod,
{
QDomNode oMethod = oNodeList.item(0);

if (!oMethod.isNull())
{
// Create copy of oMethod that can be used with xmlResult.

for ( QDomNode oNode = oMethod.firstChild(); !oNode.isNull();
oNode = oNode.nextSibling() )
{
QDomElement e = oNode.toElement();
oMethod = xmlResult.importNode( oMethod.firstChild(), true );

if (!e.isNull())
{
QString sName = e.tagName();
QString sValue = "";

QDomText oText = oNode.firstChild().toText();

if (!oText.isNull())
sValue = oText.nodeValue();
// importNode does not attach the new nodes to the document,
// do it here.

list.insert(QUrl::fromPercentEncoding(sName.toUtf8()),
QUrl::fromPercentEncoding(sValue.toUtf8()));
}
}
}
xmlResult.appendChild( oMethod );

return true;
return xmlResult;
}

// --------------------------------------------------------------
// Must be a fault... parse it to return reason
// --------------------------------------------------------------

nErrCode = GetNodeValue( doc, "Envelope/Body/Fault/detail/UPnPResult/errorCode" , 500 );
sErrDesc = GetNodeValue( doc, "Envelope/Body/Fault/detail/UPnPResult/errorDescription", QString( "Unknown" ));
QDomNode oNode = FindNode( "Envelope/Body/Fault", doc );

oNode = xmlResult.importNode( oNode, true );
xmlResult.appendChild( oNode );

return false;
return xmlResult;
}

10 changes: 5 additions & 5 deletions mythtv/libs/libmythupnp/soapclient.h
Expand Up @@ -63,11 +63,11 @@ class SOAPClient
QDomNode FindNode( const QString &sName , QDomNode &baseNode );
QDomNode FindNode( QStringList &sParts, QDomNode &curNode );

bool SendSOAPRequest( const QString &sMethod,
QStringMap &list,
int &nErrCode,
QString &sErrDesc,
bool bInQtThread );
QDomDocument SendSOAPRequest( const QString &sMethod,
QStringMap &list,
int &nErrCode,
QString &sErrDesc,
bool bInQtThread );
};

#endif
Expand Down

0 comments on commit 40aecb4

Please sign in to comment.