X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Flogic.c;h=92a0ecf8fc386c4efb004357add2a4834d60424f;hb=67ebd94d4bd94b8ade005dfa371638e0855f84d1;hp=c7314b233456107557a3353a771a409968b98a29;hpb=b35fa8a84e101bd6ab4312611be8460c017a7437;p=pazpar2-moved-to-github.git diff --git a/src/logic.c b/src/logic.c index c7314b2..92a0ecf 100644 --- a/src/logic.c +++ b/src/logic.c @@ -1,35 +1,45 @@ -/* $Id: logic.c,v 1.72 2007-11-09 10:43:58 adam Exp $ - Copyright (c) 2006-2007, Index Data. +/* This file is part of Pazpar2. + Copyright (C) 2006-2008 Index Data - This file is part of Pazpar2. +Pazpar2 is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. - Pazpar2 is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License as published by the Free - Software Foundation; either version 2, or (at your option) any later - version. +Pazpar2 is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. - Pazpar2 is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - You should have received a copy of the GNU General Public License - along with Pazpar2; see the file LICENSE. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ /** \file logic.c \brief high-level logic; mostly user sessions and settings */ +#if HAVE_CONFIG_H +#include +#endif + #include #include #include +#if HAVE_SYS_TIME_H #include +#endif +#if HAVE_UNISTD_H #include +#endif +#if HAVE_SYS_SOCKET_H #include +#endif +#if HAVE_NETDB_H #include +#endif #include #include #include @@ -48,16 +58,14 @@ #include #include -#if HAVE_CONFIG_H -#include "cconfig.h" -#endif - #define USE_TIMING 0 #if USE_TIMING #include #endif +#if HAVE_NETINET_IN_H #include +#endif #include "pazpar2.h" #include "eventl.h" @@ -65,7 +73,6 @@ #include "termlists.h" #include "reclists.h" #include "relevance.h" -#include "config.h" #include "database.h" #include "client.h" #include "settings.h" @@ -554,9 +561,12 @@ void session_alert_watch(struct session *s, int what) if (s->watchlist[what].fun) { /* our watch is no longer associated with http_channel */ + void *data; + session_watchfun fun; + http_remove_observer(s->watchlist[what].obs); - session_watchfun fun = s->watchlist[what].fun; - void *data = s->watchlist[what].data; + fun = s->watchlist[what].fun; + data = s->watchlist[what].data; /* reset watch before fun is invoked - in case fun wants to set it again */ @@ -1006,7 +1016,7 @@ void statistics(struct session *se, struct statistics *stat) stat->num_clients = count; } -void start_http_listener(void) +int start_http_listener(void) { char hp[128] = ""; struct conf_server *ser = global_parameters.server; @@ -1023,7 +1033,7 @@ void start_http_listener(void) sprintf(hp + strlen(hp), "%d", ser->port); } } - http_init(hp); + return http_init(hp); } void start_proxy(void) @@ -1215,8 +1225,10 @@ struct record *ingest_record(struct client *cl, Z_External *rec, value, type); continue; } - rec_md->next = record->metadata[md_field_id]; - record->metadata[md_field_id] = rec_md; + wheretoput = &record->metadata[md_field_id]; + while (*wheretoput) + wheretoput = &(*wheretoput)->next; + *wheretoput = rec_md; // merged metadata rec_md = record_metadata_init(se->nmem, (char *) value, @@ -1225,6 +1237,12 @@ struct record *ingest_record(struct client *cl, Z_External *rec, // and polulate with data: // assign cluster or record based on merge action + if (ser_md->merge == Metadata_merge_no) + { + while (*wheretoput) + wheretoput = &(*wheretoput)->next; + *wheretoput = rec_md; + } if (ser_md->merge == Metadata_merge_unique) { struct record_metadata *mnode; @@ -1307,15 +1325,6 @@ struct record *ingest_record(struct client *cl, Z_External *rec, if (this_max > (*wheretoput)->data.number.max) (*wheretoput)->data.number.max = this_max; } -#ifdef GAGA - if (ser_sk) - { - union data_types *sdata - = cluster->sortkeys[sk_field_id]; - yaz_log(YLOG_LOG, "SK range: %d-%d", - sdata->number.min, sdata->number.max); - } -#endif }