From 83517982b040bcc69aabe6b873bfa70b4f50aa95 Mon Sep 17 00:00:00 2001
From: David Byers <byers@lysator.liu.se>
Date: Tue, 31 Oct 1995 11:23:26 +0000
Subject: [PATCH] Extended Conf_type to eight bits. Added get_uconf_stat server
 call. Database can now store eight-bit Conf_type Call to get Small_conf data
 in the cache added UConference protocol data type added

---
 src/server/ChangeLog       | 16 ++++++++++++++++
 src/server/cache.h         |  3 ++-
 src/server/conference.c    | 37 +++++++++++++++++++++++++++++++++++--
 src/server/connections.h   |  8 +++++---
 src/server/fncdef.txt      |  5 +++--
 src/server/prot-a-output.c | 28 ++++++++++++++++++++++++++--
 src/server/prot-a-output.h | 12 ++++++++++--
 src/server/prot-a-parse.c  | 21 ++++++++++++++++++---
 src/server/prot-a.c        | 10 ++++++++--
 src/server/ram-output.c    |  8 ++++++--
 src/server/ram-parse.c     | 21 +++++++++++++++++++--
 src/server/simple-cache.c  | 24 ++++++++++++++++++++++--
 12 files changed, 170 insertions(+), 23 deletions(-)

diff --git a/src/server/ChangeLog b/src/server/ChangeLog
index 05b8c512a..c4d5c3301 100644
--- a/src/server/ChangeLog
+++ b/src/server/ChangeLog
@@ -1,3 +1,19 @@
+Tue Oct 31 12:14:15 1995  David Byers  <byers@lysator.liu.se>
+
+	* prot-a-output.c: Added UConference and extended conf-type
+
+	* prot-a-parse.c:  Conf-type parser accepts both extended and
+	  original conf-type
+
+	* ram-parse.c: Parse extended conf-type
+
+	* ram-output.c: Output extended conf-type
+
+	* simple-cache.c: Access to small_conf_arr entries
+
+	* Added get-uconf-stat call
+	  Let set-conf-type accept an extended conf-type.
+
 Mon Oct 23 07:52:44 1995  Per Cederqvist  (ceder@lysator.liu.se)
 
 	* tmp-limits.h (MAX_TEXT): Increased to 1500000.
diff --git a/src/server/cache.h b/src/server/cache.h
index f6d3bb633..4a205ec95 100644
--- a/src/server/cache.h
+++ b/src/server/cache.h
@@ -1,5 +1,5 @@
 /*
- * $Id: cache.h,v 0.14 1994/04/05 08:00:21 ceder Exp $
+ * $Id: cache.h,v 0.15 1995/10/31 11:22:52 byers Exp $
  * Copyright (C) 1991, 1992, 1993, 1994  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -84,6 +84,7 @@ Text_no     cached_create_text(const String message);
 Person     *cached_get_person_stat(Pers_no person);
 Conference *cached_get_conf_stat(Conf_no conf);
 Text_stat  *cached_get_text_stat(Text_no text);
+Small_conf *cached_get_small_conf_stat(Conf_no conf_no);
 
 /* return text. String is to be freed by caller */
 String      cached_get_text(Text_no text);
diff --git a/src/server/conference.c b/src/server/conference.c
index 7776eed9c..9018b138a 100644
--- a/src/server/conference.c
+++ b/src/server/conference.c
@@ -1,5 +1,5 @@
 /*
- * $Id: conference.c,v 0.30 1995/01/01 19:31:43 ceder Exp $
+ * $Id: conference.c,v 0.31 1995/10/31 11:22:55 byers Exp $
  * Copyright (C) 1991, 1992, 1993, 1994, 1995  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -28,7 +28,7 @@
  * All atomic calls that deals with conferences.
  */
 
-static char *rcsid = "$Id: conference.c,v 0.30 1995/01/01 19:31:43 ceder Exp $";
+static char *rcsid = "$Id: conference.c,v 0.31 1995/10/31 11:22:55 byers Exp $";
 #include "rcs.h"
 USE(rcsid);
 
