|
|
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 a
Length: 6986 (0x1b4a)
Types: TextFile
Names: »acsapstub.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z«
└─⟦de7628f85⟧
└─⟦this⟧ »isode-6.0/acsap/acsapstub.c«
/* acsapstub.c - application entity titles -- stub directory service */
#ifndef lint
static char *rcsid = "$Header: /f/osi/acsap/RCS/acsapstub.c,v 7.0 89/11/23 21:22:00 mrose Rel $";
#endif
/*
* $Header: /f/osi/acsap/RCS/acsapstub.c,v 7.0 89/11/23 21:22:00 mrose Rel $
*
* RFC1085 (LPP) support contributed by the Wollongong Group, Inc.
*
*
* $Log: acsapstub.c,v $
* Revision 7.0 89/11/23 21:22:00 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 <ctype.h>
#include <stdio.h>
#include "psap.h"
#include "isoaddrs.h"
#include "internet.h"
#include "tailor.h"
#ifdef AETDBM
#define fetch_aet str2aet_dbm
#else
#define fetch_aet str2aet_seq
#endif
/* \f
DATA */
static struct isoentity ies;
/* \f
*/
AEI str2aei_stub (designator, qualifier)
char *designator,
*qualifier;
{
#ifdef LPP
register int n;
int tcp_port,
udp_port;
register struct servent *sp;
#endif
register char *cp;
register struct NSAPaddr *na;
register struct isoentity *ie = &ies;
if (fetch_aet (designator, qualifier, &ies) == NOTOK) {
#ifdef LPP
if (lpp_aet (designator, qualifier, &ies) != NOTOK)
goto found_it;
#endif
return NULLAEI;
}
if (ie -> ie_addr.pa_addr.sa_addr.ta_naddr <= 0) {
register int i;
register struct TSAPaddr *ta = &ie -> ie_addr.pa_addr.sa_addr;
na = ta -> ta_addrs, ta -> ta_naddr = 1;
bzero ((char *) na, sizeof *na);
/* guess at what sort of address we have on our hands */
if ((i = strlen (cp = designator)) > 6
&& cp[0] == '4' && cp[2] == '0' && cp[3] == '0') {
na -> na_type = NA_NSAP;
na -> na_subnet = ts_comm_nsap_default;
na -> na_addrlen = implode ((u_char *) na -> na_address,
cp, strlen (cp));
goto found_it;
}
if (i <= NSAP_DTELEN + 1)
for (; *cp; cp++)
if (!isxdigit (*cp))
break;
if (*cp) {
register struct hostent *hp = gethostbystring (designator);
na -> na_type = NA_TCP;
na -> na_subnet = ts_comm_tcp_default;
if (hp) {
#ifdef h_addr
register char **ap;
#endif
(void) strcpy (na -> na_domain,
inet_ntoa (*(struct in_addr *) hp -> h_addr));
#ifdef h_addr
for (ap = hp -> h_addr_list + 1; *ap; ap++) {
ta -> ta_naddr++, na++;
if (ta -> ta_naddr >= NTADDR)
break;
bzero ((char *) na, sizeof *na);
na -> na_type = NA_TCP;
na -> na_subnet = ts_comm_tcp_default;
(void) strcpy (na -> na_domain,
inet_ntoa (*(struct in_addr *) *ap));
}
#endif
}
else
(void) strncpy (na -> na_domain, designator,
sizeof na -> na_domain);
}
else {
(void) strcpy (na -> na_dte, designator);
na -> na_dtelen = strlen (na -> na_dte);
#ifdef BRIDGE_X25
na -> na_type = bridgediscrim (na) ? NA_BRG : NA_X25;
#else
na -> na_type = NA_X25;
#endif
na -> na_subnet = ts_comm_x25_default;
}
}
#ifdef LPP
for (na = ie -> ie_addr.pa_addr.sa_addr.ta_addrs,
n = ie -> ie_addr.pa_addr.sa_addr.ta_naddr;
n > 0;
na++, n--)
if (na -> na_type == NA_TCP && na -> na_port == 0) {
cp = strncmp (qualifier, "isode ", 6) ? qualifier : qualifier + 6;
if (sp = getservbyname (cp, "lpp"))
tcp_port = udp_port = sp -> s_port;
else {
tcp_port = (sp = getservbyname (cp, "tcp")) ? sp -> s_port : 0;
udp_port = (sp = getservbyname (cp, "udp")) ? sp -> s_port : 0;
}
break;
}
for (na = ie -> ie_addr.pa_addr.sa_addr.ta_addrs,
n = ie -> ie_addr.pa_addr.sa_addr.ta_naddr;
n > 0;
na++, n--)
if (na -> na_type == NA_TCP && na -> na_port == 0) {
register struct TSAPaddr *ta;
if (tcp_port) {
na -> na_port = (u_short) tcp_port;
na -> na_tset = NA_TSET_TCP;
if (udp_port
&& (ta = &ie -> ie_addr.pa_addr.sa_addr) -> ta_naddr
< NTADDR) {
register struct NSAPaddr *ua =
ta -> ta_addrs + ta -> ta_naddr++;
bzero ((char *) ua, sizeof *ua);
ua -> na_type = NA_TCP;
ua -> na_subnet = ts_comm_tcp_default;
(void) strncpy (ua -> na_domain, na -> na_domain,
sizeof ua -> na_domain);
ua -> na_port = (u_short) udp_port;
ua -> na_tset = NA_TSET_UDP;
}
}
else
if (udp_port) {
na -> na_port = (u_short) udp_port;
na -> na_tset = NA_TSET_UDP;
}
}
#endif
found_it: ;
if (addr_log -> ll_events & LLOG_DEBUG)
_printent (ie);
return oid2aei (&ie -> ie_identifier);
}
/* \f
*/
#ifdef LPP
static unsigned int elements[NELEM + 1];
static char objent[BUFSIZ];
static int lpp_aet (designator, qualifier, ie)
char *designator,
*qualifier;
register struct isoentity *ie;
{
register int nelem;
int tcp_port,
udp_port;
char *cp;
register struct servent *sp;
register OID oid = &ie -> ie_identifier;
register struct PSAPaddr *pa = &ie -> ie_addr;
register struct TSAPaddr *ta = &pa -> pa_addr.sa_addr;
register struct NSAPaddr *na;
cp = strncmp (qualifier, "isode ", 6) ? qualifier : qualifier + 6;
if (sp = getservbyname (cp, "lpp"))
tcp_port = udp_port = sp -> s_port;
else
if ((tcp_port = (sp = getservbyname (cp, "tcp")) ? sp -> s_port : 0)
== 0
&& (udp_port = (sp = getservbyname (cp, "udp")) ? sp -> s_port
: 0) == 0)
return NOTOK;
nelem = 0;
elements[nelem++] = 1, elements[nelem++] = 17, elements[nelem++] = 4,
elements[nelem++] = 0, elements[nelem++] = 0;
oid -> oid_elements = elements;
oid -> oid_nelem = nelem;
(void) sprintf (ie -> ie_descriptor = objent, "%s-%s", designator,
qualifier);
(void) bzero ((char *) pa, sizeof *pa);
na = ta -> ta_addrs;
if (tcp_port) {
na -> na_type = NA_TCP;
na -> na_subnet = ts_comm_tcp_default;
(void) strncpy (na -> na_domain, designator, sizeof na -> na_domain);
na -> na_port = (u_short) tcp_port;
na -> na_tset = NA_TSET_TCP;
na++;
}
if (udp_port) {
na -> na_type = NA_TCP;
na -> na_subnet = ts_comm_tcp_default;
(void) strncpy (na -> na_domain, designator, sizeof na -> na_domain);
na -> na_port = (u_short) udp_port;
na -> na_tset = NA_TSET_UDP;
na++;
}
ta -> ta_naddr = na - ta -> ta_addrs;
return OK;
}
#endif
/* \f
*/
struct PSAPaddr *aei2addr_stub (aei)
AEI aei;
{
register struct isoentity *ie = &ies;
register struct PSAPaddr *pa;
if (aei -> aei_ap_title
? oid_cmp (&ie -> ie_identifier, prim2oid (aei -> aei_ap_title))
: ie -> ie_identifier.oid_nelem > 0) {
SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP,
("aei2addr_stub cache miss on %s", sprintaei (aei)));
return NULLPA;
}
pa = &ie -> ie_addr;
if (addr_log -> ll_events & LLOG_DEBUG)
_printent (ie);
return (pa -> pa_addr.sa_addr.ta_naddr > 0 ? pa : NULLPA);
}