Imported Upstream version 0.3.4
[anytun.git] / src / plainPacket.cpp
index 79a72de..ad37263 100644 (file)
@@ -11,7 +11,7 @@
  *  tunneling and relaying of packets of any protocol.
  *
  *
- *  Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl, 
+ *  Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl,
  *                          Christian Pointner <satp@wirdorange.org>
  *
  *  This file is part of Anytun.
 #include "plainPacket.h"
 #include "anytunError.h"
 
-PlainPacket::PlainPacket(u_int32_t payload_length, bool allow_realloc) : Buffer(payload_length + sizeof(payload_type_t), allow_realloc)
+PlainPacket::PlainPacket(uint32_t payload_length, bool allow_realloc) : Buffer(payload_length + sizeof(payload_type_t), allow_realloc)
 {
   payload_type_ = reinterpret_cast<payload_type_t*>(buf_);
   payload_ = buf_ + sizeof(payload_type_t);
   *payload_type_ = 0;
 }
 
-u_int32_t PlainPacket::getHeaderLength()
+uint32_t PlainPacket::getHeaderLength()
 {
   return sizeof(payload_type_t);
 }
 
 payload_type_t PlainPacket::getPayloadType() const
 {
-  if(payload_type_)
+  if(payload_type_) {
     return PAYLOAD_TYPE_T_NTOH(*payload_type_);
+  }
 
   return 0;
 }
 
 void PlainPacket::setPayloadType(payload_type_t payload_type)
 {
-  if(!payload_type_)
+  if(!payload_type_) {
     return;
-  
+  }
+
   if(payload_type == PAYLOAD_TYPE_TUN) {
     if(!payload_) {
       *payload_type_ = PAYLOAD_TYPE_T_HTON(PAYLOAD_TYPE_TUN);
       return;
     }
 
-    char * ip_version_ptr = reinterpret_cast<char *>(payload_);
-               char ip_version = ip_version_ptr[0];
-               ip_version >>=4;
-    if(ip_version == 4)
+    char* ip_version_ptr = reinterpret_cast<char*>(payload_);
+    char ip_version = ip_version_ptr[0];
+    ip_version >>=4;
+    if(ip_version == 4) {
       *payload_type_ = PAYLOAD_TYPE_T_HTON(PAYLOAD_TYPE_TUN4);
-    else if(ip_version == 6)
+    } else if(ip_version == 6) {
       *payload_type_ = PAYLOAD_TYPE_T_HTON(PAYLOAD_TYPE_TUN6);
-  }
-  else
+    }
+  } else {
     *payload_type_ = PAYLOAD_TYPE_T_HTON(payload_type);
+  }
 }
 
-u_int32_t PlainPacket::getPayloadLength() const
+uint32_t PlainPacket::getPayloadLength() const
 {
-  if(!payload_)
+  if(!payload_) {
     return 0;
+  }
 
   return (length_ > sizeof(payload_type_t)) ? (length_ - sizeof(payload_type_t)) : 0;
 }
-    
-void PlainPacket::setPayloadLength(u_int32_t payload_length)
+
+void PlainPacket::setPayloadLength(uint32_t payload_length)
 {
   Buffer::setLength(payload_length + sizeof(payload_type_t));
-      // depending on allow_realloc buf_ may point to another address
-      // therefore in this case reinit() gets called by Buffer::setLength()
+  // depending on allow_realloc buf_ may point to another address
+  // therefore in this case reinit() gets called by Buffer::setLength()
 }
 
 void PlainPacket::reinit()
@@ -100,17 +104,18 @@ void PlainPacket::reinit()
   payload_type_ = reinterpret_cast<payload_type_t*>(buf_);
   payload_ = buf_ + sizeof(payload_type_t);
 
-  if(length_ <= (sizeof(payload_type_t)))
+  if(length_ <= (sizeof(payload_type_t))) {
     payload_ = NULL;
+  }
 
   if(length_ < (sizeof(payload_type_t))) {
     payload_type_ = NULL;
-    AnytunError::throwErr() << "plain packet can't be initialized, buffer is too small"; 
+    AnytunError::throwErr() << "plain packet can't be initialized, buffer is too small";
   }
 
 }
 
-u_int8_t* PlainPacket::getPayload()
+uint8_t* PlainPacket::getPayload()
 {
   return payload_;
 }
@@ -147,35 +152,35 @@ NetworkAddress PlainPacket::getSrcAddr() const
 
 NetworkAddress PlainPacket::getDstAddr() const
 {
-       if(!payload_type_ || !payload_)
-               return NetworkAddress();
-
-       payload_type_t type = PAYLOAD_TYPE_T_NTOH(*payload_type_);
-
-       if(type == PAYLOAD_TYPE_TAP) // Ehternet
-       {
-               // TODO
-               return NetworkAddress();
-       }
-       else if(type == PAYLOAD_TYPE_TUN4) // IPv4
-       {
-               if(length_ < (sizeof(payload_type_t)+5*4))
-                       return NetworkAddress();
-               char * hdr = reinterpret_cast<char *>(payload_);
-               boost::asio::ip::address_v4::bytes_type ip_octets;
-               for (int i=0; i<4;i++)
-                       ip_octets[i]=hdr[4*4+i];
-               return NetworkAddress(boost::asio::ip::address_v4(ip_octets));
-       }
-       else if(type == PAYLOAD_TYPE_TUN6) // IPv6
-       {
-               if(length_ < (sizeof(payload_type_t)+2*16+2*4))
-                       return NetworkAddress();
-               char * hdr = reinterpret_cast<char *>(payload_);
-               boost::asio::ip::address_v6::bytes_type ip_octets;
-               for (int i=0; i<16;i++)
-                       ip_octets[i]=hdr[2*4+16+i];
-               return NetworkAddress(boost::asio::ip::address_v6(ip_octets));
-       }
-       return NetworkAddress();
+  if(!payload_type_ || !payload_) {
+    return NetworkAddress();
+  }
+
+  payload_type_t type = PAYLOAD_TYPE_T_NTOH(*payload_type_);
+
+  if(type == PAYLOAD_TYPE_TAP) { // Ehternet
+    // TODO
+    return NetworkAddress();
+  } else if(type == PAYLOAD_TYPE_TUN4) { // IPv4
+    if(length_ < (sizeof(payload_type_t)+5*4)) {
+      return NetworkAddress();
+    }
+    char* hdr = reinterpret_cast<char*>(payload_);
+    boost::asio::ip::address_v4::bytes_type ip_octets;
+    for(int i=0; i<4; i++) {
+      ip_octets[i]=hdr[4*4+i];
+    }
+    return NetworkAddress(boost::asio::ip::address_v4(ip_octets));
+  } else if(type == PAYLOAD_TYPE_TUN6) { // IPv6
+    if(length_ < (sizeof(payload_type_t)+2*16+2*4)) {
+      return NetworkAddress();
+    }
+    char* hdr = reinterpret_cast<char*>(payload_);
+    boost::asio::ip::address_v6::bytes_type ip_octets;
+    for(int i=0; i<16; i++) {
+      ip_octets[i]=hdr[2*4+16+i];
+    }
+    return NetworkAddress(boost::asio::ip::address_v6(ip_octets));
+  }
+  return NetworkAddress();
 }