* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*
- * $Id: charneg.h,v 1.5 2005-01-15 19:47:09 adam Exp $
+ * $Id: charneg.h,v 1.6 2005-05-18 12:38:40 adam Exp $
*/
/**
* \file charneg.h
/*
* Get (*) record from request
*/
-YAZ_EXPORT Z_CharSetandLanguageNegotiation *
- yaz_get_charneg_record(Z_OtherInformation *p);
+YAZ_EXPORT
+Z_CharSetandLanguageNegotiation *yaz_get_charneg_record(Z_OtherInformation *p);
+
+/*
+ * Delete (*) record from request
+ */
+YAZ_EXPORT
+int yaz_del_charneg_record(Z_OtherInformation **p);
/*
* Client's part.
*/
-YAZ_EXPORT Z_External *yaz_set_proposal_charneg(ODR odr,
- const char **charsets, int num_charsets, const char **langs,
- int num_langs, int selected);
+YAZ_EXPORT
+Z_External *yaz_set_proposal_charneg(ODR odr,
+ const char **charsets, int num_charsets,
+ const char **langs,
+ int num_langs, int selected);
-YAZ_EXPORT void yaz_get_response_charneg(NMEM mem,
- Z_CharSetandLanguageNegotiation *p, char **charset, char **lang,
- int *selected);
+YAZ_EXPORT
+void yaz_get_response_charneg(NMEM mem,
+ Z_CharSetandLanguageNegotiation *p,
+ char **charset, char **lang,
+ int *selected);
/*
* Server's part
*/
-YAZ_EXPORT Z_External *yaz_set_response_charneg(ODR odr,
- const char *charset, const char *lang, int selected);
-
-
-YAZ_EXPORT void yaz_get_proposal_charneg(NMEM mem,
- Z_CharSetandLanguageNegotiation *p,
- char ***charsets, int *num_charsets,
- char ***langs, int *num_langs,
- int *selected);
+YAZ_EXPORT
+Z_External *yaz_set_response_charneg(ODR odr,
+ const char *charset, const char *lang,
+ int selected);
+YAZ_EXPORT
+void yaz_get_proposal_charneg(NMEM mem,
+ Z_CharSetandLanguageNegotiation *p,
+ char ***charsets, int *num_charsets,
+ char ***langs, int *num_langs,
+ int *selected);
YAZ_END_CDECL
#endif
* Copyright (C) 1995-2005, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: charneg.c,v 1.3 2005-01-15 19:47:11 adam Exp $
+ * $Id: charneg.c,v 1.4 2005-05-18 12:38:40 adam Exp $
*/
/**
/* Get negotiation from OtherInformation. Client&Server side */
Z_CharSetandLanguageNegotiation *yaz_get_charneg_record(Z_OtherInformation *p)
{
- Z_External *pext;
int i;
- if(!p)
+ if (!p)
return 0;
- for (i=0; i<p->num_elements; i++) {
-
+ for (i = 0; i < p->num_elements; i++) {
+ Z_External *pext;
if ((p->list[i]->which == Z_OtherInfo_externallyDefinedInfo) &&
(pext = p->list[i]->information.externallyDefinedInfo)) {
-
+
oident *ent = oid_getentbyoid(pext->direct_reference);
-
- if (ent && ent->value == VAL_CHARNEG3 && ent->oclass == CLASS_NEGOT &&
- pext->which == Z_External_charSetandLanguageNegotiation) {
-
+
+ if (ent && ent->value == VAL_CHARNEG3
+ && ent->oclass == CLASS_NEGOT
+ && pext->which == Z_External_charSetandLanguageNegotiation)
+ {
return pext->u.charNeg3;
}
}
return 0;
}
+/* Delete negotiation from OtherInformation. Client&Server side */
+int yaz_del_charneg_record(Z_OtherInformation **p)
+{
+ int i;
+
+ if (!*p)
+ return 0;
+
+ for (i = 0; i < (*p)->num_elements; i++) {
+ Z_External *pext;
+ if (((*p)->list[i]->which == Z_OtherInfo_externallyDefinedInfo) &&
+ (pext = (*p)->list[i]->information.externallyDefinedInfo)) {
+
+ oident *ent = oid_getentbyoid(pext->direct_reference);
+
+ if (ent && ent->value == VAL_CHARNEG3
+ && ent->oclass == CLASS_NEGOT
+ && pext->which == Z_External_charSetandLanguageNegotiation)
+ {
+ --((*p)->num_elements);
+ if ((*p)->num_elements == 0)
+ *p = 0;
+ else
+ {
+ for(; i < (*p)->num_elements; i++)
+ (*p)->list[i] = (*p)->list[i+1];
+ }
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+
/* Get charsets, langs, selected from negotiation.. Server side */
void yaz_get_proposal_charneg(NMEM mem, Z_CharSetandLanguageNegotiation *p,
char ***charsets, int *num_charsets,