summaryrefslogtreecommitdiff
path: root/libopie2/opienet/onetutils.cpp
Side-by-side diff
Diffstat (limited to 'libopie2/opienet/onetutils.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/onetutils.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/libopie2/opienet/onetutils.cpp b/libopie2/opienet/onetutils.cpp
index b317810..0fb21ff 100644
--- a/libopie2/opienet/onetutils.cpp
+++ b/libopie2/opienet/onetutils.cpp
@@ -53,45 +53,71 @@ using namespace std;
// static initializer for broadcast and unknown MAC Adresses
const unsigned char __broadcast[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
const OMacAddress& OMacAddress::broadcast = OMacAddress( __broadcast );
const unsigned char __unknown[6] = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 };
const OMacAddress& OMacAddress::unknown = OMacAddress( __unknown );
//TODO: Incorporate Ethernet Manufacturer database here!
OMacAddress::OMacAddress( unsigned char* p )
{
- memcpy( _bytes, p, 6 ); // D'OH! memcpy in my sources... eeek...
+ memcpy( _bytes, p, 6 );
}
OMacAddress::OMacAddress( const unsigned char* p )
{
memcpy( _bytes, p, 6 );
}
OMacAddress::OMacAddress( struct ifreq& ifr )
{
memcpy( _bytes, ifr.ifr_hwaddr.sa_data, 6 );
}
OMacAddress::~OMacAddress()
{
}
+#ifdef QT_NO_DEBUG
+inline
+#endif
+const unsigned char* OMacAddress::native() const
+{
+ return (const unsigned char*) &_bytes;
+}
+
+
+OMacAddress OMacAddress::fromString( const QString& str )
+{
+ QString addr( str );
+ unsigned char buf[6];
+ bool ok = true;
+ int index = 14;
+ for ( int i = 5; i >= 0; --i )
+ {
+ buf[i] = addr.right( 2 ).toUShort( &ok, 16 );
+ if ( !ok ) return OMacAddress::unknown;
+ addr.truncate( index );
+ index -= 3;
+ }
+ return (const unsigned char*) &buf;
+}
+
+
QString OMacAddress::toString() const
{
QString s;
s.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
_bytes[0]&0xff, _bytes[1]&0xff, _bytes[2]&0xff,
_bytes[3]&0xff, _bytes[4]&0xff, _bytes[5]&0xff );
return s;
}
bool operator==( const OMacAddress &m1, const OMacAddress &m2 )
{