Fixed Makefile(s).
[yaz-moved-to-github.git] / comstack / xmosi.c
index b769d26..132de6c 100644 (file)
@@ -4,7 +4,16 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: xmosi.c,v $
- * Revision 1.13  1996-07-06 19:58:30  quinn
+ * 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
@@ -123,6 +132,7 @@ int mosi_bind(COMSTACK h, void *address, int mode);
 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
 {
@@ -130,6 +140,7 @@ 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)
@@ -175,7 +186,7 @@ COMSTACK mosi_type(int s, int blocking, int protocol)
 
     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;
@@ -195,6 +206,7 @@ COMSTACK mosi_type(int s, int blocking, int protocol)
     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;
@@ -226,9 +238,9 @@ int hex2oct(char *hex, char *oct)
  * 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 MDF *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;
@@ -297,6 +309,31 @@ struct netbuf MDF *mosi_strtoaddr(const char *str)
     ret->buf = (char*)mosiaddr;
     ret->len = ret->maxlen = 100 /* sizeof(*mosiaddr) */ ;
 
+    return 1;
+}
+
+struct netbuf MDF *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 MDF *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;
 }
 
@@ -380,7 +417,7 @@ int mosi_bind(COMSTACK h, void *address, int mode)
 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)))
@@ -399,7 +436,7 @@ COMSTACK mosi_accept(COMSTACK h)
 {
     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)
@@ -410,7 +447,7 @@ COMSTACK mosi_accept(COMSTACK h)
     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)
@@ -435,7 +472,7 @@ COMSTACK mosi_accept(COMSTACK h)
 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
@@ -468,7 +505,7 @@ int mosi_get(COMSTACK h, char **buf, int *bufsize)
 
 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)
@@ -488,7 +525,7 @@ int mosi_put(COMSTACK h, char *buf, int size)
 
 int mosi_close(COMSTACK h)
 {
-    xfree(h->private);
+    xfree(h->cprivate);
     if (h->iofile >= 0)
        u_close(h->iofile);
    xfree(h);