Library: OSP/Web
Package: Web
Header: Poco/OSP/Web/WebServerDispatcher.h
Description
A WebServerDispatcher is some sort of meta HTTPRequestHandlerFactory. It groups together several other HTTPRequestHandlerFactory instances and distributes requests to them according to the registered request handler extension points (see the WebServerExtensionPoint class).
Inheritance
Direct Base Classes: Poco::OSP::Service
All Base Classes: Poco::OSP::Service, Poco::RefCountedObject
Member Summary
Member Functions: addFilter, addVirtualPath, authService, authorize, cleanPath, findFilter, findResource, formatMessage, getCachedResource, handleRequest, htmlize, isA, listVirtualPaths, logRequest, mapPath, normalizePath, onBundleStopping, removeBundle, removeFilter, removeVirtualPath, sendBadRequest, sendForbidden, sendFound, sendInternalError, sendMethodNotAllowed, sendNotAuthorized, sendNotFound, sendResource, sendResponse, shouldCompressMediaType, threadPool, type, virtualPathMappings
Inherited Functions: duplicate, isA, referenceCount, release, type
Nested Classes
struct PathInfo
struct PathSecurity
Security attributes for a registered path.
struct VirtualPath
A VirtualPath struct is used to specify a path mapping for a bundle.
Types
PathInfoMap
typedef std::map < std::string, PathInfo > PathInfoMap;
PathMap
typedef std::map < std::string, VirtualPath > PathMap;
PatternVec
typedef std::vector < VirtualPath > PatternVec;
RegularExpressionPtr
typedef Poco::SharedPtr < Poco::RegularExpression > RegularExpressionPtr;
RequestHandlerFactoryPtr
typedef Poco::SharedPtr < Poco::Net::HTTPRequestHandlerFactory > RequestHandlerFactoryPtr;
WebFilterFactoryPtr
typedef Poco::SharedPtr < WebFilterFactory > WebFilterFactoryPtr;
WebFilterPtr
typedef Poco::SharedPtr < WebFilter > WebFilterPtr;
Enumerations
SpecializationMode
A bundle that registers a resource mapping or request handler for a certain path can specify whether other bundles can register subdirectories of this directory.
SM_NONE = 0
No one can register subdirectories
SM_OWNER = 1
Only the owner bundle can register subdirectories
SM_ALL = 2
Everyone can register subdirectories
Constructors
WebServerDispatcher
WebServerDispatcher(
BundleContext::Ptr pContext,
MediaTypeMapper::Ptr pMediaTypeMapper,
const std::string & authServiceName,
bool compressResponses,
const std::set < std::string > & compressedMediaTypes,
bool cacheResources = false
);
Creates the WebServerDispatcher.
Destructor
~WebServerDispatcher
virtual ~WebServerDispatcher();
Destroys the WebServerDispatcher.
Member Functions
addFilter
void addFilter(
const std::string & mediaType,
WebFilterFactoryPtr pFilterFactory
);
Adds a filter factory for the given media type.
Throws a Poco::ExistsException if a filter already exists for the given mediaType.
addVirtualPath
void addVirtualPath(
const VirtualPath & virtualPath
);
Adds the given VirtualPath to the path mapping table.
Throws an ExistsException if a mapping for the given path already exists.
handleRequest
void handleRequest(
Poco::Net::HTTPServerRequest & request,
Poco::Net::HTTPServerResponse & response,
bool secure
);
Handles the given request. Secure specifies whether the request has been sent over a secure (HTTPS) connection.
isA
virtual bool isA(
const std::type_info & otherType
) const;
See also: Poco::OSP::Service::isA()
listVirtualPaths
void listVirtualPaths(
PathInfoMap & paths
) const;
Returns a map containing all virtual paths (key) that are not patterns and not marked as hidden, and their descriptions (value).
removeBundle
void removeBundle(
Bundle::ConstPtr pBundle
);
Removes all mappings from the given bundle.
removeFilter
void removeFilter(
const std::string & mediaType
);
Removes the filter for the given mediaType.
removeVirtualPath
void removeVirtualPath(
const std::string & virtualPath
);
Removes a path mapping from the path mapping table.
Throws a NotFoundException if the given path does not exist.
threadPool
Poco::ThreadPool & threadPool();
Returns the thread pool for use by Poco::Net::HTTPServer.
type
virtual const std::type_info & type() const;
See also: Poco::OSP::Service::type()
virtualPathMappings
void virtualPathMappings(
PathMap & mappings
) const;
Returns all path mappings. This member function creates a full copy of the internal path map.
authService
Poco::OSP::Auth::AuthService::Ptr authService() const;
Returns a pointer to the auth service, if it is available, or null otherwise.
authorize
bool authorize(
Poco::Net::HTTPServerRequest & request,
const VirtualPath & vPath,
std::string & username
) const;
Authorizes the request.
cleanPath
static bool cleanPath(
std::string & path
);
Removes unnecessary characters (such as trailing dots) from the path and checks for illegal or dangerous characters.
Returns true if the path is okay, false otherwise.
findFilter
WebFilterPtr findFilter(
const std::string & mediaType
);
Returns a WebFilter instance for the given mediaType, or a null pointer if no WebFilterFactory has been registered for the given mediaType.
findResource
std::istream * findResource(
Bundle::ConstPtr pBundle,
const std::string & base,
const std::string & res,
const std::string & index,
std::string & mediaType,
std::string & resolvedPath,
bool canCache
) const;
Returns a resource stream for the given path, or a null pointer if no matching resource exists.
formatMessage
std::string formatMessage(
const std::string & messageId,
const std::string & arg1 = std::string (),
const std::string & arg2 = std::string ()
);
Reads a message from the bundle.properties resource and replaces placeholders $1 and $2 with arg1 and arg2, respectively.
getCachedResource
std::istream * getCachedResource(
Bundle::ConstPtr pBundle,
const std::string & path,
bool canCache
) const;
Returns a resource stream for the given path, or a null pointer if no matching resource exists. If caching is enabled both globally and for the specific resource, attempts to cache the resource.
htmlize
static std::string htmlize(
const std::string & str
);
Returns a HTML-ized version of the given string.
logRequest
void logRequest(
const Poco::Net::HTTPServerRequest & request,
const Poco::Net::HTTPServerResponse & response,
const std::string & username
);
Logs the HTTP request.
mapPath
const VirtualPath & mapPath(
const std::string & path,
const std::string & method
) const;
Maps a URI to a VirtualPath.
Throws a NotFoundException if no suitable mapping can be found.
normalizePath
static std::string normalizePath(
const std::string & path
);
Creates normalized path for internal storage. The normalized path always starts and ends with a slash.
onBundleStopping
void onBundleStopping(
const void * pSender,
BundleEvent & ev
);
When a bundle is stopped, all of its request handlers and mappings are automatically disabled.
sendBadRequest
void sendBadRequest(
Poco::Net::HTTPServerRequest & request,
const std::string & message
);
Sends a 404 Not Found error response.
sendForbidden
void sendForbidden(
Poco::Net::HTTPServerRequest & request,
const std::string & path
);
Sends a 403 Forbidden error response.
sendFound
void sendFound(
Poco::Net::HTTPServerRequest & request,
const std::string & path
);
Sends a 302 Found response.
sendInternalError
void sendInternalError(
Poco::Net::HTTPServerRequest & request,
const std::string & message
);
Sends a 500 Internal Server Error response.
sendMethodNotAllowed
void sendMethodNotAllowed(
Poco::Net::HTTPServerRequest & request,
const std::string & message
);
Sends a 405 Method Not Allowed error response.
sendNotAuthorized
void sendNotAuthorized(
Poco::Net::HTTPServerRequest & request,
const std::string & path
);
Sends a 401 Unauthorized error response.
sendNotFound
void sendNotFound(
Poco::Net::HTTPServerRequest & request,
const std::string & path
);
Sends a 404 Not Found error response.
sendResource
void sendResource(
Poco::Net::HTTPServerRequest & request,
const std::string & path,
const std::string & vpath,
const std::string & resPath,
const std::string & resBase,
const std::string & index,
Bundle::ConstPtr pBundle,
bool canCache
);
Sends a bundle resource as response.
sendResponse
void sendResponse(
Poco::Net::HTTPServerRequest & request,
Poco::Net::HTTPResponse::HTTPStatus status,
const std::string & message
);
Sends a standard status/error response.
shouldCompressMediaType
bool shouldCompressMediaType(
const std::string & mediaType
) const;
Returns true if and only if content with the given media type should be compressed.
Variables
SERVICE_NAME
static const std::string SERVICE_NAME;