which specifies elementset to be used for backend.
void low_socket_close();
char *m_usemarcon_ini_stage1;
char *m_usemarcon_ini_stage2;
+ char *m_backend_elementset;
Yaz_usemarcon *m_usemarcon;
Yaz_CharsetConverter *m_charset_converter;
yazpp_1::GDUQueue m_in_queue;
Odr_oid *syntax, Z_RecordComposition *comp,
char **addinfo, char **stylesheet, char **schema,
char **backend_type, char **backend_charset,
- char **usemarcon_ini_stage1, char **usemarcon_ini_stage2);
+ char **usemarcon_ini_stage1, char **usemarcon_ini_stage2,
+ char **backend_elementset);
void target_authentication(const char *name,
ODR odr,
char **backend_type,
char **backend_charset,
char **usemarcon_ini_stage1,
- char **usemarcon_ini_stage2
+ char **usemarcon_ini_stage2,
+ char **backend_elementset
)
{
if (stylesheet)
xfree (*usemarcon_ini_stage2);
*usemarcon_ini_stage2 = 0;
}
+ xfree(*backend_elementset);
+ *backend_elementset = 0;
#if YAZ_HAVE_XSLT
int syntax_has_matched = 0;
xmlNodePtr ptr;
const char *match_backend_charset = 0;
const char *match_usemarcon_ini_stage1 = 0;
const char *match_usemarcon_ini_stage2 = 0;
+ const char *match_elementset = 0;
struct _xmlAttr *attr;
for (attr = ptr->properties; attr; attr = attr->next)
{
attr->children && attr->children->type == XML_TEXT_NODE)
match_usemarcon_ini_stage2 = (const char *)
attr->children->content;
+ if (!strcmp((const char *) attr->name, "backendelementset") &&
+ attr->children && attr->children->type == XML_TEXT_NODE)
+ match_elementset = (const char *) attr->children->content;
}
if (match_type)
{
xfree(*backend_charset);
*backend_charset = xstrdup(match_backend_charset);
}
+ if (match_elementset)
+ {
+ xfree(*backend_elementset);
+ *backend_elementset = xstrdup(match_elementset);
+ }
if (usemarcon_ini_stage1 && match_usemarcon_ini_stage1)
{
xfree(*usemarcon_ini_stage1);
m_usemarcon = new Yaz_usemarcon();
if (!m_parent)
low_socket_open();
+ m_backend_elementset = 0;
m_my_thread = 0;
m_ref_count = 1;
m_main_ptr_dec = false;
xfree(m_backend_charset);
xfree(m_usemarcon_ini_stage1);
xfree(m_usemarcon_ini_stage2);
+ xfree(m_backend_elementset);
delete m_usemarcon;
if (m_s2z_odr_init)
odr_destroy(m_s2z_odr_init);
&addinfo, &stylesheet_name, &m_schema,
&m_backend_type, &m_backend_charset,
&m_usemarcon_ini_stage1,
- &m_usemarcon_ini_stage2);
+ &m_usemarcon_ini_stage2,
+ &m_backend_elementset);
if (stylesheet_name)
{
m_parent->low_socket_close();
yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN,
m_backend_type, odr_encode());
}
+ if (m_backend_elementset)
+ {
+ Z_ElementSetNames *esn = mk_esn_from_schema(odr_encode(),
+ m_backend_elementset);
+ sr->smallSetElementSetNames = esn;
+ sr->mediumSetElementSetNames = esn;
+ }
}
else if (apdu->which == Z_APDU_presentRequest)
{
&addinfo, &stylesheet_name, &m_schema,
&m_backend_type, &m_backend_charset,
&m_usemarcon_ini_stage1,
- &m_usemarcon_ini_stage2
- );
+ &m_usemarcon_ini_stage2,
+ &m_backend_elementset);
if (stylesheet_name)
{
m_parent->low_socket_close();
CLASS_RECSYN, m_backend_type,
odr_encode());
}
+ if (m_backend_elementset)
+ {
+ Z_ElementSetNames *esn = mk_esn_from_schema(odr_encode(),
+ m_backend_elementset);
+ Z_RecordComposition *comp = (Z_RecordComposition *)
+ odr_malloc(odr_encode(), sizeof(Z_RecordComposition));
+ comp->which = Z_RecordComp_simple;
+ comp->u.simple = esn;
+ pr->recordComposition = comp;
+ }
}
return apdu;
}