From 4f795e858a4a0ef86147b6b975393f1b4b8f8d3d Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 4 Oct 2018 06:31:55 +0000
Subject: [PATCH] Improvements to the verify_services() method (used only on
 Vertrauen, likely) and the "imsglist" command (ditto) - better dupe
 detection.

---
 exec/sbbslist.js | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/exec/sbbslist.js b/exec/sbbslist.js
index 068c6bcc41..8199d06157 100644
--- a/exec/sbbslist.js
+++ b/exec/sbbslist.js
@@ -675,7 +675,7 @@ function verify_services(address, timeout)
             print("Failed");
     }
     print("Waiting for UDP replies");
-    while(verified.udp.length < udp_services.length && udp_socket.poll(1)) {
+    while(verified.udp.length < udp_services.length && udp_socket.poll(3)) {
         if(js.terminated)
             break;
 		var msg=udp_socket.recvfrom(32*1024);
@@ -688,7 +688,7 @@ function verify_services(address, timeout)
             for(i in udp_services) {
                 var service = udp_services[i];
                 if(standard_service_port[service] == msg.port) {
-                    print("Valid UDP reply for " + service);
+                    print("Valid UDP reply for service: " + service);
                     verified.udp.push(service);
                 }
             }
@@ -766,14 +766,6 @@ function verify_list(list)
     }
 }
 
-function unique_strings(a, offset)
-{
-    var seen = {};
-    return a.filter(function(item) {
-        return seen.hasOwnProperty(item.substring(offset)) ? false : (seen[item.substring(offset)] = true);
-    });
-}
-
 function console_color(arg, selected)
 {
 	if(selected)
@@ -2197,23 +2189,33 @@ function main()
 				var ibbs = [];
 				for(i in list) {
 					var bbs = list[i];
-					if(!bbs.entry.autoverify.success)
+					if(!bbs.entry.autoverify || !bbs.entry.autoverify.success)
 						continue;
 					if(!lib.imsg_capable_system(bbs))
 						continue;
-					ibbs.push(format("%-63s\t%s\t%s",
-						bbs.entry.autoverify.last_success.service.address,
-						bbs.entry.autoverify.last_success.ip_address,
-						bbs.name));
+					if(!ibbs.every(function(element) {
+							return element.service_address != bbs.entry.autoverify.last_success.service.address
+								&& element.ip_address != bbs.entry.autoverify.last_success.ip_address
+								&& element.name != bbs.name;
+							}))
+						continue;
+					ibbs.push( {
+						service_address: bbs.entry.autoverify.last_success.service.address,
+						ip_address: bbs.entry.autoverify.last_success.ip_address,
+						name: bbs.name
+						} );
 				}
-				ibbs = unique_strings(ibbs, /* offset: */64);
 				file_backup("sbbsimsg.lst", limit ? limit : options.backup_level);
 				var f = new File("sbbsimsg.lst");
 				if(!f.open("w")) {
 					log(LOG_ERR,"Error opening " + f.name);
 					exit();
 				}
-				f.writeAll(ibbs);
+				for(i in ibbs)
+					f.writeln(format("%-63s\t%s\t%s",
+						ibbs[i].service_address,
+						ibbs[i].ip_address,
+						ibbs[i].name));
 				f.close();
 				print(ibbs.length + " BBS entries exported to: " + f.name);
 				break;
-- 
GitLab