You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
4.9 KiB
168 lines
4.9 KiB
11 years ago
|
/***************************************************************************
|
||
|
** $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 <qcstring.h>
|
||
|
#include <qsocket.h>
|
||
|
#include <qdatetime.h>
|
||
|
#include <qbitarray.h>
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include <math.h>
|
||
|
#include <unistd.h>
|
||
|
#include <sys/socket.h>
|
||
|
#include <sys/types.h>
|
||
|
#include <netinet/in.h>
|
||
|
#include <netdb.h>
|
||
|
|
||
|
#include <kapplication.h>
|
||
|
#include <kdebug.h>
|
||
|
#include <kmessagebox.h>
|
||
|
#include <kinstance.h>
|
||
|
#include <kglobal.h>
|
||
|
#include <kstandarddirs.h>
|
||
|
#include <klocale.h>
|
||
|
#include <kurl.h>
|
||
|
#include <ksock.h>
|
||
|
#include <dcopref.h>
|
||
|
#include <dcopclient.h>
|
||
|
#include <kdebug.h>
|
||
|
#include <klocale.h>
|
||
|
#include <krun.h>
|
||
|
#include <kprocio.h>
|
||
|
|
||
|
#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("<html><head><title>Tor</title></head><body>%1 is not a valid URL for this feature. Websites only I'm afraid. And no file extensions either!</body></html>").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<<whichCommand;
|
||
|
|
||
|
whichproc->start(KProcIO::NotifyOnExit,TRUE);
|
||
|
|
||
|
//KRun::runCommand( "tork --toggleKDE");
|
||
|
wait = "10";
|
||
|
}
|
||
|
|
||
|
|
||
|
os << QString("<html><head><title>Tor</title><META HTTP-EQUIV='Refresh' CONTENT='%1; URL=%2'></head><body>Will load %3 anonymously in a moment.</body></html>").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;
|
||
|
}
|
||
|
}
|