void tryTakeSocket() { if(!canTake()) return; ZWebSocket *sock = zhttpIn->takeNextSocket(); if(!sock) return; QUrl requestUri = sock->requestUri(); log_info("IN ws id=%s, %s", sock->rid().second.data(), requestUri.toEncoded().data()); bool isSecure = (requestUri.scheme() == "wss"); QString host = requestUri.host(); // look up the route DomainMap::Entry route = domainMap->entry(DomainMap::WebSocket, isSecure, host, requestUri.encodedPath()); // before we do anything else, see if this is a sockjs request if(!route.isNull() && !route.sockJsPath.isEmpty() && requestUri.encodedPath().startsWith(route.sockJsPath)) { sockJsManager->giveSocket(sock, route.sockJsPath.length(), route.sockJsAsPath, route); return; } log_debug("creating wsproxysession for zws id=%s", sock->rid().second.data()); doProxySocket(sock, route); }
void LocalApp::getUrl( QUrl oldUrl , QUrl &newUrl){ QString scriptName; #ifndef USE_QT5 #ifdef WINDOWS scriptName = home+"\\" + oldUrl.encodedPath(); #else scriptName = home+"/" + oldUrl.encodedPath(); #endif //scriptName = tmpUrl.toString(FULLPATH); #else #ifdef WINDOWS scriptName = home+"\\" + oldUrl.path(); #else scriptName = home+"/" + oldUrl.path(); #endif //scriptName = tmpUrl.toDisplayString(QUrl::FullyDecoded); //scriptName.remove(0,6); #endif if( QDir(scriptName).exists() ) { #ifdef WINDOWS if( scriptName.at(scriptName.size()-1) == '/') #else if( scriptName.at(scriptName.size()-1) == '\\') #endif scriptName = scriptName + "index.py"; else #ifdef WINDOWS scriptName = scriptName + "\\index.py"; #else scriptName = scriptName + "/index.py"; #endif } if ( !getScript(scriptName) ){ QFileInfo qFileInfo(scriptName); if ( qFileInfo.fileName() == "index.py" ){ scriptName = qFileInfo.dir().absolutePath() + "/index.html"; } } #ifndef USE_QT5 ERR<<"INFO: LocalApp::getUrl(): Encoded Path: "<<oldUrl.encodedPath()<<", "<<scriptName<<endl; newUrl.setPath(scriptName); #else ERR<<"INFO: LocalApp::getUrl(): Path: "<<oldUrl.path()<<", "<<scriptName<<endl; newUrl.setPath(scriptName); #endif }
QUrl Mirrors::randomMirror(const QList<QUrl> & mirrors, bool addkey, const QString & postfix, bool api) { static int i = 0; if (mirrors.isEmpty()) return QUrl(); i++; i %= mirrors.size(); QUrl m = mirrors.at(i); QString path = m.path(); if (api) path += "/api/"; if (addkey) path += key() + "/"; if (!postfix.isEmpty()) path += postfix; m.setPath(path); #ifdef Q_WS_WIN qWarning() << m.path() << m.encodedPath(); #endif return m; }
QByteArray QUrlProto::encodedPath() const { QUrl *item = qscriptvalue_cast<QUrl*>(thisObject()); if (item) return item->encodedPath(); return QByteArray(); }
void processQuery() { QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender()); QByteArray requestData = socket->readAll(); int pos = requestData.indexOf("\r\n"); QByteArray requestLine = requestData.left(pos); requestData.remove(0, pos + 2); QList<QByteArray> entries = requestLine.split(' '); QByteArray method = entries.value(0); QByteArray address = entries.value(1); QByteArray version = entries.value(2); QUrl url = QUrl::fromEncoded(address); if (!url.isValid()) { qWarning() << "Invalid URL:" << url; socket->disconnectFromHost(); return; } QString host = url.host(); int port = (url.port() < 0) ? 80 : url.port(); QByteArray req = url.encodedPath(); if (url.hasQuery()) req.append('?').append(url.encodedQuery()); requestLine = method + " " + req + " " + version + "\r\n"; requestData.prepend(requestLine); QString key = host + ':' + QString::number(port); QTcpSocket *proxySocket = socket->findChild<QTcpSocket*>(key); if (proxySocket) { proxySocket->setObjectName(key); proxySocket->setProperty("url", url); proxySocket->setProperty("requestData", requestData); proxySocket->write(requestData); } else { proxySocket = new QTcpSocket(socket); proxySocket->setObjectName(key); proxySocket->setProperty("url", url); proxySocket->setProperty("requestData", requestData); connect(proxySocket, SIGNAL(connected()), this, SLOT(sendRequest())); connect(proxySocket, SIGNAL(readyRead()), this, SLOT(transferData())); connect(proxySocket, SIGNAL(disconnected()), this, SLOT(closeConnection())); connect(proxySocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(closeConnection())); proxySocket->connectToHost(host, port); } }
QNetworkReply* ownCloudInfo::mkdirRequest( const QString& dir ) { qDebug() << "OCInfo Making dir " << dir; MirallConfigFile cfgFile( _configHandle ); QUrl url = QUrl( cfgFile.ownCloudUrl( _connection, true ) + dir ); QHttp::ConnectionMode conMode = QHttp::ConnectionModeHttp; if (url.scheme() == "https") conMode = QHttp::ConnectionModeHttps; QHttp* qhttp = new QHttp(QString(url.encodedHost()), conMode, 0, this); connect(qhttp, SIGNAL(requestStarted(int)), this,SLOT(qhttpRequestStarted(int))); connect(qhttp, SIGNAL(requestFinished(int, bool)), this,SLOT(qhttpRequestFinished(int,bool))); connect(qhttp, SIGNAL(responseHeaderReceived(QHttpResponseHeader)), this, SLOT(qhttpResponseHeaderReceived(QHttpResponseHeader))); //connect(qhttp, SIGNAL(authenticationRequired(QString,quint16,QAuthenticator*)), this, SLOT(qhttpAuthenticationRequired(QString,quint16,QAuthenticator*))); QHttpRequestHeader header("MKCOL", QString(url.encodedPath()), 1,1); /* header */ header.setValue("Host", QString(url.encodedHost())); header.setValue("User-Agent", QString("mirall-%1").arg(MIRALL_STRINGIFY(MIRALL_VERSION)).toAscii() ); header.setValue("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); header.setValue("Accept-Language", "it,de-de;q=0.8,it-it;q=0.6,en-us;q=0.4,en;q=0.2"); header.setValue("Connection", "keep-alive"); header.setContentType("application/x-www-form-urlencoded"); //important header.setContentLength(0); QString con = _configHandle; if( con.isEmpty() ) con = DEFAULT_CONNECTION; if( _credentials.contains(con)) { oCICredentials creds = _credentials.value(con); QString concatenated = creds.user + QLatin1Char(':') + creds.passwd; const QString b(QLatin1String("Basic ")); QByteArray data = b.toLocal8Bit() + concatenated.toLocal8Bit().toBase64(); header.setValue("Authorization", data); qhttp->setUser( creds.user, creds.passwd ); } int david = qhttp->request(header,0,0); //////////////// connect(davinfo, SIGNAL(dataSendProgress(int,int)), this, SLOT(SendStatus(int, int))); /////////////////connect(davinfo, SIGNAL(done(bool)), this,SLOT(DavWake(bool))); //connect(_http, SIGNAL(requestFinished(int, bool)), this,SLOT(qhttpRequestFinished(int,bool))); ///////////connect(davinfo, SIGNAL(responseHeaderReceived(constQHttpResponseHeader &)), this, SLOT(RegisterBackHeader(constQHttpResponseHeader &))); return NULL; }
void startHandleRequest(ZhttpRequest *req, int basePathStart, const QByteArray &asPath, const DomainMap::Entry &route) { Session *s = new Session(this); s->req = req; QUrl uri = req->requestUri(); QByteArray encPath = uri.encodedPath(); s->path = encPath.mid(basePathStart); QList<QByteArray> parts = s->path.split('/'); if(!parts.isEmpty() && parts.last().startsWith("jsonp")) { if(uri.hasQueryItem("callback")) { s->jsonpCallback = uri.queryItemValue("callback").toUtf8(); uri.removeAllQueryItems("callback"); } else if(uri.hasQueryItem("c")) { s->jsonpCallback = uri.queryItemValue("c").toUtf8(); uri.removeAllQueryItems("c"); } } s->asUri = uri; s->asUri.setScheme((s->asUri.scheme() == "https") ? "wss" : "ws"); if(!asPath.isEmpty()) s->asUri.setEncodedPath(asPath); else s->asUri.setEncodedPath(encPath.mid(0, basePathStart)); s->route = route; connect(req, SIGNAL(readyRead()), SLOT(req_readyRead())); connect(req, SIGNAL(bytesWritten(int)), SLOT(req_bytesWritten(int))); connect(req, SIGNAL(error()), SLOT(req_error())); sessions += s; sessionsByRequest.insert(s->req, s); processRequestInput(s); }
void QmitkDiffusionImagingAppIntroPart::DelegateMeTo(const QUrl& showMeNext) { QString scheme = showMeNext.scheme(); #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) QByteArray urlHostname = showMeNext.encodedHost(); QByteArray urlPath = showMeNext.encodedPath(); QByteArray dataset = showMeNext.encodedQueryItemValue("dataset"); QByteArray clear = showMeNext.encodedQueryItemValue("clear"); #else QByteArray urlHostname = QUrl::toAce(showMeNext.host()); QByteArray urlPath = showMeNext.path().toLatin1(); QUrlQuery query(showMeNext); QByteArray dataset = query.queryItemValue("dataset").toLatin1(); QByteArray clear = query.queryItemValue("clear").toLatin1();//showMeNext.encodedQueryItemValue("clear"); #endif if (scheme.isEmpty()) MITK_INFO << " empty scheme of the to be delegated link" ; // if the scheme is set to mitk, it is to be tested which action should be applied if (scheme.contains(QString("mitk")) ) { if(urlPath.isEmpty() ) MITK_INFO << " mitk path is empty " ; // searching for the perspective keyword within the host name if(urlHostname.contains(QByteArray("perspectives")) ) { // the simplified method removes every whitespace // ( whitespace means any character for which the standard C++ isspace() method returns true) urlPath = urlPath.simplified(); QString perspectiveId(urlPath.data()); perspectiveId.replace(QString("/"), QString("") ); // is working fine as long as the perspective id is valid, if not the application crashes GetIntroSite()->GetWorkbenchWindow()->GetWorkbench()->ShowPerspective(perspectiveId, GetIntroSite()->GetWorkbenchWindow() ); // search the Workbench for opened StdMultiWidgets to ensure the focus does not stay on the welcome screen and is switched to // an StdMultiWidget if one available ctkPluginContext* context = QmitkDiffusionApplicationPlugin::GetDefault()->GetPluginContext(); ctkServiceReference ref = context->getServiceReference<mitk::IDataStorageService>(); if (ref) { mitk::IDataStorageService* service = context->getService<mitk::IDataStorageService>(ref); berry::IEditorInput::Pointer editorInput( new mitk::DataStorageEditorInput( service->GetActiveDataStorage() )); // the solution is not clean, but the dependency to the StdMultiWidget was removed in order to fix a crash problem // as described in Bug #11715 // This is the correct way : use the static string ID variable // berry::IEditorPart::Pointer editor = GetIntroSite()->GetPage()->FindEditors( editorInput, QmitkStdMultiWidgetEditor::EDITOR_ID ); // QuickFix: we use the same string for an local variable const QString stdEditorID = "org.mitk.editors.stdmultiwidget"; // search for opened StdMultiWidgetEditors QList<berry::IEditorReference::Pointer> editorList = GetIntroSite()->GetPage()->FindEditors( editorInput, stdEditorID, 1 ); // if an StdMultiWidgetEditor open was found, give focus to it if(!editorList.isEmpty()) { GetIntroSite()->GetPage()->Activate( editorList[0]->GetPart(true) ); } } } } // if the scheme is set to http, by default no action is performed, if an external webpage needs to be // shown it should be implemented below else if (scheme.contains(QString("http")) ) { QDesktopServices::openUrl(showMeNext); // m_view->load( ) ; } else if(scheme.contains("qrc")) { m_view->load(showMeNext); } }
/*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*/ void WebProxy::processQuery() { QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender()); QByteArray requestData = socket->readAll(); int pos = requestData.indexOf("\r\n"); QByteArray requestLine = requestData.left(pos); requestData.remove(0, pos + 2); QList<QByteArray> entries = requestLine.split(' '); QByteArray method = entries.value(0); QByteArray address = entries.value(1); QByteArray version = entries.value(2); qDebug( ) << __FILE__ << __FUNCTION__ << "Processing " << address; QUrl url = QUrl::fromEncoded(address); if (!url.isValid()) { //qWarning() << "Invalid URL:" << url; socket->disconnectFromHost(); return; } //Act as server is request are for local server if ((url.host() == "") && (QFile(address).exists())) { //qDebug( ) << __FILE__ << __FUNCTION__ << "Sending " << address; QByteArray header; QTextStream headerStream(&header, QIODevice::WriteOnly); //Construct response header headerStream << "HTTP/1.0 200 OK" << endl; headerStream << "Server: gpsbook/" << qApp->applicationVersion() << endl; headerStream << "Date: " << QDateTime::currentDateTime().toUTC().toString("ddd, dd MMM yyyy hh:mm:ss") << "GMT" << endl; headerStream << "Content-Type: text/html; charset=utf-8" << endl; headerStream << "Connection: close" << endl; headerStream << "Pragma: no-cache" << endl; headerStream << "Cache-Control: no-cache" << endl; QFile file(address); if (!file.open(QFile::ReadOnly | QFile::Text)) { qWarning() << "Cannot open:" << address; socket->disconnectFromHost(); return ; } QByteArray content; QTextStream contentStream(&content, QIODevice::WriteOnly); while (!file.atEnd()) { contentStream << file.readLine() << endl; } headerStream << "Content-Length:" << content.size() << endl; headerStream << "" << endl; socket->write(header); socket->write(content); //qDebug( ) << __FILE__ << __FUNCTION__ << "File sent (" << content.size() << "bytes) :-)"; socket->disconnectFromHost(); return; } #if ( QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) ) // Some finction of QUrl have been deprecated // This code is require for the internet browser and should be reviewed. #else #ifdef Q_OS_LINUX //Remove advert to speedup development ;-) if (url.toString().contains("googlesyndication") || url.toString().contains("yieldmanager.com")) { socket->disconnectFromHost(); return; } #endif qDebug( ) << __FILE__ << __FUNCTION__ << "URL: " << url.toString(); QString host = url.host(); int port = (url.port() < 0) ? 80 : url.port(); QByteArray req = url.encodedPath(); if (url.hasQuery()) req.append('?').append(url.encodedQuery()); requestLine = method + " " + req + " " + version + "\r\n"; requestData.prepend(requestLine); QString key = host + ':' + QString::number(port); QTcpSocket *proxySocket = socket->findChild<QTcpSocket*>(key); if (proxySocket) { proxySocket->setObjectName(key); proxySocket->setProperty("url", url); proxySocket->setProperty("requestData", requestData); proxySocket->write(requestData); } else { proxySocket = new QTcpSocket(socket); proxySocket->setObjectName(key); proxySocket->setProperty("url", url); proxySocket->setProperty("requestData", requestData); connect(proxySocket, SIGNAL(connected()), this, SLOT(sendRequest())); connect(proxySocket, SIGNAL(readyRead()), this, SLOT(transferData())); connect(proxySocket, SIGNAL(disconnected()), this, SLOT(closeConnection())); connect(proxySocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(closeConnection())); proxySocket->connectToHost(host, port); } #endif } //WebProxy::processQuery
void QmitkMitkWorkbenchIntroPart::DelegateMeTo(const QUrl& showMeNext) { QString scheme = showMeNext.scheme(); #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) QByteArray urlHostname = showMeNext.encodedHost(); QByteArray urlPath = showMeNext.encodedPath(); QByteArray dataset = showMeNext.encodedQueryItemValue("dataset"); QByteArray clear = showMeNext.encodedQueryItemValue("clear"); #else QByteArray urlHostname = QUrl::toAce(showMeNext.host()); QByteArray urlPath = showMeNext.path().toLatin1(); QUrlQuery query(showMeNext); QByteArray dataset = query.queryItemValue("dataset").toLatin1(); QByteArray clear = query.queryItemValue("clear").toLatin1();//showMeNext.encodedQueryItemValue("clear"); #endif if (scheme.isEmpty()) MITK_INFO << " empty scheme of the to be delegated link" ; // if the scheme is set to mitk, it is to be tested which action should be applied if (scheme.contains(QString("mitk")) ) { if(urlPath.isEmpty() ) MITK_INFO << " mitk path is empty " ; // searching for the perspective keyword within the host name if(urlHostname.contains(QByteArray("perspectives")) ) { // the simplified method removes every whitespace // ( whitespace means any character for which the standard C++ isspace() method returns true) urlPath = urlPath.simplified(); QString tmpPerspectiveId(urlPath.data()); tmpPerspectiveId.replace(QString("/"), QString("") ); QString perspectiveId = tmpPerspectiveId; // is working fine as long as the perspective id is valid, if not the application crashes GetIntroSite()->GetWorkbenchWindow()->GetWorkbench()->ShowPerspective(perspectiveId, GetIntroSite()->GetWorkbenchWindow() ); // search the Workbench for opened StdMultiWidgets to ensure the focus does not stay on the welcome screen and is switched to // a render window editor if one available ctkPluginContext* context = QmitkExtApplicationPlugin::GetDefault()->GetPluginContext(); mitk::IDataStorageService* service = NULL; ctkServiceReference serviceRef = context->getServiceReference<mitk::IDataStorageService>(); if (serviceRef) service = context->getService<mitk::IDataStorageService>(serviceRef); if (service) { berry::IEditorInput::Pointer editorInput(new mitk::DataStorageEditorInput( service->GetActiveDataStorage() )); // search for opened StdMultiWidgetEditors berry::IEditorPart::Pointer editorPart = GetIntroSite()->GetPage()->FindEditor( editorInput ); // if an StdMultiWidgetEditor open was found, give focus to it if(editorPart) { GetIntroSite()->GetPage()->Activate( editorPart ); } } } } // if the scheme is set to http, by default no action is performed, if an external webpage needs to be // shown it should be implemented below else if (scheme.contains(QString("http")) ) { QDesktopServices::openUrl(showMeNext); // m_view->load( ) ; } else if(scheme.contains("qrc")) { m_view->load(showMeNext); } }