From: Tobias Brunner Date: Fri, 24 Feb 2012 10:42:32 +0000 (+0100) Subject: Added packet_t.skip_bytes method to skip bytes at the start of a packet. X-Git-Tag: 5.0.1~211^2~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=73470cfe57e92416b9c8cdc08bdc898e3fb38f2c;p=thirdparty%2Fstrongswan.git Added packet_t.skip_bytes method to skip bytes at the start of a packet. --- diff --git a/src/libcharon/network/packet.c b/src/libcharon/network/packet.c index 19db362f78..c817e00fb2 100644 --- a/src/libcharon/network/packet.c +++ b/src/libcharon/network/packet.c @@ -1,4 +1,5 @@ /* + * Copyright (C) 2012 Tobias Brunner * Copyright (C) 2005-2006 Martin Willi * Copyright (C) 2005 Jan Hutter * Hochschule fuer Technik Rapperswil @@ -42,6 +43,11 @@ struct private_packet_t { * message data */ chunk_t data; + + /** + * actual chunk returned from get_data, adjusted when skip_bytes is called + */ + chunk_t adjusted_data; }; METHOD(packet_t, set_source, void, @@ -73,14 +79,20 @@ METHOD(packet_t, get_destination, host_t*, METHOD(packet_t, get_data, chunk_t, private_packet_t *this) { - return this->data; + return this->adjusted_data; } METHOD(packet_t, set_data, void, private_packet_t *this, chunk_t data) { free(this->data.ptr); - this->data = data; + this->adjusted_data = this->data = data; +} + +METHOD(packet_t, skip_bytes, void, + private_packet_t *this, size_t bytes) +{ + this->adjusted_data = chunk_skip(this->adjusted_data, bytes); } METHOD(packet_t, destroy, void, @@ -108,7 +120,7 @@ METHOD(packet_t, clone_, packet_t*, } if (this->data.ptr != NULL) { - other->set_data(other, chunk_clone(this->data)); + other->set_data(other, chunk_clone(this->adjusted_data)); } return other; } @@ -128,6 +140,7 @@ packet_t *packet_create(void) .get_source = _get_source, .set_destination = _set_destination, .get_destination = _get_destination, + .skip_bytes = _skip_bytes, .clone = _clone_, .destroy = _destroy, }, diff --git a/src/libcharon/network/packet.h b/src/libcharon/network/packet.h index 18d82c6fcc..c53364104a 100644 --- a/src/libcharon/network/packet.h +++ b/src/libcharon/network/packet.h @@ -1,4 +1,5 @@ /* + * Copyright (C) 2012 Tobias Brunner * Copyright (C) 2005-2006 Martin Willi * Copyright (C) 2005 Jan Hutter * Hochschule fuer Technik Rapperswil @@ -92,6 +93,15 @@ struct packet_t { */ void (*set_data) (packet_t *packet, chunk_t data); + /** + * Increase the offset where the actual packet data starts. + * + * @note The offset is reset to 0 when set_data() is called. + * + * @param bytes the number of additional bytes to skip + */ + void (*skip_bytes) (packet_t *packet, size_t bytes); + /** * Clones a packet_t object. *