aboutsummaryrefslogtreecommitdiff
path: root/src/vpn
diff options
context:
space:
mode:
authorPhilipp Tölke <toelke@in.tum.de>2010-06-28 12:37:37 +0000
committerPhilipp Tölke <toelke@in.tum.de>2010-06-28 12:37:37 +0000
commit9da3a783a66c1d1bf57cd838625c95e5ba083c62 (patch)
tree1dfa0adf1f4f654ffcb7643aca5741d52f301098 /src/vpn
parent09c43b4598f40f2bf3ebfe7593f9ed10502b3574 (diff)
downloadgnunet-9da3a783a66c1d1bf57cd838625c95e5ba083c62.tar.gz
gnunet-9da3a783a66c1d1bf57cd838625c95e5ba083c62.zip
some improvements in the test-code for the vpn-functionality
-print continously -print the complete hexdump
Diffstat (limited to 'src/vpn')
-rw-r--r--src/vpn/packet.c40
-rw-r--r--src/vpn/test.c10
2 files changed, 38 insertions, 12 deletions
diff --git a/src/vpn/packet.c b/src/vpn/packet.c
index c4c7dc290..9a895224a 100644
--- a/src/vpn/packet.c
+++ b/src/vpn/packet.c
@@ -193,41 +193,67 @@ static void pp_ip6adr(unsigned char* adr, char* dest) {{{
193 memcpy(dest+37, tmp, 2); 193 memcpy(dest+37, tmp, 2);
194}}} 194}}}
195 195
196void pp_hexdump(unsigned char* data, char* dest, int max) { 196void pp_hexdump(unsigned char* data, char* dest, int max) {{{
197 char tmp[3]; 197 char tmp[3];
198 int to = max > 8 ? 8 : max; 198 char tmp2[2];
199 int off = 0;
200 int to = max > 16 ? 16 : max;
199 for (int i = 0; i < to; i++) { 201 for (int i = 0; i < to; i++) {
202 if (i == 8) off = 1;
200 sprintf(tmp, "%02x", data[i]); 203 sprintf(tmp, "%02x", data[i]);
201 memcpy(dest+(3*i), tmp, 2); 204 memcpy(dest+(3*i)+off, tmp, 2);
205 if (isprint(data[i])) {
206 sprintf(tmp2, "%c", data[i]);
207 memcpy(dest+51+i, tmp2, 1);
208 }
209 }
210}}}
211
212void pp_write_header(char* dest, struct ip6_pkt* pkt) {
213 switch (pkt->nxthdr) {
214 case 0x3a:
215 memcpy(dest, "ICMPv6)", 7);
216 break;
217 default:
218 memcpy(dest, "unknown)", 8);
219 break;
202 } 220 }
203} 221}
204 222
205void pkt_printf(struct ip6_pkt* pkt) { 223void pkt_printf(struct ip6_pkt* pkt) {
206 char* buf = (char*)malloc(strlen(pretty)+1); 224 char* buf = (char*)malloc(strlen(pretty)+1);
207 char tmp[4]; 225 char tmp[9];
208 226
209 memcpy(buf, pretty, strlen(pretty)+1); 227 memcpy(buf, pretty, strlen(pretty)+1);
210 228
211 pp_ip6adr(pkt->sadr, buf+16); 229 pp_ip6adr(pkt->sadr, buf+16);
212 pp_ip6adr(pkt->dadr, buf+76); 230 pp_ip6adr(pkt->dadr, buf+76);
213 231
214 sprintf(tmp, "%03x", (pkt->flowlbl[0] << 16) + (pkt->flowlbl[1] << 8) + (pkt->flowlbl[2])); 232 int flow = (pkt->flowlbl[0] << 16) + (pkt->flowlbl[1] << 8) + (pkt->flowlbl[2]);
233 sprintf(tmp, "%03x", flow);
215 memcpy(buf+138, tmp, 3); 234 memcpy(buf+138, tmp, 3);
235 sprintf(tmp, "%-8d", flow);
236 memcpy(buf+143, tmp, 8);
216 237
217 sprintf(tmp, "%02x", (pkt->paylgth[0] << 8) + (pkt->paylgth[1])); 238 int length = (pkt->paylgth[0] << 8) + (pkt->paylgth[1]);
239 sprintf(tmp, "%02x", length);
218 memcpy(buf+198, tmp, 2); 240 memcpy(buf+198, tmp, 2);
241 sprintf(tmp, "%-3d", length);
242 memcpy(buf+203, tmp, 3);
219 243
220 sprintf(tmp, "%02x", pkt->nxthdr); 244 sprintf(tmp, "%02x", pkt->nxthdr);
221 memcpy(buf+258, tmp, 2); 245 memcpy(buf+258, tmp, 2);
246 pp_write_header(buf+263, pkt);
222 247
223 sprintf(tmp, "%02x", pkt->hoplmt); 248 sprintf(tmp, "%02x", pkt->hoplmt);
224 memcpy(buf+318, tmp, 2); 249 memcpy(buf+318, tmp, 2);
250 sprintf(tmp, "%-3d", pkt->hoplmt);
251 memcpy(buf+323, tmp, 3);
225 252
226 int size = payload(pkt); 253 int size = payload(pkt);
227 for(int i = 0; i < 8; i++) { 254 for(int i = 0; i < 8; i++) {
228 if (16*i > size) break; 255 if (16*i > size) break;
229 pp_hexdump(pkt->data + (16*i), buf + 420 + (i*70), size - 16*i); 256 pp_hexdump(pkt->data + (16*i), buf + 420 + (i*70), size - 16*i);
230 pp_hexdump(pkt->data + (16*i) + 8, buf + 445 + (i*70), size - (16*i + 8));
231 } 257 }
232 258
233 printf(buf); 259 printf(buf);
diff --git a/src/vpn/test.c b/src/vpn/test.c
index 7b1182126..7f6aab860 100644
--- a/src/vpn/test.c
+++ b/src/vpn/test.c
@@ -17,9 +17,9 @@ int main(int c, char** v) {
17 17
18 struct pkt_tun* pkt; 18 struct pkt_tun* pkt;
19 19
20 printf("read %d bytes from socket, now to parse'em\n", recv_pkt(fd, &pkt)); 20 for(;;) {
21 21 printf("read %d bytes from socket, now to parse'em\n", recv_pkt(fd, &pkt));
22 struct ip6_pkt* pkt6 = parse_ip6(pkt); 22 struct ip6_pkt* pkt6 = parse_ip6(pkt);
23 23 pkt_printf(pkt6);
24 pkt_printf(pkt6); 24 }
25} 25}