* Copyright (c) 1983 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that this notice is preserved and that due credit is given
* to the University of California at Berkeley. The name of the University
* may not be used to endorse or promote products derived from this
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
static char sccsid
[] = "@(#)look_up.c 5.3 (Berkeley) %G%";
* See if the local daemon has an invitation for us.
register CTL_RESPONSE
*rp
= &response
;
/* the rest of msg was set up in get_names */
msg
.ctl_addr
= *(struct sockaddr
*)&ctl_addr
;
msg
.ctl_addr
.sa_family
= htons(msg
.ctl_addr
.sa_family
);
/* must be initiating a talk */
if (!look_for_invite(rp
))
* There was an invitation waiting for us,
* so connect with the other (hopefully waiting) party
current_state
= "Waiting to connect with caller";
if (rp
->addr
.sa_family
!= AF_INET
)
p_error("Response uses invalid network address");
if (connect(sockt
, &rp
->addr
, sizeof (rp
->addr
)) != -1)
} while (errno
== EINTR
);
if (errno
== ECONNREFUSED
) {
* The caller gave up, but his invitation somehow
* was not cleared. Clear it and initiate an
* invitation. (We know there are no newer invitations,
ctl_transact(his_machine_addr
, msg
, DELETE
, rp
);
p_error("Unable to connect with initiator");
* Look for an invitation on 'machine'
struct in_addr machine_addr
;
current_state
= "Checking for invitation on caller's machine";
ctl_transact(his_machine_addr
, msg
, LOOK_UP
, rp
);
/* the switch is for later options, such as multiple invitations */
msg
.id_num
= htonl(rp
->id_num
);
/* there wasn't an invitation waiting for us */