Browse Source

extract address

pull/11/merge
orignal 11 years ago
parent
commit
68a0643310
  1. 20
      HTTPServer.cpp
  2. 3
      HTTPServer.h

20
HTTPServer.cpp

@ -1,6 +1,7 @@
#include <boost/bind.hpp> #include <boost/bind.hpp>
#include <boost/lexical_cast.hpp> #include <boost/lexical_cast.hpp>
#include "base64.h" #include "base64.h"
#include "Log.h"
#include "Tunnel.h" #include "Tunnel.h"
#include "TransitTunnel.h" #include "TransitTunnel.h"
#include "Transports.h" #include "Transports.h"
@ -45,7 +46,7 @@ namespace util
void HTTPConnection::Receive () void HTTPConnection::Receive ()
{ {
m_Socket->async_read_some (boost::asio::buffer (m_Buffer), m_Socket->async_read_some (boost::asio::buffer (m_Buffer, 8192),
boost::bind(&HTTPConnection::HandleReceive, this, boost::bind(&HTTPConnection::HandleReceive, this,
boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
} }
@ -54,6 +55,11 @@ namespace util
{ {
if (!ecode) if (!ecode)
{ {
m_Buffer[bytes_transferred] = 0;
auto address = ExtractAddress ();
if (address.find ('?') != std::string::npos)
HandleDestinationRequest ("zmw2cyw2vj7f6obx3msmdvdepdhnw2ctc4okza2zjxlukkdfckhq");
else
HandleRequest (); HandleRequest ();
boost::asio::async_write (*m_Socket, m_Reply.to_buffers(), boost::asio::async_write (*m_Socket, m_Reply.to_buffers(),
boost::bind (&HTTPConnection::HandleWrite, this, boost::bind (&HTTPConnection::HandleWrite, this,
@ -64,6 +70,18 @@ namespace util
Terminate (); Terminate ();
} }
std::string HTTPConnection::ExtractAddress ()
{
char * get = strstr (m_Buffer, "GET");
if (get)
{
char * http = strstr (get, "HTTP");
if (http)
return std::string (get + 3, http - get - 3);
}
return "";
}
void HTTPConnection::HandleWrite (const boost::system::error_code& ecode) void HTTPConnection::HandleWrite (const boost::system::error_code& ecode)
{ {
Terminate (); Terminate ();

3
HTTPServer.h

@ -50,11 +50,12 @@ namespace util
void HandleRequest (); void HandleRequest ();
void HandleDestinationRequest (std::string b32); void HandleDestinationRequest (std::string b32);
void FillContent (std::stringstream& s); void FillContent (std::stringstream& s);
std::string ExtractAddress ();
private: private:
boost::asio::ip::tcp::socket * m_Socket; boost::asio::ip::tcp::socket * m_Socket;
boost::array<char, 8192> m_Buffer; char m_Buffer[8192];
request m_Request; request m_Request;
reply m_Reply; reply m_Reply;
}; };

Loading…
Cancel
Save