mirror of
https://github.com/php/php-src.git
synced 2024-11-25 10:54:15 +08:00
Fixed problem with looping present requests for Isite targets.
This commit is contained in:
parent
789182d06c
commit
2dc33e3e71
@ -1,7 +1,4 @@
|
||||
What is PHP extension YAZ?
|
||||
|
||||
This extension implements a Z39.50 client and is build on top of
|
||||
the YAZ toolkit.
|
||||
This extension implements a Z39.50 client for PHP using the YAZ toolkit.
|
||||
|
||||
Find more information at:
|
||||
http://www.indexdata.dk/phpyaz/
|
||||
|
@ -321,7 +321,8 @@ static void response_diag (Yaz_Association t, Z_DiagRec *p)
|
||||
|
||||
static int send_present (Yaz_Association t);
|
||||
|
||||
static void handle_records (Yaz_Association t, Z_Records *sr)
|
||||
static void handle_records (Yaz_Association t, Z_Records *sr,
|
||||
int present_phase)
|
||||
{
|
||||
if (sr && sr->which == Z_Records_NSD)
|
||||
{
|
||||
@ -338,7 +339,7 @@ static void handle_records (Yaz_Association t, Z_Records *sr)
|
||||
else if (sr && sr->which == Z_Records_multipleNSD)
|
||||
{
|
||||
if (sr->u.multipleNonSurDiagnostics->num_diagRecs >= 1)
|
||||
response_diag(t, sr->u.multipleNonSurDiagnostics->diagRecs[0]);
|
||||
response_diag(t, sr->u.multipleNonSurDiagnostics->diagRecs[0]);
|
||||
else
|
||||
t->error = PHP_YAZ_ERROR_DECODE;
|
||||
}
|
||||
@ -366,6 +367,7 @@ static void handle_records (Yaz_Association t, Z_Records *sr)
|
||||
if (sr && sr->which == Z_Records_DBOSD)
|
||||
{
|
||||
int j, i;
|
||||
NMEM nmem = odr_extract_mem (t->odr_in);
|
||||
Z_NamePlusRecordList *p =
|
||||
sr->u.databaseOrSurDiagnostics;
|
||||
for (j = 0; j < t->resultSets->recordList->num_records; j++)
|
||||
@ -374,7 +376,20 @@ static void handle_records (Yaz_Association t, Z_Records *sr)
|
||||
for (i = 0; i<p->num_records; i++)
|
||||
t->resultSets->recordList->records[i+j] = p->records[i];
|
||||
/* transfer our response to search_nmem .. we need it later */
|
||||
nmem_transfer (t->resultSets->odr->mem, odr_extract_mem (t->odr_in));
|
||||
nmem_transfer (t->resultSets->odr->mem, nmem);
|
||||
nmem_destroy (nmem);
|
||||
if (present_phase && p->num_records == 0)
|
||||
{
|
||||
/* present response and we didn't get any records! */
|
||||
t->error = PHP_YAZ_ERROR_DECODE;
|
||||
t->resultSets->recordList = 0;
|
||||
}
|
||||
}
|
||||
else if (present_phase)
|
||||
{
|
||||
/* present response and we didn't get any records! */
|
||||
t->error = PHP_YAZ_ERROR_DECODE;
|
||||
t->resultSets->recordList = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -382,12 +397,12 @@ static void handle_records (Yaz_Association t, Z_Records *sr)
|
||||
static void search_response (Yaz_Association t, Z_SearchResponse *sr)
|
||||
{
|
||||
t->resultSets->resultCount = *sr->resultCount;
|
||||
handle_records (t, sr->records);
|
||||
handle_records (t, sr->records, 0);
|
||||
}
|
||||
|
||||
static void present_response (Yaz_Association t, Z_PresentResponse *pr)
|
||||
{
|
||||
handle_records (t, pr->records);
|
||||
handle_records (t, pr->records, 1);
|
||||
}
|
||||
|
||||
static void handle_apdu (Yaz_Association t, Z_APDU *apdu)
|
||||
|
Loading…
Reference in New Issue
Block a user