ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/vpn.C
(Generate patch)

Comparing gvpe/src/vpn.C (file contents):
Revision 1.57 by root, Tue Feb 8 23:13:48 2011 UTC vs.
Revision 1.63 by root, Tue Jan 17 21:38:11 2012 UTC

1/* 1/*
2 vpn.C -- handle the protocol, encryption, handshaking etc. 2 vpn.C -- handle the protocol, encryption, handshaking etc.
3 Copyright (C) 2003-2008 Marc Lehmann <gvpe@schmorp.de> 3 Copyright (C) 2003-2008,2010,2011 Marc Lehmann <gvpe@schmorp.de>
4 4
5 This file is part of GVPE. 5 This file is part of GVPE.
6 6
7 GVPE is free software; you can redistribute it and/or modify it 7 GVPE 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 8 under the terms of the GNU General Public License as published by the
484 if (src == 0 || src > conns.size () 484 if (src == 0 || src > conns.size ()
485 || dst > conns.size () 485 || dst > conns.size ()
486 || pkt->typ () >= vpn_packet::PT_MAX) 486 || pkt->typ () >= vpn_packet::PT_MAX)
487 slog (L_WARN, _("(%s): received corrupted packet type %d (src %d, dst %d)."), 487 slog (L_WARN, _("(%s): received corrupted packet type %d (src %d, dst %d)."),
488 (const char *)rsi, pkt->typ (), pkt->src (), pkt->dst ()); 488 (const char *)rsi, pkt->typ (), pkt->src (), pkt->dst ());
489 else if (dst > conns.size ())
490 slog (L_WARN, _("(%s): received corrupted packet type %d (src %d, dst %d)."),
491 (const char *)rsi, pkt->typ (), pkt->src (), pkt->dst ());
492 else 489 else
493 { 490 {
494 connection *c = conns[src - 1]; 491 connection *c = conns[src - 1];
495 492
496 if (dst == 0) 493 if (dst == 0)
516vpn::send_vpn_packet (vpn_packet *pkt, const sockinfo &si, int tos) 513vpn::send_vpn_packet (vpn_packet *pkt, const sockinfo &si, int tos)
517{ 514{
518 switch (si.prot) 515 switch (si.prot)
519 { 516 {
520 case PROT_IPv4: 517 case PROT_IPv4:
521 return send_ipv4_packet (pkt, si, tos); 518 return send_ipv4_packet (pkt, si, tos);
522 519
523 case PROT_UDPv4: 520 case PROT_UDPv4:
524 return send_udpv4_packet (pkt, si, tos); 521 return send_udpv4_packet (pkt, si, tos);
525 522
526#if ENABLE_TCP 523#if ENABLE_TCP
527 case PROT_TCPv4: 524 case PROT_TCPv4:
528 return send_tcpv4_packet (pkt, si, tos); 525 return send_tcpv4_packet (pkt, si, tos);
529#endif 526#endif
530#if ENABLE_ICMP 527#if ENABLE_ICMP
531 case PROT_ICMPv4: 528 case PROT_ICMPv4:
532 return send_icmpv4_packet (pkt, si, tos); 529 return send_icmpv4_packet (pkt, si, tos);
533#endif 530#endif
534#if ENABLE_DNS 531#if ENABLE_DNS
535 case PROT_DNSv4: 532 case PROT_DNSv4:
536 return send_dnsv4_packet (pkt, si, tos); 533 return send_dnsv4_packet (pkt, si, tos);
537#endif 534#endif
538 default: 535 default:
539 slog (L_CRIT, _("%s: FATAL: trying to send packet with unsupported protocol."), (const char *)si); 536 slog (L_CRIT, _("%s: FATAL: trying to send packet with unsupported protocol."), (const char *)si);
540 } 537 }
541 538
559 if (len > 0) 556 if (len > 0)
560 { 557 {
561 pkt->len = len; 558 pkt->len = len;
562 559
563 // raw sockets deliver the ipv4 header, but don't expect it on sends 560 // raw sockets deliver the ipv4 header, but don't expect it on sends
564 pkt->skip_hdr (IP_OVERHEAD); 561 pkt->skip_hdr (pkt->ipv4_hdr_len ());
565 562
566 recv_vpn_packet (pkt, si); 563 recv_vpn_packet (pkt, si);
567 } 564 }
568 else 565 else
569 { 566 {
606 if (hdr->type == ::conf.icmp_type 603 if (hdr->type == ::conf.icmp_type
607 && hdr->code == 255) 604 && hdr->code == 255)
608 { 605 {
609 // raw sockets deliver the ipv4, but don't expect it on sends 606 // raw sockets deliver the ipv4, but don't expect it on sends
610 // this is slow, but... 607 // this is slow, but...
611 pkt->skip_hdr (ICMP_OVERHEAD); 608 pkt->skip_hdr (pkt->ipv4_hdr_len () + (ICMP_OVERHEAD - IP_OVERHEAD));
612 609
613 recv_vpn_packet (pkt, si); 610 recv_vpn_packet (pkt, si);
614 } 611 }
615 } 612 }
616 else 613 else

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines