From d72493d01c983e84448f373faff0677c268816c1 Mon Sep 17 00:00:00 2001
From: edgrif <edgrif>
Date: Fri, 12 Jun 2009 14:00:50 +0000
Subject: [PATCH] add databases name/title to db info.

---
 src/zmapServer/acedb/acedbServer.c         | 52 +++++++++++++++-------
 src/zmapServer/zmapServer.c                |  8 ++--
 src/zmapServer/zmapServer.h                | 15 ++++---
 src/zmapServer/zmapServerProtocolHandler.c | 13 ++++--
 src/zmapServer/zmapServerPrototype.h       | 19 +++++---
 5 files changed, 74 insertions(+), 33 deletions(-)

diff --git a/src/zmapServer/acedb/acedbServer.c b/src/zmapServer/acedb/acedbServer.c
index 4d5203602..52318f1da 100755
--- a/src/zmapServer/acedb/acedbServer.c
+++ b/src/zmapServer/acedb/acedbServer.c
@@ -27,9 +27,9 @@
  *              
  * Exported functions: See zmapServer.h
  * HISTORY:
- * Last edited: May 26 13:47 2009 (edgrif)
+ * Last edited: Jun 12 12:56 2009 (edgrif)
  * Created: Wed Aug  6 15:46:38 2003 (edgrif)
- * CVS info:   $Id: acedbServer.c,v 1.137 2009-05-26 12:49:06 edgrif Exp $
+ * CVS info:   $Id: acedbServer.c,v 1.138 2009-06-12 14:01:14 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
@@ -154,7 +154,7 @@ static gboolean createConnection(void **server_out,
 				 ZMapURL url, char *format, 
                                  char *version_str, int timeout) ;
 static ZMapServerResponseType openConnection(void *server) ;
