Skip to content

Commit 3e0b1b9

Browse files
committed
inlines payload_len/2
1 parent 63b75e0 commit 3e0b1b9

File tree

1 file changed

+59
-24
lines changed

1 file changed

+59
-24
lines changed

lib/mmdb2_decoder/data.ex

Lines changed: 59 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,34 @@ defmodule MMDB2Decoder.Data do
2929
Decodes the datatype found at the given offset of the data.
3030
"""
3131
@spec decode(binary, binary) :: {decoded, binary}
32+
def decode(<<@binary::size(3), 29::size(5), len::size(8), part_rest::binary>>, _) do
33+
decode_binary(part_rest, 29 + len)
34+
end
35+
36+
def decode(<<@binary::size(3), 30::size(5), len::size(16), part_rest::binary>>, _) do
37+
decode_binary(part_rest, 285 + len)
38+
end
39+
40+
def decode(<<@binary::size(3), 31::size(5), len::size(24), part_rest::binary>>, _) do
41+
decode_binary(part_rest, 65821 + len)
42+
end
43+
3244
def decode(<<@binary::size(3), len::size(5), part_rest::binary>>, _) do
3345
decode_binary(part_rest, len)
3446
end
3547

48+
def decode(<<@bytes::size(3), 29::size(5), len::size(8), part_rest::binary>>, _) do
49+
decode_binary(part_rest, 29 + len)
50+
end
51+
52+
def decode(<<@bytes::size(3), 30::size(5), len::size(16), part_rest::binary>>, _) do
53+
decode_binary(part_rest, 285 + len)
54+
end
55+
56+
def decode(<<@bytes::size(3), 31::size(5), len::size(24), part_rest::binary>>, _) do
57+
decode_binary(part_rest, 65821 + len)
58+
end
59+
3660
def decode(<<@bytes::size(3), len::size(5), part_rest::binary>>, _) do
3761
decode_binary(part_rest, len)
3862
end
@@ -41,6 +65,27 @@ defmodule MMDB2Decoder.Data do
4165
{Float.round(value, 8), part_rest}
4266
end
4367

68+
def decode(
69+
<<@extended::size(3), 29::size(5), len::size(8), @extended_array, part_rest::binary>>,
70+
data_full
71+
) do
72+
decode_array(part_rest, data_full, 28 + len)
73+
end
74+
75+
def decode(
76+
<<@extended::size(3), 30::size(5), len::size(16), @extended_array, part_rest::binary>>,
77+
data_full
78+
) do
79+
decode_array(part_rest, data_full, 285 + len)
80+
end
81+
82+
def decode(
83+
<<@extended::size(3), 31::size(5), len::size(24), @extended_array, part_rest::binary>>,
84+
data_full
85+
) do
86+
decode_array(part_rest, data_full, 65821 + len)
87+
end
88+
4489
def decode(<<@extended::size(3), len::size(5), @extended_array, part_rest::binary>>, data_full) do
4590
decode_array(part_rest, data_full, len)
4691
end
@@ -82,6 +127,18 @@ defmodule MMDB2Decoder.Data do
82127
decode_unsigned(part_rest, len * 8)
83128
end
84129

130+
def decode(<<@map::size(3), 29::size(5), len::size(8), part_rest::binary>>, data_full) do
131+
decode_map(part_rest, data_full, 28 + len)
132+
end
133+
134+
def decode(<<@map::size(3), 30::size(5), len::size(16), part_rest::binary>>, data_full) do
135+
decode_map(part_rest, data_full, 285 + len)
136+
end
137+
138+
def decode(<<@map::size(3), 31::size(5), len::size(24), part_rest::binary>>, data_full) do
139+
decode_map(part_rest, data_full, 65821 + len)
140+
end
141+
85142
def decode(<<@map::size(3), len::size(5), part_rest::binary>>, data_full) do
86143
decode_map(part_rest, data_full, len)
87144
end
@@ -126,9 +183,7 @@ defmodule MMDB2Decoder.Data do
126183

127184
# value decoding
128185

129-
defp decode_array(data_part, data_full, len) do
130-
{data_part, size} = payload_len(data_part, len)
131-
186+
defp decode_array(data_part, data_full, size) do
132187
decode_array_rec(data_part, data_full, size, [])
133188
end
134189

@@ -143,16 +198,12 @@ defmodule MMDB2Decoder.Data do
143198
end
144199

145200
defp decode_binary(data_part, len) do
146-
{data_part, len} = payload_len(data_part, len)
147-
148201
<<value::size(len)-binary, rest::binary>> = data_part
149202

150203
{value, rest}
151204
end
152205

153-
defp decode_map(data_part, data_full, len) do
154-
{data_part, size} = payload_len(data_part, len)
155-
206+
defp decode_map(data_part, data_full, size) do
156207
decode_map_rec(data_part, data_full, size, %{})
157208
end
158209

@@ -180,20 +231,4 @@ defmodule MMDB2Decoder.Data do
180231

181232
{value, rest}
182233
end
183-
184-
# payload detection
185-
186-
defp payload_len(<<len::size(8), data::binary>>, 29) do
187-
{data, 29 + len}
188-
end
189-
190-
defp payload_len(<<len::size(16), data::binary>>, 30) do
191-
{data, 285 + len}
192-
end
193-
194-
defp payload_len(<<len::size(24), data::binary>>, 31) do
195-
{data, 65821 + len}
196-
end
197-
198-
defp payload_len(data, len), do: {data, len}
199234
end

0 commit comments

Comments
 (0)