Mercurial > prosody-modules
annotate mod_s2s_v6mesh/base32.lib.lua @ 6562:5da6fb562df9 default tip
mod_unified_push: Fix push error handling (fixes #2000)
Use the error object that send_iq() passes
as an argument to it's reject callback instead of attempting
and failing to do the parsing in the callback itself.
| author | kmq |
|---|---|
| date | Mon, 06 Jul 2026 14:23:57 +0200 |
| parents | 9f43226c7de1 |
| children |
| rev | line source |
|---|---|
|
6472
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 --[[ |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 borrowed from basexx library for Lua, under MIT License (MIT) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 Copyright (c) 2013 aiq |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 The MIT License (MIT) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 Copyright (c) 2013 aiq |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 Permission is hereby granted, free of charge, to any person obtaining a copy of |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 this software and associated documentation files (the "Software"), to deal in |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 the Software without restriction, including without limitation the rights to |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 the Software, and to permit persons to whom the Software is furnished to do so, |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 subject to the following conditions: |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 The above copyright notice and this permission notice shall be included in all |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 copies or substantial portions of the Software. |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 ----------------------------------------------------------------------------]] |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 local function ignore_set( str, set ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 if set then |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 str = str:gsub( "["..set.."]", "" ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 return str |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 local function divide_string( str, max ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 local result = {} |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 local start = 1 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 for i = 1, #str do |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 if i % max == 0 then |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 table.insert( result, str:sub( start, i ) ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 start = i + 1 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 elseif i == #str then |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 table.insert( result, str:sub( start, i ) ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 return result |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 function to_bit( str ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 return ( str:gsub( '.', function ( c ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 local byte = string.byte( c ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 local bits = {} |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 for _ = 1,8 do |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 table.insert( bits, byte % 2 ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 byte = math.floor( byte / 2 ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 return table.concat( bits ):reverse() |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 end ) ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 local function number_to_bit( num, length ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 local bits = {} |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 while num > 0 do |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 local rest = math.floor( math.fmod( num, 2 ) ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 table.insert( bits, rest ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 num = ( num - rest ) / 2 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 while #bits < length do |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 table.insert( bits, "0" ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 return string.reverse( table.concat( bits ) ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 local function pure_from_bit( str ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 return ( str:gsub( '........', function ( cc ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 return string.char( tonumber( cc, 2 ) ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 end ) ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 local function unexpected_char_error( str, pos ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 local c = string.sub( str, pos, pos ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 return string.format( "unexpected character at position %d: '%s'", pos, c ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 local function from_basexx( str, alphabet, bits ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 local result = {} |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 for i = 1, #str do |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 local c = string.sub( str, i, i ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 if c ~= '=' then |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 local index = string.find( alphabet, c, 1, true ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 if not index then |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 return nil, unexpected_char_error( str, i ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 table.insert( result, number_to_bit( index - 1, bits ) ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 local value = table.concat( result ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 local pad = #value % 8 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 return pure_from_bit( string.sub( value, 1, #value - pad ) ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 local function to_basexx( str, alphabet, bits, pad ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 local bitString = to_bit( str ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 local chunks = divide_string( bitString, bits ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 local result = {} |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
111 for _,value in ipairs( chunks ) do |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 if ( #value < bits ) then |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 value = value .. string.rep( '0', bits - #value ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 local pos = tonumber( value, 2 ) + 1 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 table.insert( result, alphabet:sub( pos, pos ) ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 table.insert( result, pad ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 return table.concat( result ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 local base32Alphabet = "abcdefghijklmnopqrstuvwxyz234567" |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 local base32PadMap = { "", "======", "====", "===", "=" } |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
126 local function from_base32( str, ignore ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 str = ignore_set( str, ignore ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
128 return from_basexx( string.lower( str ), base32Alphabet, 5 ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
129 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
131 function to_base32( str ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
132 return to_basexx( str, base32Alphabet, 5, base32PadMap[ #str % 5 + 1 ] ) |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
133 end |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 return { |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 decode = from_base32; |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 encode = to_base32; |
|
9f43226c7de1
mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 }; |
