diff options
author | Stefan Radomski <github@mintwerk.de> | 2016-05-12 13:12:33 (GMT) |
---|---|---|
committer | Stefan Radomski <github@mintwerk.de> | 2016-05-12 13:12:33 (GMT) |
commit | b62e7979600feee23dc7cdb61042a8fc7673122b (patch) | |
tree | f7351372f37979dd2d048e0b68a16a4cd3b2aadb /src/uscxml/URL.h | |
parent | 1b11b310be61e51b3ac5ebb83f7c8a33aef3d6e8 (diff) | |
download | uscxml-b62e7979600feee23dc7cdb61042a8fc7673122b.zip uscxml-b62e7979600feee23dc7cdb61042a8fc7673122b.tar.gz uscxml-b62e7979600feee23dc7cdb61042a8fc7673122b.tar.bz2 |
Major Refactoring v2.0
Diffstat (limited to 'src/uscxml/URL.h')
-rw-r--r-- | src/uscxml/URL.h | 336 |
1 files changed, 0 insertions, 336 deletions
diff --git a/src/uscxml/URL.h b/src/uscxml/URL.h deleted file mode 100644 index dacf0db..0000000 --- a/src/uscxml/URL.h +++ /dev/null @@ -1,336 +0,0 @@ -/** - * @file - * @author 2012-2013 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de) - * @copyright Simplified BSD - * - * @cond - * This program is free software: you can redistribute it and/or modify - * it under the terms of the FreeBSD license as published by the FreeBSD - * project. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the FreeBSD license along with this - * program. If not, see <http://www.opensource.org/licenses/bsd-license>. - * @endcond - */ - -#ifndef URL_H_9DAEGSMV -#define URL_H_9DAEGSMV - -#include <curl/curl.h> -#include <string> -#include <iostream> -#include <map> -#include <vector> -#include <set> - -#include "uscxml/messages/Data.h" -#include <boost/shared_ptr.hpp> -#include <boost/enable_shared_from_this.hpp> - -#include "uscxml/concurrency/tinythread.h" - -// use arabica URL parser -#include <io/uri.hpp> - -namespace uscxml { - -class URL; - -class USCXML_API URLMonitor { -public: - virtual void downloadStarted(const URL& url) {}; - virtual void downloadCompleted(const URL& url) {}; - virtual void downloadFailed(const URL& url, int errorCode) {}; - virtual void headerChunkReceived(const URL& url, const std::string& headerChunk) {}; - virtual void contentChunkReceived(const URL& url, const std::string& contentChunk) {}; -}; - -class USCXML_API URLImpl : public boost::enable_shared_from_this<URLImpl> { -public: - URLImpl(const std::string& url); - ~URLImpl(); - static boost::shared_ptr<URLImpl> toLocalFile(const std::string& content, const std::string& suffix); - - static size_t writeHandler(void *ptr, size_t size, size_t nmemb, void *userdata); - static size_t headerHandler(void *ptr, size_t size, size_t nmemb, void *userdata); - - void addMonitor(URLMonitor* monitor) { - _monitors.insert(monitor); - } - void removeMonitor(URLMonitor* monitor) { - _monitors.erase(monitor); - } - - const bool isAbsolute() const { - return _uri.is_absolute(); - } - const std::string scheme() const { - return _uri.scheme(); - } - const std::string host() const { - return _uri.host(); - } - const std::string port() const { - return _uri.port(); - } - const std::string path() const { - return _uri.path(); - } - const std::string file() const; - const std::vector<std::string> pathComponents() const { - return _pathComponents; - } - const std::string asString() const { - return _uri.as_string(); - } - - const bool toAbsoluteCwd(); - const bool toAbsolute(const std::string& baseUrl); - const std::string asLocalFile(const std::string& suffix, bool reload = false); - - void addOutHeader(const std::string& key, const std::string& value) { - _outHeader[key] = value; - } - void setOutContent(const std::string& content); - void setRequestType(const std::string& requestType); - - const std::map<std::string, std::string> getInHeaderFields(); - const std::string getInHeaderField(const std::string& key); - const std::string getStatusCode(); - const std::string getStatusMessage(); - - - const std::string getInContent(bool forceReload = false); - const void download(bool blocking = false); - - void downloadStarted(); - void downloadCompleted(); - void downloadFailed(CURLcode errorCode); - - bool downloadFailed() { - return _hasFailed; - } - operator Data() const; - - friend class URLFetcher; - -protected: - URLImpl() : _handle(NULL), _isDownloaded(false), _hasFailed(false) {} - std::string getLocalFilename(const std::string& suffix); - - CURL* getCurlHandle(); - - std::string _outContent; - std::map<std::string, std::string> _outHeader; - std::string _requestType; - - CURL* _handle; - std::stringstream _rawInContent; - std::stringstream _rawInHeader; - - std::string _statusCode; - std::string _statusMsg; - std::map<std::string, std::string> _inHeaders; - - Arabica::io::URI _uri; - std::vector<std::string> _pathComponents; - - bool _isDownloaded; - bool _hasFailed; - - std::string _localFile; - std::string _error; - - tthread::condition_variable _condVar; - tthread::recursive_mutex _mutex; - - std::set<URLMonitor*> _monitors; - typedef std::set<URLMonitor*>::iterator monIter_t; -}; - -class USCXML_API URL { -public: - URL() : _impl() {} - URL(const std::string url) : _impl(new URLImpl(url)) {} - URL(boost::shared_ptr<URLImpl> const impl) : _impl(impl) { } - URL(const URL& other) : _impl(other._impl) { } - virtual ~URL() {}; - - operator bool() const { - return !!_impl; - } - bool operator< (const URL& other) const { - return _impl < other._impl; - } - bool operator==(const URL& other) const { - return _impl == other._impl; - } - bool operator!=(const URL& other) const { - return _impl != other._impl; - } - URL& operator= (const URL& other) { - _impl = other._impl; - return *this; - } - - const std::map<std::string, std::string> getInHeaderFields() const { - return _impl->getInHeaderFields(); - } - const std::string getInHeaderField(const std::string& key) const { - return _impl->getInHeaderField(key); - } - const std::string getStatusCode() const { - return _impl->getStatusCode(); - } - const std::string getStatusMessage() const { - return _impl->getStatusMessage(); - } - - const std::string getInContent() const { - return _impl->getInContent(); - } - const void download(bool blocking = false) const { - return _impl->download(blocking); - } - - void addOutHeader(const std::string& key, const std::string& value) { - _impl->addOutHeader(key, value); - } - void setRequestType(const std::string& requestType) { - _impl->setRequestType(requestType); - } - void setOutContent(const std::string& content) { - _impl->setOutContent(content); - } - - const bool toAbsoluteCwd() { - return _impl->toAbsoluteCwd(); - } - const bool toAbsolute(const std::string& baseUrl) { - return _impl->toAbsolute(baseUrl); - } - const bool toAbsolute(const URL& baseUrl) { - return _impl->toAbsolute(baseUrl.asString()); - } - const std::string asLocalFile(const std::string& suffix, bool reload = false) { - return _impl->asLocalFile(suffix, reload); - } - - static URL asBaseURL(const URL& url); - static void toBaseURL(URL& uri); - - static std::string getResourceDir(); - static std::string getTmpFilename(const std::string& suffix = ""); - - static URL toLocalFile(const std::string& content, const std::string& suffix) { - boost::shared_ptr<URLImpl> impl = URLImpl::toLocalFile(content, suffix); - return URL(impl); - } - - void dump(); - - void addMonitor(URLMonitor* monitor) { - _impl->addMonitor(monitor); - } - void removeMonitor(URLMonitor* monitor) { - _impl->removeMonitor(monitor); - } - - bool downloadFailed() { - return _impl->downloadFailed(); - } - - const bool isAbsolute() const { - return _impl->isAbsolute(); - } - const std::string scheme() const { - return _impl->scheme(); - } - const std::string host() const { - return _impl->host(); - } - const std::string port() const { - return _impl->port(); - } - const std::string path() const { - return _impl->path(); - } - const std::vector<std::string> pathComponents() const { - return _impl->pathComponents(); - } - const std::string file() const { - return _impl->file(); - } - - const std::string asString() const { - if (_impl) - return _impl->asString(); - return ""; - } - - static std::string tmpDir(); - static std::map<std::string, std::string> mimeTypes; - static std::string getMimeType(const std::string extension, std::string magic = ""); - - friend class URLFetcher; - friend USCXML_API std::ostream & operator<<(std::ostream &stream, const URL& p); - - operator Data() const { - return _impl->operator Data(); - } - - operator std::string() const { - return asString(); - } - -protected: - void downloadStarted() { - return _impl->downloadStarted(); - } - void downloadCompleted() { - return _impl->downloadCompleted(); - } - void downloadFailed(CURLcode errorCode) { - return _impl->downloadFailed(errorCode); - } - - boost::shared_ptr<URLImpl> _impl; -}; - -class USCXML_API URLFetcher { -public: - URLFetcher(); - ~URLFetcher(); - - static void fetchURL(URL& url); - static void breakURL(URL& url); - - void start(); - void stop(); - -protected: - static URLFetcher* _instance; - static URLFetcher* getInstance(); - - static void run(void* instance); - void perform(); - - tthread::thread* _thread; - tthread::condition_variable _condVar; - tthread::recursive_mutex _mutex; - bool _isStarted; - - std::map<CURL*, URL> _handlesToURLs; - CURLM* _multiHandle; - char* _envProxy; -}; - -USCXML_API std::ostream& operator<< (std::ostream &stream, const URL& p); - -} - -#endif /* end of include guard: URL_H_9DAEGSMV */ |