Comparison

util/ip.lua @ 8432:da807f4f706c

util.ip: Simplify bitstring method
author Kim Alvefur <zash@zash.se>
date Fri, 01 Dec 2017 04:32:20 +0100
parent 8431:a5a03d40a20c
child 8433:ca7f8e60410a
comparison
equal deleted inserted replaced
8431:a5a03d40a20c 8432:da807f4f706c
4 -- This project is MIT/X11 licensed. Please see the 4 -- This project is MIT/X11 licensed. Please see the
5 -- COPYING file in the source package for more information. 5 -- COPYING file in the source package for more information.
6 -- 6 --
7 7
8 local net = require "util.net"; 8 local net = require "util.net";
9 local hex = require "util.hex";
9 10
10 local ip_methods = {}; 11 local ip_methods = {};
11 12
12 local ip_mt = { 13 local ip_mt = {
13 __index = function (ip, key) 14 __index = function (ip, key)
50 51
51 return setmetatable({ addr = ipStr, packed = packed, proto = proto, zone = zone }, ip_mt); 52 return setmetatable({ addr = ipStr, packed = packed, proto = proto, zone = zone }, ip_mt);
52 end 53 end
53 54
54 function ip_methods.bits(ip) 55 function ip_methods.bits(ip)
55 ip = (ip.addr):upper(); 56 return hex.to(ip.packed):upper():gsub(".", hex2bits);
56 ip:gsub("([^:]*):?", function (c) fields[#fields + 1] = c end);
57 if not ip:match(":$") then fields[#fields] = nil; end
58 for i, field in ipairs(fields) do
59 if field:len() == 0 and i ~= 1 and i ~= #fields then
60 for _ = 1, 16 * (9 - #fields) do
61 result = result .. "0";
62 end
63 else
64 for _ = 1, 4 - field:len() do
65 result = result .. "0000";
66 end
67 for j = 1, field:len() do
68 result = result .. hex2bits[field:sub(j, j)];
69 end
70 end
71 end
72 return result;
73 end 57 end
74 58
75 function ip_methods.bits_full(ip) 59 function ip_methods.bits_full(ip)
76 if ip.proto == "IPv4" then 60 if ip.proto == "IPv4" then
77 ip = ip.toV4mapped; 61 ip = ip.toV4mapped;