Annotation of 43BSDReno/contrib/isode-beta/compat/na2norm.c, revision 1.1

1.1     ! root        1: /* na2norm.c - normalize NSAPaddr */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/compat/RCS/na2norm.c,v 7.1 90/07/09 14:32:04 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/compat/RCS/na2norm.c,v 7.1 90/07/09 14:32:04 mrose Exp $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       na2norm.c,v $
        !            12:  * Revision 7.1  90/07/09  14:32:04  mrose
        !            13:  * sync
        !            14:  * 
        !            15:  * Revision 7.0  89/11/23  21:23:18  mrose
        !            16:  * Release 6.0
        !            17:  * 
        !            18:  */
        !            19: 
        !            20: /*
        !            21:  *                               NOTICE
        !            22:  *
        !            23:  *    Acquisition, use, and distribution of this module and related
        !            24:  *    materials are subject to the restrictions of a license agreement.
        !            25:  *    Consult the Preface in the User's Manual for the full terms of
        !            26:  *    this agreement.
        !            27:  *
        !            28:  */
        !            29: 
        !            30: 
        !            31: /* LINTLIBRARY */
        !            32: 
        !            33: #include <stdio.h>
        !            34: #include "general.h"
        !            35: #include "manifest.h"
        !            36: #include "isoaddrs.h"
        !            37: #include "internet.h"
        !            38: #include "tailor.h"
        !            39: 
        !            40: /*  */
        !            41: 
        !            42: struct NSAPaddr *na2norm (na)
        !            43: register struct NSAPaddr *na;
        !            44: {
        !            45:     int            ilen;
        !            46:     register char  *cp,
        !            47:                   *dp;
        !            48:     char    nsap[NASIZE * 2 + 1];
        !            49:     register struct hostent *hp;
        !            50:     register struct ts_interim *ts;
        !            51:     static struct NSAPaddr nas;
        !            52:     register struct NSAPaddr *ca = &nas;
        !            53: 
        !            54:     if (na -> na_stack == NA_NSAP) {
        !            55:        *ca = *na;      /* struct copy */
        !            56:        return ca;
        !            57:     }
        !            58: 
        !            59:     bzero ((char *) ca, sizeof *ca);
        !            60:     ca -> na_stack = NA_NSAP;
        !            61: 
        !            62:     for (ts = ts_interim; ts -> ts_name; ts++)
        !            63:        if (ts -> ts_subnet == na -> na_community)
        !            64:            break;
        !            65:     if (!ts -> ts_name) {
        !            66:        SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
        !            67:              ("unable to find community #%d", na -> na_community));
        !            68:        return NULLNA;
        !            69:     }
        !            70:     
        !            71:     cp = nsap;
        !            72:     switch (na -> na_stack) {
        !            73:        case NA_TCP:
        !            74:            if ((hp = gethostbystring (na -> na_domain)) == NULL) {
        !            75:                SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
        !            76:                      ("%s: unknown host", na -> na_domain));
        !            77:                return NULLNA;
        !            78:            }
        !            79: #define        s2a(b)  (((int) (b)) & 0xff)
        !            80:            (void) sprintf (cp, "%03d%03d%03d%03d",
        !            81:                            s2a (hp -> h_addr[0]),
        !            82:                            s2a (hp -> h_addr[1]),
        !            83:                            s2a (hp -> h_addr[2]),
        !            84:                            s2a (hp -> h_addr[3]));
        !            85:            cp += strlen (cp);
        !            86: #undef s2a
        !            87: 
        !            88:            if (na -> na_port) {
        !            89:                (void) sprintf (cp, "%05d", (int) ntohs (na -> na_port));
        !            90:                cp += strlen (cp);
        !            91: 
        !            92:                if (na -> na_tset || na -> na_tset != NA_TSET_TCP) {
        !            93:                    (void) sprintf (cp, "%05d", (int) na -> na_tset);
        !            94:                    cp += strlen (cp);
        !            95:                }
        !            96:            }
        !            97:            break;
        !            98: 
        !            99:        case NA_X25:
        !           100:        case NA_BRG:
        !           101:            if (na -> na_community == SUBNET_INT_X25
        !           102:                    && na -> na_cudflen == 0
        !           103:                    && na -> na_pidlen == 0
        !           104:                    && na -> na_dte[0] != '0') {        /* SEK - X121 form */
        !           105:                                                /* should be more general */
        !           106:                (void) sprintf (nsap, "36%014s", na -> na_dte);
        !           107:                ts = NULL;
        !           108:                break;
        !           109:            }
        !           110: 
        !           111:            if (ilen = na -> na_pidlen & 0xff)
        !           112:                *cp++ = '1', dp = na -> na_pid;
        !           113:            else
        !           114:                if (ilen = na -> na_cudflen & 0xff)
        !           115:                    *cp++ = '2', dp = na -> na_cudf;
        !           116:                else
        !           117:                    *cp++ = '0';
        !           118:            if (ilen) {
        !           119:                (void) sprintf (cp, "%01d", ilen);
        !           120:                cp += strlen (cp);
        !           121: 
        !           122:                for (; ilen-- > 0; cp += 3)
        !           123:                    (void) sprintf (cp, "%03d", *dp++ & 0xff);
        !           124:            }
        !           125:            (void) strcpy (cp, na -> na_dte);
        !           126:            break;
        !           127: 
        !           128:        default:
        !           129:            SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
        !           130:                  ("unknown address type 0x%x", na -> na_stack));
        !           131:            return NULLNA;
        !           132:     }
        !           133: 
        !           134:     cp = nsap, dp = ca -> na_address;
        !           135:     if (ts) {
        !           136:        bcopy (ts -> ts_prefix, dp, ts -> ts_length);
        !           137:        dp += ts -> ts_length;
        !           138:     }
        !           139:     while (*cp) {
        !           140:        *dp = (*cp++ - '0') << 4;
        !           141:        if (*cp)
        !           142:            *dp++ |= (*cp++ - '0') & 0x0f;
        !           143:        else
        !           144:            *dp++ |= 0x0f;
        !           145:     }
        !           146:     ca -> na_addrlen = dp - ca -> na_address;
        !           147: 
        !           148:     return ca;    
        !           149: }

unix.superglobalmegacorp.com

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