Using ZOOM_connection_option_set(c, "saveAPDU", "1") will enable
logging of APDUs until "saveAPDU" option is set again. If logging is
already enabled the effect is that current APDU buffer is cleared.
Using ZOOM_connection_option_set(c, "saveAPDU", "0") disables
logging (default behavior on new connection).
The APDUs sent/received can be obtained by using
Using ZOOM_connection_option_get(c, "APDU") or
ZOOM_connection_option_getl(c, "APDU", &l).
c->sru_version = 0;
c->no_redirects = 0;
c->sru_version = 0;
c->no_redirects = 0;
xfree(c->group);
xfree(c->password);
xfree(c->sru_version);
xfree(c->group);
xfree(c->password);
xfree(c->sru_version);
+ wrbuf_destroy(c->saveAPDU_wrbuf);
ZOOM_API(const char *)
ZOOM_connection_option_get(ZOOM_connection c, const char *key)
{
ZOOM_API(const char *)
ZOOM_connection_option_get(ZOOM_connection c, const char *key)
{
- return ZOOM_options_get(c->options, key);
+ if (!strcmp(key, "APDU"))
+ {
+ return c->saveAPDU_wrbuf ? wrbuf_cstr(c->saveAPDU_wrbuf) : "";
+ }
+ else
+ return ZOOM_options_get(c->options, key);
}
ZOOM_API(const char *)
ZOOM_connection_option_getl(ZOOM_connection c, const char *key, int *lenp)
{
}
ZOOM_API(const char *)
ZOOM_connection_option_getl(ZOOM_connection c, const char *key, int *lenp)
{
- return ZOOM_options_getl(c->options, key, lenp);
+ if (!strcmp(key, "APDU"))
+ {
+ if (c->saveAPDU_wrbuf)
+ {
+ *lenp = wrbuf_len(c->saveAPDU_wrbuf);
+ return wrbuf_cstr(c->saveAPDU_wrbuf);
+ }
+ else
+ {
+ *lenp = 0;
+ return "";
+ }
+ }
+ else
+ return ZOOM_options_getl(c->options, key, lenp);
}
ZOOM_API(void)
ZOOM_connection_option_set(ZOOM_connection c, const char *key,
const char *val)
{
}
ZOOM_API(void)
ZOOM_connection_option_set(ZOOM_connection c, const char *key,
const char *val)
{
- ZOOM_options_set(c->options, key, val);
+ if (!strcmp(key, "saveAPDU"))
+ {
+ if (val && strcmp(val, "0"))
+ {
+ if (!c->saveAPDU_wrbuf)
+ c->saveAPDU_wrbuf = wrbuf_alloc();
+ else
+ wrbuf_rewind(c->saveAPDU_wrbuf);
+ }
+ else
+ {
+ wrbuf_destroy(c->saveAPDU_wrbuf);
+ c->saveAPDU_wrbuf = 0;
+ }
+ ZOOM_connection_save_apdu_wrbuf(c, c->saveAPDU_wrbuf);
+ }
+ else
+ ZOOM_options_set(c->options, key, val);
int log_details;
int log_api;
int log_details;
int log_api;
+ ZOOM_connection_option_set(z, "saveAPDU", "1");
r = ZOOM_connection_search_pqf (z, argv[2]);
if ((error = ZOOM_connection_error(z, &errmsg, &addinfo)))
fprintf (stderr, "Error: %s (%d) %s\n", errmsg, error, addinfo);
else
printf ("Result count: %ld\n", (long) ZOOM_resultset_size(r));
r = ZOOM_connection_search_pqf (z, argv[2]);
if ((error = ZOOM_connection_error(z, &errmsg, &addinfo)))
fprintf (stderr, "Error: %s (%d) %s\n", errmsg, error, addinfo);
else
printf ("Result count: %ld\n", (long) ZOOM_resultset_size(r));
+ puts("APDUlog");
+ puts(ZOOM_connection_option_get(z, "APDU"));
ZOOM_resultset_destroy (r);
ZOOM_connection_destroy (z);
exit (0);
ZOOM_resultset_destroy (r);
ZOOM_connection_destroy (z);
exit (0);