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/libcharon/network/packet.c | |
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/libcharon/network/packet.c')
-rw-r--r-- | src/libcharon/network/packet.c | 19 |
1 files changed, 16 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, }, |