|
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; } }