void CWizXmlRpcServer::on_replyFinished() { QNetworkReply* reply = qobject_cast<QNetworkReply *>(sender()); if (reply->error()) { reply->deleteLater(); return; } QString strContentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); if (strContentType != "text/xml;charset=UTF-8") { processError(errorContentType, 0, "Invalid content type of response"); reply->deleteLater(); return; } m_replyData = reply->readAll(); #ifdef WIZNOTE_DEBUG_XMLRPC QString requestFile = QDir::tempPath() + "/WizNote/" + m_strMethodName; QString replyFile = QDir::tempPath() + "/WizNote/on_" + m_strMethodName; WizSaveUnicodeTextToUtf8File(requestFile, QString(m_requestData)); WizSaveUnicodeTextToUtf8File(replyFile, QString(m_replyData)); #endif QString strXml = QString::fromUtf8(m_replyData.constData()); CWizXMLDocument doc; if (!doc.LoadXML(strXml)) { processError(errorXmlFormat, 0, "Invalid xml"); reply->deleteLater(); return; } CWizXmlRpcValue* pRet = NULL; if (!WizXmlRpcResultFromXml(doc, &pRet)) { processError(errorXmlRpcFormat, 0, "Can not parse xmlrpc"); reply->deleteLater(); return; } Q_ASSERT(pRet); if (CWizXmlRpcFaultValue* pFault = dynamic_cast<CWizXmlRpcFaultValue *>(pRet)) { processError(errorXmlRpcFault, pFault->GetFaultCode(), pFault->GetFaultString()); reply->deleteLater(); delete pRet; return; } processReturn(*pRet); }
void WizXmlRpcServer::on_replyFinished() { QNetworkReply* reply = qobject_cast<QNetworkReply *>(sender()); if (reply->error()) { reply->deleteLater(); return; } QString strContentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); if (strContentType != "text/xml;charset=UTF-8") { processError(errorContentType, 0, "Invalid content type of response"); reply->deleteLater(); return; } QString strXml = QString::fromUtf8(reply->readAll().constData()); WizXMLDocument doc; if (!doc.loadXML(strXml)) { processError(errorXmlFormat, 0, "Invalid xml"); reply->deleteLater(); return; } WizXmlRpcValue* pRet = NULL; if (!WizXmlRpcResultFromXml(doc, &pRet)) { processError(errorXmlRpcFormat, 0, "Can not parse xmlrpc"); reply->deleteLater(); return; } Q_ASSERT(pRet); if (WizXmlRpcFaultValue* pFault = dynamic_cast<WizXmlRpcFaultValue *>(pRet)) { processError(errorXmlRpcFault, pFault->getFaultCode(), pFault->getFaultString()); } processReturn(*pRet); reply->deleteLater(); }
bool WizXmlRpcServerBase::xmlRpcCall(const QString& strMethodName, WizXmlRpcResult& result, WizXmlRpcValue* pParam1, WizXmlRpcValue* pParam2 /*= NULL*/, WizXmlRpcValue* pParam3 /*= NULL*/, WizXmlRpcValue* pParam4 /*= NULL*/) { WizXmlRpcRequest data(strMethodName); data.addParam(pParam1); if (pParam2) { data.addParam(pParam2); } if (pParam3) { data.addParam(pParam3); } if (pParam4) { data.addParam(pParam4); } // QUrl url(m_strUrl + "?methodName=" + strMethodName); QNetworkRequest request; request.setUrl(url); request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/xml")); request.setHeader(QNetworkRequest::UserAgentHeader, QVariant(QString("WizQT_") + WIZ_CLIENT_VERSION)); int nCounter = 0; while (true) { QNetworkReply* reply = m_network->post(request, data.toData()); WizXmlRpcEventLoop loop(reply); // qDebug() << "[Sync]Start a xml rpc event loop"; loop.exec(); // qDebug() << "[Sync]Xml rpc event loop finished"; // if (loop.error() && nCounter == 0) { nCounter ++; continue; } // if (loop.error()) { m_nLastErrorCode = loop.error(); m_strLastErrorMessage = loop.errorString(); return false; } // QString strXml = QString::fromUtf8(loop.result().constData()); // WizXMLDocument doc; if (!doc.loadXML(strXml)) { m_nLastErrorCode = -1; m_strLastErrorMessage = "Invalid xml"; return false; } WizXmlRpcValue* pRet = NULL; if (!WizXmlRpcResultFromXml(doc, &pRet)) { m_nLastErrorCode = -1; m_strLastErrorMessage = "Can not parse xmlrpc"; return false; } Q_ASSERT(pRet); if (WizXmlRpcFaultValue* pFault = dynamic_cast<WizXmlRpcFaultValue *>(pRet)) { m_nLastErrorCode = pFault->getFaultCode(); m_strLastErrorMessage = pFault->getFaultString(); TOLOG2("XmlRpcCall failed : %1, %2", QString::number(m_nLastErrorCode), m_strLastErrorMessage); return false; } // result.setResult(strMethodName, pRet); break; } // return true; }
bool CWizXmlRpcServerBase::xmlRpcCall(const QString& strMethodName, CWizXmlRpcResult& result, CWizXmlRpcValue* pParam1, CWizXmlRpcValue* pParam2 /*= NULL*/, CWizXmlRpcValue* pParam3 /*= NULL*/, CWizXmlRpcValue* pParam4 /*= NULL*/) { CWizXmlRpcRequest data(strMethodName); data.addParam(pParam1); if (pParam2) { data.addParam(pParam2); } if (pParam3) { data.addParam(pParam3); } if (pParam4) { data.addParam(pParam4); } QNetworkRequest request; request.setUrl(QUrl(m_strUrl)); request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/xml")); // QNetworkReply* reply = m_network->post(request, data.toData()); CWizXmlRpcEventLoop loop(reply); loop.exec(); // if (loop.error()) { m_nLastErrorCode = loop.error(); m_strLastErrorMessage = loop.errorString(); return false; } // QString strXml = loop.result(); // CWizXMLDocument doc; if (!doc.LoadXML(strXml)) { m_nLastErrorCode = -1; m_strLastErrorMessage = "Invalid xml"; return false; } CWizXmlRpcValue* pRet = NULL; if (!WizXmlRpcResultFromXml(doc, &pRet)) { m_nLastErrorCode = -1; m_strLastErrorMessage = "Can not parse xmlrpc"; return false; } Q_ASSERT(pRet); if (CWizXmlRpcFaultValue* pFault = dynamic_cast<CWizXmlRpcFaultValue *>(pRet)) { m_nLastErrorCode = pFault->GetFaultCode(); m_strLastErrorMessage = pFault->GetFaultString(); return false; } // result.SetResult(strMethodName, pRet); // return true; }