Software / code / prosody
Comparison
util/ip.lua @ 8434:ec8f37baffaa
util.ip: Simplify creation of IPv6-mapped IPv4 addresses
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 01 Dec 2017 04:33:49 +0100 |
| parent | 8433:ca7f8e60410a |
| child | 8435:47195f035d2f |
comparison
equal
deleted
inserted
replaced
| 8433:ca7f8e60410a | 8434:ec8f37baffaa |
|---|---|
| 153 else | 153 else |
| 154 return 40; | 154 return 40; |
| 155 end | 155 end |
| 156 end | 156 end |
| 157 | 157 |
| 158 local function toV4mapped(ip) | |
| 159 local fields = {}; | |
| 160 local ret = "::ffff:"; | |
| 161 ip:gsub("([^.]*).?", function (c) fields[#fields + 1] = tonumber(c) end); | |
| 162 ret = ret .. ("%02x"):format(fields[1]); | |
| 163 ret = ret .. ("%02x"):format(fields[2]); | |
| 164 ret = ret .. ":" | |
| 165 ret = ret .. ("%02x"):format(fields[3]); | |
| 166 ret = ret .. ("%02x"):format(fields[4]); | |
| 167 return new_ip(ret, "IPv6"); | |
| 168 end | |
| 169 | |
| 170 function ip_methods:toV4mapped() | 158 function ip_methods:toV4mapped() |
| 171 if self.proto ~= "IPv4" then return nil, "No IPv4 address" end | 159 if self.proto ~= "IPv4" then return nil, "No IPv4 address" end |
| 172 local value = toV4mapped(self.addr); | 160 local value = new_ip("::ffff:" .. self.normal); |
| 173 self.toV4mapped = value; | |
| 174 return value; | 161 return value; |
| 175 end | 162 end |
| 176 | 163 |
| 177 function ip_methods:label() | 164 function ip_methods:label() |
| 178 local value; | 165 local value; |