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
yaz_log_time_format sets the format of the timestamp. See man 3 strftime
[yaz-moved-to-github.git]
/
src
/
zoom-c.c
diff --git
a/src/zoom-c.c
b/src/zoom-c.c
index
b5241f3
..
ad24eac
100644
(file)
--- a/
src/zoom-c.c
+++ b/
src/zoom-c.c
@@
-2,10
+2,13
@@
* Copyright (c) 2000-2004, Index Data
* See the file LICENSE for details.
*
* Copyright (c) 2000-2004, Index Data
* See the file LICENSE for details.
*
- * $Id: zoom-c.c,v 1.26 2004-04-06 17:47:24 adam Exp $
- *
- * ZOOM layer for C, connections, result sets, queries.
+ * $Id: zoom-c.c,v 1.31 2004-10-15 00:19:01 adam Exp $
+ */
+/**
+ * \file zoom-c.c
+ * \brief Implements ZOOM C interface.
*/
*/
+
#include <assert.h>
#include <string.h>
#include "zoom-p.h"
#include <assert.h>
#include <string.h>
#include "zoom-p.h"
@@
-104,7
+107,7
@@
static void set_dset_error (ZOOM_connection c, int error,
}
if (addinfo && addinfo2)
{
}
if (addinfo && addinfo2)
{
- c->addinfo = xmalloc(strlen(addinfo) + strlen(addinfo2) + 2);
+ c->addinfo = (char*) xmalloc(strlen(addinfo) + strlen(addinfo2) + 2);
strcpy(c->addinfo, addinfo);
strcat(c->addinfo, addinfo2);
}
strcpy(c->addinfo, addinfo);
strcat(c->addinfo, addinfo2);
}
@@
-185,7
+188,6
@@
void ZOOM_connection_remove_task (ZOOM_connection c)
switch (task->which)
{
case ZOOM_TASK_SEARCH:
switch (task->which)
{
case ZOOM_TASK_SEARCH:
-
ZOOM_resultset_destroy (task->u.search.resultset);
break;
case ZOOM_TASK_RETRIEVE:
ZOOM_resultset_destroy (task->u.search.resultset);
break;
case ZOOM_TASK_RETRIEVE:
@@
-783,6
+785,19
@@
ZOOM_resultset_records (ZOOM_resultset r, ZOOM_record *recs,
}
}
}
}
+static void get_cert(ZOOM_connection c)
+{
+ char *cert_buf;
+ int cert_len;
+
+ if (cs_get_peer_certificate_x509(c->cs, &cert_buf, &cert_len))
+ {
+ ZOOM_connection_option_setl(c, "sslPeerCert",
+ cert_buf, cert_len);
+ xfree(cert_buf);
+ }
+}
+
static zoom_ret do_connect (ZOOM_connection c)
{
void *add;
static zoom_ret do_connect (ZOOM_connection c)
{
void *add;
@@
-795,7
+810,8
@@
static zoom_ret do_connect (ZOOM_connection c)
yaz_log (LOG_DEBUG, "do_connect host=%s", effective_host);
yaz_log (LOG_DEBUG, "do_connect host=%s", effective_host);
- assert (!c->cs);
+ if (c->cs)
+ cs_close(c->cs);
c->cs = cs_create_host (effective_host, 0, &add);
if (c->cs && c->cs->protocol == PROTO_HTTP)
c->cs = cs_create_host (effective_host, 0, &add);
if (c->cs && c->cs->protocol == PROTO_HTTP)
@@
-806,7
+822,7
@@
static zoom_ret do_connect (ZOOM_connection c)
c->proto = PROTO_HTTP;
cs_get_host_args(c->host_port, &path);
xfree(c->path);
c->proto = PROTO_HTTP;
cs_get_host_args(c->host_port, &path);
xfree(c->path);
- c->path = xmalloc(strlen(path)+2);
+ c->path = (char*) xmalloc(strlen(path)+2);
c->path[0] = '/';
strcpy (c->path+1, path);
#else
c->path[0] = '/';
strcpy (c->path+1, path);
#else
@@
-822,6
+838,7
@@
static zoom_ret do_connect (ZOOM_connection c)
{
ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_CONNECT);
ZOOM_connection_put_event(c, event);
{
ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_CONNECT);
ZOOM_connection_put_event(c, event);
+ get_cert(c);
if (c->proto == PROTO_Z3950)
ZOOM_connection_send_init(c);
else
if (c->proto == PROTO_Z3950)
ZOOM_connection_send_init(c);
else
@@
-987,7
+1004,7
@@
static zoom_ret ZOOM_connection_send_init (ZOOM_connection c)
ZOOM_options_get(c->options, "implementationName"),
odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName));
ZOOM_options_get(c->options, "implementationName"),
odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName));
- version = odr_strdup(c->odr_out, "$Revision: 1.26 $");
+ version = odr_strdup(c->odr_out, "$Revision: 1.31 $");
if (strlen(version) > 10) /* check for unexpanded CVS strings */
version[strlen(version)-2] = '\0';
ireq->implementationVersion = odr_prepend(c->odr_out,
if (strlen(version) > 10) /* check for unexpanded CVS strings */
version[strlen(version)-2] = '\0';
ireq->implementationVersion = odr_prepend(c->odr_out,
@@
-1078,7
+1095,7
@@
static zoom_ret send_srw (ZOOM_connection c, Z_SRW_PDU *sr)
};
ODR o = odr_createmem(ODR_ENCODE);
int ret;
};
ODR o = odr_createmem(ODR_ENCODE);
int ret;
- Z_SOAP *p = odr_malloc(o, sizeof(*p));
+ Z_SOAP *p = (Z_SOAP*) odr_malloc(o, sizeof(*p));
Z_GDU *gdu;
ZOOM_Event event;
Z_GDU *gdu;
ZOOM_Event event;
@@
-1100,7
+1117,7
@@
static zoom_ret send_srw (ZOOM_connection c, Z_SRW_PDU *sr)
if (cp0 && cp1)
{
if (cp0 && cp1)
{
- char *h = odr_malloc(c->odr_out, cp1 - cp0 + 1);
+ char *h = (char*) odr_malloc(c->odr_out, cp1 - cp0 + 1);
memcpy (h, cp0, cp1 - cp0);
h[cp1-cp0] = '\0';
z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers,
memcpy (h, cp0, cp1 - cp0);
h[cp1-cp0] = '\0';
z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers,
@@
-1119,7
+1136,7
@@
static zoom_ret send_srw (ZOOM_connection c, Z_SRW_PDU *sr)
z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers,
"SOAPAction", "\"\"");
p->which = Z_SOAP_generic;
z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers,
"SOAPAction", "\"\"");
p->which = Z_SOAP_generic;
- p->u.generic = odr_malloc(o, sizeof(*p->u.generic));
+ p->u.generic = (Z_SOAP_Generic *) odr_malloc(o, sizeof(*p->u.generic));
p->u.generic->no = 0;
p->u.generic->ns = 0;
p->u.generic->p = sr;
p->u.generic->no = 0;
p->u.generic->ns = 0;
p->u.generic->p = sr;
@@
-1651,7
+1668,8
@@
ZOOM_record_get (ZOOM_record rec, const char *type_spec, int *len)
}
if (r->which == Z_External_sutrs)
return record_iconv_return(rec, len,
}
if (r->which == Z_External_sutrs)
return record_iconv_return(rec, len,
- r->u.sutrs->buf, r->u.sutrs->len,
+ (char*) r->u.sutrs->buf,
+ r->u.sutrs->len,
charset);
else if (r->which == Z_External_octet)
{
charset);
else if (r->which == Z_External_octet)
{
@@
-2599,7
+2617,7
@@
static Z_APDU *create_update_package(ZOOM_package p)
odr_malloc (p->odr_out, sizeof(Odr_oct));
notToKeep->elements[0]->u.opaque->size =
notToKeep->elements[0]->u.opaque->len = strlen(recordIdOpaque);
odr_malloc (p->odr_out, sizeof(Odr_oct));
notToKeep->elements[0]->u.opaque->size =
notToKeep->elements[0]->u.opaque->len = strlen(recordIdOpaque);
- notToKeep->elements[0]->u.opaque->buf =
+ notToKeep->elements[0]->u.opaque->buf = (unsigned char*)
odr_strdup(p->odr_out, recordIdOpaque);
}
else if (recordIdNumber)
odr_strdup(p->odr_out, recordIdOpaque);
}
else if (recordIdNumber)
@@
-2656,17
+2674,22
@@
ZOOM_API(void)
apdu->u.extendedServicesRequest->taskSpecificParameters = r;
}
}
apdu->u.extendedServicesRequest->taskSpecificParameters = r;
}
}
- if (!strcmp(type, "create")) /* create database */
+ else if (!strcmp(type, "create")) /* create database */
{
apdu = create_admin_package(p, Z_ESAdminOriginPartToKeep_create,
0, 0);
}
{
apdu = create_admin_package(p, Z_ESAdminOriginPartToKeep_create,
0, 0);
}
- if (!strcmp(type, "drop")) /* drop database */
+ else if (!strcmp(type, "drop")) /* drop database */
{
apdu = create_admin_package(p, Z_ESAdminOriginPartToKeep_drop,
0, 0);
}
{
apdu = create_admin_package(p, Z_ESAdminOriginPartToKeep_drop,
0, 0);
}
- if (!strcmp(type, "update")) /* update record(s) */
+ else if (!strcmp(type, "commit")) /* commit changes */
+ {
+ apdu = create_admin_package(p, Z_ESAdminOriginPartToKeep_commit,
+ 0, 0);
+ }
+ else if (!strcmp(type, "update")) /* update record(s) */
{
apdu = create_update_package(p);
}
{
apdu = create_update_package(p);
}
@@
-3011,7
+3034,7
@@
static void handle_srw_response(ZOOM_connection c,
npr->u.databaseRecord->which = Z_External_octet;
npr->u.databaseRecord->u.octet_aligned = (Odr_oct *)
odr_malloc(c->odr_in, sizeof(Odr_oct));
npr->u.databaseRecord->which = Z_External_octet;
npr->u.databaseRecord->u.octet_aligned = (Odr_oct *)
odr_malloc(c->odr_in, sizeof(Odr_oct));
- npr->u.databaseRecord->u.octet_aligned->buf =
+ npr->u.databaseRecord->u.octet_aligned->buf = (unsigned char*)
res->records[i].recordData_buf;
npr->u.databaseRecord->u.octet_aligned->len =
npr->u.databaseRecord->u.octet_aligned->size =
res->records[i].recordData_buf;
npr->u.databaseRecord->u.octet_aligned->len =
npr->u.databaseRecord->u.octet_aligned->size =
@@
-3063,7
+3086,7
@@
static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres)
if (!ret && soap_package->which == Z_SOAP_generic &&
soap_package->u.generic->no == 0)
{
if (!ret && soap_package->which == Z_SOAP_generic &&
soap_package->u.generic->no == 0)
{
- Z_SRW_PDU *sr = soap_package->u.generic->p;
+ Z_SRW_PDU *sr = (Z_SRW_PDU*) soap_package->u.generic->p;
if (sr->which == Z_SRW_searchRetrieve_response)
handle_srw_response(c, sr->u.response);
else
if (sr->which == Z_SRW_searchRetrieve_response)
handle_srw_response(c, sr->u.response);
else
@@
-3227,11
+3250,18
@@
ZOOM_connection_option_get (ZOOM_connection c, const char *key)
ZOOM_API(void)
ZOOM_connection_option_set (ZOOM_connection c, const char *key,
ZOOM_API(void)
ZOOM_connection_option_set (ZOOM_connection c, const char *key,
- const char *val)
+ const char *val)
{
ZOOM_options_set (c->options, key, val);
}
{
ZOOM_options_set (c->options, key, val);
}
+ZOOM_API(void)
+ZOOM_connection_option_setl (ZOOM_connection c, const char *key,
+ const char *val, int len)
+{
+ ZOOM_options_setl (c->options, key, val, len);
+}
+
ZOOM_API(const char *)
ZOOM_resultset_option_get (ZOOM_resultset r, const char *key)
{
ZOOM_API(const char *)
ZOOM_resultset_option_get (ZOOM_resultset r, const char *key)
{
@@
-3367,6
+3397,7
@@
static int ZOOM_connection_do_io(ZOOM_connection c, int mask)
else if (ret == 0)
{
ZOOM_connection_put_event (c, event);
else if (ret == 0)
{
ZOOM_connection_put_event (c, event);
+ get_cert(c);
if (c->proto == PROTO_Z3950)
ZOOM_connection_send_init(c);
else
if (c->proto == PROTO_Z3950)
ZOOM_connection_send_init(c);
else