long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg)
	{
	int ret=0;

	switch (cmd)
		{
	case DTLS_CTRL_GET_TIMEOUT:
		if (dtls1_get_timeout(s, (struct timeval*) parg) != NULL)
			{
			ret = 1;
			}
		break;
	case DTLS_CTRL_HANDLE_TIMEOUT:
		ret = dtls1_handle_timeout(s);
		break;
	case DTLS_CTRL_LISTEN:
		ret = dtls1_listen(s, parg);
		break;
	case SSL_CTRL_CHECK_PROTO_VERSION:
		/* For library-internal use; checks that the current protocol
		 * is the highest enabled version (according to s->ctx->method,
		 * as version negotiation may have changed s->method). */
		if (s->version == s->ctx->method->version)
			return 1;
		/* Apparently we're using a version-flexible SSL_METHOD
		 * (not at its highest protocol version). */
		if (s->ctx->method->version == DTLS_method()->version)
			{
#if DTLS_MAX_VERSION != DTLS1_2_VERSION
#  error Code needs update for DTLS_method() support beyond DTLS1_2_VERSION.
#endif
			if (!(s->options & SSL_OP_NO_DTLSv1_2))
				return s->version == DTLS1_2_VERSION;
			if (!(s->options & SSL_OP_NO_DTLSv1))
				return s->version == DTLS1_VERSION;
			}
		return 0; /* Unexpected state; fail closed. */

	default:
		ret = ssl3_ctrl(s, cmd, larg, parg);
		break;
		}
	return(ret);
	}
long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg)
	{
	int ret=0;

	switch (cmd)
		{
	case DTLS_CTRL_GET_TIMEOUT:
		if (dtls1_get_timeout(s, (struct timeval*) parg) != NULL)
			{
			ret = 1;
			}
		break;
	case DTLS_CTRL_HANDLE_TIMEOUT:
		ret = dtls1_handle_timeout(s);
		break;
	case DTLS_CTRL_LISTEN:
		ret = dtls1_listen(s, parg);
		break;
	case SSL_CTRL_CHECK_PROTO_VERSION:
		 
		if (s->version == s->ctx->method->version)
			return 1;
		 
		if (s->ctx->method->version == DTLS_method()->version)
			{
#if DTLS_MAX_VERSION != DTLS1_2_VERSION
#  error Code needs update for DTLS_method() support beyond DTLS1_2_VERSION.
#endif
			if (!(s->options & SSL_OP_NO_DTLSv1_2))
				return s->version == DTLS1_2_VERSION;
			if (!(s->options & SSL_OP_NO_DTLSv1))
				return s->version == DTLS1_VERSION;
			}
		return 0;  

	default:
		ret = ssl3_ctrl(s, cmd, larg, parg);
		break;
		}
	return(ret);
	}