Lines Matching refs:mci
79 mci_cache(mci) in mci_cache() argument
80 register MCI *mci; in mci_cache()
89 mcislot = mci_scan(mci);
96 if (mci->mci_host == NULL)
100 if (bitset(MCIF_CACHED, mci->mci_flags))
109 (void *)mci, mci->mci_host, (int) (mcislot - MciCache));
113 (unsigned long) mci, mci->mci_host,
116 *mcislot = mci;
117 mci->mci_flags |= MCIF_CACHED;
135 register MCI *mci; local
156 mci = MciCache[i];
157 if (mci == NULL || mci->mci_state == MCIS_CLOSED)
162 if ((mci->mci_lastuse + MciCacheTimeout <= now ||
163 (mci->mci_mailer != NULL &&
164 mci->mci_mailer->m_maxdeliveries > 0 &&
165 mci->mci_deliveries + 1 >= mci->mci_mailer->m_maxdeliveries))&&
166 mci != savemci)
177 if (mci->mci_lastuse < (*bestmci)->mci_lastuse)
202 register MCI *mci; local
205 mci = *mcislot;
206 if (mci == NULL)
209 if (mci->mci_host == NULL)
212 mci_unlock_host(mci);
216 (void *)mci, mci->mci_host, (int) (mcislot - MciCache),
221 (unsigned long) mci, mci->mci_host,
224 mci->mci_deliveries = 0;
227 message("Closing connection to %s", mci->mci_host);
229 mci->mci_flags &= ~MCIF_CACHED;
232 if (mci->mci_state != MCIS_CLOSED)
233 smtpquit(mci->mci_mailer, mci, &BlankEnvelope);
235 xla_host_end(mci->mci_host);
240 if (mci->mci_in != NULL)
241 (void) sm_io_close(mci->mci_in, SM_TIME_DEFAULT);
242 if (mci->mci_out != NULL)
243 (void) sm_io_close(mci->mci_out, SM_TIME_DEFAULT);
244 mci->mci_in = mci->mci_out = NULL;
245 mci->mci_state = MCIS_CLOSED;
246 mci->mci_exitstat = EX_OK;
247 mci->mci_errno = 0;
248 mci->mci_flags = 0;
250 mci->mci_retryrcpt = false;
251 mci->mci_tolist = NULL;
252 mci->mci_okrcpts = 0;
255 SM_FREE(mci->mci_status);
256 SM_FREE(mci->mci_rstatus);
257 SM_FREE(mci->mci_heloname);
258 mci_clear(mci);
259 if (mci->mci_rpool != NULL)
261 sm_rpool_free(mci->mci_rpool);
262 mci->mci_macro.mac_rpool = NULL;
263 mci->mci_rpool = NULL;
306 mci_clr_extensions(mci) in mci_clr_extensions() argument
307 MCI *mci; in mci_clr_extensions()
309 if (mci == NULL)
312 mci->mci_flags &= ~MCIF_EXTENS;
313 mci->mci_maxsize = 0;
314 mci->mci_min_by = 0;
316 mci->mci_saslcap = NULL;
331 mci_clear(mci) in mci_clear() argument
332 MCI *mci; in mci_clear()
334 if (mci == NULL)
337 mci->mci_maxsize = 0;
338 mci->mci_min_by = 0;
339 mci->mci_deliveries = 0;
341 if (bitset(MCIF_AUTHACT, mci->mci_flags))
342 sasl_dispose(&mci->mci_conn);
345 if (bitset(MCIF_TLSACT, mci->mci_flags) && mci->mci_ssl != NULL)
346 SM_SSL_FREE(mci->mci_ssl);
350 mci->mci_flags &= MCIF_CACHED;
351 mactabclear(&mci->mci_macro);
370 register MCI *mci; local
384 mci = &s->s_mci;
387 mci->mci_retryrcpt = false;
388 mci->mci_tolist = NULL;
389 mci->mci_okrcpts = 0;
390 mci->mci_flags &= ~MCIF_NOTSTICKY;
392 if (mci->mci_rpool == NULL)
393 mci->mci_rpool = sm_rpool_new_x(NULL);
395 if (mci->mci_macro.mac_rpool == NULL)
396 mci->mci_macro.mac_rpool = mci->mci_rpool;
403 if (mci->mci_host == NULL &&
404 (mci->mci_host = s->s_name) != NULL &&
405 !mci_load_persistent(mci))
410 mci->mci_exitstat = EX_TEMPFAIL;
411 mci->mci_state = MCIS_CLOSED;
412 mci->mci_statfile = NULL;
413 return mci;
419 host, m->m_name, mci->mci_state, mci->mci_flags,
420 mci->mci_exitstat, mci->mci_errno);
423 if (mci->mci_state == MCIS_OPEN)
426 (void) smtpprobe(mci);
429 if (mci->mci_state != MCIS_OPEN)
431 mci->mci_errno = 0;
432 mci->mci_exitstat = EX_OK;
433 mci->mci_state = MCIS_CLOSED;
441 (void) getpeername(sm_io_getinfo(mci->mci_in,
446 if (mci->mci_state == MCIS_CLOSED)
451 if (mci->mci_lastuse + MciInfoTimeout <= now)
453 mci->mci_lastuse = now;
454 mci->mci_errno = 0;
455 mci->mci_exitstat = EX_OK;
457 mci_clear(mci);
460 return mci;
477 mci_close(mci, where) in mci_close() argument
478 MCI *mci; in mci_close()
483 if (mci == NULL)
486 if (mci->mci_out != NULL)
492 mci_dump(sm_debug_file(), mci, false);
495 (void) sm_io_close(mci->mci_out, SM_TIME_DEFAULT);
496 mci->mci_out = NULL;
498 if (mci->mci_in != NULL)
505 mci_dump(sm_debug_file(), mci, false);
507 (void) sm_io_close(mci->mci_in, SM_TIME_DEFAULT);
508 mci->mci_in = NULL;
510 mci->mci_state = MCIS_CLOSED;
527 register MCI *mci; local
530 mci = (MCI *) sm_malloc_x(sizeof(*mci));
532 mci = (MCI *) sm_rpool_malloc_x(rpool, sizeof(*mci));
533 memset((char *) mci, '\0', sizeof(*mci));
534 mci->mci_rpool = sm_rpool_new_x(NULL);
535 mci->mci_macro.mac_rpool = mci->mci_rpool;
536 return mci;
554 register MCI *mci; local
563 mci = &s->s_mci;
564 return mci->mci_state == MCIS_OPEN;
580 mci_setstat(mci, xstat, dstat, rstat) in mci_setstat() argument
581 MCI *mci; in mci_setstat()
588 mci->mci_exitstat = xstat;
590 SM_FREE(mci->mci_status);
592 mci->mci_status = sm_strdup_x(dstat);
594 SM_FREE(mci->mci_rstatus);
596 mci->mci_rstatus = sm_strdup_x(rstat);
656 mci_dump(fp, mci, logit) in mci_dump() argument
658 register MCI *mci;
667 (void) sm_snprintf(p, SPACELEFT(buf, p), "MCI@%p: ", (void *)mci);
669 if (mci == NULL)
674 (void) sm_snprintf(p, SPACELEFT(buf, p), "flags=%lx", mci->mci_flags);
686 if (mci->mci_flags != 0)
693 if (!bitset(f->mcif_bit, mci->mci_flags))
705 sep, mci->mci_errno, mci->mci_herrno,
706 mci->mci_exitstat, mci->mci_state, (int) mci->mci_pid, sep);
710 mci->mci_maxsize, mci->mci_phase,
711 mci->mci_mailer == NULL ? "NULL" : mci->mci_mailer->m_name,
716 mci->mci_status, mci->mci_rstatus, sep);
720 mci->mci_host, ctime(&mci->mci_lastuse));
772 mci_lock_host(mci) in mci_lock_host() argument
773 MCI *mci; in mci_lock_host()
775 if (mci == NULL)
785 return mci_lock_host_statfile(mci);
789 mci_lock_host_statfile(mci) in mci_lock_host_statfile() argument
790 MCI *mci; in mci_lock_host_statfile()
796 if (HostStatDir == NULL || mci->mci_host == NULL)
801 mci->mci_host);
803 if (mci_generate_persistent_path(mci->mci_host, fname, sizeof(fname),
809 mci->mci_host);
815 mci->mci_statfile = safefopen(fname, O_RDWR, FileMode,
818 if (mci->mci_statfile == NULL)
824 if (!lockfile(sm_io_getinfo(mci->mci_statfile, SM_IO_WHAT_FD, NULL),
830 (void) sm_io_close(mci->mci_statfile, SM_TIME_DEFAULT);
831 mci->mci_statfile = NULL;
836 if (tTd(56, 12) && mci->mci_statfile != NULL)
857 mci_unlock_host(mci) in mci_unlock_host() argument
858 MCI *mci; in mci_unlock_host()
862 if (mci == NULL)
869 if (HostStatDir == NULL || mci->mci_host == NULL)
872 if (!SingleThreadDelivery && mci_lock_host_statfile(mci) == EX_TEMPFAIL)
881 mci_store_persistent(mci);
884 if (mci->mci_statfile != NULL)
886 (void) sm_io_close(mci->mci_statfile, SM_TIME_DEFAULT);
887 mci->mci_statfile = NULL;
907 mci_load_persistent(mci) in mci_load_persistent() argument
908 MCI *mci; in mci_load_persistent()
915 if (mci == NULL)
922 if (IgnoreHostStatus || HostStatDir == NULL || mci->mci_host == NULL)
926 if (SingleThreadDelivery && mci->mci_statfile != NULL)
931 mci->mci_host);
933 if (mci_generate_persistent_path(mci->mci_host, fname, sizeof(fname),
958 (void) mci_read_persistent(fp, mci);
989 mci_read_persistent(fp, mci) in mci_read_persistent() argument
991 register MCI *mci;
1004 if (mci == NULL)
1016 SM_FREE(mci->mci_status);
1017 SM_FREE(mci->mci_rstatus);
1038 mci->mci_errno = atoi(&buf[1]);
1042 mci->mci_herrno = atoi(&buf[1]);
1046 mci->mci_exitstat = atoi(&buf[1]);
1050 mci->mci_status = newstr(&buf[1]);
1054 mci->mci_rstatus = newstr(&buf[1]);
1058 mci->mci_lastuse = atol(&buf[1]);
1063 mci_dump(sm_debug_file(), mci, false);
1069 FileName == NULL ? mci->mci_host : FileName,
1096 mci_store_persistent(mci) in mci_store_persistent() argument
1097 MCI *mci; in mci_store_persistent()
1101 if (mci == NULL)
1108 if (HostStatDir == NULL || mci->mci_host == NULL)
1113 mci->mci_host);
1115 if (mci->mci_statfile == NULL)
1122 sm_io_rewind(mci->mci_statfile, SM_TIME_DEFAULT);
1124 (void) ftruncate(sm_io_getinfo(mci->mci_statfile, SM_IO_WHAT_FD, NULL),
1128 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, "V0\n");
1129 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, "E%d\n",
1130 mci->mci_errno);
1131 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, "H%d\n",
1132 mci->mci_herrno);
1133 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, "S%d\n",
1134 mci->mci_exitstat);
1135 if (mci->mci_status != NULL)
1136 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT,
1138 denlstring(mci->mci_status, true, false));
1139 if (mci->mci_rstatus != NULL)
1140 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT,
1142 denlstring(mci->mci_rstatus, true, false));
1143 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, "U%ld\n",
1144 (long)(mci->mci_lastuse));
1145 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, ".\n");
1147 (void) sm_io_flush(mci->mci_statfile, SM_TIME_DEFAULT);