From: Tobias Brunner Date: Thu, 20 Dec 2012 15:04:38 +0000 (+0100) Subject: Add support to create IKE fragments X-Git-Tag: 5.0.2dr4~8^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07df944c9c21539f686831fd27585caa12effe02;p=thirdparty%2Fstrongswan.git Add support to create IKE fragments All fragments currently use the same fragment ID (1) as that's what other implementations are doing. --- diff --git a/src/libcharon/encoding/payloads/fragment_payload.c b/src/libcharon/encoding/payloads/fragment_payload.c index 2e7e061988..1a6b3234b7 100644 --- a/src/libcharon/encoding/payloads/fragment_payload.c +++ b/src/libcharon/encoding/payloads/fragment_payload.c @@ -206,3 +206,20 @@ fragment_payload_t *fragment_payload_create() this->payload_length = get_header_length(this); return &this->public; } + +/* + * Described in header + */ +fragment_payload_t *fragment_payload_create_from_data(u_int8_t num, bool last, + chunk_t data) +{ + private_fragment_payload_t *this; + + this = (private_fragment_payload_t*)fragment_payload_create(); + this->fragment_id = 1; + this->fragment_number = num; + this->flags |= (last ? LAST_FRAGMENT : 0); + this->data = chunk_clone(data); + this->payload_length = get_header_length(this) + data.len; + return &this->public; +} \ No newline at end of file diff --git a/src/libcharon/encoding/payloads/fragment_payload.h b/src/libcharon/encoding/payloads/fragment_payload.h index 60358abb99..a49cf32ddf 100644 --- a/src/libcharon/encoding/payloads/fragment_payload.h +++ b/src/libcharon/encoding/payloads/fragment_payload.h @@ -78,4 +78,17 @@ struct fragment_payload_t { */ fragment_payload_t *fragment_payload_create(); +/** + * Creates a fragment payload from the given data. All fragments currently + * have the same fragment ID (1), which seems what other implementations are + * doing. + * + * @param num fragment number (first one should be 1) + * @param last TRUE to indicate that this is the last fragment + * @param data fragment data (gets cloned) + * @return fragment_payload_t object + */ +fragment_payload_t *fragment_payload_create_from_data(u_int8_t num, bool last, + chunk_t data); + #endif /** FRAGMENT_PAYLOAD_H_ @}*/