fixed same bug as for DestinationUnreachable in TimeExceeded messages: accept reply...
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Fri, 20 Mar 2015 08:38:19 +0000 (09:38 +0100)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Fri, 20 Mar 2015 08:38:19 +0000 (09:38 +0100)
altered unit test accordingly
removed unnecessary implementations of match_xy functions that also just return false

src/icmp/icmpdata.cpp
src/icmp/icmpdata.h
src/icmp/icmpdestinationunreachabledata.cpp
src/icmp/icmpdestinationunreachabledata.h
src/icmp/icmppacket.cpp
src/icmp/icmptimeexceededdata.cpp
src/icmp/icmptimeexceededdata.h
test/test_icmppacket.cpp

index 3e54173..791aa5d 100644 (file)
@@ -56,7 +56,8 @@ bool IcmpData::match_destination_unreachable(const uint16_t identifier,
 {  return false;  }
 
 bool IcmpData::match_time_exceeded(const uint16_t identifier,
-                                   const uint16_t sequence_number) const
+                                   const uint16_t sequence_number,
+                                   const address &destination_address) const
 {  return false;  }
 
 std::size_t IcmpData::get_size() const
index 3b25064..f428b3e 100644 (file)
@@ -58,7 +58,8 @@ public:
                                   const address &destination_address) const;
 
     virtual bool match_time_exceeded(const uint16_t identifier,
-                                     const uint16_t sequence_number) const;
+                                     const uint16_t sequence_number,
+                                     const address &destination_address) const;
 
     // including 4 bytes from ICMPv4 header
     std::size_t get_size() const;
index 825697e..bfb17f4 100644 (file)
@@ -44,11 +44,6 @@ bool IcmpDestinationUnreachableData::match_destination_unreachable(
                                        == destination_address;
 }
 
-bool IcmpDestinationUnreachableData::match_time_exceeded(
-                                           const uint16_t identifier,
-                                           const uint16_t sequence_number) const
-{ return false; }
-
 /**
  * @brief Prints the destination unreachable messages.
  *
index 0f49fb3..4db1b34 100644 (file)
@@ -48,9 +48,6 @@ public:
                                       const uint16_t sequence_number,
                                       const address &destination_address) const;
 
-    bool match_time_exceeded(const uint16_t identifier,
-                             const uint16_t sequence_number) const;
-
     /**
      * @brief Prints the destination unreachable messages.
      *
index ab6e682..fe896b7 100644 (file)
@@ -133,8 +133,9 @@ bool IcmpPacket::match_time_exceeded(const uint16_t identifier,
                                      const uint16_t sequence_number,
                                      const address &destination_address) const
 {
-    return icmp_data_ptr->match_time_exceeded(identifier, sequence_number);
-    // do not test ip since probably comes from router on route to dest. addr
+    return icmp_data_ptr->match_time_exceeded(identifier,
+                                              sequence_number,
+                                              destination_address);
 }
 
 bool IcmpPacket::match_echo_reply(const uint16_t identifier,
index 8f2af93..e778bb9 100644 (file)
@@ -33,18 +33,15 @@ IcmpTimeExceededData::IcmpTimeExceededData(const std::size_t size_arg)
 {}
 
 bool IcmpTimeExceededData::match_time_exceeded(
-                                           const uint16_t identifier,
-                                           const uint16_t sequence_number) const
-{
-    return IcmpData_PingFailReply::match_ping_request(identifier,
-                                                      sequence_number);
-}
-
-bool IcmpTimeExceededData::match_destination_unreachable(
                                        const uint16_t identifier,
                                        const uint16_t sequence_number,
                                        const address &destination_address) const
-{ return false; }
+{
+    return IcmpData_PingFailReply::match_ping_request(identifier,
+                                                      sequence_number)
+        && IcmpData::get_ip_header()->get_destination_address()
+                                       == destination_address;
+}
 
 void IcmpTimeExceededData::print(
             const size_t &bytes_received,
index 45b73c1..3f6eef8 100644 (file)
@@ -44,12 +44,9 @@ class IcmpTimeExceededData : public IcmpData_PingFailReply
 public:
     IcmpTimeExceededData(const std::size_t size_arg);
 
-    bool match_destination_unreachable(const uint16_t identifier,
-                                      const uint16_t sequence_number,
-                                      const address &destination_address) const;
-
     bool match_time_exceeded(const uint16_t identifier,
-                             const uint16_t sequence_number) const;
+                             const uint16_t sequence_number,
+                             const address &destination_address) const;
 
     void print( const size_t &bytes_received,
                 const boost::posix_time::ptime &time_packet_sent,
index 559b095..a8ea85d 100644 (file)
@@ -126,7 +126,7 @@ BOOST_AUTO_TEST_CASE( TimeExceeded )
     BOOST_CHECK_EQUAL( packet->get_icmp_code(), 0 );
     BOOST_CHECK_EQUAL( packet->get_icmp_size(), 48 );
     BOOST_CHECK( packet->match_time_exceeded(0x4ae3, 1,
-                 boost::asio::ip::address_v4::from_string("193.168.7.1")) );
+                 boost::asio::ip::address_v4::from_string("216.218.186.2")) );
 }
 
 BOOST_AUTO_TEST_CASE( DestinationUnreachable )