X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=server%2Fseshigh.c;h=4af6e867e5f4222393df97142c802d60a842e95d;hb=f722c8d9517ec491e2469cdc91a3751dd5e7a6df;hp=5806a15d136c3e9ff5ad2e6ed90d668445c0111b;hpb=73696559c68178180ea533cd501fbdad3a7ff76e;p=yaz-moved-to-github.git diff --git a/server/seshigh.c b/server/seshigh.c index 5806a15..4af6e86 100644 --- a/server/seshigh.c +++ b/server/seshigh.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 1995-2001, Index Data + * Copyright (c) 1995-2002, Index Data * See the file LICENSE for details. * - * $Id: seshigh.c,v 1.123 2002-01-17 21:03:36 adam Exp $ + * $Id: seshigh.c,v 1.127 2002-03-05 12:45:49 mike Exp $ */ /* @@ -45,6 +45,7 @@ #include #include #include +#include #include @@ -590,6 +591,7 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) assoc->init->auth = req->idAuthentication; assoc->init->referenceId = req->referenceId; assoc->init->implementation_version = 0; + assoc->init->implementation_id = 0; assoc->init->implementation_name = 0; assoc->init->bend_sort = NULL; assoc->init->bend_search = NULL; @@ -702,6 +704,16 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) resp->implementationName = "GFS/YAZ"; + if (assoc->init->implementation_id) + { + char *nv = (char *) + odr_malloc (assoc->encode, + strlen(assoc->init->implementation_id) + 10 + + strlen(resp->implementationId)); + sprintf (nv, "%s / %s", + resp->implementationId, assoc->init->implementation_id); + resp->implementationId = nv; + } if (assoc->init->implementation_name) { char *nv = (char *) @@ -759,7 +771,7 @@ static Z_Records *diagrec(association *assoc, int error, char *addinfo) odr_malloc (assoc->encode, sizeof(*dr)); yaz_log(LOG_LOG, "[%d] %s %s%s", error, diagbib1_str(error), - addinfo ? " -- " : "", addinfo ? addinfo : "", error); + addinfo ? " -- " : "", addinfo ? addinfo : ""); rec->which = Z_Records_NSD; rec->u.nonSurrogateDiagnostic = dr; dr->diagnosticSetId = @@ -936,7 +948,7 @@ static Z_Records *pack_records(association *a, char *setname, int start, } else /* too big entirely */ { - yaz_log(LOG_DEBUG, "Record > maxrcdsz"); + yaz_log(LOG_LOG, "Record > maxrcdsz this=%d max=%d", this_length, a->maximumRecordSize); reclist->records[reclist->num_records] = surrogatediagrec(a, freq.basename, 17, 0); reclist->num_records++; @@ -1225,18 +1237,21 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) Z_ListEntries *ents = (Z_ListEntries *) odr_malloc (assoc->encode, sizeof(*ents)); Z_DiagRecs *diagrecs_p = NULL; - oident *attent; oident *attset; + bend_scan_rr *bsrr = (bend_scan_rr *) + odr_malloc (assoc->encode, sizeof(*bsrr)); yaz_log(LOG_LOG, "Got ScanRequest"); apdu->which = Z_APDU_scanResponse; apdu->u.scanResponse = res; res->referenceId = req->referenceId; - res->stepSize = odr_intdup(assoc->encode, 0); + /* if step is absent, set it to 0 */ + res->stepSize = odr_intdup(assoc->encode, 0); if (req->stepSize) *res->stepSize = *req->stepSize; + res->scanStatus = scanStatus; res->numberOfEntriesReturned = numberOfEntriesReturned; res->positionOfTerm = 0; @@ -1248,98 +1263,88 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) res->attributeSet = 0; res->otherInfo = 0; - if (req->attributeSet && (!(attent = oid_getentbyoid(req->attributeSet)) || - attent->oclass != CLASS_ATTSET - || attent->value != VAL_BIB1)) - diagrecs_p = diagrecs(assoc, 121, 0); - else if (req->stepSize && *req->stepSize > 0) - diagrecs_p = diagrecs(assoc, 205, 0); + if (req->databaseNames) + { + int i; + for (i = 0; i < req->num_databaseNames; i++) + yaz_log (LOG_LOG, "Database '%s'", req->databaseNames[i]); + } + bsrr->num_bases = req->num_databaseNames; + bsrr->basenames = req->databaseNames; + bsrr->num_entries = *req->numberOfTermsRequested; + bsrr->term = req->termListAndStartPoint; + bsrr->referenceId = req->referenceId; + bsrr->stream = assoc->encode; + bsrr->print = assoc->print; + bsrr->step_size = res->stepSize; + if (req->attributeSet && + (attset = oid_getentbyoid(req->attributeSet)) && + (attset->oclass == CLASS_ATTSET || attset->oclass == CLASS_GENERAL)) + bsrr->attributeset = attset->value; + else + bsrr->attributeset = VAL_NONE; + log_scan_term (req->termListAndStartPoint, bsrr->attributeset); + bsrr->term_position = req->preferredPositionInResponse ? + *req->preferredPositionInResponse : 1; + ((int (*)(void *, bend_scan_rr *)) + (*assoc->init->bend_scan))(assoc->backend, bsrr); + if (bsrr->errcode) + diagrecs_p = diagrecs(assoc, bsrr->errcode, bsrr->errstring); else { - bend_scan_rr *bsrr = (bend_scan_rr *) - odr_malloc (assoc->encode, sizeof(*bsrr)); - if (req->databaseNames) - { - int i; - for (i = 0; i < req->num_databaseNames; i++) - yaz_log (LOG_LOG, "Database '%s'", req->databaseNames[i]); - } - bsrr->num_bases = req->num_databaseNames; - bsrr->basenames = req->databaseNames; - bsrr->num_entries = *req->numberOfTermsRequested; - bsrr->term = req->termListAndStartPoint; - bsrr->referenceId = req->referenceId; - bsrr->stream = assoc->encode; - bsrr->print = assoc->print; - bsrr->step_size = res->stepSize; - if (!(attset = oid_getentbyoid(req->attributeSet)) || - attset->oclass != CLASS_RECSYN) - bsrr->attributeset = VAL_NONE; - else - bsrr->attributeset = attset->value; - log_scan_term (req->termListAndStartPoint, bsrr->attributeset); - bsrr->term_position = req->preferredPositionInResponse ? - *req->preferredPositionInResponse : 1; - ((int (*)(void *, bend_scan_rr *)) - (*assoc->init->bend_scan))(assoc->backend, bsrr); - if (bsrr->errcode) - diagrecs_p = diagrecs(assoc, bsrr->errcode, bsrr->errstring); - else - { - int i; - Z_Entry **tab = (Z_Entry **) - odr_malloc (assoc->encode, sizeof(*tab) * bsrr->num_entries); - - if (bsrr->status == BEND_SCAN_PARTIAL) - *scanStatus = Z_Scan_partial_5; - else - *scanStatus = Z_Scan_success; - ents->entries = tab; - ents->num_entries = bsrr->num_entries; - res->numberOfEntriesReturned = &ents->num_entries; - res->positionOfTerm = &bsrr->term_position; - for (i = 0; i < bsrr->num_entries; i++) - { - Z_Entry *e; - Z_TermInfo *t; - Odr_oct *o; - - tab[i] = e = (Z_Entry *)odr_malloc(assoc->encode, sizeof(*e)); - if (bsrr->entries[i].occurrences >= 0) - { - e->which = Z_Entry_termInfo; - e->u.termInfo = t = (Z_TermInfo *) - odr_malloc(assoc->encode, sizeof(*t)); - t->suggestedAttributes = 0; - t->displayTerm = 0; - t->alternativeTerm = 0; - t->byAttributes = 0; - t->otherTermInfo = 0; - t->globalOccurrences = &bsrr->entries[i].occurrences; - t->term = (Z_Term *) - odr_malloc(assoc->encode, sizeof(*t->term)); - t->term->which = Z_Term_general; - t->term->u.general = o = - (Odr_oct *)odr_malloc(assoc->encode, sizeof(Odr_oct)); - o->buf = (unsigned char *) - odr_malloc(assoc->encode, o->len = o->size = - strlen(bsrr->entries[i].term)); - memcpy(o->buf, bsrr->entries[i].term, o->len); - yaz_log(LOG_DEBUG, " term #%d: '%s' (%d)", i, + int i; + Z_Entry **tab = (Z_Entry **) + odr_malloc (assoc->encode, sizeof(*tab) * bsrr->num_entries); + + if (bsrr->status == BEND_SCAN_PARTIAL) + *scanStatus = Z_Scan_partial_5; + else + *scanStatus = Z_Scan_success; + ents->entries = tab; + ents->num_entries = bsrr->num_entries; + res->numberOfEntriesReturned = &ents->num_entries; + res->positionOfTerm = &bsrr->term_position; + for (i = 0; i < bsrr->num_entries; i++) + { + Z_Entry *e; + Z_TermInfo *t; + Odr_oct *o; + + tab[i] = e = (Z_Entry *)odr_malloc(assoc->encode, sizeof(*e)); + if (bsrr->entries[i].occurrences >= 0) + { + e->which = Z_Entry_termInfo; + e->u.termInfo = t = (Z_TermInfo *) + odr_malloc(assoc->encode, sizeof(*t)); + t->suggestedAttributes = 0; + t->displayTerm = 0; + t->alternativeTerm = 0; + t->byAttributes = 0; + t->otherTermInfo = 0; + t->globalOccurrences = &bsrr->entries[i].occurrences; + t->term = (Z_Term *) + odr_malloc(assoc->encode, sizeof(*t->term)); + t->term->which = Z_Term_general; + t->term->u.general = o = + (Odr_oct *)odr_malloc(assoc->encode, sizeof(Odr_oct)); + o->buf = (unsigned char *) + odr_malloc(assoc->encode, o->len = o->size = + strlen(bsrr->entries[i].term)); + memcpy(o->buf, bsrr->entries[i].term, o->len); + yaz_log(LOG_DEBUG, " term #%d: '%s' (%d)", i, bsrr->entries[i].term, bsrr->entries[i].occurrences); - } - else - { - Z_DiagRecs *drecs = diagrecs (assoc, - bsrr->entries[i].errcode, - bsrr->entries[i].errstring); - assert (drecs->num_diagRecs == 1); - e->which = Z_Entry_surrogateDiagnostic; - assert (drecs->diagRecs[0]); - e->u.surrogateDiagnostic = drecs->diagRecs[0]; - } - } - } + } + else + { + Z_DiagRecs *drecs = diagrecs (assoc, + bsrr->entries[i].errcode, + bsrr->entries[i].errstring); + assert (drecs->num_diagRecs == 1); + e->which = Z_Entry_surrogateDiagnostic; + assert (drecs->diagRecs[0]); + e->u.surrogateDiagnostic = drecs->diagRecs[0]; + } + } } if (diagrecs_p) {