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
Defined variables
sccsid
defined in line
8;
never used