Merge branch 'master' into bytarget_block
authorDennis Schafroth <dennis@indexdata.com>
Fri, 4 Nov 2011 12:56:14 +0000 (13:56 +0100)
committerDennis Schafroth <dennis@indexdata.com>
Fri, 4 Nov 2011 12:56:14 +0000 (13:56 +0100)
debian/changelog
src/client.c
src/client.h
src/connection.c
src/settings.c

index 9b82098..98e9494 100644 (file)
@@ -1,3 +1,9 @@
+pazpar2 (1.6.5-1indexdata) unstable; urgency=low
+
+  * Upstream
+
+ -- Dennis Schafroth <dennis@indexdata.com>  Tue, 01 Nov 2011 13:35:19 +0000
+
 pazpar2 (1.6.4-1indexdata) unstable; urgency=low
 
   * Upstream.
index 5df785d..8751137 100644 (file)
@@ -162,6 +162,11 @@ enum client_state client_get_state(struct client *cl)
     return cl->state;
 }
 
+void client_set_state_nb(struct client *cl, enum client_state st)
+{
+    cl->state = st;
+}
+
 void client_set_state(struct client *cl, enum client_state st)
 {
     int was_active = 0;
index 2fb8ada..9cc9666 100644 (file)
@@ -52,6 +52,7 @@ void client_show_raw_remove(struct client *cl, void *rr);
 const char *client_get_state_str(struct client *cl);
 enum client_state client_get_state(struct client *cl);
 void client_set_state(struct client *cl, enum client_state st);
+void client_set_state_nb(struct client *cl, enum client_state st);
 struct connection *client_get_connection(struct client *cl);
 struct session_database *client_get_database(struct client *cl);
 void client_set_database(struct client *cl, struct session_database *db);
index 9381b53..c5a8ab5 100644 (file)
@@ -93,10 +93,9 @@ struct connection {
     struct client *client;
     char *zproxy;
     enum {
-        Conn_Resolving,
+        Conn_Closed,
         Conn_Connecting,
-        Conn_Open,
-        Conn_Dead
+        Conn_Open
     } state;
     int operation_timeout;
     int session_timeout;
@@ -180,7 +179,7 @@ static struct connection *connection_create(struct client *cl,
     co->zproxy = 0;
     client_set_connection(cl, co);
     co->link = 0;
-    co->state = Conn_Resolving;
+    co->state = Conn_Closed;
     co->operation_timeout = operation_timeout;
     co->session_timeout = session_timeout;
     
@@ -278,9 +277,25 @@ void connection_continue(struct connection *co)
 {
     int r = ZOOM_connection_exec_task(co->link);
     if (!r)
-        yaz_log(YLOG_WARN, "No task was executed for connection");
-    iochan_setflags(co->iochan, ZOOM_connection_get_mask(co->link));
-    iochan_setfd(co->iochan, ZOOM_connection_get_socket(co->link));
+    {
+        const char *error, *addinfo;
+        int err;
+        if ((err = ZOOM_connection_error(co->link, &error, &addinfo)))
+        {
+            if (co->client)
+            {
+                yaz_log(YLOG_LOG, "Error %s from %s",
+                        error, client_get_id(co->client));
+                client_set_diagnostic(co->client, err);
+                client_set_state_nb(co->client, Client_Error);
+            }
+        }
+    }
+    else
+    {
+        iochan_setflags(co->iochan, ZOOM_connection_get_mask(co->link));
+        iochan_setfd(co->iochan, ZOOM_connection_get_socket(co->link));
+    }
 }
 
 static void connection_handler(IOCHAN iochan, int event)
@@ -359,7 +374,6 @@ static struct host *connection_get_host(struct connection *con)
 
 static int connection_connect(struct connection *con, iochan_man_t iochan_man)
 {
-    ZOOM_connection link = 0;
     struct host *host = connection_get_host(con);
     ZOOM_options zoptions = ZOOM_options_create();
     const char *auth;
@@ -395,7 +409,7 @@ static int connection_connect(struct connection *con, iochan_man_t iochan_man)
     if ((sru_version = session_setting_oneval(sdb, PZ_SRU_VERSION)) 
         && *sru_version)
         ZOOM_options_set(zoptions, "sru_version", sru_version);
-    if (!(link = ZOOM_connection_create(zoptions)))
+    if (!(con->link = ZOOM_connection_create(zoptions)))
     {
         yaz_log(YLOG_FATAL|YLOG_ERRNO, "Failed to create ZOOM Connection");
         ZOOM_options_destroy(zoptions);
@@ -407,21 +421,19 @@ static int connection_connect(struct connection *con, iochan_man_t iochan_man)
         char http_hostport[512];
         strcpy(http_hostport, "http://");
         strcat(http_hostport, host->hostport);
-        ZOOM_connection_connect(link, http_hostport, 0);
+        ZOOM_connection_connect(con->link, http_hostport, 0);
     }
     else
     {
-        ZOOM_connection_connect(link, host->hostport, 0);
+        ZOOM_connection_connect(con->link, host->hostport, 0);
     }
     
-    con->link = link;
     con->iochan = iochan_create(-1, connection_handler, 0, "connection_socket");
     con->state = Conn_Connecting;
     iochan_settimeout(con->iochan, con->operation_timeout);
     iochan_setdata(con->iochan, con);
     iochan_add(iochan_man, con->iochan);
 
-    /* this fragment is bad DRY: from client_prep_connection */
     client_set_state(con->client, Client_Connecting);
     ZOOM_options_destroy(zoptions);
     return 0;
index d355cf3..98adae9 100644 (file)
@@ -437,22 +437,10 @@ static void initialize_soft_settings(struct conf_service *service)
 static void prepare_target_dictionary(void *client_data, struct setting *set)
 {
     struct conf_service *service = (struct conf_service *) client_data;
-    struct setting_dictionary *dictionary = service->dictionary;
-
-    int i;
-    char *p;
 
     // If target address is not wildcard, add the database
     if (*set->target && !zurl_wildcard(set->target))
         create_database_for_service(set->target, service);
-
-    // Determine if we already have a dictionary entry
-    if (!strncmp(set->name, "pz:", 3) && (p = strchr(set->name + 3, ':')))
-        *(p + 1) = '\0';
-    for (i = 0; i < dictionary->num; i++)
-        if (!strcmp(dictionary->dict[i], set->name))
-            return;
-    yaz_log(YLOG_WARN, "Setting '%s' not configured as metadata", set->name);
 }
 
 void init_settings(struct conf_service *service)