|
|
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 o
Length: 3407 (0xd4f)
Types: TextFile
Names: »or_rfc2or.c«
└─⟦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«
/* 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;
}
}