|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T n
Length: 3347 (0xd13) Types: TextFile Names: »na2norm.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« └─⟦de7628f85⟧ └─⟦this⟧ »isode-6.0/compat/na2norm.c«
/* na2norm.c - normalize NSAPaddr */ #ifndef lint static char *rcsid = "$Header: /f/osi/compat/RCS/na2norm.c,v 7.0 89/11/23 21:23:18 mrose Rel $"; #endif /* * $Header: /f/osi/compat/RCS/na2norm.c,v 7.0 89/11/23 21:23:18 mrose Rel $ * * * $Log: na2norm.c,v $ * Revision 7.0 89/11/23 21:23:18 mrose * Release 6.0 * */ /* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * */ /* LINTLIBRARY */ #include <stdio.h> #include "general.h" #include "manifest.h" #include "isoaddrs.h" #include "internet.h" #include "tailor.h" /* \f */ struct NSAPaddr *na2norm (na) register struct NSAPaddr *na; { int ilen; register char *cp, *dp; char nsap[NASIZE * 2 + 1]; register struct hostent *hp; register struct ts_interim *ts; static struct NSAPaddr nas; register struct NSAPaddr *ca = &nas; if (na -> na_type == NA_NSAP) { *ca = *na; /* struct copy */ return ca; } bzero ((char *) ca, sizeof *ca); ca -> na_type = NA_NSAP; for (ts = ts_interim; ts -> ts_name; ts++) if (ts -> ts_subnet == na -> na_subnet) break; if (!ts -> ts_name) { SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP, ("unable to find community #%d", na -> na_subnet)); return NULLNA; } cp = nsap; switch (na -> na_type) { case NA_TCP: if ((hp = gethostbystring (na -> na_domain)) == NULL) { SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP, ("%s: unknown host", na -> na_domain)); return NULLNA; } #define s2a(b) (((int) (b)) & 0xff) (void) sprintf (cp, "%03d%03d%03d%03d", s2a (hp -> h_addr[0]), s2a (hp -> h_addr[1]), s2a (hp -> h_addr[2]), s2a (hp -> h_addr[3])); cp += strlen (cp); #undef s2a if (na -> na_port) { (void) sprintf (cp, "%05d", (int) ntohs (na -> na_port)); cp += strlen (cp); if (na -> na_tset || na -> na_tset != NA_TSET_TCP) { (void) sprintf (cp, "%05d", (int) na -> na_tset); cp += strlen (cp); } } break; case NA_X25: case NA_BRG: if (na -> na_subnet == SUBNET_INT_X25 && na -> na_cudflen == 0 && na -> na_pidlen == 0 && na -> na_dte[0] != '0') { /* SEK - X121 form */ /* should be more general */ (void) sprintf (nsap, "36%014s", na -> na_dte); ts = NULL; break; } if (ilen = na -> na_pidlen & 0xff) *cp++ = '1', dp = na -> na_pid; else if (ilen = na -> na_cudflen & 0xff) *cp++ = '2', dp = na -> na_cudf; else *cp++ = '0'; if (ilen) { (void) sprintf (cp, "%01d", ilen); cp += strlen (cp); for (; ilen-- > 0; cp += 3) (void) sprintf (cp, "%03d", *dp++ & 0xff); } (void) strcpy (cp, na -> na_dte); break; default: SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP, ("unknown address type 0x%x", na -> na_type)); return NULLNA; } cp = nsap, dp = ca -> na_address; if (ts) { bcopy (ts -> ts_prefix, dp, ts -> ts_length); dp += ts -> ts_length; } while (*cp) { *dp = (*cp++ - '0') << 4; if (*cp) *dp++ |= (*cp++ - '0') & 0x0f; else *dp++ |= 0x0f; } ca -> na_addrlen = dp - ca -> na_address; return ca; }