@@ -686,6 +686,39 @@ get_conf_stat (Conf_no		  conf_no,
     return OK;
 }
 
+/*
+ * Get small status for a conference
+ *
+ * This call should not result in reading the conference from disk, hence
+ * the use of fast_access_perm. Please keep it that way.
+ */
+
+extern Success
+get_uconf_stat (Conf_no		conf_no,
+	       Small_conf     * result)
+{
+    Access		acc;
+    Small_conf	      * conf_c;
+
+    conf_c = cached_get_small_conf_stat(conf_no);
+    if (conf_c != NULL)
+	acc = fast_access_perm (conf_no, ACTPERS, ACT_P);
+    else
+	acc = error;
+
+    switch (acc)
+    {
+    case error:
+	return FAILURE;
+    case none:
+	kom_errno = KOM_UNDEF_CONF;
+	return FAILURE;
+    default:
+	*result = *conf_c;
+	return OK;
+    }
+}
+
 extern  Success
 get_conf_stat_old (Conf_no	  conf_no,
 		   int		  mask,
diff --git a/src/server/connections.h b/src/server/connections.h
index 91fe5edb5..45ca20da4 100644
--- a/src/server/connections.h
+++ b/src/server/connections.h
@@ -1,5 +1,5 @@
 /*
- * $Id: connections.h,v 0.18 1995/01/01 20:17:20 ceder Exp $
+ * $Id: connections.h,v 0.19 1995/10/31 11:22:59 byers Exp $
  * Copyright (C) 1991, 1992, 1993, 1994, 1995  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -23,7 +23,7 @@
  * Please mail bug reports to bug-lyskom@lysator.liu.se. 
  */
 /*
- * $Id: connections.h,v 0.18 1995/01/01 20:17:20 ceder Exp $
+ * $Id: connections.h,v 0.19 1995/10/31 11:22:59 byers Exp $
  *
   * connections.h -- The top level of the communication packet.
   *
@@ -158,7 +158,8 @@ typedef enum {
     rt_session_info_ident,
     rt_who_info_ident_list,
     rt_conf_z_info_list,
-    rt_version_info
+    rt_version_info,
+    rt_uconference,
 } Res_type;
 
 /*
@@ -194,6 +195,7 @@ typedef union {
 	Session_info_ident	  session_info_ident;
 	Conf_z_info_list          conf_z_info_list;
         Version_info              version_info;
+	Small_conf		  uconference;
 } Result_holder;
 
 
diff --git a/src/server/fncdef.txt b/src/server/fncdef.txt
index 5e3ec9518..92feb62c8 100644
--- a/src/server/fncdef.txt
+++ b/src/server/fncdef.txt
@@ -1,5 +1,5 @@
 #
-# $Id: fncdef.txt,v 0.18 1995/10/31 09:12:31 kent Exp $
+# $Id: fncdef.txt,v 0.19 1995/10/31 11:23:02 byers Exp $
 # Copyright (C) 1991, 1992, 1993, 1994  Lysator Academic Computer Association.
 #
 # This file is part of the LysKOM server.
@@ -22,7 +22,7 @@
 #
 # Please mail bug reports to bug-lyskom@lysator.liu.se. 
 #
-# $Id: fncdef.txt,v 0.18 1995/10/31 09:12:31 kent Exp $
+# $Id: fncdef.txt,v 0.19 1995/10/31 11:23:02 byers Exp $
 # 
 # This file is used to describe the functions in services.c. All
 # functions that are reachable from the clients are listed here, together
@@ -113,3 +113,4 @@ success re_z_lookup	c_string (param.regexp_len) num num : conf_z_info_list
 success get_version_info : version_info
 success lookup_z_name	c_string (param.conf_name_len) num num : conf_z_info_list
 success set_last_read num num
+success get_uconf_stat  num : uconference
diff --git a/src/server/prot-a-output.c b/src/server/prot-a-output.c
index 87b8b3edf..c0e06a8b4 100644
--- a/src/server/prot-a-output.c
+++ b/src/server/prot-a-output.c
@@ -1,5 +1,5 @@
 /*
- * $Id: prot-a-output.c,v 0.18 1995/01/01 20:17:24 ceder Exp $
+ * $Id: prot-a-output.c,v 0.19 1995/10/31 11:23:06 byers Exp $
  * Copyright (C) 1991, 1992, 1993, 1994, 1995  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -28,7 +28,7 @@
  * Written by ceder 1990-07-13
  */
 
-static char *rcsid = "$Id: prot-a-output.c,v 0.18 1995/01/01 20:17:24 ceder Exp $";
+static char *rcsid = "$Id: prot-a-output.c,v 0.19 1995/10/31 11:23:06 byers Exp $";
 #include "rcs.h"
 USE(rcsid);
 
@@ -195,6 +195,16 @@ prot_a_output_conference (Connection *fp,
 	     (unsigned long) conf_c -> texts.no_of_texts);
 }
 
