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.
tork/src/upnpmanager.cpp

175 lines
6.1 KiB

/***************************************************************************
* $Id: upnpmanager.cpp,v 1.5 2008/04/14 11:15:53 hoganrobert Exp $
* Copyright (C) 2008 by Robert Hogan *
* robert@roberthogan.net *
* *
* Copyright (C) 2005 by Joris Guisson *
* joris.guisson@gmail.com *
* *
* 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#include <tdemessagebox.h>
#include "upnpmanager.h"
#include "kdebug.h"
using namespace bt;
UPnPManager* UPnPManager::manager = 0;
UPnPManager* UPnPManager::Manager ()
{
if (manager == 0)
{
manager = new UPnPManager;
}
return manager;
}
UPnPManager::UPnPManager(TQWidget* parent, const char* name)
: TQWidget(parent, name)
{
sock = new UPnPMCastSocket();
connect(sock,SIGNAL(discovered( kt::UPnPRouter* )),
this,SLOT(discovered( kt::UPnPRouter* )));
discover();
}
UPnPManager::~UPnPManager()
{
delete sock;
}
// void UPnPManager::shutdown(bt::WaitJob* job)
// {
// if (!def_router)
// return;
//
// net::PortList & pl = bt::Globals::instance().getPortList();
// if (pl.count() == 0)
// return;
//
// for (net::PortList::iterator i = pl.begin(); i != pl.end();i++)
// {
// net::Port & p = *i;
// if (p.forward)
// def_router->undoForward(p,job);
// }
// }
void UPnPManager::discover()
{
sock->discover();
}
void UPnPManager::forward(const net::ForwardPortList &forwardPorts,
bool force, bool silent)
{
m_silent = silent;
TQValueList<kt::UPnPRouter*>::iterator r = discoveredRouters.begin();
while (r != discoveredRouters.end())
{
disconnect((*r),SIGNAL(replyError(kt::UPnPRouter*,bt::HTTPRequest* ,const TQString&, bool )),
this,SLOT(onReplyError(kt::UPnPRouter*,bt::HTTPRequest* ,const TQString&, bool )));
disconnect((*r),SIGNAL(replyOK(kt::UPnPRouter*,bt::HTTPRequest* ,const TQString&, bool )),
this,SLOT(onReplyOK(kt::UPnPRouter*,bt::HTTPRequest* ,const TQString&, bool )));
connect((*r),SIGNAL(replyError(kt::UPnPRouter*,bt::HTTPRequest* ,const TQString&, bool )),
this,SLOT(onReplyError(kt::UPnPRouter*,bt::HTTPRequest* ,const TQString&, bool )));
connect((*r),SIGNAL(replyOK(kt::UPnPRouter*,bt::HTTPRequest* ,const TQString&, bool )),
this,SLOT(onReplyOK(kt::UPnPRouter*,bt::HTTPRequest* ,const TQString&, bool )));
for (net::ForwardPortList::ConstIterator i = forwardPorts.begin();
i != forwardPorts.end();i++)
{
const net::ForwardPort & s = *i;
/* (*r)->undoForward(net::Port(s.extnumber,s.proto,s.forward),false);*/
(*r)->forward(net::Port(s.extnumber,s.proto,s.forward),
net::Port(s.intnumber,s.proto,s.forward),
force);
}
r++;
}
kdDebug() << "Done" << endl;
}
void UPnPManager::onReplyError(kt::UPnPRouter* router,bt::HTTPRequest* req,const TQString&, bool fwd )
{
emit forwardingError(router,req->showPayload(),fwd);
}
void UPnPManager::onReplyOK(kt::UPnPRouter* router,bt::HTTPRequest* req,const TQString&, bool fwd )
{
kdDebug() << "forwarding OK" << endl;
emit forwardingOK(router,req->showPayload(),fwd);
}
void UPnPManager::undoForward(const net::ForwardPortList &forwardPorts,
bool silent)
{
m_silent = silent;
TQValueList<kt::UPnPRouter*>::iterator r = discoveredRouters.begin();
while (r != discoveredRouters.end())
{
for (net::ForwardPortList::ConstIterator i = forwardPorts.begin();i != forwardPorts.end();i++)
{
const net::ForwardPort & s = *i;
(*r)->undoForward(net::Port(s.extnumber,s.proto,s.forward),
net::Port(s.intnumber,s.proto,s.forward), 0);
}
r++;
}
kdDebug() << "Done" << endl;
}
TQStringList UPnPManager::discoveredRoutersNameList()
{
TQStringList routers;
TQValueList<kt::UPnPRouter*>::iterator r = discoveredRouters.begin();
while (r != discoveredRouters.end())
{
routers.append((*r)->getDescription().friendlyName);
r++;
}
return routers;
}
void UPnPManager::discovered(UPnPRouter* r)
{
discoveredRouters.append(r);
emit routerDiscovered(r);
}
void UPnPManager::unload()
{
/* TQString routers_file = TDEGlobal::dirs()->saveLocation("data","tork") + "routers";
sock->saveRouters(routers_file);*/
sock->close();
delete sock;
sock = 0;
}
#include "upnpmanager.moc"