diff options
Diffstat (limited to 'cpp/src/IceWS/Util.h')
-rw-r--r-- | cpp/src/IceWS/Util.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/cpp/src/IceWS/Util.h b/cpp/src/IceWS/Util.h new file mode 100644 index 00000000000..23faf2bf776 --- /dev/null +++ b/cpp/src/IceWS/Util.h @@ -0,0 +1,124 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifndef ICE_WS_UTIL_H +#define ICE_WS_UTIL_H + +#include <IceUtil/Shared.h> +#include <IceUtil/Handle.h> +#include <Ice/Config.h> + +namespace IceWS +{ + +std::vector<unsigned char> calcSHA1(const std::vector<unsigned char>&); + +typedef std::map<std::string, std::string> HeaderFields; + +class WebSocketException +{ +public: + WebSocketException(const std::string&); + + std::string reason; +}; + +class HttpParser : public IceUtil::Shared +{ +public: + + HttpParser(); + + enum Type + { + TypeUnknown, + TypeRequest, + TypeResponse + }; + + const Ice::Byte* isCompleteMessage(const Ice::Byte*, const Ice::Byte*) const; + + bool parse(const Ice::Byte*, const Ice::Byte*); + + Type type() const; + + std::string method() const; + std::string uri() const; + int versionMajor() const; + int versionMinor() const; + + int status() const; + std::string reason() const; + + bool getHeader(const std::string&, std::string&, bool) const; + + typedef std::map<std::string, std::string> HeaderMap; + + const HeaderMap& headers() const; + +private: + + Type _type; + + std::string _method; + std::string _uri; + + HeaderMap _headers; + std::string _headerName; + + int _versionMajor; + int _versionMinor; + + int _status; + std::string _reason; + + enum State + { + StateInit, + StateType, + StateTypeCheck, + StateRequest, + StateRequestMethod, + StateRequestMethodSP, + StateRequestURI, + StateRequestURISP, + StateRequestLF, + StateHeaderFieldStart, + StateHeaderFieldContStart, + StateHeaderFieldCont, + StateHeaderFieldNameStart, + StateHeaderFieldName, + StateHeaderFieldNameEnd, + StateHeaderFieldValueStart, + StateHeaderFieldValue, + StateHeaderFieldValueEnd, + StateHeaderFieldLF, + StateHeaderFieldEndLF, + StateVersion, + StateVersionH, + StateVersionHT, + StateVersionHTT, + StateVersionHTTP, + StateVersionMajor, + StateVersionMinor, + StateResponse, + StateResponseVersionSP, + StateResponseStatus, + StateResponseReasonStart, + StateResponseReason, + StateResponseLF, + StateComplete + }; + State _state; +}; +typedef IceUtil::Handle<HttpParser> HttpParserPtr; + +} + +#endif |