Deleted Added
full compact
datalink.c (43693) datalink.c (43888)
1/*-
2 * Copyright (c) 1998 Brian Somers <brian@Awfulhak.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
1/*-
2 * Copyright (c) 1998 Brian Somers <brian@Awfulhak.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $Id: datalink.c,v 1.28 1999/02/02 09:35:17 brian Exp $
26 * $Id: datalink.c,v 1.29 1999/02/06 02:54:44 brian Exp $
27 */
28
29#include <sys/param.h>
30#include <netinet/in.h>
31#include <netinet/in_systm.h>
32#include <netinet/ip.h>
33#include <sys/un.h>
34

--- 295 unchanged lines hidden (view full) ---

330 }
331 break;
332
333 case DATALINK_READY:
334 case DATALINK_LCP:
335 case DATALINK_AUTH:
336 case DATALINK_CBCP:
337 case DATALINK_OPEN:
27 */
28
29#include <sys/param.h>
30#include <netinet/in.h>
31#include <netinet/in_systm.h>
32#include <netinet/ip.h>
33#include <sys/un.h>
34

--- 295 unchanged lines hidden (view full) ---

330 }
331 break;
332
333 case DATALINK_READY:
334 case DATALINK_LCP:
335 case DATALINK_AUTH:
336 case DATALINK_CBCP:
337 case DATALINK_OPEN:
338 result = descriptor_UpdateSet(&dl->physical->desc, r, w, e, n);
338 result = descriptor_UpdateSet(&dl->chap.desc, r, w, e, n) +
339 descriptor_UpdateSet(&dl->physical->desc, r, w, e, n);
339 break;
340 }
341 return result;
342}
343
344int
345datalink_RemoveFromSet(struct datalink *dl, fd_set *r, fd_set *w, fd_set *e)
346{

--- 15 unchanged lines hidden (view full) ---

362 case DATALINK_LOGIN:
363 return descriptor_IsSet(&dl->chat.desc, fdset);
364
365 case DATALINK_READY:
366 case DATALINK_LCP:
367 case DATALINK_AUTH:
368 case DATALINK_CBCP:
369 case DATALINK_OPEN:
340 break;
341 }
342 return result;
343}
344
345int
346datalink_RemoveFromSet(struct datalink *dl, fd_set *r, fd_set *w, fd_set *e)
347{

--- 15 unchanged lines hidden (view full) ---

363 case DATALINK_LOGIN:
364 return descriptor_IsSet(&dl->chat.desc, fdset);
365
366 case DATALINK_READY:
367 case DATALINK_LCP:
368 case DATALINK_AUTH:
369 case DATALINK_CBCP:
370 case DATALINK_OPEN:
370 return descriptor_IsSet(&dl->physical->desc, fdset);
371 return descriptor_IsSet(&dl->chap.desc, fdset) ? 1 :
372 descriptor_IsSet(&dl->physical->desc, fdset);
371 }
372 return 0;
373}
374
375static void
376datalink_Read(struct descriptor *d, struct bundle *bundle, const fd_set *fdset)
377{
378 struct datalink *dl = descriptor2datalink(d);

--- 9 unchanged lines hidden (view full) ---

388 descriptor_Read(&dl->chat.desc, bundle, fdset);
389 break;
390
391 case DATALINK_READY:
392 case DATALINK_LCP:
393 case DATALINK_AUTH:
394 case DATALINK_CBCP:
395 case DATALINK_OPEN:
373 }
374 return 0;
375}
376
377static void
378datalink_Read(struct descriptor *d, struct bundle *bundle, const fd_set *fdset)
379{
380 struct datalink *dl = descriptor2datalink(d);

--- 9 unchanged lines hidden (view full) ---

390 descriptor_Read(&dl->chat.desc, bundle, fdset);
391 break;
392
393 case DATALINK_READY:
394 case DATALINK_LCP:
395 case DATALINK_AUTH:
396 case DATALINK_CBCP:
397 case DATALINK_OPEN:
396 descriptor_Read(&dl->physical->desc, bundle, fdset);
398 if (descriptor_IsSet(&dl->chap.desc, fdset))
399 descriptor_Read(&dl->chap.desc, bundle, fdset);
400 if (descriptor_IsSet(&dl->physical->desc, fdset))
401 descriptor_Read(&dl->physical->desc, bundle, fdset);
397 break;
398 }
399}
400
401static int
402datalink_Write(struct descriptor *d, struct bundle *bundle, const fd_set *fdset)
403{
404 struct datalink *dl = descriptor2datalink(d);

--- 10 unchanged lines hidden (view full) ---

415 result = descriptor_Write(&dl->chat.desc, bundle, fdset);
416 break;
417
418 case DATALINK_READY:
419 case DATALINK_LCP:
420 case DATALINK_AUTH:
421 case DATALINK_CBCP:
422 case DATALINK_OPEN:
402 break;
403 }
404}
405
406static int
407datalink_Write(struct descriptor *d, struct bundle *bundle, const fd_set *fdset)
408{
409 struct datalink *dl = descriptor2datalink(d);

--- 10 unchanged lines hidden (view full) ---

420 result = descriptor_Write(&dl->chat.desc, bundle, fdset);
421 break;
422
423 case DATALINK_READY:
424 case DATALINK_LCP:
425 case DATALINK_AUTH:
426 case DATALINK_CBCP:
427 case DATALINK_OPEN:
423 result = descriptor_Write(&dl->physical->desc, bundle, fdset);
428 if (descriptor_IsSet(&dl->chap.desc, fdset))
429 result += descriptor_Write(&dl->chap.desc, bundle, fdset);
430 if (descriptor_IsSet(&dl->physical->desc, fdset))
431 result += descriptor_Write(&dl->physical->desc, bundle, fdset);
424 break;
425 }
426
427 return result;
428}
429
430static void
431datalink_ComeDown(struct datalink *dl, int how)

