|
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 x
Length: 33971 (0x84b3) Types: TextFile Names: »x400outext.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Chans/x40088/x400outext.c«
/* x400outext.c: extension attributes for X400out88 */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Chans/x40088/RCS/x400outext.c,v 5.0 90/09/20 15:58:49 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Chans/x40088/RCS/x400outext.c,v 5.0 90/09/20 15:58:49 pp Exp Locker: pp $ * * $Log: x400outext.c,v $ * Revision 5.0 90/09/20 15:58:49 pp * rcsforce : 5.0 public release * */ #include "util.h" #include "q.h" #include "adr.h" #include "dr.h" #include "Transfer-types.h" #include "Extensions-types.h" #include "or.h" #include <isode/cmd_srch.h> #include <rtsparams.h> struct type_UNIV_UTCTime *build_time (); struct type_MTA_ORName *build_fullname (); struct type_MTA_ORName *build_addr (); struct type_MTA_GlobalDomainIdentifier *build_gdi (); extern int trace_type; #define wrap_up_ext(e, n) \ (e) = (struct type_MTA_Extensions *) smalloc (sizeof *extl); \ (e) -> next = NULL; (e) -> ExtensionField = (n); #define STR2QB(s) str2qb(s, strlen(s), 1) static struct type_MTA_ExtensionType *build_ext_type (ext_int, ext_oid) int ext_int; OID ext_oid; { struct type_MTA_ExtensionType *type; type = (struct type_MTA_ExtensionType *) smalloc (sizeof *type); if (ext_int == EXT_OID_FORM) { type -> offset = type_MTA_ExtensionType_local; type -> un.local = oid_cpy (ext_oid); } else { type -> offset = type_MTA_ExtensionType_global; type -> un.global = ext_int; } return type; } static struct type_MTA_Criticality *build_crit (cr) int cr; { char *p; p = int2strb (cr, 3); return strb2bitstr (p, 3, PE_CLASS_UNIV, PE_PRIM_BITS); } static PE build_ext_value (qb) struct qbuf *qb; { char *cp; PS ps; PE pe; cp = qb2str(qb); if ((ps = ps_alloc (str_open)) == NULLPS) adios (NULLCP, "PS alloc failed"); if (str_setup (ps, cp, qb -> qb_len, 1) == NOTOK) adios (NULLCP, "Can't setup PS stream"); if ((pe = ps2pe (ps)) == NULLPE) adios (NULLCP, "ps2pe failed [%s]", ps_error (ps -> ps_errno)); ps_free (ps); return pe; } static struct type_MTA_Extensions *build_ext_rrp (parm, crit) int parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_Extensions_RecipientReassignmentProhibited *value; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_RECIPIENT_REASSIGNMENT_PROHIBITED, NULLOID); if (crit != EXT_RECIPIENT_REASSIGNMENT_PROHIBITED_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = (struct type_Extensions_RecipientReassignmentProhibited *) smalloc (sizeof *value); value -> parm = parm; if (encode_Extensions_RecipientReassignmentProhibited (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode RecipientReassignmentProhibited value [%s]", PY_pepy); PP_PDU (print_Extensions_RecipientReassignmentProhibited, ext -> value, "Extensions.RecipientReassignmentProhibited", PDU_WRITE); free_Extensions_RecipientReassignmentProhibited (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_ext_dep (parm, crit) int parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_Extensions_DLExpansionProhibited *value; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_DL_EXPANSION_PROHIBITED, NULLOID); if (crit != EXT_DL_EXPANSION_PROHIBITED_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = (struct type_Extensions_DLExpansionProhibited *) smalloc (sizeof *value); value -> parm = parm; if (encode_Extensions_DLExpansionProhibited (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode DLExpansionProhibited value [%s]", PY_pepy); PP_PDU (print_Extensions_DLExpansionProhibited, ext -> value, "Extensions.DLExpansionProhibited", PDU_WRITE); free_Extensions_DLExpansionProhibited (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_ext_cwlp (parm, crit) int parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_Extensions_ConversionWithLossProhibited *value; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_CONVERSION_WITH_LOSS_PROHIBITED, NULLOID); if (crit != EXT_CONVERSION_WITH_LOSS_PROHIBITED_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = (struct type_Extensions_ConversionWithLossProhibited *) smalloc (sizeof *value); value -> parm = parm; if (encode_Extensions_ConversionWithLossProhibited (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode ConversionWithLossProhibited value [%s]", PY_pepy); PP_PDU (print_Extensions_ConversionWithLossProhibited, ext -> value, "Extensions.ConversionWithLossProhibited", PDU_WRITE); free_Extensions_ConversionWithLossProhibited (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_ext_lt (parm, crit) UTC parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_Extensions_LatestDeliveryTime *value; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_LATEST_DELIVERY_TIME, NULLOID); if (crit != EXT_LATEST_DELIVERY_TIME_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = build_time (parm); if (encode_Extensions_LatestDeliveryTime (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode LatestDeliveryTime value [%s]", PY_pepy); PP_PDU (print_Extensions_LatestDeliveryTime, ext -> value, "Extensions.LatestDeliveryTime", PDU_WRITE); free_Extensions_LatestDeliveryTime (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_ext_ora (parm, crit) FullName *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_Extensions_OriginatorReturnAddress *value; struct type_MTA_ORName *orn; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_ORIGINATOR_RETURN_ADDRESS, NULLOID); if (crit != EXT_ORIGINATOR_RETURN_ADDRESS_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; orn = build_addr (parm -> fn_addr); value = (struct type_Extensions_OriginatorReturnAddress *) smalloc (sizeof *value); value -> standard__attributes = orn -> standard__attributes; orn -> standard__attributes = NULL; value -> domain__defined__attributes = orn -> domain__defined; orn -> domain__defined = NULL; value -> extension__attributes = orn -> extension__attributes; orn -> extension__attributes = NULL; free_MTA_ORName (orn); if (encode_Extensions_OriginatorReturnAddress (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode OriginatorReturnAddress value [%s]", PY_pepy); PP_PDU (print_Extensions_OriginatorReturnAddress, ext -> value, "Extensions.OriginatorReturnAddress", PDU_WRITE); free_Extensions_OriginatorReturnAddress (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_ext_oc (parm, crit) struct qbuf *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_ORIGINATOR_CERTIFICATE, NULLOID); if (crit != EXT_ORIGINATOR_CERTIFICATE_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; ext -> value = build_ext_value (parm); PP_PDU (print_Extensions_OriginatorCertificate, ext -> value, "Extensions.OriginatorCertificate", PDU_WRITE); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_ext_ai (parm, crit) struct qbuf *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_CONTENT_CONFIDENTIALITY_ALGORITHM_IDENTIFIER, NULLOID); if (crit != EXT_CONTENT_CONFIDENTIALITY_ALGORITHM_IDENTIFIER_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; ext -> value = build_ext_value (parm); PP_PDU (print_Extensions_ContentConfidentialityAlgorithmIdentifier, ext -> value, "Extensions.ContentConfidentialityAlgorithmIdentifier", PDU_WRITE); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_ext_moac (parm, crit) struct qbuf *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_MESSAGE_ORIGIN_AUTHENTICATION_CHECK, NULLOID); if (crit != EXT_MESSAGE_ORIGIN_AUTHENTICATION_CHECK_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; ext -> value = build_ext_value (parm); PP_PDU (print_Extensions_MessageOriginAuthenticationCheck, ext -> value, "Extensions.MessageOriginAuthenticationCheck", PDU_WRITE); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_ext_sl (parm, crit) struct qbuf *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_MESSAGE_SECURITY_LABEL, NULLOID); if (crit != EXT_MESSAGE_SECURITY_LABEL_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; ext -> value = build_ext_value (parm); PP_PDU (print_Extensions_MessageSecurityLabel, ext -> value, "Extensions.MessageSecurityLabel", PDU_WRITE); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_ext_cc (parm, crit) struct qbuf *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_CONTENT_CORRELATOR, NULLOID); if (crit != EXT_CONTENT_CORRELATOR_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; ext -> value = build_ext_value (parm); PP_PDU (print_Extensions_ContentCorrelator, ext -> value, "Extensions.ContentCorrelator", PDU_WRITE); wrap_up_ext (extl, ext); return extl; } static struct type_Extensions_DLExpansionHistory * build_dehl (dlh) DLHistory *dlh; { struct type_Extensions_DLExpansionHistory *dlist = NULL, **dp; struct type_Extensions_DLExpansion *d; dp = &dlist; for (;dlh; dlh = dlh -> dlh_next) { *dp = (struct type_Extensions_DLExpansionHistory *) smalloc (sizeof **dp); (*dp) -> next = NULL; d = (*dp) -> DLExpansion = (struct type_Extensions_DLExpansion *) smalloc (sizeof *d); d -> address = build_addr (dlh -> dlh_addr); d -> dl__expansion__time = build_time (dlh -> dlh_time); dp = &(*dp) -> next; } return dlist; } static struct type_MTA_Extensions *build_ext_dl (parm, crit) DLHistory *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_Extensions_DLExpansionHistory *value; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_DL_EXPANSION_HISTORY, NULLOID); if (crit != EXT_DL_EXPANSION_HISTORY_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = build_dehl (parm); if (encode_Extensions_DLExpansionHistory (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode DLExpansionHistory value [%s]", PY_pepy); PP_PDU (print_Extensions_DLExpansionHistory, ext -> value, "Extensions.DLExpansionHistory", PDU_WRITE); free_Extensions_DLExpansionHistory (value); wrap_up_ext (extl, ext); return extl; } static struct type_Extensions_MTASuppliedInformation * build_msi (dp) DomSupInfo *dp; { struct type_Extensions_MTASuppliedInformation *msi; msi = (struct type_Extensions_MTASuppliedInformation *) calloc (1, sizeof *msi); if (dp -> dsi_time) msi -> arrival__time = build_time (dp -> dsi_time); msi -> routing__action = (struct type_MTA_RoutingAction *) smalloc (sizeof *msi -> routing__action); msi -> routing__action -> parm = dp -> dsi_action; if (dp -> dsi_attempted_mta || (dp -> dsi_attempted_md.global_Country && dp -> dsi_attempted_md.global_Admin)) { msi -> attempted = (struct choice_Extensions_1 *) calloc (1, sizeof *msi -> attempted); if (dp -> dsi_attempted_mta) { msi -> attempted -> offset = choice_Extensions_1_mta; msi -> attempted -> un.mta = STR2QB (dp -> dsi_attempted_mta); } else { msi -> attempted -> offset = choice_Extensions_1_domain; msi -> attempted -> un.domain = build_gdi (&dp -> dsi_attempted_md); } } if (dp -> dsi_deferred) msi -> deferred__time = build_time (dp -> dsi_deferred); if (dp -> dsi_other_actions) { msi -> other__actions = pe_alloc (PE_CLASS_UNIV, PE_FORM_PRIM, PE_PRIM_BITS); if (dp -> dsi_other_actions & ACTION_REDIRECTED) bit_on (msi -> other__actions, bit_MTA_OtherActions_redirected); if (dp -> dsi_other_actions & ACTION_EXPANDED) bit_on (msi -> other__actions, bit_MTA_OtherActions_dl__operation); } return msi; } static struct type_Extensions_InternalTraceInformation *build_inttrace (tp) Trace *tp; { struct type_Extensions_InternalTraceInformation *tlist = NULL, **tpp; struct type_Extensions_InternalTraceInformationElement *ti; Trace *tlast; if (trace_type == RTSP_TRACE_ADMD || trace_type == RTSP_TRACE_NOINT) return NULL; for (tlast = tp; tlast && tlast -> trace_next; tlast = tlast -> trace_next) continue; tpp = &tlist; for (; tp; tp = tp -> trace_next) { if (tp -> trace_mta == NULLCP) continue; if (trace_type == RTSP_TRACE_LOCALINT && !same_prmd (tlast, tp)) continue; *tpp = (struct type_Extensions_InternalTraceInformation *) smalloc (sizeof **tpp); (*tpp) -> next = NULL; ti = (*tpp) -> InternalTraceInformationElement = (struct type_Extensions_InternalTraceInformationElement *) calloc (1, sizeof *ti); ti -> global__domain__identifier = build_gdi (&tp -> trace_DomId); ti -> mta__name = STR2QB (tp -> trace_mta); ti -> mta__supplied__information = build_msi (&tp -> trace_DomSinfo); tpp = &(*tpp) -> next; } return tlist; } static struct type_MTA_Extensions *build_ext_iti (parm, crit) Trace *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_Extensions_InternalTraceInformation *value; struct type_MTA_Extensions *extl; PE pe; value = build_inttrace (parm); if (value == NULL) return NULL; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_INTERNAL_TRACE_INFORMATION, NULLOID); if (crit != EXT_INTERNAL_TRACE_INFORMATION_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; if (encode_Extensions_InternalTraceInformation (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode InternalTraceInformation value [%s]", PY_pepy); PP_PDU (print_Extensions_InternalTraceInformation, ext -> value, "Extensions.InternalTraceInformation", PDU_WRITE); pe = pe_cpy (ext->value); pe_free (ext->value); ext -> value = pe; free_Extensions_InternalTraceInformation (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_ExtensionField *build_extension (ext) Extension *ext; { struct type_MTA_ExtensionField *ep; ep = (struct type_MTA_ExtensionField *) smalloc (sizeof *ep); ep -> type = build_ext_type (ext -> ext_int, ext -> ext_oid); ep -> criticality = build_crit (ext -> ext_criticality); ep -> value = build_ext_value (ext -> ext_value); return ep; } struct type_MTA_Extensions *build_pm_extensions (qp) Q_struct *qp; { struct type_MTA_Extensions *ext = NULL, **ep; Extension *pp_exp; ep = &ext; for (pp_exp = qp -> per_message_extensions; pp_exp; pp_exp = pp_exp -> ext_next) { *ep = (struct type_MTA_Extensions *) smalloc (sizeof *ep); (*ep) -> next = NULL; (*ep) -> ExtensionField = build_extension (pp_exp); ep = &(*ep) -> next; } if (qp -> recip_reassign_prohibited) { *ep = build_ext_rrp (qp -> recip_reassign_prohibited, qp -> recip_reassign_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> dl_expansion_prohibited) { *ep = build_ext_dep (qp -> dl_expansion_prohibited, qp -> dl_expansion_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> conversion_with_loss_prohibited) { *ep = build_ext_cwlp (qp -> conversion_with_loss_prohibited, qp -> conversion_with_loss_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> latest_time) { *ep = build_ext_lt (qp -> latest_time, qp -> latest_time_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> originator_return_address) { *ep = build_ext_ora (qp -> originator_return_address, qp -> originator_return_address_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> originator_certificate) { *ep = build_ext_oc (qp -> originator_certificate, qp -> originator_certificate_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> algorithm_identifier) { *ep = build_ext_ai (qp -> algorithm_identifier, qp -> algorithm_identifier_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> message_origin_auth_check) { *ep = build_ext_moac (qp -> message_origin_auth_check, qp -> message_origin_auth_check_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> security_label) { *ep = build_ext_sl (qp -> security_label, qp -> security_label_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> general_content_correlator) { *ep = build_ext_cc (qp -> general_content_correlator, qp -> content_correlator_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> dl_expansion_history) { *ep = build_ext_dl (qp -> dl_expansion_history, qp -> dl_expansion_history_crit); if (*ep) ep = &(*ep) -> next; } if (qp -> trace) { *ep = build_ext_iti (qp -> trace, EXT_INTERNAL_TRACE_INFORMATION_DC); if (*ep) ep = &(*ep) -> next; } return ext; } static struct type_MTA_Extensions *build_aext_oraa (parm, crit) char *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_OriginatorRequestedAlternateRecipient *value; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_ORIGINATOR_RETURN_ADDRESS, NULLOID); if (crit != EXT_ORIGINATOR_RETURN_ADDRESS_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = build_addr (parm); if (encode_Extensions_OriginatorRequestedAlternateRecipient (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode OriginatorRequestedAlternateRecipient value [%s]", PY_pepy); PP_PDU (print_Extensions_OriginatorRequestedAlternateRecipient, ext -> value, "Extensions.OriginatorRequestedAlternateRecipient", PDU_WRITE); free_Extensions_OriginatorRequestedAlternateRecipient (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_rdm (parm, crit) int parm[AD_RDM_MAX]; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_RequestedDeliveryMethod *value, **vp; int i; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_REQUESTED_DELIVERY_METHOD, NULLOID); if (crit != EXT_REQUESTED_DELIVERY_METHOD_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = NULL; vp = &value; for (i = 0; i < AD_RDM_MAX && parm[i] != AD_RDM_NOTUSED; i++) { *vp = (struct type_Extensions_RequestedDeliveryMethod *) smalloc (sizeof **vp); (*vp) -> element_Extensions_0 = parm[i]; (*vp) -> next = NULL; vp = &(*vp) -> next; } if (encode_Extensions_RequestedDeliveryMethod (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode RequestedDeliveryMethod value [%s]", PY_pepy); PP_PDU (print_Extensions_RequestedDeliveryMethod, ext -> value, "Extensions.RequestedDeliveryMethod", PDU_WRITE); free_Extensions_RequestedDeliveryMethod (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_pf (parm, crit) char parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_PhysicalForwardingProhibited *value; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_PHYSICAL_FORWARDING_PROHIBITED, NULLOID); if (crit != EXT_PHYSICAL_FORWARDING_PROHIBITED_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = (struct type_Extensions_PhysicalForwardingProhibited *) smalloc (sizeof *value); value -> parm = parm; if (encode_Extensions_PhysicalForwardingProhibited (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode PhysicalForwardingProhibited value [%s]", PY_pepy); PP_PDU (print_Extensions_PhysicalForwardingProhibited, ext -> value, "Extensions.PhysicalForwardingProhibited", PDU_WRITE); free_Extensions_PhysicalForwardingProhibited (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_pfar (parm, crit) int parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_PhysicalForwardingAddressRequest *value; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_PHYSICAL_FORWARDING_ADDRESS_REQUEST, NULLOID); if (crit != EXT_PHYSICAL_FORWARDING_ADDRESS_REQUEST_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = (struct type_Extensions_PhysicalForwardingAddressRequest*) smalloc (sizeof *value); value -> parm = parm; if (encode_Extensions_PhysicalForwardingAddressRequest (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode PhysicalForwardingAddressRequest value [%s]", PY_pepy); PP_PDU (print_Extensions_PhysicalForwardingAddressRequest, ext -> value, "Extensions.PhysicalForwardingAddressRequest", PDU_WRITE); free_Extensions_PhysicalForwardingAddressRequest (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_pdm (parm, crit) int parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_PhysicalDeliveryModes *value; char *p; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_PHYSICAL_DELIVERY_MODES, NULLOID); if (crit != EXT_PHYSICAL_DELIVERY_MODES_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; p = int2strb (parm, 8); value = strb2bitstr (p, 8, PE_CLASS_UNIV, PE_PRIM_BITS); if (encode_Extensions_PhysicalDeliveryModes (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode PhysicalDeliveryModes value [%s]", PY_pepy); PP_PDU (print_Extensions_PhysicalDeliveryModes, ext -> value, "Extensions.PhysicalDeliveryModes", PDU_WRITE); free_Extensions_PhysicalDeliveryModes (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_rmt (parm, crit) int parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_RegisteredMailType *value; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_REGISTERED_MAIL, NULLOID); if (crit != EXT_REGISTERED_MAIL_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = (struct type_Extensions_RegisteredMailType *) smalloc (sizeof *value); value -> parm = parm; if (encode_Extensions_RegisteredMailType (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode RegisteredMailType value [%s]", PY_pepy); PP_PDU (print_Extensions_RegisteredMailType, ext -> value, "Extensions.RegisteredMailType", PDU_WRITE); free_Extensions_RegisteredMailType (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_rnfa (parm, crit) char *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_RecipientNumberForAdvice *value; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_RECIPIENT_NUMBER_FOR_ADVICE, NULLOID); if (crit != EXT_RECIPIENT_NUMBER_FOR_ADVICE_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = STR2QB (parm); if (encode_Extensions_RecipientNumberForAdvice (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode RecipientNumberForAdvice value [%s]", PY_pepy); PP_PDU (print_Extensions_RecipientNumberForAdvice, ext -> value, "Extensions.RecipientNumberForAdvice", PDU_WRITE); free_Extensions_RecipientNumberForAdvice (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_pra (parm, crit) OID parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_PhysicalRenditionAttributes *value; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_PHYSICAL_RENDITION_ATTRIBUTES, NULLOID); if (crit != EXT_PHYSICAL_RENDITION_ATTRIBUTES_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = oid_cpy (parm); if (encode_Extensions_PhysicalRenditionAttributes (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode PhysicalRenditionAttributes value [%s]", PY_pepy); PP_PDU (print_Extensions_PhysicalRenditionAttributes, ext -> value, "Extensions.PhysicalRenditionAttributes", PDU_WRITE); free_Extensions_PhysicalRenditionAttributes (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_pdrr (parm, crit) int parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_PhysicalDeliveryReportRequest *value; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_PHYSICAL_DELIVERY_REPORT_REQUEST, NULLOID); if (crit != EXT_PHYSICAL_DELIVERY_REPORT_REQUEST_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = (struct type_Extensions_PhysicalDeliveryReportRequest *) smalloc (sizeof *value); value -> parm = parm; if (encode_Extensions_PhysicalDeliveryReportRequest (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode PhysicalDeliveryReportRequest value [%s]", PY_pepy); PP_PDU (print_Extensions_PhysicalDeliveryReportRequest, ext -> value, "Extensions.PhysicalDeliveryReportRequest", PDU_WRITE); free_Extensions_PhysicalDeliveryReportRequest (value); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_mt (parm, crit) struct qbuf *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_MESSAGE_TOKEN, NULLOID); if (crit != EXT_MESSAGE_TOKEN_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; ext -> value = build_ext_value (parm); PP_PDU (print_Extensions_MessageToken, ext -> value, "Extensions.MessageToken", PDU_WRITE); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_cic (parm, crit) struct qbuf *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_CONTENT_INTEGRITY_CHECK, NULLOID); if (crit != EXT_CONTENT_INTEGRITY_CHECK_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; ext -> value = build_ext_value (parm); PP_PDU (print_Extensions_ContentIntegrityCheck, ext -> value, "Extensions.ContentIntegrityCheck", PDU_WRITE); wrap_up_ext (extl, ext); return extl; } static struct type_MTA_Extensions *build_aext_podr (parm, crit) int parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_ProofOfDeliveryRequest *value; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_PROOF_OF_DELIVERY_REQUEST, NULLOID); if (crit != EXT_PROOF_OF_DELIVERY_REQUEST_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = (struct type_Extensions_ProofOfDeliveryRequest *) smalloc (sizeof *value); value -> parm = parm; if (encode_Extensions_ProofOfDeliveryRequest (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode ProofOfDeliveryRequest value [%s]", PY_pepy); PP_PDU (print_Extensions_ProofOfDeliveryRequest, ext -> value, "Extensions.ProofOfDeliveryRequest", PDU_WRITE); free_Extensions_ProofOfDeliveryRequest (value); wrap_up_ext (extl, ext); return extl; } static struct type_Extensions_RedirectionHistory *build_redir (redir) Redirection *redir; { struct type_Extensions_RedirectionHistory *rlist, **rp; struct type_Extensions_Redirection *rd; rlist = NULL; rp = &rlist; for ( ; redir; redir = redir -> rd_next) { *rp = (struct type_Extensions_RedirectionHistory *) smalloc (sizeof **rp); (*rp) -> next = NULL; (*rp) -> Redirection = rd = (struct type_Extensions_Redirection *) smalloc (sizeof *rd); rd -> intended__recipient__name = (struct type_Extensions_IntendedRecipientName *) smalloc (sizeof *rd -> intended__recipient__name); rd -> intended__recipient__name -> address = build_addr (redir -> rd_addr); rd -> intended__recipient__name -> redirection__time = build_time (redir -> rd_time); rd -> redirection__reason = (struct type_Extensions_RedirectionReason *) smalloc (sizeof *rd -> redirection__reason); rd -> redirection__reason -> parm = redir -> rd_reason; } return rlist; } static struct type_MTA_Extensions *build_aext_rh (parm, crit) Redirection *parm; int crit; { struct type_MTA_ExtensionField *ext; struct type_MTA_Extensions *extl; struct type_Extensions_RedirectionHistory *value; ext = (struct type_MTA_ExtensionField *) smalloc (sizeof *ext); ext -> type = build_ext_type (EXT_REDIRECTION_HISTORY, NULLOID); if (crit != EXT_REDIRECTION_HISTORY_DC) ext -> criticality = build_crit (crit); else ext -> criticality = NULL; value = build_redir (parm); if (encode_Extensions_RedirectionHistory (&ext -> value, 1, 0, NULLCP, value) == NOTOK) adios (NULLCP, "Can't encode RedirectionHistory value [%s]", PY_pepy); PP_PDU (print_Extensions_RedirectionHistory, ext -> value, "Extensions.RedirectionHistory", PDU_WRITE); free_Extensions_RedirectionHistory (value); wrap_up_ext (extl, ext); return extl; } struct type_MTA_Extensions *build_prf_ext (ad) ADDR *ad; { Extension *pp_ext; struct type_MTA_Extensions *extl, **ep; #define bump(x) if (*(x)) (x) = &(*x) -> next extl = NULL; ep = &extl; for (pp_ext = ad -> ad_per_recip_ext_list; pp_ext; pp_ext = pp_ext -> ext_next) { *ep = (struct type_MTA_Extensions *) smalloc (sizeof *ep); (*ep) -> next = NULL; (*ep) -> ExtensionField = build_extension (pp_ext); bump(ep); } if (ad -> ad_orig_req_alt) { *ep = build_aext_oraa (ad -> ad_orig_req_alt, ad -> ad_orig_req_alt_crit); bump(ep); } if (ad -> ad_req_del[0] != AD_RDM_NOTUSED) { *ep = build_aext_rdm (ad -> ad_req_del, ad -> ad_req_del_crit); bump(ep); } if (ad -> ad_phys_forward) { *ep = build_aext_pf (ad -> ad_phys_forward, ad -> ad_phys_forward_crit); bump(ep); } if (ad -> ad_phys_fw_ad_req) { *ep = build_aext_pfar (ad -> ad_phys_fw_ad_req, ad -> ad_phys_fw_ad_crit); bump(ep); } if (ad -> ad_phys_modes) { *ep = build_aext_pdm (ad -> ad_phys_modes, ad -> ad_phys_modes_crit); bump(ep); } if (ad -> ad_reg_mail_type) { *ep = build_aext_rmt (ad -> ad_reg_mail_type, ad -> ad_reg_mail_type_crit); bump (ep); } if (ad -> ad_recip_number_for_advice) { *ep = build_aext_rnfa (ad -> ad_recip_number_for_advice, ad -> ad_recip_number_for_advice_crit); bump (ep); } if (ad -> ad_phys_rendition_attribs) { *ep = build_aext_pra (ad -> ad_phys_rendition_attribs, ad -> ad_phys_rendition_attribs_crit); bump(ep); } if (ad -> ad_pd_report_request) { *ep = build_aext_pdrr (ad -> ad_pd_report_request, ad -> ad_pd_report_request_crit); bump (ep); } if (ad -> ad_message_token) { *ep = build_aext_mt (ad -> ad_message_token, ad -> ad_message_token_crit); bump (ep); } if (ad -> ad_content_integrity) { *ep = build_aext_cic (ad -> ad_content_integrity, ad -> ad_content_integrity_crit); bump(ep); } if (ad -> ad_proof_delivery) { *ep = build_aext_podr (ad -> ad_proof_delivery, ad -> ad_proof_delivery_crit); bump(ep); } if (ad -> ad_redirection_history) { *ep = build_aext_rh (ad -> ad_redirection_history, ad -> ad_redirection_history_crit); bump (ep); } return extl; }