commit f94eee147bb0aae14b9b07cd5d068acc5c98801b
parent 1a70d1d77487fc5ef5e79af9b070b108aa4caa86
Author: Ben Webb <ben@salilab.org>
Date: Sun, 17 Jun 2001 19:38:17 +0000
Data sent to metaserver is now properly URL-encoded
Diffstat:
4 files changed, 40 insertions(+), 15 deletions(-)
diff --git a/README b/README
@@ -1,13 +1,13 @@
-This is dopewars 1.5.0, a game simulating the life of a drug dealer in
+This is dopewars 1.5.1, a game simulating the life of a drug dealer in
New York. The aim of the game is to make lots and lots of money...
unfortunately, you start the game with a hefty debt, accumulating interest,
and the cops take a rather dim view of drug dealing...
These are brief instructions; see the HTML documentation for full information.
-dopewars 1.5.0 servers should handle clients as old as version 1.4.3 with
+dopewars 1.5.1 servers should handle clients as old as version 1.4.3 with
hardly any visible problems (the reverse is also true). However, it is
-recommended that both clients and servers are upgraded to 1.5.0!
+recommended that both clients and servers are upgraded to 1.5.1!
INSTALLATION
@@ -17,10 +17,10 @@ Either...
Or...
-2. Get the tarball dopewars-1.5.0.tar.gz from the same URL
- Extract it via. tar -xvzf dopewars-1.5.0.tar.gz
+2. Get the tarball dopewars-1.5.1.tar.gz from the same URL
+ Extract it via. tar -xvzf dopewars-1.5.1.tar.gz
Follow the instructions in the INSTALL file in the newly-created
- dopewars-1.5.0 directory
+ dopewars-1.5.1 directory
Once you're done, you can safely delete the RPM, tarball and dopewars
directory. The dopewars binary is all you need!
diff --git a/src/message.c b/src/message.c
@@ -600,6 +600,27 @@ void chomp(char *str) {
if (str[len-1]=='\n') str[len-1]=0;
}
+void AddURLEnc(GString *str,gchar *unenc) {
+/* Adds the plain text string "unenc" to the end of the GString "str", */
+/* replacing "special" characters in the same way as the */
+/* application/x-www-form-urlencoded media type, suitable for sending */
+/* to CGI scripts etc. */
+ int i;
+ if (!unenc || !str) return;
+ for (i=0;i<strlen(unenc);i++) {
+ if ((unenc[i]>='a' && unenc[i]<='z') ||
+ (unenc[i]>='A' && unenc[i]<='Z') ||
+ (unenc[i]>='0' && unenc[i]<='9') ||
+ unenc[i]=='-' || unenc[i]=='_' || unenc[i]=='.') {
+ g_string_append_c(str,unenc[i]);
+ } else if (unenc[i]==' ') {
+ g_string_append_c(str,'+');
+ } else {
+ g_string_sprintfa(str,"%%%02X",unenc[i]);
+ }
+ }
+}
+
void BroadcastToClients(char AICode,char Code,char *Data,
Player *From,Player *Except) {
/* Sends the message made up of AICode,Code and Data to all players except */
diff --git a/src/message.h b/src/message.h
@@ -150,6 +150,7 @@ extern GSList *FirstClient;
extern void (*ClientMessageHandlerPt) (char *,Player *);
extern void (*SocketWriteTestPt) (Player *,gboolean);
+void AddURLEnc(GString *str,gchar *unenc);
void chomp(char *str);
void BroadcastToClients(char AICode,char Code,char *Data,Player *From,
Player *Except);
diff --git a/src/serverside.c b/src/serverside.c
@@ -177,19 +177,22 @@ void RegisterWithMetaServer(gboolean Up,gboolean SendData,
g_string_assign(query,"output=text&");
- g_string_sprintfa(query,"up=%d&port=%d&version=%s&players=%d"
- "&maxplay=%d&comment=%s",
- Up ? 1 : 0,Port,VERSION,CountPlayers(FirstServer),
- MaxClients,MetaServer.Comment);
-
+ g_string_sprintfa(query,"up=%d&port=%d&version=",Up ? 1 : 0,Port);
+ AddURLEnc(query,VERSION);
+ g_string_sprintfa(query,"&players=%d&maxplay=%d&comment=",
+ CountPlayers(FirstServer),MaxClients);
+ AddURLEnc(query,MetaServer.Comment);
if (SendData && HighScoreRead(MultiScore,AntiqueScore)) {
for (i=0;i<NUMHISCORE;i++) {
if (MultiScore[i].Name && MultiScore[i].Name[0]) {
- g_string_sprintfa(query,"&nm[%d]=%s&dt[%d]=%s&st[%d]=%s&sc[%d]=%s",
- i,MultiScore[i].Name,i,MultiScore[i].Time,
- i,MultiScore[i].Dead ? "dead" : "alive",
- i,prstr=FormatPrice(MultiScore[i].Money));
+ g_string_sprintfa(query,"&nm[%d]=",i);
+ AddURLEnc(query,MultiScore[i].Name);
+ g_string_sprintfa(query,"&dt[%d]=",i);
+ AddURLEnc(query,MultiScore[i].Time);
+ g_string_sprintfa(query,"&st[%d]=%s&sc[%d]=",i,
+ MultiScore[i].Dead ? "dead" : "alive",i);
+ AddURLEnc(query,prstr=FormatPrice(MultiScore[i].Money));
g_free(prstr);
}
}