diff options
author | Holger Zickner <[email protected]> | 2004-07-07 19:59:59 +0000 |
---|---|---|
committer | Holger Zickner <[email protected]> | 2004-07-07 19:59:59 +0000 |
commit | 6e23fc1074d1f0c2c2812f4c2e663f5a21a43c20 (patch) | |
tree | 46ecc6d0255c874ba4cd26dc3d0733f785019896 /src/jake2/game/Info.java |
import of Jake2 version sunrisesunrise
Diffstat (limited to 'src/jake2/game/Info.java')
-rw-r--r-- | src/jake2/game/Info.java | 263 |
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!"); + } + +} |