diff options
author | Martin Willi <martin@revosec.ch> | 2011-12-05 16:20:56 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-03-20 17:31:12 +0100 |
commit | 695aff41f5680b4c892005ea501b645c08d2fb2e (patch) | |
tree | 43c4a708e2473c588d8acb0d046cb86a89029464 | |
parent | caa6f772c817cffce3ee5128a9e675bb873a5c73 (diff) | |
download | strongswan-695aff41f5680b4c892005ea501b645c08d2fb2e.tar.bz2 strongswan-695aff41f5680b4c892005ea501b645c08d2fb2e.tar.xz |
Encode a single IP traffic selector as ID_IPV?_ADDRESS identity
-rwxr-xr-x | src/libcharon/encoding/payloads/id_payload.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/libcharon/encoding/payloads/id_payload.c b/src/libcharon/encoding/payloads/id_payload.c index 2d27021a3..4d5cd05fe 100755 --- a/src/libcharon/encoding/payloads/id_payload.c +++ b/src/libcharon/encoding/payloads/id_payload.c @@ -391,7 +391,19 @@ id_payload_t *id_payload_create_from_ts(traffic_selector_t *ts) this = (private_id_payload_t*)id_payload_create(ID_V1); - if (ts->to_subnet(ts, &net, &mask)) + if (ts->is_host(ts, NULL)) + { + if (ts->get_type(ts) == TS_IPV4_ADDR_RANGE) + { + this->id_type = ID_IPV4_ADDR; + } + else + { + this->id_type = ID_IPV6_ADDR; + } + this->id_data = chunk_clone(ts->get_from_address(ts)); + } + else if (ts->to_subnet(ts, &net, &mask)) { u_int8_t netmask[16], len, byte; @@ -418,6 +430,7 @@ id_payload_t *id_payload_create_from_ts(traffic_selector_t *ts) } this->id_data = chunk_cat("cc", net->get_address(net), chunk_create(netmask, len)); + net->destroy(net); } else { @@ -431,12 +444,12 @@ id_payload_t *id_payload_create_from_ts(traffic_selector_t *ts) } this->id_data = chunk_cat("cc", ts->get_from_address(ts), ts->get_to_address(ts)); + net->destroy(net); } this->port = ts->get_from_port(ts); this->protocol_id = ts->get_protocol(ts); this->payload_length += this->id_data.len; - net->destroy(net); - return &this->public; } + |