BSD 4_3 release
[unix-history] / usr / src / ucb / talk / look_up.c
index fe9087c..059b372 100644 (file)
@@ -1,78 +1,76 @@
-/* $Header: look_up.c 1.2 83/03/28 00:34:22 moore Exp $ */
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ */
 
 
-#include "talk_ctl.h"
+#ifndef lint
+static char sccsid[] = "@(#)look_up.c  5.2 (Berkeley) 3/13/86";
+#endif not lint
 
 
-    /* see if the local daemon has a invitation for us */
+#include "talk_ctl.h"
 
 
+/*
+ * See if the local daemon has an invitation for us.
+ */
 check_local()
 {
 check_local()
 {
-    CTL_RESPONSE response;
+       CTL_RESPONSE response;
+       register CTL_RESPONSE *rp = &response;
 
        /* the rest of msg was set up in get_names */
 
        /* the rest of msg was set up in get_names */
-
-    msg.ctl_addr = ctl_addr;
-
-    if (!look_for_invite(&response)) {
-
-           /* we must be initiating a talk */
-
-       return(0);
-    }
-
-        /*
-        * there was an invitation waiting for us, 
+       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))
+               return (0);
+       /*
+        * There was an invitation waiting for us, 
         * so connect with the other (hopefully waiting) party 
         */
         * so connect with the other (hopefully waiting) party 
         */
-
-    current_state = "Waiting to connect with caller";
-
-    while (connect(sockt, &response.addr, sizeof(response.addr)) != 0) {
+       current_state = "Waiting to connect with caller";
+       do {
+               if (rp->addr.sa_family != AF_INET)
+                       p_error("Response uses invalid network address");
+               errno = 0;
+               if (connect(sockt, &rp->addr, sizeof (rp->addr)) != -1)
+                       return (1);
+       } while (errno == EINTR);
        if (errno == ECONNREFUSED) {
        if (errno == ECONNREFUSED) {
-
-               /* the caller gave up, but his invitation somehow
+               /*
+                * The caller gave up, but his invitation somehow
                 * was not cleared. Clear it and initiate an 
                 * invitation. (We know there are no newer invitations,
                 * the talkd works LIFO.)
                 */
                 * was not cleared. Clear it and initiate an 
                 * invitation. (We know there are no newer invitations,
                 * the talkd works LIFO.)
                 */
-
-           ctl_transact(his_machine_addr, msg, DELETE, &response);
-           close(sockt);
-           open_sockt();
-           return(0);
-       } else if (errno == EINTR) {
-               /* we have returned from an interupt handler */
-           continue;
-       } else {
-           p_error("Unable to connect with initiator");
+               ctl_transact(his_machine_addr, msg, DELETE, rp);
+               close(sockt);
+               open_sockt();
+               return (0);
        }
        }
-    }
-
-    return(1);
+       p_error("Unable to connect with initiator");
+       /*NOTREACHED*/
 }
 
 }
 
-    /* look for an invitation on 'machine' */
-
-look_for_invite(response)
-CTL_RESPONSE *response;
+/*
+ * Look for an invitation on 'machine'
+ */
+look_for_invite(rp)
+       CTL_RESPONSE *rp;
 {
 {
-    struct in_addr machine_addr;
-
-    current_state = "Checking for invitation on caller's machine";
+       struct in_addr machine_addr;
 
 
-    ctl_transact(his_machine_addr, msg, LOOK_UP, response);
-
-       /* the switch is for later options, such as multiple 
-          invitations */
-
-    switch (response->answer) {
+       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 */
+       switch (rp->answer) {
 
        case SUCCESS:
 
        case SUCCESS:
+               msg.id_num = htonl(rp->id_num);
+               return (1);
 
 
-           msg.id_num = response->id_num;
-           return(1);
-
-       default :
+       default:
                /* there wasn't an invitation waiting for us */
                /* there wasn't an invitation waiting for us */
-           return(0);
-    }
+               return (0);
+       }
 }
 }