/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
* Copyright 2014 Gary Mills
*/
#include "mt.h"
#include <errno.h>
#include <unistd.h>
#include <stropts.h>
#include <xti.h>
#include <assert.h>
#include "tx.h"
int
{
int state;
int sv_errno;
return (-1);
if (_T_IS_XTI(api_semantics))
do_expinline_peek = 1;
else
do_expinline_peek = 0;
return (state);
}
/*
* _t_look_locked() assumes tiptr->ti_lock lock is already held and signals
* already blocked in MT case.
* Intended for use by other TLI routines only.
*/
int
int fd,
int do_expinline_peek,
int api_semantics
)
{
int retval;
#ifdef notyet
if (_T_IS_XTI(api_semantics)) {
/*
* XTI requires the strange T_GODATA and T_GOEXDATA
* events which are almost brain-damaged but thankfully
* not tested. Anyone feeling the need for those should
* consider the need for using non-blocking endpoint.
* Probably introduced at the behest of some weird-os
* vendor which did not understand the non-blocking endpoint
* option.
* We choose not to implment these mis-features.
* Here is the plan-of-action (POA)if we are ever forced
* to implement these.
* - When returning TFLOW set state to indicate if it was
* a normal or expedited data send attempt.
* - In routines that set TFLOW, clear the above set state
* - In this routine, if that state flag is set,
* do a I_CANPUT on appropriate band to to see if it
* is writeable. If that indicates that the band is
* writeable, return T_GODATA or T_GOEXDATA event.
*
* Actions are also influenced by whether T_EXDATA_REQ stays
* band 1 or goes to band 0 if EXPINLINE is set
*
* We will also need to sort out if "write side" events
* (such as T_GODATA/T_GOEXDATA) take precedence over
* all other events (all read side) or not.
*/
}
#endif /* notyet */
do {
if (retval < 0) {
/*
* XTI semantics (also identical to documented
* TLI semantics).
*/
return (-1);
}
/*
* if something there and cntl part also there
*/
if ((tiptr->ti_lookcnt > 0) ||
(int)sizeof (t_scalar_t)))) {
/* LINTED pointer cast */
if (tiptr->ti_lookcnt > 0) {
/* LINTED pointer cast */
/*
* If message on stream head is a T_DISCON_IND, that
* has priority over a T_ORDREL_IND in the look
* buffer.
* (This assumes that T_ORDREL_IND can only be in the
* first look buffer in the list)
*/
/*
* Blow away T_ORDREL_IND
*/
}
} else
switch (type) {
case T_CONN_IND:
return (T_LISTEN);
case T_CONN_CON:
return (T_CONNECT);
case T_DISCON_IND:
return (T_DISCONNECT);
case T_DATA_IND: {
if (do_expinline_peek &&
if (retval < 0) {
return (-1);
}
if (exp_on_q)
}
return (event);
}
case T_UNITDATA_IND:
return (T_DATA);
case T_EXDATA_IND:
return (T_EXDATA);
case T_UDERROR_IND:
return (T_UDERR);
case T_ORDREL_IND:
return (T_ORDREL);
default:
return (-1);
}
}
/*
* if something there put no control part
* it must be data on the stream head.
*/
if (do_expinline_peek &&
if (retval < 0)
return (-1);
if (exp_on_q)
}
return (event);
}
/*
* if msg there and control
* part not large enough to determine type?
* it must be illegal TLI message
*/
return (-1);
}
return (0);
}