Files
YACReader
YACReaderLibrary
db
server
controllers
lib
documentcache.h
main.cpp
requestmapper.cpp
requestmapper.h
server.pri
startup.cpp
startup.h
static.cpp
static.h
YACReaderLibrary.icns
YACReaderLibrary.pro
add_library_dialog.cpp
add_library_dialog.h
bundle_creator.cpp
bundle_creator.h
comic_flow.cpp
comic_flow.h
comic_flow_widget.cpp
comic_flow_widget.h
create_library_dialog.cpp
create_library_dialog.h
export_comics_info_dialog.cpp
export_comics_info_dialog.h
export_library_dialog.cpp
export_library_dialog.h
files.qrc
icon.ico
icon.rc
icon2.ico
icon3.ico
images.qrc
import_comics_info_dialog.cpp
import_comics_info_dialog.h
import_library_dialog.cpp
import_library_dialog.h
library_creator.cpp
library_creator.h
library_window.cpp
library_window.h
main.cpp
options_dialog.cpp
options_dialog.h
package_manager.cpp
package_manager.h
properties_dialog.cpp
properties_dialog.h
rename_library_dialog.cpp
rename_library_dialog.h
server_config_dialog.cpp
server_config_dialog.h
yacreaderlibrary_es.qm
yacreaderlibrary_es.ts
common
dependencies
files
images
release
COPYING.txt
README.txt
compileOSX.sh
compileX11.sh
generateVS2010Projects.bat
releaseOSX.sh
yacreader/YACReaderLibrary/server/requestmapper.cpp
Luis Ángel San Martín 4cee4117f8 Modificaci?n del SERVIDOR que mejora la estabilidad del sistema.
Se ha eliminado el soporte del servidor para conexiones persistentes.
A?adido soporte para buscar aleatoriamente un puerto v?lido, si el seleccionado por el usuario no esta disponible
2012-11-04 21:02:15 +01:00

94 lines
3.0 KiB
C++

/**
@file
@author Stefan Frings
*/
#include "requestmapper.h"
#include "static.h"
#include "staticfilecontroller.h"
#include "controllers/dumpcontroller.h"
#include "controllers/templatecontroller.h"
#include "controllers/formcontroller.h"
#include "controllers/fileuploadcontroller.h"
#include "controllers/sessioncontroller.h"
#include "controllers/librariescontroller.h"
#include "controllers/foldercontroller.h"
#include "controllers/covercontroller.h"
#include "controllers/comiccontroller.h"
#include "controllers/folderinfocontroller.h"
#include "controllers/pagecontroller.h"
#include "controllers/errorcontroller.h"
#include "library_window.h"
extern LibraryWindow * mw;
RequestMapper::RequestMapper(QObject* parent)
:HttpRequestHandler(parent) {}
void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
QByteArray path=request.getPath();
qDebug("RequestMapper: path=%s",path.data());
QRegExp folder("/library/.+/folder/[0-9]+/?");//get comic content
QRegExp folderInfo("/library/.+/folder/[0-9]+/info/?"); //get folder info
QRegExp comic("/library/.+/comic/[0-9]+/?"); //get comic info
QRegExp comicOpen("/library/.+/comic/[0-9]+/open/?"); //the server will open for reading the comic
QRegExp comicClose("/library/.+/comic/[0-9]+/close/?"); //the server will close the comic and free memory
QRegExp cover("/library/.+/cover/[0-9a-f]+.jpg"); //get comic cover (navigation)
QRegExp comicPage("/library/.+/comic/[0-9]+/page/[0-9]+/?"); //get comic page
QRegExp library("/library/([^/.]+)/.+"); //permite verificar que la biblioteca solicitada existe
path = QUrl::fromPercentEncoding(path).toLatin1();
//primera petición, se ha hecho un post, se sirven las bibliotecas si la seguridad mediante login no está habilitada
if(path == "/")
{
LibrariesController().service(request, response);
}
else
{
//se comprueba que la sesión sea la correcta con el fin de evitar accesos no autorizados
HttpSession session=Static::sessionStore->getSession(request,response,false);
if(!session.isNull() && session.contains("ySession"))
{
if(library.indexIn(path)!=-1 && mw->getLibraries().contains(library.cap(1)) )
{
//listar el contenido del folder
if(folder.exactMatch(path))
{
FolderController().service(request, response);
}
else if (folderInfo.exactMatch(path))
{
FolderInfoController().service(request, response);
}
else if(cover.exactMatch(path))
{
CoverController().service(request, response);
}
else if(comic.exactMatch(path))
{
ComicController().service(request, response);
}
else if(comicPage.exactMatch(path))
{
PageController().service(request,response);
}
}
else
{
//response.writeText(library.cap(1));
Static::staticFileController->service(request, response);
}
}
else //acceso no autorizado, redirección
{
ErrorController(300).service(request,response);
}
}
}