--- 104 unchanged lines hidden (view full) ---

536 bundle_NewPhase(dl->bundle, PHASE_NETWORK);
537 (*dl->parent->LayerUp)(dl->parent->object, &dl->physical->link.lcp.fsm);
538}
539
540void
541datalink_CBCPComplete(struct datalink *dl)
542{
543 datalink_NewState(dl, DATALINK_LCP);
432 break;
433 }
434
435 return result;
436}
437
438static void
439datalink_ComeDown(struct datalink *dl, int how)

--- 104 unchanged lines hidden (view full) ---

544 bundle_NewPhase(dl->bundle, PHASE_NETWORK);
545 (*dl->parent->LayerUp)(dl->parent->object, &dl->physical->link.lcp.fsm);
546}
547
548void
549datalink_CBCPComplete(struct datalink *dl)
550{
551 datalink_NewState(dl, DATALINK_LCP);
552 chap_ReInit(&dl->chap);
544 fsm_Close(&dl->physical->link.lcp.fsm);
545}
546
547void
548datalink_CBCPFailed(struct datalink *dl)
549{
550 cbcp_Down(&dl->cbcp);
551 datalink_CBCPComplete(dl);

--- 10 unchanged lines hidden (view full) ---

562 CALLBACK_BIT(CALLBACK_AUTH))) {
563 /* We must have agreed CBCP if AUTH isn't there any more */
564 datalink_NewState(dl, DATALINK_CBCP);
565 cbcp_Up(&dl->cbcp);
566 } else if (dl->physical->link.lcp.want_callback.opmask) {
567 /* It's not CBCP */
568 log_Printf(LogPHASE, "%s: Shutdown and await peer callback\n", dl->name);
569 datalink_NewState(dl, DATALINK_LCP);
553 fsm_Close(&dl->physical->link.lcp.fsm);
554}
555
556void
557datalink_CBCPFailed(struct datalink *dl)
558{
559 cbcp_Down(&dl->cbcp);
560 datalink_CBCPComplete(dl);

--- 10 unchanged lines hidden (view full) ---

571 CALLBACK_BIT(CALLBACK_AUTH))) {
572 /* We must have agreed CBCP if AUTH isn't there any more */
573 datalink_NewState(dl, DATALINK_CBCP);
574 cbcp_Up(&dl->cbcp);
575 } else if (dl->physical->link.lcp.want_callback.opmask) {
576 /* It's not CBCP */
577 log_Printf(LogPHASE, "%s: Shutdown and await peer callback\n", dl->name);
578 datalink_NewState(dl, DATALINK_LCP);
579 chap_ReInit(&dl->chap);
570 fsm_Close(&dl->physical->link.lcp.fsm);
571 } else
572 switch (dl->physical->link.lcp.his_callback.opmask) {
573 case 0:
574 datalink_NCPUp(dl);
575 break;
576
577 case CALLBACK_BIT(CALLBACK_AUTH):

--- 8 unchanged lines hidden (view full) ---

586 if (ptr)
587 *ptr = '\0'; /* Call back on the first number */
588 log_Printf(LogPHASE, "%s: Calling peer back on %s\n", dl->name,
589 dl->cbcp.fsm.phone);
590 dl->cbcp.required = 1;
591 }
592 dl->cbcp.fsm.delay = 0;
593 datalink_NewState(dl, DATALINK_LCP);
580 fsm_Close(&dl->physical->link.lcp.fsm);
581 } else
582 switch (dl->physical->link.lcp.his_callback.opmask) {
583 case 0:
584 datalink_NCPUp(dl);
585 break;
586
587 case CALLBACK_BIT(CALLBACK_AUTH):

--- 8 unchanged lines hidden (view full) ---

596 if (ptr)
597 *ptr = '\0'; /* Call back on the first number */
598 log_Printf(LogPHASE, "%s: Calling peer back on %s\n", dl->name,
599 dl->cbcp.fsm.phone);
600 dl->cbcp.required = 1;
601 }
602 dl->cbcp.fsm.delay = 0;
603 datalink_NewState(dl, DATALINK_LCP);
604 chap_ReInit(&dl->chap);
594 fsm_Close(&dl->physical->link.lcp.fsm);
595 break;
596
597 case CALLBACK_BIT(CALLBACK_E164):
598 strncpy(dl->cbcp.fsm.phone, dl->physical->link.lcp.his_callback.msg,
599 sizeof dl->cbcp.fsm.phone - 1);
600 dl->cbcp.fsm.phone[sizeof dl->cbcp.fsm.phone - 1] = '\0';
601 log_Printf(LogPHASE, "%s: Calling peer back on %s\n", dl->name,
602 dl->cbcp.fsm.phone);
603 dl->cbcp.required = 1;
604 dl->cbcp.fsm.delay = 0;
605 datalink_NewState(dl, DATALINK_LCP);
605 fsm_Close(&dl->physical->link.lcp.fsm);
606 break;
607
608 case CALLBACK_BIT(CALLBACK_E164):
609 strncpy(dl->cbcp.fsm.phone, dl->physical->link.lcp.his_callback.msg,
610 sizeof dl->cbcp.fsm.phone - 1);
611 dl->cbcp.fsm.phone[sizeof dl->cbcp.fsm.phone - 1] = '\0';
612 log_Printf(LogPHASE, "%s: Calling peer back on %s\n", dl->name,
613 dl->cbcp.fsm.phone);
614 dl->cbcp.required = 1;
615 dl->cbcp.fsm.delay = 0;
616 datalink_NewState(dl, DATALINK_LCP);
617 chap_ReInit(&dl->chap);
606 fsm_Close(&dl->physical->link.lcp.fsm);
607 break;
608
609 default:
610 log_Printf(LogPHASE, "%s: Oops - Should have NAK'd peer callback !\n",
611 dl->name);
612 datalink_NewState(dl, DATALINK_LCP);
618 fsm_Close(&dl->physical->link.lcp.fsm);
619 break;
620
621 default:
622 log_Printf(LogPHASE, "%s: Oops - Should have NAK'd peer callback !\n",
623 dl->name);
624 datalink_NewState(dl, DATALINK_LCP);
625 chap_ReInit(&dl->chap);
613 fsm_Close(&dl->physical->link.lcp.fsm);
614 break;
615 }
616}
617
618void
619datalink_AuthNotOk(struct datalink *dl)
620{
621 datalink_NewState(dl, DATALINK_LCP);
626 fsm_Close(&dl->physical->link.lcp.fsm);
627 break;
628 }
629}
630
631void
632datalink_AuthNotOk(struct datalink *dl)
633{
634 datalink_NewState(dl, DATALINK_LCP);
635 chap_ReInit(&dl->chap);
622 fsm_Close(&dl->physical->link.lcp.fsm);
623}
624
625static void
626datalink_LayerDown(void *v, struct fsm *fp)
627{
628 /* The given FSM has been told to come down */
629 struct datalink *dl = (struct datalink *)v;

--- 12 unchanged lines hidden (view full) ---

642 cbcp_Down(&dl->cbcp);
643 /* fall through (just in case) */
644
645 case DATALINK_AUTH:
646 timer_Stop(&dl->pap.authtimer);
647 timer_Stop(&dl->chap.auth.authtimer);
648 }
649 datalink_NewState(dl, DATALINK_LCP);
636 fsm_Close(&dl->physical->link.lcp.fsm);
637}
638
639static void
640datalink_LayerDown(void *v, struct fsm *fp)
641{
642 /* The given FSM has been told to come down */
643 struct datalink *dl = (struct datalink *)v;

--- 12 unchanged lines hidden (view full) ---

656 cbcp_Down(&dl->cbcp);
657 /* fall through (just in case) */
658
659 case DATALINK_AUTH:
660 timer_Stop(&dl->pap.authtimer);
661 timer_Stop(&dl->chap.auth.authtimer);
662 }
663 datalink_NewState(dl, DATALINK_LCP);
664 chap_ReInit(&dl->chap);
650 }
651}
652
653static void
654datalink_LayerFinish(void *v, struct fsm *fp)
655{
656 /* The given fsm is now down */
657 struct datalink *dl = (struct datalink *)v;

--- 214 unchanged lines hidden (view full) ---

872 case DATALINK_OPEN:
873 peerid_Init(&dl->peer);
874 fsm2initial(&dl->physical->link.ccp.fsm);
875 /* fall through */
876
877 case DATALINK_CBCP:
878 case DATALINK_AUTH:
879 case DATALINK_LCP:
665 }
666}
667
668static void
669datalink_LayerFinish(void *v, struct fsm *fp)
670{
671 /* The given fsm is now down */
672 struct datalink *dl = (struct datalink *)v;

--- 214 unchanged lines hidden (view full) ---

887 case DATALINK_OPEN:
888 peerid_Init(&dl->peer);
889 fsm2initial(&dl->physical->link.ccp.fsm);
890 /* fall through */
891
892 case DATALINK_CBCP:
893 case DATALINK_AUTH:
894 case DATALINK_LCP:
895 chap_ReInit(&dl->chap);
880 fsm_Close(&dl->physical->link.lcp.fsm);
881 if (how != CLOSE_NORMAL) {
882 dl->dial_tries = -1;
883 dl->reconnect_tries = 0;
884 if (how == CLOSE_LCP)
885 dl->stayonline = 1;
886 }
887 break;

--- 398 unchanged lines hidden ---
896 fsm_Close(&dl->physical->link.lcp.fsm);
897 if (how != CLOSE_NORMAL) {
898 dl->dial_tries = -1;
899 dl->reconnect_tries = 0;
900 if (how == CLOSE_LCP)
901 dl->stayonline = 1;
902 }
903 break;

--- 398 unchanged lines hidden ---