From 44a273f6b8e7e500d1c8b03c38a9b597a06c022a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sat, 14 Apr 2018 02:42:41 -0700 Subject: [PATCH 1/2] Changes ntnet address assignment from numerical ascending to 16 hexadecimal randomized seeded (in English, everything is now randomized instead of predictable) (#37167) * Emergency NTNet patch * ok * @naksu * explicit null --- code/controllers/subsystem/processing/networks.dm | 15 +++++++++++++++ code/datums/components/ntnet_interface.dm | 7 ++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/processing/networks.dm b/code/controllers/subsystem/processing/networks.dm index a3f01efd0c..5c52207e76 100644 --- a/code/controllers/subsystem/processing/networks.dm +++ b/code/controllers/subsystem/processing/networks.dm @@ -9,6 +9,7 @@ PROCESSING_SUBSYSTEM_DEF(networks) var/assignment_hardware_id = HID_RESTRICTED_END var/list/networks_by_id = list() //id = network var/list/interfaces_by_id = list() //hardware id = component interface + var/resolve_collisions = TRUE /datum/controller/subsystem/processing/networks/Initialize() station_network = new @@ -34,3 +35,17 @@ PROCESSING_SUBSYSTEM_DEF(networks) /datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D) interfaces_by_id -= D.hardware_id return TRUE + +/datum/controller/subsystem/processing/networks/proc/get_next_HID() + var/string = "[num2text(assignment_hardware_id++, 12)]" + return make_address(string) + +/datum/controller/subsystem/processing/networks/proc/make_address(string) + if(!string) + return resolve_collisions? make_address("[num2text(rand(HID_RESTRICTED_END, 999999999999), 12)]"):null + var/hex = md5(string) + if(!hex) + return //errored + . = "[copytext(hex, 1, 9)]" //16 ^ 8 possibilities I think. + if(interfaces_by_id[.]) + return resolve_collisions? make_address("[num2text(rand(HID_RESTRICTED_END, 999999999999), 12)]"):null diff --git a/code/datums/components/ntnet_interface.dm b/code/datums/components/ntnet_interface.dm index c346279b32..f06e89b49d 100644 --- a/code/datums/components/ntnet_interface.dm +++ b/code/datums/components/ntnet_interface.dm @@ -13,11 +13,8 @@ var/network_name = "" //text var/list/networks_connected_by_id = list() //id = datum/ntnet -/datum/component/ntnet_interface/Initialize(force_ID, force_name = "NTNet Device", autoconnect_station_network = TRUE) //Don't force ID unless you know what you're doing! - if(!force_ID) - hardware_id = "[SSnetworks.assignment_hardware_id++]" - else - hardware_id = force_ID +/datum/component/ntnet_interface/Initialize(force_name = "NTNet Device", autoconnect_station_network = TRUE) //Don't force ID unless you know what you're doing! + hardware_id = "[SSnetworks.get_next_HID()]" network_name = force_name SSnetworks.register_interface(src) if(autoconnect_station_network)