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 o

⟦5532f4339⟧ TextFile

    Length: 3407 (0xd4f)
    Types: TextFile
    Names: »or_rfc2or.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« 
        └─⟦e5a54fb17⟧ 
            └─⟦this⟧ »pp-5.0/Lib/or/or_rfc2or.c« 

TextFile

/* or_rfc2or.c: convert from rfc address to or address */

# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/or/RCS/or_rfc2or.c,v 5.0 90/09/20 16:08:39 pp Exp Locker: pp $";
# endif

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Lib/or/RCS/or_rfc2or.c,v 5.0 90/09/20 16:08:39 pp Exp Locker: pp $
 *
 * $Log:	or_rfc2or.c,v $
 * Revision 5.0  90/09/20  16:08:39  pp
 * rcsforce : 5.0 public release
 * 
 */



#include "or.h"
#include "util.h"
#include "ap.h"

extern char     *loc_dom_site;
extern char     *loc_or;
extern char     or_error[];
static int	RFC_encode();
static void	get_loc_val ();

int or_rfc2or_aux (rfc, or, addr_flag)
char            *rfc;
OR_ptr          *or;
int             addr_flag;
{
    AP_ptr      ap,
    		group,
    		name,
		local,
		route,
		domain;
    char        buf[LINESIZE],
		lbuf[LINESIZE],
		dbuf[LINESIZE];
    int		retval;
    PP_DBG (("Lib/or_rfc2or ('%s')", rfc));

    /*
    An address can be specified as: 'xxxx: ;'
    */

    if (rfc_space (rfc))
	return (or_blank (or));


    local  = NULLAP;
    domain = NULLAP;
    route  = NULLAP;


    if ((ap = ap_s2t (rfc)) != BADAP
	 && ap_t2p (ap, &group, &name, &local, &domain, &route)
		!= BADAP)
    {
	if (route != NULLAP) {
		retval = RFC_encode (rfc, or, addr_flag, domain, route);
		ap_free(ap);
		return retval;
	}
	if (local != NULLAP) {
		char	*cp; 

		get_loc_val (local, lbuf);
		if(!or_str_isps (lbuf)) {
			retval = RFC_encode (rfc, or, 
					     addr_flag, domain, route);
			ap_free(ap);
			return retval;
		}
	} else
	    lbuf[0] = '\0';

	if (domain != NULLAP) {
		ap_val2str(dbuf, domain->ap_obvalue, domain->ap_obtype);
		if (!or_str_isps (dbuf)) {
			retval = RFC_encode (rfc, or, addr_flag,
					     domain, route);
			ap_free(ap);
			return retval;
		}
	} else
	    (void) strcpy (dbuf, loc_dom_site);

	if (or_rbits2or (lbuf, dbuf, or) == OK)
	    return (OK);
    } else {
	    if (ap != BADAP)
		    ap_free(ap);
	    PP_LOG (LLOG_EXCEPTIONS,
		    ("Lib/or_rfc2or Can't parse address '%s'", rfc));
	    sprintf(or_error, "Can't parse address '%s'",rfc);
	    return (NOTOK);
    }
    retval = RFC_encode(rfc, or, addr_flag, domain, route);
    if (ap != BADAP)
	    ap_free(ap);
    return retval;

}

static int RFC_encode(rfc, or, addr_flag, domain, route)
char	*rfc;
OR_ptr	*or;
int	addr_flag;
AP_ptr	domain,
	route;
{
    char	buf[LINESIZE];
    OR_ptr	ptr;
    char	*dmn = NULLCP;
    /*
    Make explicit RFC encoding
    */
    or_asc2ps (rfc, buf);
    ptr = or_new (OR_DD, "RFC-822", buf);

    if (route != NULLAP)
	    dmn = route -> ap_obvalue;
    else if (domain != NULLAP)
	    dmn = domain -> ap_obvalue;
    if (dmn != NULLCP
	&& tb_get1148gate (dmn, or) == OK) {
	    *or = or_add( *or, ptr, TRUE);
	    return OK;
    }
	    
    if (addr_flag)
	    return NOTOK;

    /* RFC_encode with local or */
    *or = or_std2or (loc_or);
    *or = or_add (*or, ptr, TRUE);
    if (*or == NULLOR)
	return (NOTOK);

    return (OK);
}

static void get_loc_val (lap, buf)
AP_ptr lap;
char buf[];
{
	for (buf[0] = '\0'; lap != NULLAP; lap = lap -> ap_next) {
		switch (lap -> ap_obtype) {
		    default:
		    case AP_NIL:
			break;
		    case AP_COMMENT:
			continue;

		    case AP_GENERIC_WORD:
		    case AP_MAILBOX:
			if (buf[0])
				(void) strcat (buf, " ");
			(void) strcat (buf, lap -> ap_obvalue);
			continue;
		}
		break;
	}
}