|
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: 2371 (0x943) Types: TextFile Names: »outbound.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/doc/manual/volume2/outbound.c«
main (argc, argv) int argc; char **argv; { sys_init (argv[0]); /* init the channel - and find out who we are */ dirinit(); /* get to the right directory */ #ifdef PP_DEBUG if (argc > 1 && strcmp (argv[1], "debug") == 0) debug_channel_control (argc, argv, chaninit, process, endproc); else #endif channel_control (argc, argv, chaninit, process, endproc); exit (0); } static int chaninit (arg) struct type_Qmgr_Channel *arg; { char *p = qb2str (arg); if ((mychan = ch_nm2struct (p)) == (CHAN *)0) err_abrt (RP_PARM, "Channel '%s' not known", p); exam_init (mychan); free (p); return OK; } static int endproc () { if (cur_host) exam_close (OK); } static struct type_Qmgr_DeliveryStatus *process (arg) struct type_Qmgr_ProcMsg *arg; { struct prm_vars prm; struct type_Qmgr_UserList *up; Q_struct Qstruct, *qp = &Qstruct; int retval; ADDR *ap, *ad_sendr = NULLADDR, *ad_recip = NULLADDR, *alp, *ad_list = NULLADDR; int ad_count; if (this_msg) free (this_msg); this_msg = qb2str (arg -> qid); PP_TRACE (("process msg %s", this_msg)); bzero ((char *)&prm, sizeof prm); bzero ((char *)qp, sizeof *qp); (void) delivery_init (arg -> users); retval = rd_msg (this_msg, &prm, qp, &ad_sendr, &ad_recip, &ad_count); if (rp_isbad (retval)) { PP_LOG (LLOG_EXCEPTIONS, ("rd_msg err: %s", this_msg)); return delivery_setall (int_Qmgr_status_messageFailure); } sender = ad_sendr -> ad_r822adr; for (ap = ad_recip; ap; ap = ap -> ad_next) { for (up = arg ->users; up; up = up -> next) { if (up -> RecipientId -> parm != ap -> ad_no) continue; if (chan_acheck (ap, mychan, ad_list == NULL, &cur_mta) == NOTOK) continue; } if (up == NULL) continue; if (ad_list == NULLADDR) ad_list = alp = (ADDR *) calloc (1, sizeof *alp); else { alp -> ad_next = (ADDR *) calloc (1, sizeof *alp); alp = alp -> ad_next; } *alp = *ap; alp -> ad_next = NULLADDR; } if (ad_list == NULLADDR) { PP_LOG (LLOG_EXCEPTIONS, ("No recipients in user list")); rd_end (); return deliverystate; } deliver (ad_list, qp); /* do what is required */ rd_end(); return deliverystate; } static void dirinit() /* Change into pp queue space */ { if (chdir (quedfldir) < 0) err_abrt (RP_LIO, "Unable to change directory to '%s'", quedfldir); }