/*
 * Copyright (c) 2002-2005 Sendmail, Inc. and its suppliers.
 *	All rights reserved.
 *
 * By using this file, you agree to the terms and conditions set
 * forth in the LICENSE file which can be found at the top level of
 * the sendmail distribution.
 */

#include "sm/generic.h"
SM_RCSID("@(#)$Id: qm_ss.c,v 1.73 2005/03/15 19:56:10 ca Exp $")
#include "sm/error.h"
#include "sm/assert.h"
#include "sm/io.h"
#include "sm/rcb.h"
#include "sm/qmgr.h"
#include "sm/qmgr-int.h"
#include "sm/rcbcomm.h"
#include "qmgr.h"
#include "log.h"

/*
**  QMGR_SMTPS -- QMGR - SMTPS interface
**	This runs as a task.
**
**	Parameters:
**		tsk -- evthr task
**
**	Returns:
**		usual sm_error code
**
**	Last code review: 2003-10-17 16:25:27, see below
**	Last changes: 2003-11-26 05:16:28
*/

sm_ret_T
qmgr_smtps(sm_evthr_task_P tsk)
{
	sm_ret_T ret;

	SM_IS_EVTHR_TSK(tsk);
	QM_LEV_DPRINTFC(QDC_Q2S, 5, (QM_DEBFP, "sev=DBG, func=qmgr_smtps, fd=%d, ev_rq=%#x, ev_occ=%#x\n", tsk->evthr_t_fd, evthr_rqevents(tsk), tsk->evthr_t_evocc));
	if (is_valid_fd(tsk->evthr_t_fd))
	{
		ret = EVTHR_WAITQ;
		if (evthr_got_slp(tsk))
		{
			sm_ret_T res;

			/* don't set ret here, it's the wrong return value */
			res = qm_ss_wakeup(tsk);
			if (sm_is_err(res))
			{
				QM_LEV_DPRINTFC(QDC_Q2S, 1, (QM_DEBFP, "sev=DBG, func=qmgr_smtps, qm_ss_wakeup=%r\n", res));
			}
		}
		if (evthr_got_wr(tsk))
		{
			ret = qm_to_ss(tsk);
			if (sm_is_err(ret))
			{
				QM_LEV_DPRINTFC(QDC_Q2S, 1, (QM_DEBFP, "sev=DBG, func=qmgr_smtps, qm_to_ss=%r\n", ret));
				/* really return here? */
				return ret;
			}
		}
		if (evthr_got_rd(tsk))
		{
			/*
			**  This routine could set EVTHR_EV_WR
			**  to cause data to be written back to the SMTPS.
			**  However, most of the routines may work
			**  asynchronously and hence they should return the
			**  correct value themselves.
			*/

			ret = qm_fr_ss(tsk);
			if (sm_is_err(ret))
			{
				QM_LEV_DPRINTFC(QDC_Q2S, 1, (QM_DEBFP, "sev=DBG, func=qmgr_smtps, qm_fr_ss=%r\n", ret));
				return ret;
			}
		}
		return ret;
	}
	return EVTHR_DEL;
}


syntax highlighted by Code2HTML, v. 0.9.1