# 2.11BSD#431 - /usr/src/ucb/talk/look_up.c

##### Functions

    check_local       X
    look_for_invite   X

       1: /*
       2:  * Copyright (c) 1983 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #ifndef lint
       8: static char sccsid[] = "@(#)look_up.c	5.2 (Berkeley) 3/13/86";
       9: #endif not lint
      10:
      11: #include "talk_ctl.h"
      12:
      13: /*
      14:  * See if the local daemon has an invitation for us.
      15:  */
      16: check_local()
      17: {
      18:     CTL_RESPONSE response;
      19:     register CTL_RESPONSE *rp = &response;
      20:
      21:     /* the rest of msg was set up in get_names */
      22:     msg.ctl_addr = *(struct sockaddr *)&ctl_addr;
      23:     msg.ctl_addr.sa_family = htons(msg.ctl_addr.sa_family);
      24:     /* must be initiating a talk */
      25:     if (!look_for_invite(rp))
      26:         return (0);
      27:     /*
      28: 	 * There was an invitation waiting for us,
      29: 	 * so connect with the other (hopefully waiting) party
      30: 	 */
      31:     current_state = "Waiting to connect with caller";
      32:     do {
      33:         if (rp->addr.sa_family != AF_INET)
      34:             p_error("Response uses invalid network address");
      35:         errno = 0;
      36:         if (connect(sockt, &rp->addr, sizeof (rp->addr)) != -1)
      37:             return (1);
      38:     } while (errno == EINTR);
      39:     if (errno == ECONNREFUSED) {
      40:         /*
      41: 		 * The caller gave up, but his invitation somehow
      42: 		 * was not cleared. Clear it and initiate an
      43: 		 * invitation. (We know there are no newer invitations,
      44: 		 * the talkd works LIFO.)
      45: 		 */
      46:         ctl_transact(his_machine_addr, msg, DELETE, rp);
      47:         close(sockt);
      48:         open_sockt();
      49:         return (0);
      50:     }
      51:     p_error("Unable to connect with initiator");
      52:     /*NOTREACHED*/
      53: }
      54:
      55: /*
      56:  * Look for an invitation on 'machine'
      57:  */
      58: look_for_invite(rp)
      59:     CTL_RESPONSE *rp;
      60: {
      61:     struct in_addr machine_addr;
      62:
      63:     current_state = "Checking for invitation on caller's machine";
      64:     ctl_transact(his_machine_addr, msg, LOOK_UP, rp);
      65:     /* the switch is for later options, such as multiple invitations */
      66:     switch (rp->answer) {
      67:
      68:     case SUCCESS:
      69:         msg.id_num = htonl(rp->id_num);
      70:         return (1);
      71:
      72:     default:
      73:         /* there wasn't an invitation waiting for us */
      74:         return (0);
      75:     }
      76: }

#### Defined functions

check_local defined in line 16; used 1 times

- in /usr/src/ucb/talk/talk.c line 43

look_for_invite defined in line 58; used 1 times

- in line 25

#### Defined variables

sccsid defined in line 8; never used

Last modified: 1987-02-17 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1053 |