svn cleanup
[anytun.git] / Sockets / AjpBaseSocket.h
blob222df707b5940e0cef97929545561af7f4d6a52c
1 /**
2 ** \file AjpBaseSocket.h
3 ** \date 2007-10-05
4 ** \author grymse@alhem.net
5 **/
6 /*
7 Copyright (C) 2007 Anders Hedstrom
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License
11 as published by the Free Software Foundation; either version 2
12 of the License, or (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 #ifndef _SOCKETS_AjpBaseSocket_H
24 #define _SOCKETS_AjpBaseSocket_H
26 #include "TcpSocket.h"
27 #include <map>
29 #ifdef SOCKETS_NAMESPACE
30 namespace SOCKETS_NAMESPACE {
31 #endif
33 class AjpBaseSocket : public TcpSocket
35 class Initializer
37 public:
38 Initializer();
39 virtual ~Initializer() {}
41 std::map<int, std::string> Method;
42 std::map<int, std::string> Header;
43 std::map<int, std::string> Attribute;
45 std::map<std::string, int> ResponseHeader;
49 public:
50 AjpBaseSocket(ISocketHandler& h);
52 void OnRawData(const char *buf, size_t sz);
54 virtual void OnHeader( short id, short len ) = 0;
55 virtual void OnPacket( const char *buf, size_t sz ) = 0;
57 protected:
58 unsigned char get_byte(const char *buf, int& ptr);
59 bool get_boolean(const char *buf, int& ptr);
60 short get_integer(const char *buf, int& ptr);
61 std::string get_string(const char *buf, int& ptr);
63 void put_byte(char *buf, int& ptr, unsigned char zz);
64 void put_boolean(char *buf, int& ptr, bool zz);
65 void put_integer(char *buf, int& ptr, short zz);
66 void put_string(char *buf, int& ptr, const std::string& zz);
68 static Initializer Init;
70 private:
71 int m_state;
72 int m_length;
73 int m_ptr;
74 char m_message[8192];
78 #ifdef SOCKETS_NAMESPACE
79 } // namespace SOCKETS_NAMESPACE {
80 #endif
82 #endif // _SOCKETS_AjpBaseSocket_H