* Sebastian Hammer, Adam Dickmeiss
*
* $Log: seshigh.c,v $
- * Revision 1.49 1995-10-16 13:51:53 quinn
+ * Revision 1.59 1996-05-14 09:26:46 quinn
+ * Added attribute set to scan backend
+ *
+ * Revision 1.58 1996/02/20 12:53:04 quinn
+ * Chanes to SCAN
+ *
+ * Revision 1.57 1996/01/02 08:57:47 quinn
+ * Changed enums in the ASN.1 .h files to #defines. Changed oident.class to oclass
+ *
+ * Revision 1.56 1995/12/14 11:09:57 quinn
+ * Work on Explain
+ *
+ * Revision 1.55 1995/11/08 17:41:37 quinn
+ * Smallish.
+ *
+ * Revision 1.54 1995/11/08 15:11:29 quinn
+ * Log of close transmit.
+ *
+ * Revision 1.53 1995/11/01 13:54:58 quinn
+ * Minor adjustments
+ *
+ * Revision 1.52 1995/11/01 12:19:13 quinn
+ * Second attempt to fix same bug.
+ *
+ * Revision 1.50 1995/10/25 16:58:32 quinn
+ * Simple.
+ *
+ * Revision 1.49 1995/10/16 13:51:53 quinn
* Changes to provide Especs to the backend.
*
* Revision 1.48 1995/10/06 08:51:20 quinn
#include <assert.h>
#include <sys/time.h>
-#include <dmalloc.h>
+#include <xmalloc.h>
#include <comstack.h>
#include <eventl.h>
#include <session.h>
if (!control_block)
control_block = statserv_getcontrol();
- if (!(new = malloc(sizeof(*new))))
+ if (!(new = xmalloc(sizeof(*new))))
return 0;
new->client_chan = channel;
new->client_link = link;
if (h->print)
odr_destroy(h->print);
if (h->input_buffer)
- free(h->input_buffer);
+ xfree(h->input_buffer);
if (h->backend)
bend_close(h->backend);
while (request_deq(&h->incoming));
while (request_deq(&h->outgoing));
- free(h);
+ xfree(h);
}
static void do_close(association *a, int reason, char *message)
while (request_deq(&a->outgoing));
if (a->version >= 3)
{
- logf(LOG_DEBUG, "Generating Close PDU");
+ logf(LOG_LOG, "Sending Close PDU, reason=%d, message=%s",
+ reason, message ? message : "none");
apdu.which = Z_APDU_close;
apdu.u.close = cls;
*cls->closeReason = reason;
odr_setbuf(assoc->decode, assoc->input_buffer, res, 0);
if (!z_APDU(assoc->decode, &req->request, 0))
{
- logf(LOG_LOG, "ODR error on incoming PDU: %s",
- odr_errlist[odr_geterror(assoc->decode)]);
+ logf(LOG_LOG, "ODR error on incoming PDU: %s [near byte %d] ",
+ odr_errlist[odr_geterror(assoc->decode)],
+ odr_offset(assoc->decode));
logf(LOG_LOG, "PDU dump:");
odr_dumpBER(log_file(), assoc->input_buffer, res);
do_close(assoc, Z_Close_protocolError, "Malformed package");
break;
case 0: /* all sent - release the request structure */
logf(LOG_DEBUG, "Wrote PDU, %d bytes", req->len_response);
- odr_release_mem(req->request_mem);
+ nmem_destroy(req->request_mem);
request_deq(&assoc->outgoing);
request_release(req);
if (!request_head(&assoc->outgoing))
{
logf(LOG_WARN, "ODR error when encoding response: %s",
odr_errlist[odr_geterror(assoc->decode)]);
+ odr_reset(assoc->encode);
return -1;
}
req->response = odr_getbuf(assoc->encode, &req->len_response,
&req->size_response);
- odr_setbuf(assoc->encode, 0, 0, 0); /* don't free if we abort later */
+ odr_setbuf(assoc->encode, 0, 0, 0); /* don'txfree if we abort later */
odr_reset(assoc->encode);
if (assoc->print && !z_APDU(assoc->print, &res, 0))
{
#endif
bib1.proto = proto;
- bib1.class = CLASS_DIAGSET;
+ bib1.oclass = CLASS_DIAGSET;
bib1.value = VAL_BIB1;
logf(LOG_DEBUG, "Diagnostic: %d -- %s", error, addinfo ? addinfo :
#endif
bib1.proto = proto;
- bib1.class = CLASS_DIAGSET;
+ bib1.oclass = CLASS_DIAGSET;
bib1.value = VAL_BIB1;
logf(LOG_DEBUG, "SurrogateDiagnotic: %d -- %s", error, addinfo);
logf(LOG_DEBUG, "DiagRecs: %d -- %s", error, addinfo);
bib1.proto = proto;
- bib1.class = CLASS_DIAGSET;
+ bib1.oclass = CLASS_DIAGSET;
bib1.value = VAL_BIB1;
err = error;
sizeof(Z_DatabaseRecord))))
return 0;
recform.proto = a->proto;
- recform.class = CLASS_RECSYN;
+ recform.oclass = CLASS_RECSYN;
recform.value = fres->format;
thisext->direct_reference = odr_oiddup(a->encode,
oid_getoidbyent(&recform));
else
{
static int toget;
- Z_RecordComposition comp;
+ Z_RecordComposition comp, *compp = 0;
static int presst = 0;
resp.records = 0;
if (bsrt->hits <= *req->smallSetUpperBound)
{
toget = bsrt->hits;
- comp.u.simple = req->smallSetElementSetNames;
+ if ((comp.u.simple = req->smallSetElementSetNames))
+ compp = ∁
}
else if (bsrt->hits < *req->largeSetLowerBound)
{
toget = *req->mediumSetPresentNumber;
if (toget > bsrt->hits)
toget = bsrt->hits;
- comp.u.simple = req->mediumSetElementSetNames;
+ if ((comp.u.simple = req->mediumSetElementSetNames))
+ compp = ∁
}
else
toget = 0;
oid_value form;
if (!(prefformat = oid_getentbyoid(req->preferredRecordSyntax)) ||
- prefformat->class != CLASS_RECSYN)
+ prefformat->oclass != CLASS_RECSYN)
form = VAL_NONE;
else
form = prefformat->value;
resp.records = pack_records(assoc, req->resultSetName, 1,
- &toget, &comp, &next, &presst, form);
+ &toget, compp, &next, &presst, form);
if (!resp.records)
return 0;
resp.numberOfRecordsReturned = &toget;
#endif
if (!(prefformat = oid_getentbyoid(req->preferredRecordSyntax)) ||
- prefformat->class != CLASS_RECSYN)
+ prefformat->oclass != CLASS_RECSYN)
form = VAL_NONE;
else
form = prefformat->value;
static Z_Entry *tab[SCAN_MAX_ENTRIES];
bend_scanrequest srq;
bend_scanresult *srs;
+ oident *attset;
logf(LOG_LOG, "Got scanrequest");
apdu.which = Z_APDU_scanResponse;
#endif
if (req->attributeSet && (!(attent = oid_getentbyoid(req->attributeSet)) ||
- attent->class != CLASS_ATTSET || attent->value != VAL_BIB1))
+ attent->oclass != CLASS_ATTSET || attent->value != VAL_BIB1))
ents.u.nonSurrogateDiagnostics = diagrecs(assoc->proto, 121, 0);
else if (req->stepSize && *req->stepSize > 0)
ents.u.nonSurrogateDiagnostics = diagrecs(assoc->proto, 205, 0);
srq.basenames = req->databaseNames;
srq.num_entries = *req->numberOfTermsRequested;
srq.term = req->termListAndStartPoint;
+ if (!(attset = oid_getentbyoid(req->attributeSet)) ||
+ attset->oclass != CLASS_RECSYN)
+ srq.attributeset = VAL_NONE;
+ else
+ srq.attributeset = attset->value;
srq.term_position = req->preferredPositionInResponse ?
*req->preferredPositionInResponse : 1;
if (!(srs = bend_scan(assoc->backend, &srq, 0)))
e->which = Z_Entry_termInfo;
e->u.termInfo = t = odr_malloc(assoc->encode, sizeof(*t));
t->suggestedAttributes = 0;
+ t->displayTerm = 0;
t->alternativeTerm = 0;
t->byAttributes = 0;
+ t->otherTermInfo = 0;
t->globalOccurrences = &srs->entries[i].occurrences;
t->term = odr_malloc(assoc->encode, sizeof(*t->term));
t->term->which = Z_Term_general;