/*************************************************************************** ** $Id: torioslave.cpp,v 1.7 2008/07/31 19:56:29 hoganrobert Exp $ * Copyright (C) 2006 - 2008 Robert Hogan * * robert@roberthogan.net * * * * 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., * * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "torioslave.h" using namespace KIO; kio_torProtocol::kio_torProtocol(const QCString &pool_socket, const QCString &app_socket) : SlaveBase("kio_tor", pool_socket, app_socket) { } kio_torProtocol::~kio_torProtocol() { } void kio_torProtocol::get(const KURL& url ) { QString wait; QByteArray output; QTextStream os( output, IO_WriteOnly ); os.setEncoding( QTextStream::Latin1 ); // In fast ASCII QString cleanedurl = url.prettyURL().replace("tor://",""); cleanedurl = cleanedurl.replace("tor:/",""); cleanedurl = cleanedurl.replace("tor:",""); cleanedurl = cleanedurl.replace(" ",""); bool cantdo = false; if (cleanedurl.contains(".txt")) cantdo = true; if (cleanedurl.contains("://") && (cleanedurl.left(4) != "http")) cantdo = true; if (cantdo){ os << QString("Tor%1 is not a valid URL for this feature. Websites only I'm afraid. And no file extensions either!").arg(cleanedurl); data( output ); finished(); return; } if ((cleanedurl.left(7) != "http://") && (cleanedurl.left(8) != "https://")) cleanedurl.prepend("http://"); bool m_torkrunning = false; bool anonymized = false; DCOPClient* p_dcopServer= new DCOPClient(); p_dcopServer->attach (); if (p_dcopServer->isApplicationRegistered ("tork")){ m_torkrunning = true; DCOPRef tork( "tork", "DCOPTork" ); anonymized = tork.call( "getKDESetting" ); } if (m_torkrunning){ DCOPRef("tork*", "DCOPTork").send("startEverything"); if (!anonymized) DCOPRef("tork*", "DCOPTork").send("toggleKDESetting"); wait = "3"; }else{ KProcIO *whichproc = new KProcIO(); whichproc->setUseShell(TRUE); QString whichCommand="tork --toggleKDE"; *whichproc<start(KProcIO::NotifyOnExit,TRUE); //KRun::runCommand( "tork --toggleKDE"); wait = "10"; } os << QString("TorWill load %3 anonymously in a moment.").arg(wait).arg(cleanedurl).arg(cleanedurl); data( output ); finished(); } void kio_torProtocol::mimetype(const KURL & /*url*/) { mimeType("text/html"); finished(); } extern "C" { int kdemain(int argc, char **argv) { KInstance instance( "kio_tor" ); kdDebug(7101) << "*** Starting kio_tor " << endl; if (argc != 4) { kdDebug(7101) << "Usage: kio_tor protocol domain-socket1 domain-socket2" << endl; exit(-1); } kio_torProtocol slave(argv[2], argv[3]); slave.dispatchLoop(); kdDebug(7101) << "*** kio_tor Done" << endl; return 0; } }