X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=ir-tcl.c;h=064c752ac99f347f4cc0de32702e29be8cdefc26;hb=f490e9fbefdbf6ba1531eb3fba33467e55ac446c;hp=be6bba7f02c7ada01e1d6c59d9b5bcdf5eccb3d2;hpb=841680acd268a8d673fbec862e21cd607c787cfa;p=ir-tcl-moved-to-github.git diff --git a/ir-tcl.c b/ir-tcl.c index be6bba7..064c752 100644 --- a/ir-tcl.c +++ b/ir-tcl.c @@ -5,7 +5,15 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: ir-tcl.c,v $ - * Revision 1.58 1995-10-16 17:00:55 adam + * Revision 1.60 1995-10-18 15:43:31 adam + * In search: mediumSetElementSetNames and smallSetElementSetNames are + * set to elementSetNames. + * + * Revision 1.59 1995/10/17 12:18:58 adam + * Bug fix: when target connection closed, the connection was not + * properly reestablished. + * + * Revision 1.58 1995/10/16 17:00:55 adam * New setting: elementSetNames. * Various client improvements. Medium presentation format looks better. * @@ -903,6 +911,8 @@ static int do_connect (void *obj, Tcl_Interp *interp, interp->result = "already connected"; return TCL_ERROR; } + if (ir_tcl_strdup (interp, &p->hostname, argv[2]) == TCL_ERROR) + return TCL_ERROR; if (!strcmp (p->cs_type, "tcpip")) { p->cs_link = cs_create (tcpip_type, CS_BLOCK, p->protocol_type); @@ -936,8 +946,6 @@ static int do_connect (void *obj, Tcl_Interp *interp, p->cs_type, NULL); return TCL_ERROR; } - if (ir_tcl_strdup (interp, &p->hostname, argv[2]) == TCL_ERROR) - return TCL_ERROR; if ((r=cs_connect (p->cs_link, addr)) < 0) { interp->result = "connect fail"; @@ -957,6 +965,8 @@ static int do_connect (void *obj, Tcl_Interp *interp, IrTcl_eval (p->interp, p->callback); } } + else + Tcl_AppendResult (interp, p->hostname, NULL); return TCL_OK; } @@ -982,6 +992,8 @@ static int do_disconnect (void *obj, Tcl_Interp *interp, ir_select_remove_write (cs_fileno (p->cs_link), p); ir_select_remove (cs_fileno (p->cs_link), p); + odr_reset (p->odr_in); + assert (p->cs_link); cs_close (p->cs_link); p->cs_link = NULL; @@ -1593,8 +1605,6 @@ static int do_search (void *o, Tcl_Interp *interp, int argc, char **argv) req->databaseNames = obj->set_inher.databaseNames; for (r=0; r < obj->set_inher.num_databaseNames; r++) logf (LOG_DEBUG, " Database %s", obj->set_inher.databaseNames[r]); - req->smallSetElementSetNames = 0; - req->mediumSetElementSetNames = 0; if (obj->set_inher.preferredRecordSyntax) { struct oident ident; @@ -1616,9 +1626,13 @@ static int do_search (void *o, Tcl_Interp *interp, int argc, char **argv) esn->which = Z_ElementSetNames_generic; esn->u.generic = obj->set_inher.elementSetNames; req->mediumSetElementSetNames = esn; + req->smallSetElementSetNames = esn; } else + { req->mediumSetElementSetNames = NULL; + req->smallSetElementSetNames = NULL; + } req->query = &query; @@ -2997,13 +3011,12 @@ void ir_select_read (ClientData clientData) { logf (LOG_DEBUG, "cs_get failed, code %d", r); ir_select_remove (cs_fileno (p->cs_link), p); + do_disconnect (p, NULL, 2, NULL); if (p->failback) { p->failInfo = IR_TCL_FAIL_READ; IrTcl_eval (p->interp, p->failback); } - do_disconnect (p, NULL, 2, NULL); - /* release ir object now if callback deleted it */ ir_obj_delete (p); return; @@ -3016,13 +3029,12 @@ void ir_select_read (ClientData clientData) if (!z_APDU (p->odr_in, &apdu, 0)) { logf (LOG_DEBUG, "%s", odr_errlist [odr_geterror (p->odr_in)]); + do_disconnect (p, NULL, 2, NULL); if (p->failback) { p->failInfo = IR_TCL_FAIL_IN_APDU; IrTcl_eval (p->interp, p->failback); } - do_disconnect (p, NULL, 2, NULL); - /* release ir object now if failback deleted it */ ir_obj_delete (p); return; @@ -3058,12 +3070,12 @@ void ir_select_read (ClientData clientData) default: logf (LOG_WARN, "Received unknown APDU type (%d)", apdu->which); + do_disconnect (p, NULL, 2, NULL); if (p->failback) { p->failInfo = IR_TCL_FAIL_UNKNOWN_APDU; IrTcl_eval (p->interp, p->failback); } - do_disconnect (p, NULL, 2, NULL); return; } }