/** ** File ......... RedirWwwSocket.cpp ** Published .... 2004-04-18 ** Author ....... grymse@alhem.net **/ /* Copyright (C) 2004 Anders Hedstrom This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef _WIN32 #pragma warning(disable:4786) #endif //#include #include #include "MyTcpSocket.h" #include "MyHandler.h" #include "RedirWwwSocket.h" #define DEB(x) x RedirWwwSocket::RedirWwwSocket(SocketHandler& h) :TcpSocket(h) { SetLineProtocol(); } RedirWwwSocket::~RedirWwwSocket() { } void RedirWwwSocket::OnLine(const std::string& line) { Parse pa(line,":"); std::string key = pa.getword(); DEB( printf("%s\n",line.c_str());) if (key == "GET") { m_method = key; m_url = pa.getword(); } else if (key == "") { std::string response; if (m_method == "GET") { HOST *p = static_cast(Handler()).GetRandomHOST( "viawww", true ); if (p) { std::string ip; l2ip(p -> ip, ip); response = "HTTP/1.0 302 Moved\n" "Location: http://" + ip + ":8080" + m_url + "\n" "\n"; Send(response); DEB( printf("Response:\n%s\n",response.c_str());) SetCloseAndDelete(); } else { DEB( printf("no random host found\n");) response = "HTTP/1.0 404 Not Found\n" "Content-Type: text/html\n" "\n" "

Document not found"; Send(response); SetCloseAndDelete(); } } else { DEB( printf("m_method != GET ('%s')\n",m_method.c_str());) SetCloseAndDelete(); } } }