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.3 by pcg, Wed Apr 2 21:02:25 2003 UTC vs.
Revision 1.4 by pcg, Fri Apr 4 05:26:45 2003 UTC

248 vpn_packet *pkt = new vpn_packet; 248 vpn_packet *pkt = new vpn_packet;
249 struct sockaddr_in sa; 249 struct sockaddr_in sa;
250 socklen_t sa_len = sizeof (sa); 250 socklen_t sa_len = sizeof (sa);
251 int len; 251 int len;
252 252
253 len = recvfrom (w.fd, &((*pkt)[0]), MAXSIZE, 0, (sockaddr *)&sa, &sa_len); 253 len = recvfrom (w.p->fd, &((*pkt)[0]), MAXSIZE, 0, (sockaddr *)&sa, &sa_len);
254 254
255 sockinfo si(sa); 255 sockinfo si(sa);
256 256
257 if (len > 0) 257 if (len > 0)
258 { 258 {
291 vpn_packet *pkt = new vpn_packet; 291 vpn_packet *pkt = new vpn_packet;
292 struct sockaddr_in sa; 292 struct sockaddr_in sa;
293 socklen_t sa_len = sizeof (sa); 293 socklen_t sa_len = sizeof (sa);
294 int len; 294 int len;
295 295
296 len = recvfrom (w.fd, &((*pkt)[0]), MAXSIZE, 0, (sockaddr *)&sa, &sa_len); 296 len = recvfrom (w.p->fd, &((*pkt)[0]), MAXSIZE, 0, (sockaddr *)&sa, &sa_len);
297 297
298 sockinfo si(sa, PROT_IPv4); 298 sockinfo si(sa, PROT_IPv4);
299 299
300 if (len > 0) 300 if (len > 0)
301 { 301 {
356 tstamp last_activity; 356 tstamp last_activity;
357 const sockinfo si; 357 const sockinfo si;
358 vpn &v; 358 vpn &v;
359 bool ok; 359 bool ok;
360 360
361 vpn_packet *r_pkt;
362 u32 r_len, r_ofs;
363
361 void tcpv4_ev (io_watcher &w, short revents); 364 void tcpv4_ev (io_watcher &w, short revents);
362 365
363 operator tcp_si_map::value_type() 366 operator tcp_si_map::value_type()
364 { 367 {
365 return tcp_si_map::value_type (&si, this); 368 return tcp_si_map::value_type (&si, this);
366 } 369 }
367 370
368 tcp_connection (int fd_, const sockinfo &si_, vpn &v_) 371 tcp_connection (int fd, const sockinfo &si_, vpn &v_)
369 : v(v_), si(si_), io_watcher(this, &tcp_connection::tcpv4_ev), ok(false) 372 : v(v_), si(si_), io_watcher(this, &tcp_connection::tcpv4_ev)
370 { 373 {
371 last_activity = NOW; 374 last_activity = NOW;
375 ok = false;
376 r_pkt = 0;
372 start (fd_, POLLOUT); 377 start (fd, POLLOUT);
373 } 378 }
374 379
375 ~tcp_connection () { close (fd); } 380 ~tcp_connection () { if (p) close (p->fd); }
376}; 381};
377 382
378void tcp_si_map::cleaner_cb (time_watcher &w) 383void tcp_si_map::cleaner_cb (time_watcher &w)
379{ 384{
380 w.at = NOW + 600; 385 w.at = NOW + 600;
421 426
422 i->last_activity = NOW; 427 i->last_activity = NOW;
423 428
424 if (i->ok) 429 if (i->ok)
425 { 430 {
426 setsockopt (i->fd, SOL_IP, IP_TOS, &tos, sizeof tos); 431 setsockopt (i->p->fd, SOL_IP, IP_TOS, &tos, sizeof tos);
427 432
428 // we use none of the advantages of tcp 433 // we use none of the advantages of tcp
429 write (i->fd, (void *)pkt, pkt->len + sizeof (u32)) != pkt->len + sizeof (u32); 434 write (i->p->fd, (void *)pkt, pkt->len + sizeof (u32)) != pkt->len + sizeof (u32);
430 } 435 }
431 } 436 }
432 437
433#if 0 438#if 0
434 setsockopt (udpv4_fd, SOL_IP, IP_TOS, &tos, sizeof tos); 439 setsockopt (udpv4_fd, SOL_IP, IP_TOS, &tos, sizeof tos);
442 last_activity = NOW; 447 last_activity = NOW;
443 448
444 if (!ok) // just established? 449 if (!ok) // just established?
445 { 450 {
446 ok = true; 451 ok = true;
447 fcntl (fd, F_SETFL, 0);
448 stop ();
449 start (fd, POLLIN); 452 set (POLLIN);
450 } 453 }
451 454
452 if (revents & (POLLIN | POLLERR)) 455 if (revents & (POLLIN | POLLERR))
453 { 456 {
454 u32 len; 457 u32 len;
455 458
456 if (sizeof (len) == read (fd, &len, sizeof (len))) 459 if (sizeof (len) == read (p->fd, &len, sizeof (len)))
457 { 460 {
458 vpn_packet *pkt = new vpn_packet; 461 vpn_packet *pkt = new vpn_packet;
459 462
460 if (len == read (fd, &((*pkt)[0]), len)) 463 if (len == read (p->fd, &((*pkt)[0]), len))
461 { 464 {
462 pkt->len = len; 465 pkt->len = len;
463 466
464 v.recv_vpn_packet (pkt, si); 467 v.recv_vpn_packet (pkt, si);
465 return; 468 return;
467 470
468 delete pkt; 471 delete pkt;
469 } 472 }
470 473
471 tcp_si.erase (&si); 474 tcp_si.erase (&si);
475
472 stop (); 476 set (0);//D
473 } 477 }
474} 478}
475 479
476void 480void
477vpn::tcpv4_ev (io_watcher &w, short revents) 481vpn::tcpv4_ev (io_watcher &w, short revents)
480 { 484 {
481 struct sockaddr_in sa; 485 struct sockaddr_in sa;
482 socklen_t sa_len = sizeof (sa); 486 socklen_t sa_len = sizeof (sa);
483 int len; 487 int len;
484 488
485 int fd = accept (w.fd, (sockaddr *)&sa, &sa_len); 489 int fd = accept (w.p->fd, (sockaddr *)&sa, &sa_len);
486 490
487 if (fd >= 0) 491 if (fd >= 0)
488 { 492 {
489 fcntl (fd, F_SETFL, O_NONBLOCK); 493 fcntl (fd, F_SETFL, O_NONBLOCK);
490 494
491 sockinfo si(sa, PROT_TCPv4); 495 sockinfo si(sa, PROT_TCPv4);
492 tcp_connection *i = new tcp_connection (fd, si, *this); 496 tcp_connection *i = new tcp_connection (fd, si, *this);
493 497
494 slog (L_ERR, "accepted %d\n", fd);//D 498 slog (L_DEBUG, _("accepted tcp connection from %s\n"), (const char *)si);//D
495 499
496 tcp_si.insert (*i); 500 tcp_si.insert (*i);
497 } 501 }
498 } 502 }
499} 503}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines