aboutsummaryrefslogtreecommitdiffstats
path: root/src/jake2/game/Info.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jake2/game/Info.java')
-rw-r--r--src/jake2/game/Info.java263
1 files changed, 263 insertions, 0 deletions
diff --git a/src/jake2/game/Info.java b/src/jake2/game/Info.java
new file mode 100644
index 0000000..7b23ed6
--- /dev/null
+++ b/src/jake2/game/Info.java
@@ -0,0 +1,263 @@
+/*
+Copyright (C) 1997-2001 Id Software, Inc.
+
+This program 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
+of the License, or (at your option) any later version.
+
+This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+// Created on 27.12.2003 by RST.
+// $Id: Info.java,v 1.1 2004-07-07 19:59:07 hzi Exp $
+
+package jake2.game;
+
+import java.util.StringTokenizer;
+
+import jake2.*;
+import jake2.client.*;
+import jake2.qcommon.*;
+import jake2.render.*;
+import jake2.server.*;
+
+public class Info extends PlayerView {
+
+
+ public static String Info_ValueForKey(String s, String key) {
+
+ StringTokenizer tk = new StringTokenizer(s, "\\");
+
+ while (tk.hasMoreTokens()) {
+ String key1 = tk.nextToken();
+
+ if (!tk.hasMoreTokens()) {
+ Com.Printf("MISSING VALUE\n");
+ return s;
+ }
+ String value1 = tk.nextToken();
+
+ if (key.equals(key1))
+ return value1;
+ }
+
+ return "";
+ }
+
+ /** DANGEROUS, returns the modified userinfo string, was pointer-pointer manipulation first*/
+ public static String Info_SetValueForKey1(String s, String key, String value) {
+
+ if (value == null || value.length() == 0)
+ return s;
+
+ if (key.indexOf('\\') != -1 || value.indexOf('\\') != -1) {
+ Com.Printf("Can't use keys or values with a \\\n");
+ return s;
+ }
+
+ if (key.indexOf(';') != -1) {
+ Com.Printf("Can't use keys or values with a semicolon\n");
+ return s;
+ }
+
+ if (key.indexOf('"') != -1 || value.indexOf('"') != -1) {
+ Com.Printf("Can't use keys or values with a \"\n");
+ return s;
+ }
+
+ if (strlen(key) > MAX_INFO_KEY - 1 || strlen(value) > MAX_INFO_KEY - 1) {
+ Com.Printf("Keys and values must be < 64 characters.\n");
+ return s;
+ }
+
+ StringBuffer sb = new StringBuffer(Info_RemoveKey1(s, key));
+
+ if (sb.length() + 2 + key.length() + value.length() > Defines.MAX_INFO_STRING){
+
+
+ Com.Printf("Info string length exceeded\n");
+ return s;
+ }
+
+ sb.append('\\').append(key).append('\\').append(value);
+
+ return sb.toString();
+ }
+
+
+
+ /** DANGEROUS, returns now the modified userinfo string.*/
+ public static String Info_RemoveKey1(String s, String key) {
+
+ StringBuffer sb = new StringBuffer(512);
+
+ if (key.indexOf('\\') != -1) {
+ Com.Printf("Can't use a key with a \\\n");
+ return s;
+ }
+
+ StringTokenizer tk = new StringTokenizer(s, "\\");
+
+ while (tk.hasMoreTokens()) {
+ String key1 = tk.nextToken();
+
+ if (!tk.hasMoreTokens()) {
+ Com.Printf("MISSING VALUE\n");
+ return s;
+ }
+ String value1 = tk.nextToken();
+
+ if (!key.equals(key1))
+ sb.append('\\').append(key1).append('\\').append(value1);
+ }
+
+ return sb.toString();
+
+ //some old code follows
+
+ /*
+ char * start;
+ char pkey[512];
+ char value[512];
+ char * o;
+
+ if (key.indexOf('\\')!=-1) {
+ Com.Printf ("Can't use a key with a \\\n");
+ return s;
+ }
+
+ while () {
+ start = s;
+ if (* s == '\\')
+ s++;
+ o = pkey;
+ while (* s != '\\') {
+ if (!* s)
+ return;
+ * o++ = * s++;
+ }
+ * o = 0;
+ s++;
+
+ o = value;
+ while (* s != '\\' && * s) {
+ if (!* s)
+ return;
+ * o++ = * s++;
+ }
+ * o = 0;
+
+ if (!strcmp(key, pkey)) {
+ strcpy(start, s); // remove this part
+ return;
+ }
+
+ if (!* s)
+ return;
+ }
+ */
+ }
+
+ /*
+ ==================
+ Info_Validate
+
+ Some characters are illegal in info strings because they
+ can mess up the server's parsing
+ ==================
+ */
+ public static boolean Info_Validate(String s) {
+ if (s.indexOf('"') != -1)
+ //return false;
+ if (s.indexOf(';') != -1)
+ return false;
+ return true;
+ }
+
+ private static String fillspaces = " ";
+
+
+ public static void Print(String s) {
+
+ StringBuffer sb = new StringBuffer(512);
+ StringTokenizer tk = new StringTokenizer(s, "\\");
+
+ while (tk.hasMoreTokens()) {
+
+ String key1 = tk.nextToken();
+
+ if (!tk.hasMoreTokens()) {
+ Com.Printf("MISSING VALUE\n");
+ return;
+ }
+
+ String value1 = tk.nextToken();
+
+ sb.append(key1);
+
+ int len = key1.length();
+
+ if (len < 20) {
+ sb.append(fillspaces.substring(len));
+ }
+
+ sb.append('=').append(value1).append('\n');
+ }
+
+ Com.Printf(sb.toString());
+
+ /* some old code follows
+
+ char * o;
+ int l;
+
+ if (* s == '\\')
+ s++;
+ while (* s) {
+ o = key;
+ while (* s && * s != '\\')
+ * o++ = * s++;
+
+ l = o - key;
+ if (l < 20) {
+ memset(o, ' ', 20 - l);
+ key[20] = 0;
+ }
+ else
+ * o = 0;
+ Com_Printf("%s", key);
+
+ if (!* s) {
+ Com_Printf("MISSING VALUE\n");
+ return;
+ }
+
+ o = value;
+ s++;
+ while (* s && * s != '\\')
+ * o++ = * s++;
+ * o = 0;
+
+ if (* s)
+ s++;
+ Com_Printf("%s\n", value);
+ }
+ */
+ }
+
+ public static void testintern(StringBuffer in) {
+ in.setLength(0);
+ in.append("123!");
+ }
+
+}