Be lenient with extra slashes for CSM paths
[oweals/minetest.git] / src / serverlist.cpp
index a59a893699218e873e5f670c4aa705daeea34ae0..18264e933cce2f8f5e0032b1f00d10b9668f7c58 100644 (file)
@@ -155,6 +155,16 @@ std::vector<ServerListSpec> deSerialize(const std::string &liststring)
                        server["address"] = tmp;
                        std::getline(stream, tmp);
                        server["port"] = tmp;
+                       bool unique = true;
+                       for (const ServerListSpec &added : serverlist) {
+                               if (server["name"] == added["name"]
+                                               && server["port"] == added["port"]) {
+                                       unique = false;
+                                       break;
+                               }
+                       }
+                       if (!unique)
+                               continue;
                        std::getline(stream, tmp);
                        server["description"] = tmp;
                        serverlist.push_back(server);
@@ -185,8 +195,8 @@ const std::string serializeJson(const std::vector<ServerListSpec> &serverlist)
                list.append(it);
        }
        root["list"] = list;
-       Json::FastWriter writer;
-       return writer.write(root);
+
+       return fastWriteJson(root);
 }
 
 
@@ -249,10 +259,9 @@ void sendAnnounce(AnnounceAction action,
                        server["lag"] = lag;
        }
 
-       Json::FastWriter writer;
        HTTPFetchRequest fetch_request;
        fetch_request.url = g_settings->get("serverlist_url") + std::string("/announce");
-       fetch_request.post_fields["json"] = writer.write(server);
+       fetch_request.post_fields["json"] = fastWriteJson(server);
        fetch_request.multipart = true;
        httpfetch_async(fetch_request);
 }