/** ** File ......... StatusSocket.cpp ** Published .... 2005-06-14 ** Author ....... grymse@alhem.net **/ /* Copyright (C) 2005 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 #include #include "PeerHandler.h" #include "StatusSocket.h" #define DEB(x) x StatusSocket::StatusSocket(SocketHandler& h) :HttpdSocket(h) ,m_sheet(0) { } StatusSocket::~StatusSocket() { } void StatusSocket::Exec() { GetEnvironment(); ReadCookies(); FormInput(); CreateHeader(); GenerateDocument(); } void StatusSocket::GetEnvironment() { } void StatusSocket::ReadCookies() { HttpdCookies *cs = GetCookies(); if (!cs) return; std::string slask; if (cs -> getvalue("bleep", slask)) { Parse pa(slask,":"); m_sheet = pa.getvalue(); } } void StatusSocket::FormInput() { HttpdForm *form = GetForm(); if (!form) { DEB(printf("form is NULL\n");) return; } m_tmp = form -> getvalue("ah"); if (GetUri() == "/stop") { static_cast(Handler()).SetQuit(); } if (GetUri() == "/debug") { int val = 0; std::string key; std::string value; form -> getfirst(key, value); while (key.size()) { DEB(printf("%s == '%s'\n", key.c_str(), value.c_str());) if (!strcmp(key.c_str(), "debug")) val |= atoi(value.c_str()); // form -> getnext(key, value); } static_cast(Handler()).SetDebug(val); } std::string tmp = form -> getvalue("sheet"); if (tmp.size()) m_sheet = atoi(tmp.c_str()); } void StatusSocket::CreateHeader() { // header AddResponseHeader("Date", GetHttpDate()); AddResponseHeader("Server", "++ 0.001"); AddResponseHeader("Connection", "close"); AddResponseHeader("Content-type", "text/html"); // status SetStatus("200"); SetStatusText("OK"); // cookie SetTheCookie(); // send SendResponse(); } void StatusSocket::GenerateDocument() { // page Send("" "" "" "" ""); //

status

"); Send("
"); menyval(1, m_sheet, "server commands"); menyval(2, m_sheet, "debug options"); menyval(3, m_sheet, "sessions"); Send("
"); Send("
"); switch (m_sheet) { case 1: Send("stop server
"); Send("AH: " + m_tmp + "
"); break; case 2: Send("

Debug

"); Send("
"); { int debug = static_cast(Handler()).GetDebug(); char slask[200]; sprintf(slask, " * 0 - choke
", (debug & 1) ? " checked" : ""); Send(slask); sprintf(slask, " * 1 - unchoke
", (debug & 2) ? " checked" : ""); Send(slask); sprintf(slask, " * 2 - interested
", (debug & 4) ? " checked" : ""); Send(slask); sprintf(slask, " * 3 - not interested
", (debug & 8) ? " checked" : ""); Send(slask); sprintf(slask, " * 4 - have [piece(integer)]
", (debug & 16) ? " checked" : ""); Send(slask); sprintf(slask, " * 5 - bitfield [bitmap]
", (debug & 32) ? " checked" : ""); Send(slask); sprintf(slask, " * 6 - request [index begin length]
", (debug & 64) ? " checked" : ""); Send(slask); sprintf(slask, " * 7 - piece [index begin piece(byte[])]
", (debug & 128) ? " checked" : ""); Send(slask); sprintf(slask, " * 8 - cancel [index begin length]
", (debug & 256) ? " checked" : ""); Send(slask); sprintf(slask, " Time
", (debug & 512) ? " checked" : ""); Send(slask); sprintf(slask, " Connect
", (debug & 1024) ? " checked" : ""); Send(slask); sprintf(slask, " SocketLog
", (debug & 2048) ? " checked" : ""); Send(slask); sprintf(slask, " Speeds
", (debug & 4096) ? " checked" : ""); Send(slask); Send(""); } Send(""); break; case 3: static_cast(Handler()).Show( this ); break; } // switch (m_sheet) // Send(""); // close SetCloseAndDelete(); } void StatusSocket::SetTheCookie() { char slask[1000]; sprintf(slask, "%d", m_sheet); HttpdCookies *cs = GetCookies(); if (!cs) return; cs -> setcookie(this, COOKIE_DOMAIN, COOKIE_PATH, "bleep", slask); } void StatusSocket::menyval(int val,int sheet,const std::string& text) { char slask[1000]; Send("   "); if (val == sheet) { sprintf(slask,"%s", val, text.c_str()); } else { sprintf(slask,"%s", val, text.c_str()); } Send(slask); Send("   "); }