X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=comstack%2Fxmosi.c;h=132de6c0db4b4b22b78f01ac3d111f839fc09ff0;hp=cad3978ba80d955ddda53686a4d35112cea43ec1;hb=a7827306d9d9fd634a4b4336944bee781fa61e32;hpb=4ae699c927bc26f3550d1a8ca911e8d1fe75dbfc diff --git a/comstack/xmosi.c b/comstack/xmosi.c index cad3978..132de6c 100644 --- a/comstack/xmosi.c +++ b/comstack/xmosi.c @@ -4,7 +4,28 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: xmosi.c,v $ - * Revision 1.9 1996-01-02 08:57:28 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 + * 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 * Changed enums in the ASN.1 .h files to #defines. Changed oident.class to oclass * * Revision 1.8 1995/11/01 13:54:29 quinn @@ -83,6 +104,7 @@ * */ +#ifdef USE_XTIMOSI /* * Glue layer for Peter Furniss' xtimosi package. */ @@ -92,11 +114,8 @@ #include #include -#include -#include -#include -#include -#include +#define YNETINCLUDE +#include #include #include @@ -113,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 { @@ -120,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) @@ -154,15 +175,18 @@ static int addopt(struct netbuf *optbuf, unsigned long level, unsigned long return 0; } -COMSTACK mosi_type(int blocking, int protocol) +COMSTACK mosi_type(int s, int blocking, int protocol) { COMSTACK r; mosi_state *state; int flags = O_RDWR; + if (s >= 0) + return 0; + 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; @@ -182,6 +206,7 @@ COMSTACK mosi_type(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; @@ -213,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; @@ -284,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; } @@ -367,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))) @@ -386,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) @@ -397,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) @@ -422,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 @@ -455,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) @@ -475,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); @@ -484,5 +534,7 @@ int mosi_close(COMSTACK h) char *mosi_addrstr(COMSTACK h) { - return "osi:[UNIMPLEMENTED"; + return "osi:[UNIMPLEMENTED]"; } + +#endif