diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-02-24 11:42:32 +0100 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-08-08 15:12:25 +0200 |
commit | 73470cfe57e92416b9c8cdc08bdc898e3fb38f2c (patch) | |
tree | 8ce27f2b5626a55d63e2ecdc786474a64cfb053a /src | |
parent | 896941d3654df69894c16c498d564eee2f615758 (diff) | |
download | strongswan-73470cfe57e92416b9c8cdc08bdc898e3fb38f2c.tar.bz2 strongswan-73470cfe57e92416b9c8cdc08bdc898e3fb38f2c.tar.xz |
Added packet_t.skip_bytes method to skip bytes at the start of a packet.
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/network/packet.c | 19 | ||||
-rw-r--r-- | src/libcharon/network/packet.h | 10 |
2 files changed, 26 insertions, 3 deletions
diff --git a/src/libcharon/network/packet.c b/src/libcharon/network/packet.c index 19db362f7..c817e00fb 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 18d82c6fc..c53364104 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 @@ -93,6 +94,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. * * @param clone clone of the packet |