From 9bdb8b14cc88940e85d40d4eba1c8d94b4b79965 Mon Sep 17 00:00:00 2001
From: ariclone <>
Date: Sat, 22 Jun 2002 16:36:22 +0000
Subject: [PATCH] No more client crash with map path/name or uid mismatch

---
 src/network/netconnect.cpp | 25 +++++++++++++++++++++++++
 src/ui/menus.cpp           |  6 ++++++
 2 files changed, 31 insertions(+)

diff --git a/src/network/netconnect.cpp b/src/network/netconnect.cpp
index 0dd75c9d6..bbe2ed384 100644
--- a/src/network/netconnect.cpp
+++ b/src/network/netconnect.cpp
@@ -1106,6 +1106,26 @@ local void ClientParseAreYouThere(
     NetworkSendICMessage(NetworkServerIP, htons(NetworkServerPort), &message);
 }
 
+/**
+**	FIXME: docu
+**
+**	@param msg	message received
+*/
+local void ClientParseBadMap(
+	const InitMessage* msg __attribute__((unused)))
+{
+    int i;
+    InitMessage message;
+
+    message.Type = MessageInitHello;
+    message.SubType = ICMSeeYou;
+    // Spew out 5 and trust in God that they arrive
+    for (i = 0; i < 5; i++) {
+	NetworkSendICMessage(NetworkServerIP, htons(NetworkServerPort), &message);
+    }
+    NetConnectRunning = 0;	// End the menu..
+}
+
 /**
 **	FIXME: docu
 **
@@ -1642,6 +1662,10 @@ local void NetworkParseMenuPacket(const InitMessage *msg, int size)
 		    ClientParseGoAhead(msg);
 		    break;
 
+		case ccs_badmap:
+		    ClientParseBadMap(msg);
+		    break;
+
 		default:
 		    DebugLevel0Fn("Client: Unhandled state %d\n" _C_ NetLocalState);
 		    break;
@@ -1675,6 +1699,7 @@ local void NetworkParseMenuPacket(const InitMessage *msg, int size)
 		ServerParseState(msg);
 		break;
 
+	    case ICMMapUidMismatch:
 	    case ICMGoodBye:
 		ServerParseGoodBye();
 		break;
diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp
index e07326221..eab4004e2 100644
--- a/src/ui/menus.cpp
+++ b/src/ui/menus.cpp
@@ -2468,6 +2468,12 @@ local void TerminateNetConnect(void)
 	    menu->items[1].d.text.text = "Incompatible engine version.";
 	    ProcessMenu("menu-net-error", 1);
 
+	    NetConnectingCancel();
+	    return;
+	case ccs_badmap:
+	    menu->items[1].d.text.text = "Map not available.";
+	    ProcessMenu("menu-net-error", 1);
+
 	    NetConnectingCancel();
 	    return;
 	case ccs_incompatiblenetwork: