Lines Matching refs:recipient

41 /*	of in-core recipient structures (i.e. the sum of all recipients
52 /* with sender and recipient information taken from the named queue
66 /* file, and updates the recipient list and \fIrcpt_offset\fR message
71 /* an error to call this when the recipient slots can't be allocated.
362 * If we re-open this file, skip over on-file recipient records that we
363 * already looked at, and refill the in-core recipient address list.
365 * For the first time, the message recipient limit is calculated from the
366 * global recipient limit. This is to avoid reading little recipients
371 * For the next time, the recipient limit is based solely on the message
376 msg_panic("%s: recipient list not empty on recipient reload",
391 msg_panic("%s: no recipient slots available", message->queue_id);
393 msg_info("%s: recipient limit %d", message->queue_id, recipient_limit);
401 * and until we know all the non-recipient information.
403 * Note that the total recipient count record is accurate only for fresh
410 * On the first open, we must examine all non-recipient records.
412 * Optimization: when we know that recipient records are not mixed with
413 * non-recipient records, as is typical with mailing list mail, then we
474 * Process recipient records.
499 /* We already examined all non-recipient records. */
502 /* Examine all remaining non-recipient records. */
504 /* Optimizations for "pure recipient" record sections. */
506 /* We already examined all non-recipient records. */
512 * Examine non-recipient records in the extracted
544 msg_warn("%s: ignoring out-of-order DSN original recipient address <%.200s>",
572 msg_warn("%s: ignoring out-of-order original recipient <%.200s>",
583 * Process non-recipient records.
586 /* We already examined all non-recipient records. */
827 msg_warn("%s: ignoring out-of-order DSN original recipient <%.200s>",
833 msg_warn("%s: ignoring out-of-order original recipient <%.200s>",
849 * Remember when we have read the last recipient batch. Note that we do
955 /* qmgr_message_sort_compare - compare recipient information */
968 * Compare most significant to least significant recipient attributes.
989 * Compare queue name (nexthop or recipient@nexthop).
996 * Compare recipient domain.
1009 * Compare recipient address.
1014 /* qmgr_message_sort - sort message recipient addresses by domain */
1024 msg_info("start sorted recipient list");
1027 msg_info("end sorted recipient list");
1031 /* qmgr_resolve_one - resolve or skip one recipient */
1033 static int qmgr_resolve_one(QMGR_MESSAGE *message, RECIPIENT *recipient,
1065 RECIPIENT *recipient;
1085 for (recipient = list.info; recipient < list.info + list.len; recipient++) {
1093 if (recipient > list.info) {
1094 recipient->u.queue = 0;
1101 reply.recipient);
1102 RECIPIENT_UPDATE(recipient->address, STR(reply.recipient));
1103 if (qmgr_resolve_one(message, recipient,
1104 recipient->address, &reply) < 0)
1106 if (!STREQ(recipient->address, STR(reply.recipient)))
1107 RECIPIENT_UPDATE(recipient->address, STR(reply.recipient));
1130 && RCPT_WITHOUT_DOMAIN(recipient->address, nexthop))
1133 vstring_strcpy(reply.recipient, recipient->address);
1141 if (qmgr_resolve_one(message, recipient,
1142 recipient->address, &reply) < 0)
1144 if (!STREQ(recipient->address, STR(reply.recipient)))
1145 RECIPIENT_UPDATE(recipient->address, STR(reply.recipient));
1153 if (recipient->address[0] == 0) {
1155 "5.1.3 null recipient address");
1183 at = strrchr(STR(reply.recipient), '@');
1184 len = (at ? (at - STR(reply.recipient))
1185 : strlen(STR(reply.recipient)));
1186 if (strncasecmp_utf8(STR(reply.recipient),
1190 QMGR_MSG_STATS(&stats, message), recipient,
1194 deliver_completed(message->fp, recipient->offset);
1248 * This transport is dead. Defer delivery to this recipient.
1258 qmgr_defer_recipient(message, recipient, saved_dsn);
1266 * recipient per delivery, give each recipient its own queue, so that
1268 * in parallel, and so that we can enforce per-recipient concurrency
1269 * limits and prevent one recipient from tying up all the delivery
1270 * agent resources. We use recipient@nexthop as queue name rather
1271 * than the actual recipient domain name, so that one recipient in
1272 * multiple equivalent domains cannot evade the per-recipient
1273 * concurrency limit. Split the address on the recipient delimiter if
1284 * The single-recipient code below was written for local(8) like
1287 * concurrency is changed from per-domain into per-recipient, by
1292 * rarely configured to use single-recipient deliveries. The fix is
1293 * to decouple the per-destination recipient limit from the
1300 /* Copy the recipient localpart. */
1301 at = strrchr(STR(reply.recipient), '@');
1302 len = (at ? (at - STR(reply.recipient))
1303 : strlen(STR(reply.recipient)));
1304 vstring_strncpy(queue_name, STR(reply.recipient), len);
1305 /* Remove the address extension from the recipient localpart. */
1308 /* Assume the recipient domain is equivalent to nexthop. */
1315 * recipient.
1331 * This queue is dead. Defer delivery to this recipient.
1336 qmgr_defer_recipient(message, recipient, saved_dsn);
1342 * This queue is alive. Bind this recipient to this queue instance.
1344 recipient->u.queue = queue;
1355 RECIPIENT *recipient;
1363 * the recipient resolves to the same site and transport as an existing
1364 * recipient, do not create a new queue entry, just move that recipient
1365 * to the recipient list of the existing queue entry. All this provided
1371 for (recipient = list.info; recipient < list.info + list.len; recipient++) {
1376 if ((queue = recipient->u.queue) == 0)
1394 * Lookup old or instantiate new recipient entry. We try to reuse the
1395 * last existing entry whenever the recipient limit permits.
1403 * Add the recipient to the current entry and increase all those
1404 * recipient counters accordingly.
1406 recipient_list_add(&entry->rcpt_list, recipient->offset,
1407 recipient->dsn_orcpt, recipient->dsn_notify,
1408 recipient->orig_addr, recipient->address);
1415 * Release the message recipient list and reinitialize it for the next
1435 /* qmgr_message_move_limits - recycle unused recipient slots */
1519 * recipient addresses. Skip files with malformed envelope information.
1606 * Extract recipient addresses. Skip files with malformed envelope