net.stun: Add lookup table generation helper, reduces code duplication
authorMatthew Wild <mwild1@gmail.com>
Sat, 05 Mar 2022 10:59:19 +0000
changeset 12372 d82c8efc6dd5
parent 12371 7a2f036f73b3
child 12373 f2ae9c6d1d9f
net.stun: Add lookup table generation helper, reduces code duplication
net/stun.lua
--- a/net/stun.lua	Sat Mar 05 10:57:47 2022 +0000
+++ b/net/stun.lua	Sat Mar 05 10:59:19 2022 +0000
@@ -34,6 +34,15 @@
 
 local magic_cookie = string.char(0x21, 0x12, 0xA4, 0x42);
 
+local function lookup_table(t)
+	local lookup = {};
+	for k, v in pairs(t) do
+		lookup[k] = v;
+		lookup[v] = k;
+	end
+	return lookup;
+end
+
 local methods = {
 	binding = 0x001;
 	-- TURN
@@ -44,11 +53,7 @@
 	["create-permission"] = 0x008;
 	["channel-bind"] = 0x009;
 };
-local method_lookup = {};
-for name, value in pairs(methods) do
-	method_lookup[name] = value;
-	method_lookup[value] = name;
-end
+local method_lookup = lookup_table(methods);
 
 local classes = {
 	request = 0;
@@ -56,11 +61,10 @@
 	success = 2;
 	error = 3;
 };
-local class_lookup = {};
-for name, value in pairs(classes) do
-	class_lookup[name] = value;
-	class_lookup[value] = name;
-end
+local class_lookup = lookup_table(classes);
+
+local addr_families = { "IPv4", "IPv6" };
+local addr_family_lookup = lookup_table(addr_families);
 
 local attributes = {
 	["mapped-address"] = 0x0001;
@@ -83,11 +87,7 @@
 	-- TURN
 	["requested-transport"] = 0x0019;
 };
-local attribute_lookup = {};
-for name, value in pairs(attributes) do
-	attribute_lookup[name] = value;
-	attribute_lookup[value] = name;
-end
+local attribute_lookup = lookup_table(attributes);
 
 function packet_methods:serialize_header(length)
 	assert(#self.transaction_id == 12, "invalid transaction id length");
@@ -204,7 +204,6 @@
 	end
 end
 
-local addr_families = { "IPv4", "IPv6" };
 function packet_methods:get_mapped_address()
 	local data = self:get_attribute("mapped-address");
 	if not data then return; end