From a31393f368bc78281179e0e2c0ac2a37f7b849c1 Mon Sep 17 00:00:00 2001 From: Jose Date: Tue, 12 Aug 2014 20:46:07 +0200 Subject: Fixed (ICE-5586) - Integrate IceWS to the Ice core library --- cpp/src/Ice/HttpParser.h | 124 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 cpp/src/Ice/HttpParser.h (limited to 'cpp/src/Ice/HttpParser.h') diff --git a/cpp/src/Ice/HttpParser.h b/cpp/src/Ice/HttpParser.h new file mode 100644 index 00000000000..800af260eb1 --- /dev/null +++ b/cpp/src/Ice/HttpParser.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_HTTP_PARSER_H +#define ICE_HTTP_PARSER_H + +#include +#include +#include + +namespace IceInternal +{ + +std::vector calcSHA1(const std::vector&); + +typedef std::map 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 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 HttpParserPtr; + +} + +#endif -- cgit v1.2.3