summaryrefslogtreecommitdiff
path: root/examples/opienet
Side-by-side diff
Diffstat (limited to 'examples/opienet') (more/less context) (ignore whitespace changes)
-rw-r--r--examples/opienet/.cvsignore6
-rw-r--r--examples/opienet/miniwellenreiter/.cvsignore8
-rw-r--r--examples/opienet/miniwellenreiter/miniwellenreiter.cpp234
-rw-r--r--examples/opienet/miniwellenreiter/miniwellenreiter.pro19
-rw-r--r--examples/opienet/onetworkdemo/.cvsignore8
-rw-r--r--examples/opienet/onetworkdemo/onetworkdemo.cpp176
-rw-r--r--examples/opienet/onetworkdemo/onetworkdemo.pro12
-rw-r--r--examples/opienet/opienet.pro3
8 files changed, 466 insertions, 0 deletions
diff --git a/examples/opienet/.cvsignore b/examples/opienet/.cvsignore
new file mode 100644
index 0000000..8f7300c
--- a/dev/null
+++ b/examples/opienet/.cvsignore
@@ -0,0 +1,6 @@
+Makefile*
+moc*
+*moc
+*.o
+~*
+
diff --git a/examples/opienet/miniwellenreiter/.cvsignore b/examples/opienet/miniwellenreiter/.cvsignore
new file mode 100644
index 0000000..e0e629a
--- a/dev/null
+++ b/examples/opienet/miniwellenreiter/.cvsignore
@@ -0,0 +1,8 @@
+miniwellenreiter
+Makefile*
+obj
+moc*
+*moc
+*.o
+~*
+
diff --git a/examples/opienet/miniwellenreiter/miniwellenreiter.cpp b/examples/opienet/miniwellenreiter/miniwellenreiter.cpp
new file mode 100644
index 0000000..ebd3b5f
--- a/dev/null
+++ b/examples/opienet/miniwellenreiter/miniwellenreiter.cpp
@@ -0,0 +1,234 @@
+#include <qdict.h>
+#include <qsocketnotifier.h>
+#include <qstring.h>
+#include <opie2/onetwork.h>
+#include <qapplication.h>
+#include <opie2/opcap.h>
+#include <cerrno>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+
+
+using namespace Opie::Net;
+//======================== Station help class ===============================
+
+class Station
+{
+ public:
+ Station( QString t, int c, bool w ) : type(t), channel(c), wep(w), beacons(1) {};
+ ~Station() {};
+
+ QString type;
+ int channel;
+ bool wep;
+ int beacons;
+};
+
+QDict<Station> stations;
+
+//======================== Application class ===============================
+
+class Wellenreiter : public QApplication
+{
+Q_OBJECT
+public:
+ Wellenreiter( int argc, char** argv ) : QApplication( argc, argv ), channel( 1 )
+ {
+
+ ONetwork* net = ONetwork::instance();
+
+ if ( argc < 3 )
+ {
+ printf( "Usage: ./%s <interface> <driver> <interval>\n", argv[0] );
+ printf( "\n" );
+ printf( "Valid wireless interfaces (detected) are:\n" );
+
+ ONetwork::InterfaceIterator it = net->iterator();
+ while ( it.current() )
+ {
+ if ( it.current()->isWireless() )
+ {
+ printf( " - '%s' (MAC=%s) (IPv4=%s)\n", (const char*) it.current()->name(),
+ (const char*) it.current()->macAddress().toString(),
+ (const char*) it.current()->ipV4Address() );
+ }
+ ++it;
+ }
+ exit( -1 );
+ }
+
+ printf( "*******************************************************************\n" );
+ printf( "* Wellenreiter mini edition 1.0.0 (C) 2003 Michael 'Mickey' Lauer *\n" );
+ printf( "*******************************************************************\n" );
+ printf( "\n\n" );
+
+ QString interface( argv[1] );
+ QString driver( argv[2] );
+
+ printf( "Trying to use '%s' as %s-controlled device...\n", (const char*) interface, (const char*) driver );
+
+ // sanity checks before downcasting
+ ONetworkInterface* iface = net->interface( interface );
+ if ( !iface )
+ {
+ printf( "Interface '%s' doesn't exist. Exiting.\n", (const char*) interface );
+ exit( -1 );
+ }
+ if ( !iface->isWireless() )
+ {
+ printf( "Interface '%s' doesn't support wireless extensions. Exiting.\n", (const char*) interface );
+ exit( -1 );
+ }
+
+ // downcast should be safe now
+ wiface = (OWirelessNetworkInterface*) iface;
+ printf( "Using wireless interface '%s' for scanning (current SSID is '%s')...\n", (const char*) interface, (const char*) wiface->SSID() );
+
+ // ifconfig +promisc the interface to receive all packets
+ if ( !wiface->promiscuousMode() )
+ {
+ printf( "Interface status is not promisc... switching to promisc... " );
+ wiface->setPromiscuousMode( true );
+ if ( !wiface->promiscuousMode() )
+ {
+ printf( "failed (%s). Exiting.\n", strerror( errno ) );
+ exit( -1 );
+ }
+ else
+ {
+ printf( "ok.\n" );
+ }
+ }
+ else
+ printf( "Interface status is already promisc - good.\n" );
+
+ // connect a monitoring strategy to the interface
+ if ( driver == "orinoco" )
+ new OOrinocoMonitoringInterface( wiface, false );
+ else
+ if ( driver == "hostap" )
+ new OHostAPMonitoringInterface( wiface, false );
+ else
+ if ( driver == "wlan-ng" )
+ new OWlanNGMonitoringInterface( wiface, false );
+ else
+ {
+ printf( "Unknown driver. Exiting\n" );
+ exit( -1 );
+ }
+
+ // enable monitoring mode
+ printf( "Enabling monitor mode...\n" );
+ wiface->setMode( "monitor" );
+
+ // open a packet capturer
+ cap = new OPacketCapturer();
+ cap->open( interface );
+ if ( !cap->isOpen() )
+ {
+ printf( "Unable to open libpcap (%s). Exiting.\n", strerror( errno ) );
+ exit( -1 );
+ }
+
+ // set capturer to non-blocking mode
+ cap->setBlocking( false );
+
+ // start channel hopper
+ //wiface->setChannelHopping( 1000 );
+
+ // connect
+ connect( cap, SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) );
+ // timer
+ startTimer( 1000 );
+
+ }
+
+ ~Wellenreiter() {};
+
+public slots:
+ virtual void timerEvent(QTimerEvent* e)
+ {
+ wiface->setChannel( channel++ );
+ if ( channel == 14 ) channel = 1;
+ }
+
+ void receivePacket(OPacket* p)
+ {
+ if (!p)
+ {
+ printf( "(empty packet received)\n" );
+ return;
+ }
+
+ OWaveLanManagementPacket* beacon = (OWaveLanManagementPacket*) p->child( "802.11 Management" );
+ if ( beacon )
+ {
+ OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) );
+ QString essid = ssid ? ssid->ID() : QString::fromLatin1( "<unknown>" );
+
+ if ( stations.find( essid ) )
+ stations[essid]->beacons++;
+ else
+ {
+ printf( "found new network @ channel %d, SSID = '%s'\n", wiface->channel(), (const char*) essid );
+ stations.insert( essid, new Station( "unknown", wiface->channel(),
+ ((OWaveLanPacket*) beacon->parent())->usesWep() ) );
+ }
+ return;
+ }
+
+ OWaveLanDataPacket* data = (OWaveLanDataPacket*) p->child( "802.11 Data" );
+ if ( data )
+ {
+ OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" );
+ if ( wlan->fromDS() && !wlan->toDS() )
+ {
+ printf( "FromDS: '%s' -> '%s' via '%s'\n",
+ (const char*) wlan->macAddress3().toString(true),
+ (const char*) wlan->macAddress1().toString(true),
+ (const char*) wlan->macAddress2().toString(true) );
+ }
+ else
+ if ( !wlan->fromDS() && wlan->toDS() )
+ {
+ printf( "ToDS: '%s' -> '%s' via '%s'\n",
+ (const char*) wlan->macAddress2().toString(true),
+ (const char*) wlan->macAddress3().toString(true),
+ (const char*) wlan->macAddress1().toString(true) );
+ }
+ else
+ if ( wlan->fromDS() && wlan->toDS() )
+ {
+ printf( "WSD(bridge): '%s' -> '%s' via '%s' and '%s'\n",
+ (const char*) wlan->macAddress4().toString(true),
+ (const char*) wlan->macAddress3().toString(true),
+ (const char*) wlan->macAddress1().toString(true),
+ (const char*) wlan->macAddress2().toString(true) );
+ }
+ else
+ {
+ printf( "IBSS(AdHoc): '%s' -> '%s' (Cell: '%s')'\n",
+ (const char*) wlan->macAddress2().toString(true),
+ (const char*) wlan->macAddress1().toString(true),
+ (const char*) wlan->macAddress3().toString(true) );
+ }
+ return;
+ }
+ }
+private:
+ OPacketCapturer* cap;
+ OWirelessNetworkInterface* wiface;
+ int channel;
+};
+
+
+int main( int argc, char** argv )
+{
+ Wellenreiter w( argc, argv );
+ w.exec();
+ return 0;
+}
+
+#include "miniwellenreiter.moc"
+
diff --git a/examples/opienet/miniwellenreiter/miniwellenreiter.pro b/examples/opienet/miniwellenreiter/miniwellenreiter.pro
new file mode 100644
index 0000000..d7c1fc2
--- a/dev/null
+++ b/examples/opienet/miniwellenreiter/miniwellenreiter.pro
@@ -0,0 +1,19 @@
+TEMPLATE = app
+CONFIG = qt warn_on
+HEADERS =
+SOURCES = miniwellenreiter.cpp
+INCLUDEPATH += $(OPIEDIR)/include
+DEPENDPATH += $(OPIEDIR)/include
+LIBS += -lopiecore2 -lopienet2
+TARGET = miniwellenreiter
+MOC_DIR = moc
+OBJECTS_DIR = obj
+
+include( $(OPIEDIR)/include.pro )
+
+!isEmpty( LIBPCAP_INC_DIR ) {
+ INCLUDEPATH = $$LIBPCAP_INC_DIR $$INCLUDEPATH
+}
+!isEmpty( LIBPCAP_LIB_DIR ) {
+ LIBS = -L$$LIBPCAP_LIB_DIR $$LIBS
+}
diff --git a/examples/opienet/onetworkdemo/.cvsignore b/examples/opienet/onetworkdemo/.cvsignore
new file mode 100644
index 0000000..c2638e5
--- a/dev/null
+++ b/examples/opienet/onetworkdemo/.cvsignore
@@ -0,0 +1,8 @@
+onetworkdemo
+Makefile*
+obj
+moc*
+*moc
+*.o
+~*
+
diff --git a/examples/opienet/onetworkdemo/onetworkdemo.cpp b/examples/opienet/onetworkdemo/onetworkdemo.cpp
new file mode 100644
index 0000000..e0c93a2
--- a/dev/null
+++ b/examples/opienet/onetworkdemo/onetworkdemo.cpp
@@ -0,0 +1,176 @@
+/*
+ =. This file is part of the Opie Project
+ .=l. Copyright (C) 2004 Opie Team <opie-devel@handhelds.org>
+ .>+-=
+ _;:, .> :=|. This library is free software; you can
+.> <`_, > . <= redistribute it and/or modify it under
+:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
+.="- .-=="i, .._ License as published by the Free Software
+ - . .-<_> .<> Foundation; either version 2 of the License,
+ ._= =} : or (at your option) any later version.
+ .%`+i> _;_.
+ .i_,=:_. -<s. This library 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
+..}^=.= = ; Library General Public License for more
+++= -. .` .: details.
+ : = ...= . :.=-
+ -. .:....=;==+<; You should have received a copy of the GNU
+ -_. . . )=. = Library General Public License along with
+ -- :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+/* OPIE */
+#include <opie2/onetwork.h>
+#include <opie2/ostation.h>
+#include <opie2/omanufacturerdb.h>
+#include <opie2/odebug.h>
+
+/* STD */
+#include <unistd.h>
+
+using namespace Opie::Net;
+
+int main( int argc, char** argv )
+{
+ odebug << "OPIE Network Demo" << oendl;
+
+ ONetwork* net = ONetwork::instance();
+
+ ONetwork::InterfaceIterator it = net->iterator();
+
+ while ( it.current() )
+ {
+ odebug << "DEMO: ONetwork contains Interface '" << it.current()->name() << "'" << oendl;
+ odebug << "DEMO: Datalink code is '" << it.current()->dataLinkType() << "'" << oendl;
+ odebug << "DEMO: MAC Address is '" << it.current()->macAddress().toString() << "'" << oendl;
+ odebug << "DEMO: MAC Address is '" << it.current()->macAddress().toString(true) << "'" << oendl;
+ odebug << "DEMO: MAC Manufacturer seems to be '" << it.current()->macAddress().manufacturer() << "'" << oendl;
+ odebug << "DEMO: Manufacturertest1 = '" << OManufacturerDB::instance()->lookupExt( "08:00:87" ) << "'" << oendl;
+ odebug << "DEMO: Manufacturertest2 = '" << OManufacturerDB::instance()->lookupExt( "E2:0C:0F" ) << "'" << oendl;
+ odebug << "Demo: IPv4 Address is '" << it.current()->ipV4Address() << "'" << oendl;
+ if ( it.current()->isWireless() )
+ {
+ OWirelessNetworkInterface* iface = static_cast<OWirelessNetworkInterface*>( it.current() );
+ odebug << "DEMO: '" << iface->name() << "' seems to feature the wireless extensions." << oendl;
+ odebug << "DEMO: Current SSID is '" << iface->SSID() << "'" << oendl;
+ odebug << "DEMO: Antenna is tuned to '" << iface->frequency() << "', that is channel " << iface->channel() << "" << oendl;
+
+ //if ( iface->mode() == OWirelessNetworkInterface::adhoc )
+ //{
+ //odebug << "DEMO: Associated AP has MAC Address '" << iface->associatedAP().toString() << "'" << oendl;
+ //}
+
+ /*
+
+ // nickname
+ odebug << "DEMO: Current NickName is '" << iface->nickName() << "'" << oendl;
+ iface->setNickName( "MyNickName" );
+ if ( iface->nickName() != "MyNickName" )
+ odebug << "DEMO: Warning! Can't change nickname" << oendl;
+ else
+ odebug << "DEMO: Nickname change successful." << oendl;
+
+ /*
+
+ // operation mode
+ odebug << "DEMO: Current OperationMode is '" << iface->mode() << "'" << oendl;
+ iface->setMode( "adhoc" );
+ if ( iface->mode() != "adhoc" )
+ odebug << "DEMO: Warning! Can't change operation mode" << oendl;
+ else
+ odebug << "DEMO: Operation Mode change successful." << oendl;
+
+ // RF channel
+ odebug << "DEMO: Current Channel is '" << iface->channel() << "'" << oendl;
+ iface->setChannel( 1 );
+ if ( iface->channel() != 1 )
+ odebug << "DEMO: Warning! Can't change RF channel" << oendl;
+ else
+ odebug << "DEMO: RF channel change successful." << oendl;
+
+ iface->setMode( "managed" );
+
+ */
+
+ /*
+
+ // network scan
+
+ OStationList* stations = iface->scanNetwork();
+ if ( stations )
+ {
+ odebug << "DEMO: # of stations around = " << stations->count() << "" << oendl;
+ OStation* station;
+ for ( station = stations->first(); station != 0; station = stations->next() )
+ {
+ odebug << "DEMO: station dump following..." << oendl;
+ station->dump();
+ }
+ }
+
+ else
+ {
+ odebug << "DEMO: Warning! Scan didn't work!" << oendl;
+ }
+
+ /*
+
+ // first some wrong calls to check if this is working
+ iface->setPrivate( "seppel", 10 );
+ iface->setPrivate( "monitor", 0 );
+
+ // now the real deal
+ iface->setPrivate( "monitor", 2, 2, 3 );
+
+ // trying to set hw address to 12:34:56:AB:CD:EF
+
+ /*
+
+ OMacAddress addr = OMacAddress::fromString( "12:34:56:AB:CD:EF" );
+ iface->setUp( false );
+ iface->setMacAddress( addr );
+ iface->setUp( true );
+ odebug << "DEMO: MAC Address now is '" << iface->macAddress().toString() << "'" << oendl;
+
+ */
+
+ // monitor test
+
+
+
+ odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl;
+ iface->setMode( "monitor" );
+ odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl;
+
+ sleep( 1 );
+
+ iface->setChannel( 1 );
+ iface->setMode( "managed" );
+
+ //sleep( 1 );
+ odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl;
+
+ /*iface->setMode( "adhoc" );
+ sleep( 1 );
+ odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl;
+ iface->setMode( "managed" );
+ sleep( 1 );
+ odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl;
+ iface->setMode( "master" );
+ sleep( 1 );
+ odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl; */
+
+ }
+ ++it;
+ }
+
+ return 0;
+
+}
diff --git a/examples/opienet/onetworkdemo/onetworkdemo.pro b/examples/opienet/onetworkdemo/onetworkdemo.pro
new file mode 100644
index 0000000..cf293b5
--- a/dev/null
+++ b/examples/opienet/onetworkdemo/onetworkdemo.pro
@@ -0,0 +1,12 @@
+TEMPLATE = app
+CONFIG = qt warn_on
+HEADERS =
+SOURCES = onetworkdemo.cpp
+INCLUDEPATH += $(OPIEDIR)/include
+DEPENDPATH += $(OPIEDIR)/include
+LIBS += -lopiecore2 -lopienet2
+TARGET = onetworkdemo
+MOC_DIR = moc
+OBJECTS_DIR = obj
+
+include( $(OPIEDIR)/include.pro )
diff --git a/examples/opienet/opienet.pro b/examples/opienet/opienet.pro
new file mode 100644
index 0000000..c7800a9
--- a/dev/null
+++ b/examples/opienet/opienet.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+SUBDIRS = miniwellenreiter onetworkdemo
+