Mercurial > hg > freeDiameter
comparison extensions/app_diameap/diameap_eappacket.c @ 1027:0117a7746b21
Fix a number of errors and warnings introduced/highlighted by recent commits
author | Sebastien Decugis <sdecugis@freediameter.net> |
---|---|
date | Mon, 15 Apr 2013 15:17:07 +0800 |
parents | 2091bf698fb1 |
children |
comparison
equal
deleted
inserted
replaced
1026:beb375690453 | 1027:0117a7746b21 |
---|---|
36 *****************************************************************************************************/ | 36 *****************************************************************************************************/ |
37 | 37 |
38 | 38 |
39 #include "libdiameap.h" | 39 #include "libdiameap.h" |
40 | 40 |
41 int diameap_eap_get_code(struct eap_packet eappacket, eap_code * eapcode) | 41 int diameap_eap_get_code(struct eap_packet *eappacket, eap_code * eapcode) |
42 { | 42 { |
43 TRACE_ENTRY("%p %p",eappacket,eapcode); | 43 TRACE_ENTRY("%p %p",eappacket,eapcode); |
44 | 44 |
45 if (eappacket.data == NULL) | 45 if (eappacket->data == NULL) |
46 { | 46 { |
47 *eapcode = ERROR; | 47 *eapcode = ERROR; |
48 TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no EAP Code to return.",DIAMEAP_EXTENSION); | 48 TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no EAP Code to return.",DIAMEAP_EXTENSION); |
49 return EINVAL; | 49 return EINVAL; |
50 } | 50 } |
51 if (eappacket.length < 1) | 51 if (eappacket->length < 1) |
52 { | 52 { |
53 *eapcode = ERROR; | 53 *eapcode = ERROR; |
54 TRACE_DEBUG(INFO,"%sEAP packet length %d : no EAP Code to return.",DIAMEAP_EXTENSION, eappacket.length); | 54 TRACE_DEBUG(INFO,"%sEAP packet length %d : no EAP Code to return.",DIAMEAP_EXTENSION, eappacket->length); |
55 return EINVAL; | 55 return EINVAL; |
56 } | 56 } |
57 *eapcode = G8(eappacket.data); | 57 *eapcode = G8(eappacket->data); |
58 return 0; | 58 return 0; |
59 } | 59 } |
60 | 60 |
61 int diameap_eap_get_identifier(struct eap_packet eappacket, u8 * identifier) | 61 int diameap_eap_get_identifier(struct eap_packet *eappacket, u8 * identifier) |
62 { | 62 { |
63 TRACE_ENTRY("%p %p",eappacket,identifier); | 63 TRACE_ENTRY("%p %p",eappacket,identifier); |
64 *identifier = 0; | 64 *identifier = 0; |
65 if (eappacket.data == NULL) | 65 if (eappacket->data == NULL) |
66 { | 66 { |
67 TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no Identifier field to return.",DIAMEAP_EXTENSION); | 67 TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no Identifier field to return.",DIAMEAP_EXTENSION); |
68 return EINVAL; | 68 return EINVAL; |
69 } | 69 } |
70 if (eappacket.length < 2) | 70 if (eappacket->length < 2) |
71 { | 71 { |
72 TRACE_DEBUG(INFO,"%sEAP packet length %d : no Identifier field to return.",DIAMEAP_EXTENSION, eappacket.length); | 72 TRACE_DEBUG(INFO,"%sEAP packet length %d : no Identifier field to return.",DIAMEAP_EXTENSION, eappacket->length); |
73 return EINVAL; | 73 return EINVAL; |
74 } | 74 } |
75 *identifier = G8(eappacket.data + 1); | 75 *identifier = G8(eappacket->data + 1); |
76 return 0; | 76 return 0; |
77 } | 77 } |
78 | 78 |
79 int diameap_eap_get_length(struct eap_packet eappacket, u16 *length) | 79 int diameap_eap_get_length(struct eap_packet *eappacket, u16 *length) |
80 { | 80 { |
81 TRACE_ENTRY("%p %p",eappacket,length); | 81 TRACE_ENTRY("%p %p",eappacket,length); |
82 *length = 0; | 82 *length = 0; |
83 | 83 |
84 if (eappacket.data == NULL) | 84 if (eappacket->data == NULL) |
85 { | 85 { |
86 TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no Length field to return.",DIAMEAP_EXTENSION); | 86 TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no Length field to return.",DIAMEAP_EXTENSION); |
87 return EINVAL; | 87 return EINVAL; |
88 } | 88 } |
89 if (eappacket.ulength < 4) | 89 if (eappacket->ulength < 4) |
90 { | 90 { |
91 TRACE_DEBUG(INFO,"%sEAP packet length %d : no Length field to return.",DIAMEAP_EXTENSION, eappacket.length); | 91 TRACE_DEBUG(INFO,"%sEAP packet length %d : no Length field to return.",DIAMEAP_EXTENSION, eappacket->length); |
92 return EINVAL; | 92 return EINVAL; |
93 } | 93 } |
94 *length = (u16) G16BIGE((eappacket.data + 2)); | 94 *length = (u16) G16BIGE((eappacket->data + 2)); |
95 return 0; | 95 return 0; |
96 } | 96 } |
97 | 97 |
98 int diameap_eap_get_packetlength(struct eap_packet eappacket, u16 *length) | 98 int diameap_eap_get_packetlength(struct eap_packet *eappacket, u16 *length) |
99 { | 99 { |
100 TRACE_ENTRY("%p %p",eappacket,length); | 100 TRACE_ENTRY("%p %p",eappacket,length); |
101 if (eappacket.data == NULL) | 101 if (eappacket->data == NULL) |
102 { | 102 { |
103 TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no Length field to return.",DIAMEAP_EXTENSION); | 103 TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no Length field to return.",DIAMEAP_EXTENSION); |
104 return EINVAL; | 104 return EINVAL; |
105 } | 105 } |
106 *length = eappacket.ulength; | 106 *length = eappacket->ulength; |
107 return 0; | 107 return 0; |
108 } | 108 } |
109 | 109 |
110 int diameap_eap_get_type(struct eap_packet eappacket, eap_type * eaptype) | 110 int diameap_eap_get_type(struct eap_packet *eappacket, eap_type * eaptype) |
111 { | 111 { |
112 TRACE_ENTRY("%p %p",eappacket,eaptype); | 112 TRACE_ENTRY("%p %p",eappacket,eaptype); |
113 *eaptype = 0; | 113 *eaptype = 0; |
114 | 114 |
115 if (eappacket.data == NULL) | 115 if (eappacket->data == NULL) |
116 { | 116 { |
117 TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no EAP Type field to return.",DIAMEAP_EXTENSION); | 117 TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no EAP Type field to return.",DIAMEAP_EXTENSION); |
118 return EINVAL; | 118 return EINVAL; |
119 } | 119 } |
120 if (eappacket.length < 5) | 120 if (eappacket->length < 5) |
121 { | 121 { |
122 TRACE_DEBUG(INFO,"%sEAP packet length %d : no EAP Type field to return.",DIAMEAP_EXTENSION, eappacket.length); | 122 TRACE_DEBUG(INFO,"%sEAP packet length %d : no EAP Type field to return.",DIAMEAP_EXTENSION, eappacket->length); |
123 return EINVAL; | 123 return EINVAL; |
124 } | 124 } |
125 *eaptype = (u32) G8(eappacket.data + 4); | 125 *eaptype = (u32) G8(eappacket->data + 4); |
126 return 0; | 126 return 0; |
127 } | 127 } |
128 | 128 |
129 boolean diameap_eap_check_code(eap_code code) | 129 boolean diameap_eap_check_code(eap_code code) |
130 { | 130 { |
131 TRACE_ENTRY("%p",code); | 131 TRACE_ENTRY("%d",code); |
132 if (code != EAP_REQUEST && code != EAP_RESPONSE && code != EAP_SUCCESS | 132 if (code != EAP_REQUEST && code != EAP_RESPONSE && code != EAP_SUCCESS |
133 && code != EAP_FAILURE) | 133 && code != EAP_FAILURE) |
134 { | 134 { |
135 TRACE_DEBUG(FULL,"%sIncorrect EAP Code (%d).",DIAMEAP_EXTENSION,code); | 135 TRACE_DEBUG(FULL,"%sIncorrect EAP Code (%d).",DIAMEAP_EXTENSION,code); |
136 return FALSE; | 136 return FALSE; |
137 } | 137 } |
138 return TRUE; | 138 return TRUE; |
139 } | 139 } |
140 | 140 |
141 int diameap_eap_get_packetdata(struct eap_packet eappacket, u8 ** data, | 141 int diameap_eap_get_packetdata(struct eap_packet *eappacket, u8 ** data, |
142 int *len) | 142 int *len) |
143 { | 143 { |
144 TRACE_ENTRY("%p %p",eappacket,data); | 144 TRACE_ENTRY("%p %p",eappacket,data); |
145 if (eappacket.length > 0) | 145 if (eappacket->length > 0) |
146 { | 146 { |
147 *data = malloc(sizeof(u8) * eappacket.length); | 147 *data = malloc(sizeof(u8) * eappacket->length); |
148 U8COPY(*data,0,eappacket.length,eappacket.data); | 148 U8COPY(*data,0,eappacket->length,eappacket->data); |
149 *len = eappacket.length; | 149 *len = eappacket->length; |
150 return 0; | 150 return 0; |
151 } | 151 } |
152 TRACE_DEBUG(INFO,"%sEAP packet length=%d: empty or wrong EAP Packet.",DIAMEAP_EXTENSION, eappacket.length); | 152 TRACE_DEBUG(INFO,"%sEAP packet length=%d: empty or wrong EAP Packet.",DIAMEAP_EXTENSION, eappacket->length); |
153 *data = NULL; | 153 *data = NULL; |
154 *len = 0; | 154 *len = 0; |
155 return EINVAL; | 155 return EINVAL; |
156 } | 156 } |
157 | 157 |
158 int diameap_eap_get_data(struct eap_packet eappacket, u8 ** data, int * len) | 158 int diameap_eap_get_data(struct eap_packet *eappacket, u8 ** data, int * len) |
159 { | 159 { |
160 TRACE_ENTRY("%p %p",eappacket,data); | 160 TRACE_ENTRY("%p %p",eappacket,data); |
161 if (eappacket.length > 5) | 161 if (eappacket->length > 5) |
162 { | 162 { |
163 *data = malloc(sizeof(u8) * (eappacket.length - 5)); | 163 CHECK_MALLOC( *data = malloc(sizeof(u8) * (eappacket->length - 5)) ); |
164 U8COPY(*data,0,(eappacket.length-5),(eappacket.data+5)); | 164 U8COPY(*data,0,(eappacket->length-5),(eappacket->data+5)); |
165 *len = eappacket.length - 5; | 165 *len = eappacket->length - 5; |
166 return 0; | 166 return 0; |
167 } | 167 } |
168 TRACE_DEBUG(INFO,"%sEAP packet length=%d: empty or wrong EAP Packet.",DIAMEAP_EXTENSION, eappacket.length); | 168 TRACE_DEBUG(INFO,"%sEAP packet length=%d: empty or wrong EAP Packet.",DIAMEAP_EXTENSION, eappacket->length); |
169 *data = NULL; | 169 *data = NULL; |
170 *len = 0; | 170 *len = 0; |
171 | 171 |
172 return EINVAL; | 172 return EINVAL; |
173 } | 173 } |
174 | 174 |
175 void diameap_eap_dump(int level, struct eap_packet eappacket) | 175 void diameap_eap_dump(int level, struct eap_packet *eappacket) |
176 { | 176 { |
177 TRACE_ENTRY("%p %p",level,eappacket); | 177 TRACE_ENTRY("%d %p",level,eappacket); |
178 if (!TRACE_BOOL(level)) | 178 if (!TRACE_BOOL(level)) |
179 return; | 179 return; |
180 | 180 |
181 if (eappacket.data == NULL) | 181 if (eappacket->data == NULL) |
182 return; | 182 return; |
183 if (eappacket.length < 5) | 183 if (eappacket->length < 5) |
184 return; | 184 return; |
185 if (eappacket.ulength < 5) | 185 if (eappacket->ulength < 5) |
186 return; | 186 return; |
187 | 187 |
188 fd_log_debug("------------- Dump EAP Packet-------------"); | 188 fd_log_debug("------------- Dump EAP Packet-------------"); |
189 int i; | 189 int i; |
190 fd_log_debug("\t -Code : "); | 190 fd_log_debug("\t -Code : "); |
212 CHECK_FCT_DO(diameap_eap_get_identifier(eappacket,&id),return); | 212 CHECK_FCT_DO(diameap_eap_get_identifier(eappacket,&id),return); |
213 fd_log_debug("\t -Identifier : %x ", id); | 213 fd_log_debug("\t -Identifier : %x ", id); |
214 u16 length; | 214 u16 length; |
215 CHECK_FCT_DO(diameap_eap_get_length(eappacket,&length),return); | 215 CHECK_FCT_DO(diameap_eap_get_length(eappacket,&length),return); |
216 fd_log_debug("\t -Length : %d ", (unsigned int)length); | 216 fd_log_debug("\t -Length : %d ", (unsigned int)length); |
217 if (eappacket.length > 4) | 217 if (eappacket->length > 4) |
218 { | 218 { |
219 eap_type type; | 219 eap_type type; |
220 CHECK_FCT_DO(diameap_eap_get_type(eappacket,&type),return); | 220 CHECK_FCT_DO(diameap_eap_get_type(eappacket,&type),return); |
221 fd_log_debug("\t -Type : %d ", type); | 221 fd_log_debug("\t -Type : %d ", type); |
222 } | 222 } |
223 if (eappacket.length > 5) | 223 if (eappacket->length > 5) |
224 { | 224 { |
225 char buf[1024]; | 225 char buf[1024]; |
226 snprintf(buf, sizeof(buf), "\t -Data : "); | 226 snprintf(buf, sizeof(buf), "\t -Data : "); |
227 for (i = 5; i < eappacket.length && i < 30; i++) | 227 for (i = 5; i < eappacket->length && i < 30; i++) |
228 { | 228 { |
229 snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%02x ", G8(eappacket.data + i)); | 229 snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%02x ", G8(eappacket->data + i)); |
230 } | 230 } |
231 if(i+1<eappacket.length) | 231 if(i+1<eappacket->length) |
232 snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "[...] (len=%d)",(unsigned int) length); | 232 snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "[...] (len=%d)",(unsigned int) length); |
233 fd_log_debug("%s", buf); | 233 fd_log_debug("%s", buf); |
234 } | 234 } |
235 fd_log_debug("-------------End Dump EAP Packet-------------"); | 235 fd_log_debug("-------------End Dump EAP Packet-------------"); |
236 } | 236 } |
237 | 237 |
238 int diameap_eap_new(eap_code code, u8 id, eap_type type, u8 * data, | 238 int diameap_eap_new(eap_code code, u8 id, eap_type type, u8 * data, |
239 u16 dataLength, struct eap_packet *eappacket) | 239 u16 dataLength, struct eap_packet *eappacket) |
240 { | 240 { |
241 | 241 |
242 TRACE_ENTRY("%p %p %p %p %p %p", code, id, type, data, dataLength,eappacket); | 242 TRACE_ENTRY("%d %hhu %d %p %hu %p", code, id, type, data, dataLength,eappacket); |
243 | 243 |
244 int length = 0; | 244 int length = 0; |
245 | 245 |
246 //Initialize EAP Packet | 246 //Initialize EAP Packet |
247 eappacket->length = 0; | 247 eappacket->length = 0; |