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

Comparing gvpe/src/vpn_dns.C (file contents):
Revision 1.49 by root, Tue Feb 8 23:11:36 2011 UTC vs.
Revision 1.50 by root, Sun Mar 6 13:49:50 2011 UTC

117 memset (enc, (char) 0, 256); 117 memset (enc, (char) 0, 256);
118 memset (dec, (char)INVALID, 256); 118 memset (dec, (char)INVALID, 256);
119 119
120 for (size = 0; cmap [size]; size++) 120 for (size = 0; cmap [size]; size++)
121 { 121 {
122 char c = cmap [size];
123
122 enc [size] = cmap [size]; 124 enc [size] = c;
123 dec [(u8)enc [size]] = size; 125 dec [(u8)c] = size;
126
127 // allow lowercase/uppercase aliases if possible
128 if (c >= 'A' && c <= 'Z' && dec [c + ('a' - 'A')] == INVALID) dec [c + ('a' - 'A')] = size;
129 if (c >= 'a' && c <= 'z' && dec [c - ('a' - 'A')] == INVALID) dec [c - ('a' - 'A')] = size;
124 } 130 }
125 131
126 assert (size < 256); 132 assert (size < 256);
127} 133}
128 134
819 825
820 rcvseq = (rcvseq + 1) & SEQNO_MASK; 826 rcvseq = (rcvseq + 1) & SEQNO_MASK;
821 827
822 if (!rcvdq.put (r->data, r->datalen)) 828 if (!rcvdq.put (r->data, r->datalen))
823 { 829 {
830 // MUST never overflow, can be caused by data corruption, TODO
824 slog (L_ERR, "DNS: !rcvdq.put (r->data, r->datalen)"); 831 slog (L_CRIT, "DNS: !rcvdq.put (r->data, r->datalen)");
825 abort (); // MUST never overflow, can be caused by data corruption, TODO 832 c->dnsv4_reset_connection ();
833 return;
826 } 834 }
827 835
828 while (vpn_packet *pkt = rcvdq.get ()) 836 while (vpn_packet *pkt = rcvdq.get ())
829 { 837 {
830 sockinfo si; 838 sockinfo si;
831 si.host = htonl (c->conf->id); si.port = 0; si.prot = PROT_DNSv4; 839 si.host = htonl (c->conf->id); si.port = 0; si.prot = PROT_DNSv4;
832 840
833 vpn->recv_vpn_packet (pkt, si); 841 vpn->recv_vpn_packet (pkt, si);
834
835 delete pkt; 842 delete pkt;
836 } 843 }
837 844
838 // check for further packets 845 // check for further packets
839 goto redo; 846 goto redo;
1137 1144
1138 if (ip [3] == CMD_IP_RST) 1145 if (ip [3] == CMD_IP_RST)
1139 { 1146 {
1140 slog (L_DEBUG, _("DNS: got tunnel RST request")); 1147 slog (L_DEBUG, _("DNS: got tunnel RST request"));
1141 1148
1142 delete dns; c->dns = 0; 1149 c->dnsv4_reset_connection ();
1143
1144 return;
1145 } 1150 }
1146 else if (ip [3] == CMD_IP_SYN) 1151 else if (ip [3] == CMD_IP_SYN)
1147 { 1152 {
1148 slog (L_DEBUG, _("DNS: got tunnel SYN reply, server likes us.")); 1153 slog (L_DEBUG, _("DNS: got tunnel SYN reply, server likes us."));
1149 dns->established = true; 1154 dns->established = true;
1150 } 1155 }
1151 else if (ip [3] == CMD_IP_REJ) 1156 else if (ip [3] == CMD_IP_REJ)
1152 {
1153 slog (L_DEBUG, _("DNS: got tunnel REJ reply, server does not like us, aborting.")); 1157 slog (L_ERR, _("DNS: got tunnel REJ reply, server does not like us."));
1154 abort ();
1155 }
1156 else 1158 else
1157 slog (L_INFO, _("DNS: got unknown meta command %02x"), ip [3]); 1159 slog (L_INFO, _("DNS: got unknown meta command %02x"), ip [3]);
1158 } 1160 }
1159 else 1161 else
1160 slog (L_INFO, _("DNS: got spurious a record %d.%d.%d.%d"), 1162 slog (L_INFO, _("DNS: got spurious a record %d.%d.%d.%d"),

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines