Apply send delay before adding non-ESP marker
authorTobias Brunner <tobias@strongswan.org>
Fri, 24 Aug 2012 09:23:36 +0000 (11:23 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 24 Aug 2012 09:23:36 +0000 (11:23 +0200)
Otherwise the packet header could not be parsed correctly when NAT-T is
used.

src/libcharon/network/sender.c

index 5787b9a..059f24b 100644 (file)
@@ -83,6 +83,22 @@ struct private_sender_t {
 METHOD(sender_t, send_no_marker, void,
        private_sender_t *this, packet_t *packet)
 {
 METHOD(sender_t, send_no_marker, void,
        private_sender_t *this, packet_t *packet)
 {
+       this->mutex->lock(this->mutex);
+       this->list->insert_last(this->list, packet);
+       this->got->signal(this->got);
+       this->mutex->unlock(this->mutex);
+}
+
+METHOD(sender_t, send_, void,
+       private_sender_t *this, packet_t *packet)
+{
+       host_t *src, *dst;
+
+       /* if neither source nor destination port is 500 we add a Non-ESP marker */
+       src = packet->get_source(packet);
+       dst = packet->get_destination(packet);
+       DBG1(DBG_NET, "sending packet: from %#H to %#H", src, dst);
+
        if (this->send_delay)
        {
                message_t *message;
        if (this->send_delay)
        {
                message_t *message;
@@ -104,22 +120,6 @@ METHOD(sender_t, send_no_marker, void,
                message->destroy(message);
        }
 
                message->destroy(message);
        }
 
-       this->mutex->lock(this->mutex);
-       this->list->insert_last(this->list, packet);
-       this->got->signal(this->got);
-       this->mutex->unlock(this->mutex);
-}
-
-METHOD(sender_t, send_, void,
-       private_sender_t *this, packet_t *packet)
-{
-       host_t *src, *dst;
-
-       /* if neither source nor destination port is 500 we add a Non-ESP marker */
-       src = packet->get_source(packet);
-       dst = packet->get_destination(packet);
-       DBG1(DBG_NET, "sending packet: from %#H to %#H", src, dst);
-
        if (dst->get_port(dst) != IKEV2_UDP_PORT &&
                src->get_port(src) != IKEV2_UDP_PORT)
        {
        if (dst->get_port(dst) != IKEV2_UDP_PORT &&
                src->get_port(src) != IKEV2_UDP_PORT)
        {