EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
APIServerConnection.h
Go to the documentation of this file.
1 /*
2  ------------------------------------------------------------------------------------
3  LICENSE:
4  ------------------------------------------------------------------------------------
5  This file is part of EVEmu: EVE Online Server Emulator
6  Copyright 2006 - 2021 The EVEmu Team
7  For the latest information visit https://evemu.dev
8  ------------------------------------------------------------------------------------
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU Lesser General Public License as published by the Free Software
11  Foundation; either version 2 of the License, or (at your option) any later
12  version.
13 
14  This program is distributed in the hope that it will be useful, but WITHOUT
15  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public License along with
19  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
20  Place - Suite 330, Boston, MA 02111-1307, USA, or go to
21  http://www.gnu.org/copyleft/lesser.txt.
22  ------------------------------------------------------------------------------------
23  Author: Aknor Jaden, adapted from ImageServer.h authored by caytchen
24 */
25 
26 #ifndef __APISERVERCONNECTION__H__INCL__
27 #define __APISERVERCONNECTION__H__INCL__
28 
30 
41 class APIServerConnection : public std::tr1::enable_shared_from_this<APIServerConnection>
42 {
43 public:
44  static std::tr1::shared_ptr<APIServerConnection> create(boost::asio::io_context& io);
45  void Process();
46  boost::asio::ip::tcp::socket& socket();
47 
48 private:
49  APIServerConnection(boost::asio::io_context& io);
50  void ProcessHeaders();
51  void ProcessPostData();
52  void SendXML();
53  void NotFound();
54  void Close();
55  void Redirect();
56  void RedirectLocation();
57  void RedirectFinalize();
58 
59  static bool starts_with(std::string& haystack, const char *const needle);
60 
61  // request data
62  std::string _service;
63  std::string _service_handler;
64  std::string _redirectUrl;
65  std::string _http_cmd_str;
67 
68  boost::asio::streambuf _buffer;
69  boost::asio::streambuf _postBuffer;
70  boost::asio::ip::tcp::socket _socket;
71  std::tr1::shared_ptr<std::vector<char> > _xmlData;
72 
73  static boost::asio::const_buffers_1 _responseOK;
74  static boost::asio::const_buffers_1 _responseNotFound;
75  static boost::asio::const_buffers_1 _responseNoContent;
76  static boost::asio::const_buffers_1 _responseRedirectBegin;
77  static boost::asio::const_buffers_1 _responseRedirectEnd;
78 };
79 
80 #endif // __APISERVERCONNECTION__H__INCL__
boost::asio::streambuf _postBuffer
static std::tr1::shared_ptr< APIServerConnection > create(boost::asio::io_context &io)
static boost::asio::const_buffers_1 _responseRedirectBegin
static boost::asio::const_buffers_1 _responseRedirectEnd
boost::asio::ip::tcp::socket & socket()
static boost::asio::const_buffers_1 _responseOK
static boost::asio::const_buffers_1 _responseNotFound
APICommandCall m_apiCommandCall
std::tr1::shared_ptr< std::vector< char > > _xmlData
std::map< std::string, std::string > APICommandCall
static boost::asio::const_buffers_1 _responseNoContent
APIServerConnection(boost::asio::io_context &io)
Handles a client connection to the API server.
boost::asio::streambuf _buffer
static bool starts_with(std::string &haystack, const char *const needle)
boost::asio::ip::tcp::socket _socket