123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- /** forward declarations and general definitions of the QHttp.
- * https://github.com/azadkuh/qhttp
- *
- * @author amir zamani
- * @version 2.0.0
- * @date 2014-07-11
- */
- #ifndef QHTTPFWD_HPP
- #define QHTTPFWD_HPP
- ///////////////////////////////////////////////////////////////////////////////
- #include <QHash>
- #include <QString>
- #include <QtGlobal>
- #include <functional>
- ///////////////////////////////////////////////////////////////////////////////
- // Qt
- class QTcpServer;
- class QTcpSocket;
- class QLocalServer;
- class QLocalSocket;
- // http_parser
- struct http_parser_settings;
- struct http_parser;
- ///////////////////////////////////////////////////////////////////////////////
- namespace qhttp {
- ///////////////////////////////////////////////////////////////////////////////
- /** A map of request or response headers. */
- class THeaderHash : public QHash<QByteArray, QByteArray>
- {
- public:
- /** checks for a header item, regardless of the case of the characters. */
- inline bool has(const QByteArray& key) const {
- return contains(key.toLower());
- }
- /** checks if a header has the specified value ignoring the case of the characters. */
- inline bool keyHasValue(const QByteArray& key, const QByteArray& value) const {
- if ( !contains(key) )
- return false;
- const QByteArray& v = QHash<QByteArray, QByteArray>::value(key);
- return qstrnicmp(value.constData(), v.constData(), v.size()) == 0;
- }
- };
- /** Request method enumeration.
- * @note Taken from http_parser.h */
- enum THttpMethod {
- EHTTP_DELETE = 0, ///< DELETE
- EHTTP_GET = 1, ///< GET
- EHTTP_HEAD = 2, ///< HEAD
- EHTTP_POST = 3, ///< POST
- EHTTP_PUT = 4, ///< PUT
- /* pathological */
- EHTTP_CONNECT = 5, ///< CONNECT
- EHTTP_OPTIONS = 6, ///< OPTIONS
- EHTTP_TRACE = 7, ///< TRACE
- /* webdav */
- EHTTP_COPY = 8, ///< COPY
- EHTTP_LOCK = 9, ///< LOCK
- EHTTP_MKCOL = 10, ///< MKCOL
- EHTTP_MOVE = 11, ///< MOVE
- EHTTP_PROPFIND = 12, ///< PROPFIND
- EHTTP_PROPPATCH = 13, ///< PROPPATCH
- EHTTP_SEARCH = 14, ///< SEARCH
- EHTTP_UNLOCK = 15, ///< UNLOCK
- /* subversion */
- EHTTP_REPORT = 16, ///< REPORT
- EHTTP_MKACTIVITY = 17, ///< MKACTIVITY
- EHTTP_CHECKOUT = 18, ///< CHECKOUT
- EHTTP_MERGE = 19, ///< MERGE
- /* upnp */
- EHTTP_MSEARCH = 20, ///< M-SEARCH
- EHTTP_NOTIFY = 21, ///< NOTIFY
- EHTTP_SUBSCRIBE = 22, ///< SUBSCRIBE
- EHTTP_UNSUBSCRIBE = 23, ///< UNSUBSCRIBE
- /* RFC-5789 */
- EHTTP_PATCH = 24, ///< PATCH
- EHTTP_PURGE = 25, ///< PURGE
- };
- /** HTTP status codes. */
- enum TStatusCode {
- ESTATUS_CONTINUE = 100,
- ESTATUS_SWITCH_PROTOCOLS = 101,
- ESTATUS_OK = 200,
- ESTATUS_CREATED = 201,
- ESTATUS_ACCEPTED = 202,
- ESTATUS_NON_AUTHORITATIVE_INFORMATION = 203,
- ESTATUS_NO_CONTENT = 204,
- ESTATUS_RESET_CONTENT = 205,
- ESTATUS_PARTIAL_CONTENT = 206,
- ESTATUS_MULTI_STATUS = 207,
- ESTATUS_MULTIPLE_CHOICES = 300,
- ESTATUS_MOVED_PERMANENTLY = 301,
- ESTATUS_FOUND = 302,
- ESTATUS_SEE_OTHER = 303,
- ESTATUS_NOT_MODIFIED = 304,
- ESTATUS_USE_PROXY = 305,
- ESTATUS_TEMPORARY_REDIRECT = 307,
- ESTATUS_BAD_REQUEST = 400,
- ESTATUS_UNAUTHORIZED = 401,
- ESTATUS_PAYMENT_REQUIRED = 402,
- ESTATUS_FORBIDDEN = 403,
- ESTATUS_NOT_FOUND = 404,
- ESTATUS_METHOD_NOT_ALLOWED = 405,
- ESTATUS_NOT_ACCEPTABLE = 406,
- ESTATUS_PROXY_AUTHENTICATION_REQUIRED = 407,
- ESTATUS_REQUEST_TIMEOUT = 408,
- ESTATUS_CONFLICT = 409,
- ESTATUS_GONE = 410,
- ESTATUS_LENGTH_REQUIRED = 411,
- ESTATUS_PRECONDITION_FAILED = 412,
- ESTATUS_REQUEST_ENTITY_TOO_LARGE = 413,
- ESTATUS_REQUEST_URI_TOO_LONG = 414,
- ESTATUS_REQUEST_UNSUPPORTED_MEDIA_TYPE = 415,
- ESTATUS_REQUESTED_RANGE_NOT_SATISFIABLE = 416,
- ESTATUS_EXPECTATION_FAILED = 417,
- ESTATUS_INTERNAL_SERVER_ERROR = 500,
- ESTATUS_NOT_IMPLEMENTED = 501,
- ESTATUS_BAD_GATEWAY = 502,
- ESTATUS_SERVICE_UNAVAILABLE = 503,
- ESTATUS_GATEWAY_TIMEOUT = 504,
- ESTATUS_HTTP_VERSION_NOT_SUPPORTED = 505
- };
- /** The backend of QHttp library. */
- enum TBackend {
- ETcpSocket = 0, ///< client / server work on top of TCP/IP stack. (default)
- ESslSocket = 1, ///< client / server work on SSL/TLS tcp stack. (not implemented yet)
- ELocalSocket = 2 ///< client / server work on local socket (unix socket).
- };
- ///////////////////////////////////////////////////////////////////////////////
- namespace server {
- ///////////////////////////////////////////////////////////////////////////////
- class QHttpServer;
- class QHttpConnection;
- class QHttpRequest;
- class QHttpResponse;
- // Privte classes
- class QHttpServerPrivate;
- class QHttpConnectionPrivate;
- class QHttpRequestPrivate;
- class QHttpResponsePrivate;
- typedef std::function<void (QHttpRequest*, QHttpResponse*)> TServerHandler;
- ///////////////////////////////////////////////////////////////////////////////
- } // namespace server
- ///////////////////////////////////////////////////////////////////////////////
- namespace client {
- ///////////////////////////////////////////////////////////////////////////////
- class QHttpClient;
- class QHttpRequest;
- class QHttpResponse;
- // Private classes
- class QHttpClientPrivate;
- class QHttpRequestPrivate;
- class QHttpResponsePrivate;
- ///////////////////////////////////////////////////////////////////////////////
- } // namespace client
- ///////////////////////////////////////////////////////////////////////////////
- #if 0
- # if defined(QHTTP_EXPORT)
- # define QHTTP_API __declspec(dllexport)
- # else
- # define QHTTP_API __declspec(dllimport)
- # endif
- #else
- # define QHTTP_API
- #endif
- #if QHTTP_MEMORY_LOG > 0
- # define QHTTP_LINE_LOG fprintf(stderr, "%s(): obj = %p @ %s[%d]\n",\
- __FUNCTION__, this, __FILE__, __LINE__);
- #else
- # define QHTTP_LINE_LOG
- #endif
- #if QHTTP_MEMORY_LOG > 1
- # define QHTTP_LINE_DEEPLOG QHTTP_LINE_LOG
- #else
- # define QHTTP_LINE_DEEPLOG
- #endif
- ///////////////////////////////////////////////////////////////////////////////
- } // namespace qhttp
- ///////////////////////////////////////////////////////////////////////////////
- #endif // define QHTTPFWD_HPP
|