|
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: 3153 (0xc51) Types: TextFile Names: »na2norm.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/compat/na2norm.c«
/* na2norm.c - normalize NSAPaddr */ #ifndef lint static char *rcsid = "$Header: /f/osi/compat/RCS/na2norm.c,v 6.0 89/03/18 23:25:25 mrose Rel $"; #endif /* * $Header: /f/osi/compat/RCS/na2norm.c,v 6.0 89/03/18 23:25:25 mrose Rel $ * * * $Log: na2norm.c,v $ * Revision 6.0 89/03/18 23:25:25 mrose * Release 5.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; static struct NSAPaddr nas; register struct NSAPaddr *ca = &nas; if (na -> na_type == NA_NSAP) { *ca = *na; /* struct copy */ return ca; } (void) strcpy (cp = nsap, INTERIM_IDP); cp += strlen (cp); bzero ((char *) ca, sizeof *ca); ca -> na_type = NA_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, "%02d%03d%03d%03d%03d", na -> na_subnet ? na -> na_subnet :SUBNET_INTERNET, 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_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); break; } (void) sprintf (cp, "%02d", na -> na_subnet ? na -> na_subnet : SUBNET_INTL_X25); cp += strlen (cp); 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; while (*cp) { *dp = (*cp++ - '0') << 4; if (*cp) *dp++ |= (*cp++ - '0') & 0x0f; else *dp++ |= 0x0f; } ca -> na_addrlen = dp - ca -> na_address; return ca; }