-static ZMapServerResponseType getInfo(void *server, char **database_path) ;
+static ZMapServerResponseType getInfo(void *server, ZMapServerInfo info) ;
 static ZMapServerResponseType getFeatureSetNames(void *server,
 						 GList **feature_sets_out,
 						 GList **required_styles,
@@ -226,7 +226,7 @@ static ZMapFeatureTypeStyle parseStyle(char *method_str_in,
 				       char **end_pos, ZMapColGroupData *col_group_data) ;
 static gboolean getStyleColour(StyleFeatureColours style_colours, char **line_pos) ;
 static ZMapServerResponseType doGetSequences(AcedbServer server, GList *sequences_inout) ;
-static gboolean getServerInfo(AcedbServer server, char **database_path_out) ;
+static gboolean getServerInfo(AcedbServer server, ZMapServerInfo info) ;
 
 static int equaliseLists(AcedbServer server, GList **feature_sets_inout, GList *method_names,
 			 char *query_name, char *reference_name) ;
@@ -365,14 +365,14 @@ static ZMapServerResponseType openConnection(void *server_in)
 
 
 
-static ZMapServerResponseType getInfo(void *server_in, char **database_path)
+static ZMapServerResponseType getInfo(void *server_in, ZMapServerInfo info)
 {
   ZMapServerResponseType result = ZMAP_SERVERRESPONSE_REQFAIL ;
   AcedbServer server = (AcedbServer)server_in ;
 
   resetErr(server) ;
 
-  if (getServerInfo(server, database_path))
+  if (getServerInfo(server, info))
     {
       result = ZMAP_SERVERRESPONSE_OK ;
     }
@@ -650,7 +650,6 @@ static ZMapServerResponseType setContext(void *server_in, ZMapFeatureContext fea
   feature_context = zMapFeatureContextCreate(server->sequence) ;
 #endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
 
-
   if (!(status = getSequenceMapping(server, feature_context)))
     {
       result = ZMAP_SERVERRESPONSE_REQFAIL ;
@@ -659,7 +658,9 @@ static ZMapServerResponseType setContext(void *server_in, ZMapFeatureContext fea
 		     g_quark_to_string(server->req_context->sequence_name), server->last_err_msg) ;
     }
   else
-    server->current_context = feature_context ;
+    {
+      server->current_context = feature_context ;
+    }
 
   return result ;
 }
@@ -1587,9 +1588,6 @@ static gboolean getDNARequest(AcedbServer server, char *sequence_name, int start
 
 
 
-
-
-
 /* Tries to smap sequence into whatever its parent is, if the call fails then we set all the
  * mappings in feature_context to be something sensible...we hope....
  */
@@ -2024,7 +2022,7 @@ static gboolean setQuietMode(AcedbServer server)
  * 
  *
  *  */
-static gboolean getServerInfo(AcedbServer server, char **database_path_out)
+static gboolean getServerInfo(AcedbServer server, ZMapServerInfo info)
 {
   gboolean result = FALSE ;
   char *command ;
@@ -2058,12 +2056,34 @@ static gboolean getServerInfo(AcedbServer server, char **database_path_out)
 	      if (target)
 		{
 		  result = TRUE ;
-		  *database_path_out = g_strdup(target) ;
+		  info->database_path = g_strdup(target) ;
 		}
-	      else
-		setErrMsg(server,  g_strdup("No directory name after \"Directory\" in acedb response.")) ;
+	    }
+	  else if (strstr(next_line, "Title") != NULL)
+	    {
+	      char *target ;
+	      char *tag_pos = NULL ;
 
-	      break ;
+	      target = strtok_r(next_line, ":", &tag_pos) ;
+
+	      if (tag_pos && !(strstr(tag_pos, "<undefined>")))
+		{
+		  result = TRUE ;
+		  info->database_title = g_strstrip(g_strdup(tag_pos)) ;
+		}
+	    }
+	  else if (strstr(next_line, "Name") != NULL)
+	    {
+	      char *target ;
+	      char *tag_pos = NULL ;
+
+	      target = strtok_r(next_line, ":", &tag_pos) ;
+
+	      if (tag_pos && !(strstr(tag_pos, "<undefined>")))
+		{
+		  result = TRUE ;
+		  info->database_name = g_strstrip(g_strdup(tag_pos)) ;
+		}
 	    }
 	}
 
diff --git a/src/zmapServer/zmapServer.c b/src/zmapServer/zmapServer.c
index f75ca3ee7..201b77e8f 100755
--- a/src/zmapServer/zmapServer.c
+++ b/src/zmapServer/zmapServer.c
@@ -26,9 +26,9 @@
  * Description: 
  * Exported functions: See ZMap/zmapServer.h
  * HISTORY:
- * Last edited: Apr 14 14:53 2009 (edgrif)
+ * Last edited: Jun 12 10:49 2009 (edgrif)
  * Created: Wed Aug  6 15:46:38 2003 (edgrif)
- * CVS info:   $Id: zmapServer.c,v 1.36 2009-04-16 09:11:27 edgrif Exp $
+ * CVS info:   $Id: zmapServer.c,v 1.37 2009-06-12 14:00:50 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
@@ -246,12 +246,12 @@ ZMapServerResponseType zMapServerGetSequence(ZMapServer server, GList *sequences
 }
 
 
-ZMapServerResponseType zMapServerGetServerInfo(ZMapServer server, char **database_path)
+ZMapServerResponseType zMapServerGetServerInfo(ZMapServer server, ZMapServerInfo info)
 {
   ZMapServerResponseType result = ZMAP_SERVERRESPONSE_REQFAIL ;
 
 
-  result = server->last_response = (server->funcs->get_info)(server->server_conn, database_path) ;
+  result = server->last_response = (server->funcs->get_info)(server->server_conn, info) ;
 
   if (result != ZMAP_SERVERRESPONSE_OK)
     server->last_error_msg = ZMAPSERVER_MAKEMESSAGE(server->url->protocol, 
diff --git a/src/zmapServer/zmapServer.h b/src/zmapServer/zmapServer.h
index 9aeb2c23d..e86ba7025 100755
--- a/src/zmapServer/zmapServer.h
+++ b/src/zmapServer/zmapServer.h
@@ -26,9 +26,9 @@
  *              details from caller.
  *
  * HISTORY:
- * Last edited: Apr 14 12:22 2009 (edgrif)
+ * Last edited: Jun 12 10:54 2009 (edgrif)
  * Created: Wed Aug  6 15:48:47 2003 (edgrif)
- * CVS info:   $Id: zmapServer.h,v 1.12 2009-04-16 09:11:27 edgrif Exp $
+ * CVS info:   $Id: zmapServer.h,v 1.13 2009-06-12 14:00:50 edgrif Exp $
  *-------------------------------------------------------------------
  */
 #ifndef ZMAP_SERVER_H
@@ -37,7 +37,11 @@
 #include <glib.h>
 #include <ZMap/zmapFeature.h>
 #include <ZMap/zmapUrl.h>
-#include <ZMap/zmapServerProtocol.h>
+#include <ZMap/zmapServerProtocol.h>			    /*  Is this a good idea...see if there
+							       is a more general sub header that
+							       could be used.... */
+
+#include <zmapServerPrototype.h>
 
 
 
@@ -56,7 +60,7 @@ ZMapServerResponseType zMapServerCreateConnection(ZMapServer *server_out, void *
 						  ZMapURL url,  char *format,
 						  int timeout, char *version_str);
 ZMapServerResponseType zMapServerOpenConnection(ZMapServer server) ;
-ZMapServerResponseType zMapServerGetServerInfo(ZMapServer server, char **database_path) ;
+ZMapServerResponseType zMapServerGetServerInfo(ZMapServer server, ZMapServerInfo info) ;
 ZMapServerResponseType zMapServerFeatureSetNames(ZMapServer server,
 						 GList **feature_sets_inout,
 						 GList **required_styles,
@@ -67,7 +71,8 @@ ZMapServerResponseType zMapServerGetSequence(ZMapServer server, GList *sequences
 ZMapServerResponseType zMapServerSetContext(ZMapServer server, ZMapFeatureContext feature_context) ;
 ZMapFeatureContext zMapServerCopyContext(ZMapServer server) ;
 ZMapServerResponseType zMapServerGetFeatures(ZMapServer server, GData *styles, ZMapFeatureContext feature_context) ;
-ZMapServerResponseType zMapServerGetContextSequences(ZMapServer server, GData *styles, ZMapFeatureContext feature_context) ;
+ZMapServerResponseType zMapServerGetContextSequences(ZMapServer server,
+						     GData *styles, ZMapFeatureContext feature_context) ;
 char *zMapServerLastErrorMsg(ZMapServer server) ;
 ZMapServerResponseType zMapServerCloseConnection(ZMapServer server) ;
 ZMapServerResponseType zMapServerFreeConnection(ZMapServer server) ;
diff --git a/src/zmapServer/zmapServerProtocolHandler.c b/src/zmapServer/zmapServerProtocolHandler.c
index adeb571ab..f27ecbe22 100755
--- a/src/zmapServer/zmapServerProtocolHandler.c
+++ b/src/zmapServer/zmapServerProtocolHandler.c
@@ -25,9 +25,9 @@
  * Description: 
  * Exported functions: See ZMap/zmapServerProtocol.h
  * HISTORY:
- * Last edited: Jun 12 08:47 2009 (edgrif)
+ * Last edited: Jun 12 10:50 2009 (edgrif)
  * Created: Thu Jan 27 13:17:43 2005 (edgrif)
- * CVS info:   $Id: zmapServerProtocolHandler.c,v 1.42 2009-06-12 07:49:24 edgrif Exp $
+ * CVS info:   $Id: zmapServerProtocolHandler.c,v 1.43 2009-06-12 14:00:50 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
@@ -372,13 +372,20 @@ ZMapThreadReturnCode zMapServerRequestHandler(void **slave_data,
     case ZMAP_SERVERREQ_GETSERVERINFO:
       {
         ZMapServerReqGetServerInfo get_info = (ZMapServerReqGetServerInfo)request_in ;
+	ZMapServerInfoStruct info = {NULL} ;
 
 	if ((request->response
-	     = zMapServerGetServerInfo(server, &(get_info->database_path_out))) != ZMAP_SERVERRESPONSE_OK)
+	     = zMapServerGetServerInfo(server, &info)) != ZMAP_SERVERRESPONSE_OK)
 	  {
 	    *err_msg_out = g_strdup_printf(zMapServerLastErrorMsg(server)) ;
 	    thread_rc = ZMAPTHREAD_RETURNCODE_REQFAIL ;
 	  }
+	else
+	  {
+	    get_info->database_name_out = info.database_name ;
+	    get_info->database_title_out = info.database_title ;
+	    get_info->database_path_out = info.database_path ;
+	  }
 
 	break ;
       }
diff --git a/src/zmapServer/zmapServerPrototype.h b/src/zmapServer/zmapServerPrototype.h
index 46047775a..5c9788965 100755
--- a/src/zmapServer/zmapServerPrototype.h
+++ b/src/zmapServer/zmapServerPrototype.h
@@ -28,9 +28,9 @@
  *              include this header, its not really for general consumption.
  *              
  * HISTORY:
- * Last edited: Apr 14 14:50 2009 (edgrif)
+ * Last edited: Jun 12 15:00 2009 (edgrif)
  * Created: Wed Aug  6 15:48:47 2003 (edgrif)
- * CVS info:   $Id: zmapServerPrototype.h,v 1.25 2009-04-16 09:11:27 edgrif Exp $
+ * CVS info:   $Id: zmapServerPrototype.h,v 1.26 2009-06-12 14:00:50 edgrif Exp $
  *-------------------------------------------------------------------
  */
 #ifndef ZMAP_SERVER_PROTOTYPEP_H
@@ -38,9 +38,18 @@
 
 #include <glib.h>
 #include <ZMap/zmapFeature.h>
+#include <ZMap/zmapServerProtocol.h>
+
+
+
+/* Contains information about the server. */
+typedef struct
+{
+  char *database_name ;
+  char *database_title ;
+  char *database_path ;
+} ZMapServerInfoStruct, *ZMapServerInfo ;
 
-/* Why is this needed here ?? */
-#include <zmapServer.h>				    /* is this ok to go here, think about it... */
 
 
 /* Define function prototypes for generalised server calls, they all go in
@@ -54,7 +63,7 @@ typedef gboolean (*ZMapServerCreateFunc)(void **server_conn,
 
 typedef ZMapServerResponseType (*ZMapServerOpenFunc)(void *server_conn) ;
 
-typedef ZMapServerResponseType (*ZMapServerGetServerInfo)(void *server_in, char **database_path_out) ;
+typedef ZMapServerResponseType (*ZMapServerGetServerInfo)(void *server_in, ZMapServerInfo info) ;
 
 typedef ZMapServerResponseType (*ZMapServerGetFeatureSets)(void *server_in,
 							   GList **feature_sets_inout,
-- 
GitLab