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;
"Welcome to our mercurial repository"