Annotation of 42BSD/ucb/talk/look_up.c, revision 1.1.1.1

1.1       root        1: /* $Header: look_up.c 1.2 83/03/28 00:34:22 moore Exp $ */
                      2: 
                      3: #include "talk_ctl.h"
                      4: 
                      5:     /* see if the local daemon has a invitation for us */
                      6: 
                      7: check_local()
                      8: {
                      9:     CTL_RESPONSE response;
                     10: 
                     11:        /* the rest of msg was set up in get_names */
                     12: 
                     13:     msg.ctl_addr = ctl_addr;
                     14: 
                     15:     if (!look_for_invite(&response)) {
                     16: 
                     17:            /* we must be initiating a talk */
                     18: 
                     19:        return(0);
                     20:     }
                     21: 
                     22:         /*
                     23:         * there was an invitation waiting for us, 
                     24:         * so connect with the other (hopefully waiting) party 
                     25:         */
                     26: 
                     27:     current_state = "Waiting to connect with caller";
                     28: 
                     29:     while (connect(sockt, &response.addr, sizeof(response.addr)) != 0) {
                     30:        if (errno == ECONNREFUSED) {
                     31: 
                     32:                /* the caller gave up, but his invitation somehow
                     33:                 * was not cleared. Clear it and initiate an 
                     34:                 * invitation. (We know there are no newer invitations,
                     35:                 * the talkd works LIFO.)
                     36:                 */
                     37: 
                     38:            ctl_transact(his_machine_addr, msg, DELETE, &response);
                     39:            close(sockt);
                     40:            open_sockt();
                     41:            return(0);
                     42:        } else if (errno == EINTR) {
                     43:                /* we have returned from an interupt handler */
                     44:            continue;
                     45:        } else {
                     46:            p_error("Unable to connect with initiator");
                     47:        }
                     48:     }
                     49: 
                     50:     return(1);
                     51: }
                     52: 
                     53:     /* look for an invitation on 'machine' */
                     54: 
                     55: look_for_invite(response)
                     56: CTL_RESPONSE *response;
                     57: {
                     58:     struct in_addr machine_addr;
                     59: 
                     60:     current_state = "Checking for invitation on caller's machine";
                     61: 
                     62:     ctl_transact(his_machine_addr, msg, LOOK_UP, response);
                     63: 
                     64:        /* the switch is for later options, such as multiple 
                     65:           invitations */
                     66: 
                     67:     switch (response->answer) {
                     68: 
                     69:        case SUCCESS:
                     70: 
                     71:            msg.id_num = response->id_num;
                     72:            return(1);
                     73: 
                     74:        default :
                     75:                /* there wasn't an invitation waiting for us */
                     76:            return(0);
                     77:     }
                     78: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.