00154 {
00155
00156 if (!ev.disabled())
00157 {
00158 bool l2r = msg->arrivedOn("in1");
00159 if (dynamic_cast<TCPSegment *>(msg))
00160 {
00161 tcpdump.dump(l2r, "", (TCPSegment *)msg, std::string(l2r?"A":"B"),std::string(l2r?"B":"A"));
00162 }
00163 else
00164 {
00165
00166 cMessage *encapmsg = msg;
00167 while (encapmsg && dynamic_cast<IPDatagram *>(encapmsg)==NULL && dynamic_cast<IPv6Datagram_Base *>(encapmsg)==NULL)
00168 encapmsg = encapmsg->encapsulatedMsg();
00169 if (!encapmsg)
00170 {
00171
00172
00173 EV << "CANNOT DECODE: packet " << msg->name() << " doesn't contain either IP or IPv6 Datagram\n";
00174 }
00175 else
00176 {
00177 if (dynamic_cast<IPDatagram *>(encapmsg))
00178 tcpdump.dump(l2r, "", (IPDatagram *)encapmsg);
00179 else if (dynamic_cast<IPv6Datagram_Base *>(encapmsg))
00180 tcpdump.dumpIPv6(l2r, "", (IPv6Datagram_Base *)encapmsg);
00181 else
00182 ASSERT(0);
00183 }
00184 }
00185 }
00186
00187
00188 send(msg, msg->arrivedOn("in1") ? "out2" : "out1");
00189 }