X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=rfc1006%2Frfct.c;h=b79e6a275edd62b117a8c64fe7afe36c39963863;hp=996d87e59e70abc1867e244a2a9e458378087687;hb=30cfc59b71c25923e2e9cfb63c310c095bb3b6c1;hpb=7148f4238bd2ea22c60008fc3062626b42456ae4 diff --git a/rfc1006/rfct.c b/rfc1006/rfct.c index 996d87e..b79e6a2 100644 --- a/rfc1006/rfct.c +++ b/rfc1006/rfct.c @@ -4,7 +4,28 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: rfct.c,v $ - * Revision 1.2 1995-05-02 08:53:09 quinn + * Revision 1.9 1996-02-23 10:01:00 quinn + * Smallish + * + * Revision 1.8 1995/11/01 13:54:52 quinn + * Minor adjustments + * + * Revision 1.7 1995/06/16 10:46:48 quinn + * *** empty log message *** + * + * Revision 1.6 1995/06/15 07:45:11 quinn + * Moving to v3. + * + * Revision 1.5 1995/05/31 08:29:35 quinn + * Nothing significant. + * + * Revision 1.4 1995/05/18 13:02:07 quinn + * Smallish. + * + * Revision 1.3 1995/05/16 09:37:18 quinn + * Fixed bug + * + * Revision 1.2 1995/05/02 08:53:09 quinn * Trying in vain to fix comm with ISODE * * Revision 1.1 1995/03/30 14:03:17 quinn @@ -66,11 +87,11 @@ /* * Simple implementation of XTI/TP0/RFC1006/Sockets. - * Note: This is neither complete nor robust. It just has to tick us over - * until mr. Furniss finishes his own implementation. + * Note: There is still some work to do in here, but basically it works. * * TODO: Asynchronous mode needs a lot of little adjustments to various - * return values and error codes, etc. + * return values and error codes, etc. Formally, we should probably hold + * this up against the protocol state tables, and see if it's correct. * * Check if addressing info is returned correctly by all calls. */ @@ -96,7 +117,6 @@ #ifdef __linux__ #include #endif -#include /* project memory debugging - delete if you don't have it */ #ifdef TRACE_TRANSPORT #define TRC(x) x @@ -246,7 +266,7 @@ int t_open(char *name, int oflag, struct t_info *info) cnt->oci[i] = -1; /* - * RFC1006 sets a higher than standard default max TPDU size, but the + * RFC1006 sets a higher than standard (TP) default max TPDU size, but the * Isode seems to like to negotiate it down. We'll keep it here to be * safe. Note that there's no harm in jumping it up. If it's higher * than 2048, t_connect won't try to negotiate. @@ -257,7 +277,7 @@ int t_open(char *name, int oflag, struct t_info *info) { info->addr = TSEL_MAXLEN + sizeof(struct sockaddr_in) + 1; info->options = 1024; - info->tsdu = 2041; /* trying to please the ISODE */ + info->tsdu = -1; /* is this right? */ info->etsdu = 0; info->connect = -2; info->discon = -2; @@ -710,6 +730,8 @@ int _t_rcv(int fd, char *buf, unsigned nbytes, int *flags) return got; } +#if 1 + int t_rcv(int fd, char *buf, unsigned nbytes, int *flags) { int res; @@ -727,6 +749,8 @@ int t_rcv(int fd, char *buf, unsigned nbytes, int *flags) return total; } +#endif + int t_close(int fd) { struct rfct_control *cnt = control[fd]; @@ -774,6 +798,12 @@ static int t_look_wait(int fd, int wait) return T_LISTEN; /* the only possible type of event */ if ((res = read_n(fd, (char*) &head, 6)) < 0) return -1; + if (res == 0) + { + TRC(fprintf(stderr, "Network disconnect\n")); + return cnt->event = T_DISCONNECT; + } + TRC(fprintf(stderr, "t_look got %d bytes\n", res)); if (head.version != RFC_VERSION) { TRC(fprintf(stderr, "Got bad RFC1006 version in t_look: %d.\n", @@ -1267,7 +1297,8 @@ int t_listen(int fd, struct t_call *call) */ int t_unbind(int fd) { - fprintf(stderr, "T_UNBIND [not supported by transport implementation]\n"); + TRC(fprintf(stderr, + "T_UNBIND [not supported by transport implementation]\n")); t_errno = TNOTSUPPORT; return -1; }