* Sebastian Hammer, Adam Dickmeiss
*
* $Log: xmosi.c,v $
- * Revision 1.10 1996-02-10 12:23:13 quinn
+ * Revision 1.17 1999-06-16 11:55:24 adam
+ * Added APDU log to client.
+ *
+ * Revision 1.16 1997/09/17 12:10:30 adam
+ * YAZ version 1.4.
+ *
+ * Revision 1.15 1997/05/14 06:53:34 adam
+ * C++ support.
+ *
+ * Revision 1.14 1996/07/26 12:34:07 quinn
+ * Porting.
+ *
+ * Revision 1.13 1996/07/06 19:58:30 quinn
+ * System headerfiles gathered in yconfig
+ *
+ * Revision 1.12 1996/05/22 08:34:44 adam
+ * Added ifdef USE_XTIMOSI; so that 'make depend' works.
+ *
+ * Revision 1.11 1996/02/23 10:00:41 quinn
+ * WAIS Work
+ *
+ * Revision 1.10 1996/02/10 12:23:13 quinn
* Enablie inetd operations fro TCP/IP stack
*
* Revision 1.9 1996/01/02 08:57:28 quinn
*
*/
+#ifdef USE_XTIMOSI
/*
* Glue layer for Peter Furniss' xtimosi package.
*/
#include <string.h>
#include <assert.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
+#define YNETINCLUDE
+#include <yconfig.h>
#include <comstack.h>
#include <xmosi.h>
int mosi_listen(COMSTACK h, char *addrp, int *addrlen);
COMSTACK mosi_accept(COMSTACK h);
char *mosi_addrstr(COMSTACK h);
+void *mosi_straddr(COMSTACK h, const char *str);
typedef struct mosi_state
{
struct t_call *call;
int hasread; /* how many bytes read of current PDU */
int haswrit; /* how many bytes have we written */
+ struct netbuf netbuf;
} mosi_state;
static char *oidtostr(int *o)
if (!(r = xmalloc(sizeof(*r))))
return 0;
- if (!(state = r->private = xmalloc(sizeof(*state))))
+ if (!(state = r->cprivate = xmalloc(sizeof(*state))))
return 0;
state->call = 0;
r->f_listen = mosi_listen;
r->f_accept = mosi_accept;
r->f_addrstr = mosi_addrstr;
+ r->r_straddr = mosi_straddr;
if (!blocking)
flags |= O_NONBLOCK;
* addressing specific to our hack of OSI transport. A sockaddr_in wrapped
* up in a t_mosiaddr in a netbuf (on a stick).
*/
-struct netbuf MDF *mosi_strtoaddr(const char *str)
+
+int *mosi_strtoaddr_ex(const char *str, struct netbuf *ret)
{
- struct netbuf *ret = xmalloc(sizeof(struct netbuf));
struct sockaddr_in *add = xmalloc(sizeof(struct sockaddr_in));
struct t_mosiaddr *mosiaddr = xmalloc(sizeof(struct t_mosiaddr));
struct hostent *hp;
ret->buf = (char*)mosiaddr;
ret->len = ret->maxlen = 100 /* sizeof(*mosiaddr) */ ;
+ return 1;
+}
+
+struct netbuf *mosi_strtoaddr(const char *str)
+{
+ struct netbuf *ret = xmalloc(sizeof(struct netbuf));
+
+ if (!mosi_strtoaddr_ex (str, ret))
+ {
+ xfree (ret);
+ return 0;
+ }
+ return ret;
+}
+
+struct netbuf *mosi_straddr(COMSTACK h, const char *str)
+{
+ mosi_state *st = h->cprivate;
+ struct netbuf *ret = &st->netbuf;
+
+ if (!mosi_strtoaddr_ex (str, ret))
+ {
+ xfree (ret);
+ return 0;
+ }
return ret;
}
int mosi_listen(COMSTACK h, char *addp, int *addrlen)
{
int res;
- mosi_state *st = h->private;
+ mosi_state *st = h->cprivate;
if (!(st->call = (struct t_call*) t_alloc(h->iofile, T_CALL_STR,
T_ALL)))
{
COMSTACK new;
void *local;
- struct mosi_state *st = h->private, *ns;
+ struct mosi_state *st = h->cprivate, *ns;
int flags = O_RDWR;
if (h->state != CS_INCON)
if (!(new = xmalloc(sizeof(*new))))
return 0;
*new = *h;
- if (!(new->private = ns = xmalloc(sizeof(*ns))))
+ if (!(new->cprivate = ns = xmalloc(sizeof(*ns))))
return 0;
*ns = *st;
if (!h->blocking)
int mosi_get(COMSTACK h, char **buf, int *bufsize)
{
int flags = 0, res;
- mosi_state *ct = h->private;
+ mosi_state *ct = h->cprivate;
int got;
do
int mosi_put(COMSTACK h, char *buf, int size)
{
- mosi_state *ct = h->private;
+ mosi_state *ct = h->cprivate;
int res = u_snd(h->iofile, buf + ct->haswrit, size - ct->haswrit, 0);
if (res == size - ct->haswrit)
int mosi_close(COMSTACK h)
{
- xfree(h->private);
+ xfree(h->cprivate);
if (h->iofile >= 0)
u_close(h->iofile);
xfree(h);
char *mosi_addrstr(COMSTACK h)
{
- return "osi:[UNIMPLEMENTED";
+ return "osi:[UNIMPLEMENTED]";
}
+
+#endif