Annotation of embedaddon/strongswan/src/libcharon/sa/ike_sa_id.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2012 Tobias Brunner
3: * Copyright (C) 2005-2006 Martin Willi
4: * Copyright (C) 2005 Jan Hutter
5: * HSR Hochschule fuer Technik Rapperswil
6: *
7: * This program is free software; you can redistribute it and/or modify it
8: * under the terms of the GNU General Public License as published by the
9: * Free Software Foundation; either version 2 of the License, or (at your
10: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
11: *
12: * This program is distributed in the hope that it will be useful, but
13: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15: * for more details.
16: */
17:
18: #include "ike_sa_id.h"
19:
20: #include <stdio.h>
21: #include <encoding/payloads/ike_header.h>
22:
23: typedef struct private_ike_sa_id_t private_ike_sa_id_t;
24:
25: /**
26: * Private data of an ike_sa_id_t object.
27: */
28: struct private_ike_sa_id_t {
29: /**
30: * Public interface of ike_sa_id_t.
31: */
32: ike_sa_id_t public;
33:
34: /**
35: * Major IKE version of IKE_SA.
36: */
37: uint8_t ike_version;
38:
39: /**
40: * SPI of initiator.
41: */
42: uint64_t initiator_spi;
43:
44: /**
45: * SPI of responder.
46: */
47: uint64_t responder_spi;
48:
49: /**
50: * Role for specific IKE_SA.
51: */
52: bool is_initiator_flag;
53: };
54:
55: METHOD(ike_sa_id_t, get_ike_version, uint8_t,
56: private_ike_sa_id_t *this)
57: {
58: return this->ike_version;
59: }
60:
61: METHOD(ike_sa_id_t, set_responder_spi, void,
62: private_ike_sa_id_t *this, uint64_t responder_spi)
63: {
64: this->responder_spi = responder_spi;
65: }
66:
67: METHOD(ike_sa_id_t, set_initiator_spi, void,
68: private_ike_sa_id_t *this, uint64_t initiator_spi)
69: {
70: this->initiator_spi = initiator_spi;
71: }
72:
73: METHOD(ike_sa_id_t, get_initiator_spi, uint64_t,
74: private_ike_sa_id_t *this)
75: {
76: return this->initiator_spi;
77: }
78:
79: METHOD(ike_sa_id_t, get_responder_spi, uint64_t,
80: private_ike_sa_id_t *this)
81: {
82: return this->responder_spi;
83: }
84:
85: METHOD(ike_sa_id_t, equals, bool,
86: private_ike_sa_id_t *this, private_ike_sa_id_t *other)
87: {
88: if (other == NULL)
89: {
90: return FALSE;
91: }
92: return this->ike_version == other->ike_version &&
93: (this->ike_version == IKEV1_MAJOR_VERSION ||
94: this->is_initiator_flag == other->is_initiator_flag) &&
95: this->initiator_spi == other->initiator_spi &&
96: this->responder_spi == other->responder_spi;
97: }
98:
99: METHOD(ike_sa_id_t, replace_values, void,
100: private_ike_sa_id_t *this, private_ike_sa_id_t *other)
101: {
102: this->ike_version = other->ike_version;
103: this->initiator_spi = other->initiator_spi;
104: this->responder_spi = other->responder_spi;
105: this->is_initiator_flag = other->is_initiator_flag;
106: }
107:
108: METHOD(ike_sa_id_t, is_initiator, bool,
109: private_ike_sa_id_t *this)
110: {
111: return this->is_initiator_flag;
112: }
113:
114: METHOD(ike_sa_id_t, switch_initiator, bool,
115: private_ike_sa_id_t *this)
116: {
117: this->is_initiator_flag = !this->is_initiator_flag;
118: return this->is_initiator_flag;
119: }
120:
121: METHOD(ike_sa_id_t, clone_, ike_sa_id_t*,
122: private_ike_sa_id_t *this)
123: {
124: return ike_sa_id_create(this->ike_version, this->initiator_spi,
125: this->responder_spi, this->is_initiator_flag);
126: }
127:
128: METHOD(ike_sa_id_t, destroy, void,
129: private_ike_sa_id_t *this)
130: {
131: free(this);
132: }
133:
134: /*
135: * Described in header.
136: */
137: ike_sa_id_t * ike_sa_id_create(uint8_t ike_version, uint64_t initiator_spi,
138: uint64_t responder_spi, bool is_initiator_flag)
139: {
140: private_ike_sa_id_t *this;
141:
142: INIT(this,
143: .public = {
144: .get_ike_version = _get_ike_version,
145: .set_responder_spi = _set_responder_spi,
146: .set_initiator_spi = _set_initiator_spi,
147: .get_responder_spi = _get_responder_spi,
148: .get_initiator_spi = _get_initiator_spi,
149: .equals = (void*)_equals,
150: .replace_values = (void*)_replace_values,
151: .is_initiator = _is_initiator,
152: .switch_initiator = _switch_initiator,
153: .clone = _clone_,
154: .destroy = _destroy,
155: },
156: .ike_version = ike_version,
157: .initiator_spi = initiator_spi,
158: .responder_spi = responder_spi,
159: .is_initiator_flag = is_initiator_flag,
160: );
161:
162: return &this->public;
163: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>