+void prot_a_output_uconference(Connection *fp,
+			       Small_conf *conf_c)
+{
+    prot_a_output_string(fp, conf_c -> name);
+    prot_a_output_extended_conf_type(fp, conf_c -> type);
+    mux_printf(fp, " %lu %lu",
+	       (unsigned long) conf_c -> highest_local_no,
+	       (unsigned long) conf_c -> nice);
+}
+
 
 void
 prot_a_output_mark_list(Connection *fp,
@@ -472,6 +482,20 @@ prot_a_output_conf_type(Connection *fp,
     mux_putc(type.letter_box + '0', fp);
 }
 
+extern void
+prot_a_output_extended_conf_type(Connection *fp,
+				 Conf_type type)
+{
+    mux_putc(' ', fp);
+    mux_putc(type.rd_prot + '0', fp);
+    mux_putc(type.original + '0', fp);
+    mux_putc(type.secret + '0', fp);
+    mux_putc(type.letter_box + '0', fp);
+    mux_putc(type.anarchy + '0', fp);
+    mux_putc(type.reserved1 + '0', fp);
+    mux_putc(type.reserved2 + '0', fp);
+    mux_putc(type.reserved3 + '0', fp);
+}
 
 extern void
 prot_a_output_member_list(Connection *fp,
diff --git a/src/server/prot-a-output.h b/src/server/prot-a-output.h
index 63af6de7f..c403eadfe 100644
--- a/src/server/prot-a-output.h
+++ b/src/server/prot-a-output.h
@@ -1,5 +1,5 @@
 /*
- * $Id: prot-a-output.h,v 0.10 1995/01/01 20:17:24 ceder Exp $
+ * $Id: prot-a-output.h,v 0.11 1995/10/31 11:23:10 byers Exp $
  * Copyright (C) 1991, 1992, 1994, 1995  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -23,7 +23,7 @@
  * Please mail bug reports to bug-lyskom@lysator.liu.se. 
  */
 /*
- * $Id: prot-a-output.h,v 0.10 1995/01/01 20:17:24 ceder Exp $
+ * $Id: prot-a-output.h,v 0.11 1995/10/31 11:23:10 byers Exp $
  *
  */
 extern void
@@ -51,6 +51,10 @@ extern void
 prot_a_output_conference(Connection *fp,
 			 Conference *conf_c);
 
+extern void
+prot_a_output_uconference(Connection *fp,
+			  Small_conf *conf_c);
+
 extern void
 prot_a_output_mark_list(Connection *fp,
 			Mark_list mark_list);
@@ -108,6 +112,10 @@ extern void
 prot_a_output_conf_type(Connection *fp,
 			Conf_type type);
 
+extern void
+prot_a_output_extended_conf_type(Connection *fp,
+				 Conf_type type);
+
 extern void
 prot_a_output_member_list(Connection *fp,
 			  Member_list m_list);
diff --git a/src/server/prot-a-parse.c b/src/server/prot-a-parse.c
index 2048b9074..04ce6bae2 100644
--- a/src/server/prot-a-parse.c
+++ b/src/server/prot-a-parse.c
@@ -1,5 +1,5 @@
 /*
- * $Id: prot-a-parse.c,v 0.20 1995/10/23 06:55:44 ceder Exp $
+ * $Id: prot-a-parse.c,v 0.21 1995/10/31 11:23:12 byers Exp $
  * Copyright (C) 1991, 1992, 1993, 1994, 1995  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -28,7 +28,7 @@
  * BUG: Not all functions are used, I think. /ceder
  */
 
-static char *rcsid = "$Id: prot-a-parse.c,v 0.20 1995/10/23 06:55:44 ceder Exp $";
+static char *rcsid = "$Id: prot-a-parse.c,v 0.21 1995/10/31 11:23:12 byers Exp $";
 #include "rcs.h"
 USE(rcsid);
 
@@ -137,13 +137,28 @@ prot_a_parse_conf_type(Connection *client,
 
     token = prot_a_get_token(client);
     
-    if ( s_strlen(token) != 4 )
+    if ( s_strlen(token) != 4 &&
+	 s_strlen(token) != 8)
 	longjmp(parse_env, ISC_PROTOCOL_ERR);
   
     res->rd_prot = token.string[ 0 ] != '0';
     res->original = token.string[ 1 ] != '0';
     res->secret = token.string[ 2 ] != '0';
     res->letter_box = token.string[ 3 ] != '0';
+    if (s_strlen(token) != 8)
+    {
+      res->anarchy = 0;
+      res->reserved1 = 0;
+      res->reserved2 = 0;
+      res->reserved3 = 0;
+    }
+    else
+    {
+      res->anarchy = token.string[ 4 ] != '0';
+      res->reserved1 = token.string[ 5 ] != '0';
+      res->reserved2 = token.string[ 6 ] != '0';
+      res->reserved3 = token.string[ 7 ] != '0';
+    }
 }
 
 /*
diff --git a/src/server/prot-a.c b/src/server/prot-a.c
index 0219d0f11..3021aeb6d 100644
--- a/src/server/prot-a.c
+++ b/src/server/prot-a.c
@@ -1,5 +1,5 @@
 /*
- * $Id: prot-a.c,v 0.31 1995/10/31 09:12:38 kent Exp $
+ * $Id: prot-a.c,v 0.32 1995/10/31 11:23:16 byers Exp $
  * Copyright (C) 1991, 1992, 1993, 1994  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -26,7 +26,7 @@
  * Protocol A.
  */
 
-static char *rcsid = "$Id: prot-a.c,v 0.31 1995/10/31 09:12:38 kent Exp $";
+static char *rcsid = "$Id: prot-a.c,v 0.32 1995/10/31 11:23:16 byers Exp $";
 #include "rcs.h"
 USE(rcsid);
 
@@ -203,6 +203,11 @@ prot_a_reply(Connection *client,
 	    prot_a_output_version_info(client, &res->version_info);
 	    BUG(("={Version_info not listed}\n"));
 	    break;
+
+	case rt_uconference:
+	    prot_a_output_uconference(client, &res->uconference);
+	    BUG(("={UConference not listed}\n"));
+	    break;
 	}
 	mux_putc('\n', client);
     }
@@ -353,6 +358,7 @@ prot_a_is_legal_fnc(Call_header fnc)
     case call_fnc_get_version_info:
     case call_fnc_lookup_z_name:
     case call_fnc_set_last_read:
+    case call_fnc_get_uconf_stat:
 	return TRUE;
 
     default:
diff --git a/src/server/ram-output.c b/src/server/ram-output.c
index e8f1b0db2..b8ea871cc 100644
--- a/src/server/ram-output.c
+++ b/src/server/ram-output.c
@@ -1,5 +1,5 @@
 /*
- * $Id: ram-output.c,v 0.14 1995/01/01 20:17:26 ceder Exp $
+ * $Id: ram-output.c,v 0.15 1995/10/31 11:23:19 byers Exp $
  * Copyright (C) 1991, 1993, 1994, 1995  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -33,7 +33,7 @@
  * (It worked - now saving is twice as fast.)
  */
 
-static char *rcsid = "$Id: ram-output.c,v 0.14 1995/01/01 20:17:26 ceder Exp $";
+static char *rcsid = "$Id: ram-output.c,v 0.15 1995/10/31 11:23:19 byers Exp $";
 #include "rcs.h"
 USE(rcsid);
 
@@ -326,6 +326,10 @@ foutput_conf_type(FILE *fp,
     putc(type.original + '0', fp);
     putc(type.secret + '0', fp);
     putc(type.letter_box + '0', fp);
+    putc(type.anarchy + '0', fp);
+    putc(type.reserved1 + '0', fp);
+    putc(type.reserved2 + '0', fp);
+    putc(type.reserved3 + '0', fp);
 }
 
 
diff --git a/src/server/ram-parse.c b/src/server/ram-parse.c
index 8aeb06577..fd7bd12db 100644
--- a/src/server/ram-parse.c
+++ b/src/server/ram-parse.c
@@ -1,5 +1,5 @@
 /*
- * $Id: ram-parse.c,v 0.20 1994/12/31 11:56:13 ceder Exp $
+ * $Id: ram-parse.c,v 0.21 1995/10/31 11:23:22 byers Exp $
  * Copyright (C) 1991, 1993, 1994  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -29,7 +29,7 @@
  * ram-parse.c -- parse objects from disk file.
  */
 
-static char *rcsid = "$Id: ram-parse.c,v 0.20 1994/12/31 11:56:13 ceder Exp $";
+static char *rcsid = "$Id: ram-parse.c,v 0.21 1995/10/31 11:23:22 byers Exp $";
 #include "rcs.h"
 USE(rcsid);
 
@@ -1032,12 +1032,29 @@ extern Success
 fparse_conf_type(FILE *fp,
 		Conf_type *result)
 {
+    char c;
+    
     fskipwhite(fp);
     
     result->rd_prot = getc(fp) != '0';
     result->original = getc(fp) != '0';
     result->secret = getc(fp) != '0';
     result->letter_box = getc(fp) != '0';
+    c = getc(fp);
+    if (c != '0' && c != '1')
+    {
+        result->anarchy = 1;
+	result->reserved1 = 0;
+	result->reserved2 = 0;
+	result->reserved3 = 0;
+	ungetc(c, fp);
+	return(OK);
+    }
+
+    result->anarchy =   ( c != '0' );
+    result->reserved1 = ( getc(fp) != '0' );
+    result->reserved2 = ( getc(fp) != '0' );
+    result->reserved3 = ( getc(fp) != '0' );
 
     return OK;
 }
diff --git a/src/server/simple-cache.c b/src/server/simple-cache.c
index d961e8b31..ac0346fb1 100644
--- a/src/server/simple-cache.c
+++ b/src/server/simple-cache.c
@@ -1,5 +1,5 @@
 /*
- * $Id: simple-cache.c,v 0.50 1995/10/07 14:39:06 ceder Exp $
+ * $Id: simple-cache.c,v 0.51 1995/10/31 11:23:26 byers Exp $
  * Copyright (C) 1991, 1992, 1993, 1994  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -33,7 +33,7 @@
  * New save algorithm by ceder.
  */
 
-static char *rcsid = "$Id: simple-cache.c,v 0.50 1995/10/07 14:39:06 ceder Exp $";
+static char *rcsid = "$Id: simple-cache.c,v 0.51 1995/10/31 11:23:26 byers Exp $";
 #include "rcs.h"
 USE(rcsid);
 
@@ -1074,6 +1074,26 @@ cached_get_highest_local_no (Conf_no conf_no)
     return small_conf_arr[ conf_no ]->highest_local_no;
 }
 
+extern Small_conf *
+cached_get_small_conf_stat (Conf_no conf_no)
+{
+    TRACE2("cached_get_small_conf_stat %d\n", conf_no);
+
+    if (conf_no == 0)
+    {
+	kom_errno = KOM_CONF_ZERO;
+	return NULL;
+    }
+    
+    if (conf_no >= next_free_num ||
+	small_conf_arr[conf_no] == NULL)
+    {
+	kom_errno = KOM_UNDEF_CONF;
+	return NULL;
+    }
+    return small_conf_arr[conf_no];
+}
+
 /* Lock a person struct in memory. Increase a referenc count. */
 void
 cached_lock_person(Pers_no pers_no)
-- 
GitLab