DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T c

⟦8edb85f39⟧ TextFile

    Length: 5591 (0x15d7)
    Types: TextFile
    Names: »consaddr.c«

Derivation

└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
    └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« 
        └─⟦d3ac74d73⟧ 
            └─⟦this⟧ »isode-5.0/compat/consaddr.c« 

TextFile

/* consaddr.c - CONS level generic <-> interface address munging */

#ifndef lint
static char *rcsid = "$Header: /f/osi/compat/RCS/consaddr.c,v 6.0 89/03/18 23:25:04 mrose Rel $";
#endif

/*
 * $Header: /f/osi/compat/RCS/consaddr.c,v 6.0 89/03/18 23:25:04 mrose Rel $
 *
 * Contributed by Keith Ruttle, CAMTEC Electronics Ltd
 *
 * $Log:	consaddr.c,v $
 * Revision 6.0  89/03/18  23:25:04  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 */

/*
 * for *really* generic address translation
 */

#include <errno.h>
#include <stdio.h>
#include "general.h"
#include "manifest.h"
#include "internet.h"
#include "tailor.h"
#include "tpkt.h"

#ifdef CONS
#ifdef CAMTEC_CCL
#include <sys/file.h>
#include "cons.h"

/* \f

 */

/*
 * convert from the generic CONS structure to interface specific
 */
/* ARGSUSED */
CONN_DB *gen2if (generic, specific, context)
struct NSAPaddr *generic;
CONN_DB         *specific;
int             context;
{
    struct iovec *iov;
    char *a, *b;
    int i;

    if (generic == NULLNA || specific == (CONN_DB *) 0 ||
	generic -> na_type != NA_NSAP || generic -> na_addrlen == 0)
	return (CONN_DB *)0;

    bzero ((char *)specific, sizeof *specific);

    switch (context) {
    case ADDR_REMOTE:
	iov = &(specific -> ccl_iovec[0]);
	if (cons_is_ybts)
		iov -> iov_len = generic -> na_addrlen;
	else
		iov -> iov_len = generic -> na_addrlen + 1;
	iov -> iov_base = malloc(iov -> iov_len + 1);
	bzero(iov -> iov_base, iov -> iov_len + 1);
	a = iov -> iov_base;
	b = generic -> na_address;
	for (i = 0; i < generic -> na_addrlen; i++) {
		if (cons_is_ybts) {
			*a++ = *b++;
			continue;
		}
		if (*b == '.') {
			*a++ = *b++;
			*a++ = strlen(b);
		}
		else
			*a++ = *b++;
	}


    case ADDR_LOCAL:
	iov = &(specific -> ccl_iovec[1]);
	if (cons_is_ybts)
		iov -> iov_len = strlen(cons_local_address) + 1;
	else
		iov -> iov_len = strlen(cons_local_address) + 2;
	iov -> iov_base = malloc (iov -> iov_len + 1);
	bzero(iov -> iov_base, iov->iov_len + 1);
	a = iov->iov_base;
	if (cons_is_ybts)
		*a++ = '/';
	else {
		*a++ = '.';
		*a++ = strlen(cons_local_address);
	}
	bcopy(cons_local_address, a, iov -> iov_len);

	break;

    case ADDR_LISTEN:
	iov = &(specific -> ccl_iovec[0]);
	iov -> iov_len = strlen(cons_listen_str);
	iov -> iov_base = malloc (iov -> iov_len + 1);
	bzero(iov -> iov_base, iov->iov_len + 1);
	bcopy (cons_listen_str, iov->iov_base, iov -> iov_len);
	return (specific);
    }
    return(specific);
}

/*
 * convert from interface specific format to generic CONS structure
 */
/* ARGSUSED */
struct NSAPaddr *if2gen (generic, specific, context)
struct NSAPaddr *generic;
CONN_DB         *specific;
int             context;
{
    struct iovec *iov;
    char *a;
    if (generic == NULLNA || specific == (CONN_DB *) 0)
	return NULLNA;
    bzero ((char *)generic, sizeof *generic);


    generic -> na_type = NA_NSAP;

    switch (context) {
    case ADDR_REMOTE:
	iov = &(specific -> ccl_iovec[1]);
	if (iov -> iov_len) {
		generic -> na_addrlen = iov -> iov_len - 1;
		bcopy ((iov -> iov_base)+1, generic  -> na_address,
			generic -> na_addrlen);
	}
	else generic -> na_addrlen = 0;

	break;
    case ADDR_LOCAL:
	iov = &(specific -> ccl_iovec[0]);
	if (iov -> iov_len) {
		generic -> na_addrlen = iov -> iov_len -1;
		bcopy ((iov -> iov_base)+1, generic  -> na_address,
			generic -> na_addrlen);
	}
	else generic -> na_addrlen = 0;
	break;
    case ADDR_LISTEN:
	return;
    }
    return(generic);
}
/* \f

 */

char *tsel2addr(tsel, na)
char            *tsel;
struct NSAPaddr *na;
{
    register char *p = tsel;
    register char *q;
    int i;

    switch (*p++) {
	case NT_X25:
	    na -> na_type = NA_X25;
	    if (*p >= '0' && *p <= '9')
	    {
		for (q = (char *)na -> na_dte, i = 0; 
		    i < sizeof(na->na_dte) && *p && *p != SEPARATOR; i++)
		    *q++ = *p++;
		*q = 0;
		na -> na_dtelen = i;
		p++;
		for (q = (char *)na -> na_pid, i = 0;
		    i < sizeof(na->na_pid) && *p && *p != SEPARATOR;i++)
		    *q ++ = *p ++;
		na->na_pidlen = i;
		if (*p && *p != SEPARATOR) {
		    for (q = (char *)na -> na_cudf, i = 0;
			    i < sizeof(na->na_cudf) && *p && *p != SEPARATOR;
				i++)
			    *q++ = *p++;
		    na -> na_cudflen = i;
		}
		if (*p && *p == SEPARATOR)
		    p++;
	    }
	    break;

	case NT_TCP:
	    na -> na_type = NA_TCP;
	    for( q = na->na_domain, i = 0;  
		i < sizeof(na->na_domain) && *p && *p != SEPARATOR; i++)
		*q ++ = *p ++;
	    *q = 0;
	    p ++;
	    na -> na_port = atoi (p);
	    while(*p && *p != SEPARATOR)
		p ++;
	    if (*p == SEPARATOR)
		p ++;
	    break;

	case NT_CONS:
	    na -> na_type = NA_NSAP;
	    (void) strcpy (na -> na_address, p);
	    na -> na_addrlen = strlen (p);
	    /* arghhh */
	    break;
    }
    return p;
}

char *addr2tsel(na, tsel)
struct NSAPaddr *na;
char            *tsel;
{
    switch (na -> na_type) {
	case NA_TCP:
	    (void) sprintf (tsel, "%c%s%c%d%c", NT_TCP, na->na_domain,
			SEPARATOR, na->na_port, SEPARATOR);
	    break;
	case NA_X25:
	    (void) sprintf (tsel, "%c%s%c%*.*s%*.*s%c", NT_X25, na->na_dte,
			SEPARATOR, na->na_pidlen, na->na_pidlen, na->na_pid,
			na->na_cudflen, na->na_cudflen, na->na_cudf, SEPARATOR);
	    break;
	case NA_NSAP:
	    (void) sprintf (tsel, "%c%s%c", NT_CONS, na -> na_address, SEPARATOR);
	    break;
    }
    return tsel;
}
#endif
#endif