* See the file LICENSE for details.
*
* $Log: tcpip.c,v $
- * Revision 1.42 2001-10-22 13:57:24 adam
+ * Revision 1.43 2001-10-22 16:00:04 adam
+ * Renamed states for COMSTACKs to avoid confusion with events.
+ *
+ * Revision 1.42 2001/10/22 13:57:24 adam
* Implemented cs_rcvconnect and cs_look as described in the documentation.
*
* Revision 1.41 2001/10/12 21:49:26 adam
p->f_straddr = tcpip_straddr;
p->f_set_blocking = tcpip_set_blocking;
- p->state = new_socket ? CS_UNBND : CS_IDLE; /* state of line */
+ p->state = new_socket ? CS_ST_UNBND : CS_ST_IDLE; /* state of line */
p->event = CS_NONE;
p->cerrno = 0;
p->stackerr = 0;
TRC(fprintf(stderr, "tcpip_connect\n"));
h->io_pending = 0;
- if (h->state == CS_UNBND)
+ if (h->state == CS_ST_UNBND)
{
r = connect(h->iofile, (struct sockaddr *) add, sizeof(*add));
if (r < 0)
if (WSAGetLastError() == WSAEWOULDBLOCK)
{
h->event = CS_CONNECT;
- h->state = CS_CONNECTING;
+ h->state = CS_ST_CONNECTING;
h->io_pending = CS_WANT_WRITE;
return 1;
}
if (errno == EINPROGRESS)
{
h->event = CS_CONNECT;
- h->state = CS_CONNECTING;
+ h->state = CS_ST_CONNECTING;
h->io_pending = CS_WANT_WRITE|CS_WANT_READ;
return 1;
}
return -1;
}
h->event = CS_CONNECT;
- h->state = CS_CONNECTING;
+ h->state = CS_ST_CONNECTING;
}
- if (h->state != CS_CONNECTING)
+ if (h->state != CS_ST_CONNECTING)
{
h->cerrno = CSOUTSTATE;
return -1;
}
#endif
h->event = CS_DATA;
- h->state = CS_DATAXFER;
+ h->state = CS_ST_DATAXFER;
return 0;
}
{
if (FD_ISSET(cs->iofile, &output))
{
- cs->state = CS_DATA;
+ cs->event = CS_DATA;
return 0; /* write OK, we're OK */
}
else
return -1; /* an error, for sure */
}
- return 0; /* timeout - incomplete */
+ else if (r == 0)
+ return 0; /* timeout - incomplete */
}
- return -1; /* wrong state */
+ return -1; /* wrong state or bad select */
}
#define CERTF "ztest.pem"
h->cerrno = CSYSERR;
return -1;
}
- h->state = CS_IDLE;
+ h->state = CS_ST_IDLE;
h->event = CS_LISTEN;
return 0;
}
#endif
TRC(fprintf(stderr, "tcpip_listen pid=%d\n", getpid()));
- if (h->state != CS_IDLE)
+ if (h->state != CS_ST_IDLE)
{
h->cerrno = CSOUTSTATE;
return -1;
h->newfd = -1;
return -1;
}
- h->state = CS_INCON;
+ h->state = CS_ST_INCON;
return 0;
}
#endif
TRC(fprintf(stderr, "tcpip_accept\n"));
- if (h->state == CS_INCON)
+ if (h->state == CS_ST_INCON)
{
if (!(cnew = (COMSTACK)xmalloc(sizeof(*cnew))))
{
state->altsize = state->altlen = 0;
state->towrite = state->written = -1;
state->complete = st->complete;
- cnew->state = CS_ACCEPT;
- h->state = CS_IDLE;
+ cnew->state = CS_ST_ACCEPT;
+ h->state = CS_ST_IDLE;
#if HAVE_OPENSSL_SSL_H
state->ctx = st->ctx;
#endif
h = cnew;
}
- if (h->state == CS_ACCEPT)
+ if (h->state == CS_ST_ACCEPT)
{
#if HAVE_OPENSSL_SSL_H
tcpip_state *state = (tcpip_state *)h->cprivate;
return 0;
}
h->io_pending = 0;
- h->state = CS_DATAXFER;
+ h->state = CS_ST_DATAXFER;
h->event = CS_DATA;
return h;
}
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*
- * $Id: comstack.h,v 1.6 2001-10-22 13:57:24 adam Exp $
+ * $Id: comstack.h,v 1.7 2001-10-22 16:00:04 adam Exp $
*/
#ifndef COMSTACK_H
void *cprivate;/* state info for lower stack */
int more; /* connection has extra data in buffer */
int state; /* current state */
-#define CS_UNBND 0
-#define CS_IDLE 1
-#define CS_INCON 2
-#define CS_OUTCON 3
-#define CS_DATAXFER 4
-#define CS_ACCEPT 5
-#define CS_CONNECT 6
+#define CS_ST_UNBND 0
+#define CS_ST_IDLE 1
+#define CS_ST_INCON 2
+#define CS_ST_OUTCON 3
+#define CS_ST_DATAXFER 4
+#define CS_ST_ACCEPT 5
+#define CS_ST_CONNECTING 6
int newfd; /* storing new descriptor between listen and accept */
int blocking; /* is this link (supposed to be) blocking? */
unsigned io_pending; /* flag to signal read / write op is incomplete */
int event; /* current event */
#define CS_NONE 0
-#define CS_CONNECTING 1
+#define CS_CONNECT 1
#define CS_DISCON 2
#define CS_LISTEN 3
#define CS_DATA 4