* Sebastian Hammer, Adam Dickmeiss
*
* $Log: tcpip.c,v $
- * Revision 1.9 1996-02-10 12:23:11 quinn
+ * Revision 1.12 1996-07-06 19:58:30 quinn
+ * System headerfiles gathered in yconfig
+ *
+ * Revision 1.11 1996/02/23 10:00:39 quinn
+ * WAIS Work
+ *
+ * Revision 1.10 1996/02/20 12:52:11 quinn
+ * WAIS protocol support.
+ *
+ * Revision 1.9 1996/02/10 12:23:11 quinn
* Enablie inetd operations fro TCP/IP stack
*
* Revision 1.8 1995/11/01 13:54:27 quinn
#include <comstack.h>
#include <tcpip.h>
-#ifndef WINDOWS
-#include <sys/time.h>
-#endif
-
int tcpip_close(COMSTACK h);
int tcpip_put(COMSTACK h, char *buf, int size);
int tcpip_get(COMSTACK h, char **buf, int *bufsize);
COMSTACK tcpip_accept(COMSTACK h);
char *tcpip_addrstr(COMSTACK h);
-int completeBER(unsigned char *buf, int len);
+/*
+ * Determine length/completeness of incoming packages
+ */
+int completeBER(unsigned char *buf, int len); /* from the ODR module */
+int completeWAIS(unsigned char *buf, int len); /* from waislen.c */
#ifdef TRACE_TCPIP
#define TRC(x) x
int written; /* -1 if we aren't writing */
int towrite; /* to verify against user input */
+ int (*complete)(unsigned char *buf, int len); /* length/completeness */
} tcpip_state;
/*
+ * This function is always called through the cs_create() macro.
* s >= 0: socket has already been established for us.
*/
COMSTACK tcpip_type(int s, int blocking, int protocol)
state->altbuf = 0;
state->altsize = state->altlen = 0;
state->towrite = state->written = -1;
+ if (protocol == PROTO_WAIS)
+ state->complete = completeWAIS;
+ else
+ state->complete = completeBER;
p->timeout = COMSTACK_DEFAULT_TIMEOUT;
TRC(fprintf(stderr, "Created new TCPIP comstack\n"));
{
tcpip_state *sp = h->private;
- return sp->altlen && completeBER((unsigned char *) sp->altbuf, sp->altlen);
+ return sp->altlen && (*sp->complete)((unsigned char *) sp->altbuf,
+ sp->altlen);
}
/*
COMSTACK tcpip_accept(COMSTACK h)
{
COMSTACK new;
- tcpip_state *state;
+ tcpip_state *state, *st = h->private;
#ifdef WINDOWS
unsigned long tru = 1;
#endif
state->altbuf = 0;
state->altsize = state->altlen = 0;
state->towrite = state->written = -1;
+ state->complete = st->complete;
new->state = CS_DATAXFER;
h->state = CS_IDLE;
return new;
sp->altbuf = tmpc;
sp->altsize = tmpi;
}
- while (!(berlen = completeBER((unsigned char *)*buf, hasread)))
+ while (!(berlen = (*sp->complete)((unsigned char *)*buf, hasread)))
{
if (!*bufsize)
{