bool send_delay_response;
};
-METHOD(sender_t, send_, void,
+METHOD(sender_t, send_no_marker, void,
private_sender_t *this, packet_t *packet)
{
host_t *src, *dst;
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);
+ if (dst->get_port(dst) != IKEV2_UDP_PORT &&
+ src->get_port(src) != IKEV2_UDP_PORT)
+ {
+ chunk_t marker = chunk_from_chars(0x00, 0x00, 0x00, 0x00), data;
+
+ data = packet->get_data(packet);
+ /* NAT keepalives have no marker prepended */
+ if (data.len != 1 || data.ptr[0] != 0xFF)
+ {
+ data = chunk_cat("cm", marker, data);
+ packet->set_data(packet, data);
+ }
+ }
+
+ send_no_marker(this, packet);
+}
+
/**
* Job callback function to send packets
*/
-static job_requeue_t send_packets(private_sender_t * this)
+static job_requeue_t send_packets(private_sender_t *this)
{
packet_t *packet;
- host_t *src, *dst;
bool oldstate;
this->mutex->lock(this->mutex);
this->sent->signal(this->sent);
this->mutex->unlock(this->mutex);
- /* if neither source nor destination port is 500 we add a Non-ESP marker */
- dst = packet->get_destination(packet);
- src = packet->get_source(packet);
- if (dst->get_port(dst) != IKEV2_UDP_PORT &&
- src->get_port(src) != IKEV2_UDP_PORT)
- {
- chunk_t marker = chunk_from_chars(0x00, 0x00, 0x00, 0x00), data;
-
- data = packet->get_data(packet);
- /* NAT keepalives have no marker prepended */
- if (data.len != 1 || data.ptr[0] != 0xFF)
- {
- data = chunk_cat("cm", marker, data);
- packet->set_data(packet, data);
- }
- }
-
charon->socket->send(charon->socket, packet);
packet->destroy(packet);
return JOB_REQUEUE_DIRECT;
INIT(this,
.public = {
.send = _send_,
+ .send_no_marker = _send_no_marker,
.flush = _flush,
.destroy = _destroy,
},
/*
+ * Copyright (C) 2012 Tobias Brunner
* Copyright (C) 2005-2007 Martin Willi
* Copyright (C) 2005 Jan Hutter
* Hochschule fuer Technik Rapperswil
*/
void (*send) (sender_t *this, packet_t *packet);
+ /**
+ * The same as send() but does not add Non-ESP markers automatically.
+ *
+ * @param packet packet to send
+ */
+ void (*send_no_marker) (sender_t *this, packet_t *packet);
+
/**
* Enforce a flush of the send queue.
*