SetupEndpoints issue in a special situation
Opened this issue · 1 comments
0x5e commented
Hi @brutella ,
Thanks for this great project at first :)
I'm testing this project running on my MBP and found a small issue:
When iPhone connects the usb cable with MBP, the camera live stream usually not working in Home App.
And I found when usb cable connected, iPhone sometimes request hap server directly from the wired network, not via wifi.
Lines 89 to 98 in 959d664
The iface
value is en14
instead of en0
. then the server failed to get ip of en14
because it only have a ipv6 address.
Instead of get localIP
from r.Context().Value(http.LocalAddrContextKey)
, my solution is like this:
- Obtain
remoteIP
fromreq.ControllerAddr.IPAddr
- Enumerate
net.Interfaces()
, find the proper subnet that containsremoteIP
, return the ip of this interface.
func FindLocalIPForRemoteIP(remoteIP string) string {
ifaces, _ := net.Interfaces()
for _, iface := range ifaces {
addrs, _ := iface.Addrs()
for _, addr := range addrs {
ip, subnet, _ := net.ParseCIDR(addr.String())
if subnet.Contains(net.ParseIP(remoteIP)) {
return ip.String()
}
}
}
return ""
}
localIP := util.FindLocalIPForRemoteIP(req.ControllerAddr.IPAddr)
if localIP == "" {
log.Debug.Println("Failed to get localIP")
return
}
brutella commented
Sounds good to me. Happy to accept a pull request. 😉