projects
/
yaz-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix problem with pointer to last init response being corrupt
[yaz-moved-to-github.git]
/
client
/
client.c
diff --git
a/client/client.c
b/client/client.c
index
fbec6de
..
94af209
100644
(file)
--- a/
client/client.c
+++ b/
client/client.c
@@
-2,7
+2,7
@@
* Copyright (C) 1995-2005, Index Data ApS
* See the file LICENSE for details.
*
* Copyright (C) 1995-2005, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: client.c,v 1.285 2005-06-06 17:34:58 adam Exp $
+ * $Id: client.c,v 1.287 2005-06-08 12:34:05 adam Exp $
*/
#include <stdio.h>
*/
#include <stdio.h>
@@
-104,7
+104,7
@@
static enum oid_value recordsyntax = VAL_USMARC;
static char *record_schema = 0;
static int sent_close = 0;
static NMEM session_mem = NULL; /* memory handle for init-response */
static char *record_schema = 0;
static int sent_close = 0;
static NMEM session_mem = NULL; /* memory handle for init-response */
-static Z_InitResponse *session = 0; /* session parameters */
+static Z_InitResponse *session_initResponse = 0; /* session parameters */
static char last_scan_line[512] = "0";
static char last_scan_query[512] = "0";
static char ccl_fields[512] = "default.bib";
static char last_scan_line[512] = "0";
static char last_scan_query[512] = "0";
static char ccl_fields[512] = "default.bib";
@@
-365,7
+365,7
@@
static int process_initResponse(Z_InitResponse *res)
int ver = 0;
/* save session parameters for later use */
session_mem = odr_extract_mem(in);
int ver = 0;
/* save session parameters for later use */
session_mem = odr_extract_mem(in);
- session = res;
+ session_initResponse = res;
for (ver = 0; ver < 8; ver++)
if (!ODR_MASK_GET(res->protocolVersion, ver))
for (ver = 0; ver < 8; ver++)
if (!ODR_MASK_GET(res->protocolVersion, ver))
@@
-591,13
+591,14
@@
int session_connect(const char *arg)
if (conn)
{
cs_close (conn);
if (conn)
{
cs_close (conn);
- conn = NULL;
- if (session_mem)
- {
- nmem_destroy (session_mem);
- session_mem = NULL;
- }
+ conn = 0;
}
}
+ if (session_mem)
+ {
+ nmem_destroy (session_mem);
+ session_mem = NULL;
+ session_initResponse = 0;
+ }
cs_get_host_args(arg, &basep);
strncpy(type_and_host, arg, sizeof(type_and_host)-1);
cs_get_host_args(arg, &basep);
strncpy(type_and_host, arg, sizeof(type_and_host)-1);
@@
-2582,11
+2583,6
@@
static void close_session (void)
if (conn)
cs_close (conn);
conn = 0;
if (conn)
cs_close (conn);
conn = 0;
- if (session_mem)
- {
- nmem_destroy (session_mem);
- session_mem = NULL;
- }
sent_close = 0;
odr_reset(out);
odr_reset(in);
sent_close = 0;
odr_reset(out);
odr_reset(in);
@@
-2675,7
+2671,9
@@
int cmd_cancel(const char *arg)
}
if (only_z3950())
return 0;
}
if (only_z3950())
return 0;
- if (!ODR_MASK_GET(session->options, Z_Options_triggerResourceCtrl))
+ if (session_initResponse &&
+ !ODR_MASK_GET(session_initResponse->options,
+ Z_Options_triggerResourceCtrl))
{
printf("Target doesn't support cancel (trigger resource ctrl)\n");
return 0;
{
printf("Target doesn't support cancel (trigger resource ctrl)\n");
return 0;
@@
-2900,7
+2898,8
@@
int cmd_sort_generic(const char *arg, int newset)
}
if (only_z3950())
return 0;
}
if (only_z3950())
return 0;
- if (!ODR_MASK_GET(session->options, Z_Options_sort))
+ if (session_initResponse &&
+ !ODR_MASK_GET(session_initResponse->options, Z_Options_sort))
{
printf("Target doesn't support sort\n");
return 0;
{
printf("Target doesn't support sort\n");
return 0;
@@
-2981,7
+2980,8
@@
int cmd_scan(const char *arg)
return 0;
}
}
return 0;
}
}
- if (!ODR_MASK_GET(session->options, Z_Options_scan))
+ if (session_initResponse &&
+ !ODR_MASK_GET(session_initResponse->options, Z_Options_scan))
{
printf("Target doesn't support scan\n");
return 0;
{
printf("Target doesn't support scan\n");
return 0;
@@
-3766,7
+3766,7
@@
static void http_response(Z_HTTP_Response *hres)
}
#endif
}
#endif
-void wait_and_handle_response()
+void wait_and_handle_response(int one_response_only)
{
int reconnect_ok = 1;
int res;
{
int reconnect_ok = 1;
int res;
@@
-3900,6
+3900,8
@@
void wait_and_handle_response()
http_response(gdu->u.HTTP_Response);
}
#endif
http_response(gdu->u.HTTP_Response);
}
#endif
+ if (one_response_only)
+ break;
if (conn && !cs_more(conn))
break;
}
if (conn && !cs_more(conn))
break;
}
@@
-4147,7
+4149,7
@@
int cmd_wait_response(const char *arg)
};
for( i=0 ; i < wait_for ; ++i ) {
};
for( i=0 ; i < wait_for ; ++i ) {
- wait_and_handle_response( );
+ wait_and_handle_response(1);
};
return 0;
}
};
return 0;
}
@@
-4390,7
+4392,7
@@
void process_cmd_line(char* line)
if(apdu_file) fflush(apdu_file);
if (res >= 2 && auto_wait)
if(apdu_file) fflush(apdu_file);
if (res >= 2 && auto_wait)
- wait_and_handle_response();
+ wait_and_handle_response(0);
if(apdu_file)
fflush(apdu_file);
if(apdu_file)
fflush(apdu_file);