vendor: Revert to github.com/jackpal/gateway instead of fork

It now includes all the fixes

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3246
This commit is contained in:
Jakob Borg
2016-06-02 20:40:30 +00:00
committed by Audrius Butkevicius
parent 8709fec517
commit 6a67921e40
13 changed files with 221 additions and 163 deletions

27
vendor/github.com/jackpal/gateway/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,27 @@
// Copyright (c) 2010 Jack Palevich. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

129
vendor/github.com/jackpal/gateway/gateway_common.go generated vendored Normal file
View File

@@ -0,0 +1,129 @@
package gateway
import (
"errors"
"net"
"strings"
)
var errNoGateway = errors.New("no gateway found")
func parseWindowsRoutePrint(output []byte) (net.IP, error) {
// Windows route output format is always like this:
// ===========================================================================
// Active Routes:
// Network Destination Netmask Gateway Interface Metric
// 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.100 20
// ===========================================================================
// I'm trying to pick the active route,
// then jump 2 lines and pick the third IP
// Not using regex because output is quite standard from Windows XP to 8 (NEEDS TESTING)
lines := strings.Split(string(output), "\n")
for idx, line := range lines {
if strings.HasPrefix(line, "Active Routes:") {
if len(lines) <= idx+2 {
return nil, errNoGateway
}
fields := strings.Fields(lines[idx+2])
if len(fields) < 3 {
return nil, errNoGateway
}
ip := net.ParseIP(fields[2])
if ip != nil {
return ip, nil
}
}
}
return nil, errNoGateway
}
func parseLinuxIPRoute(output []byte) (net.IP, error) {
// Linux '/usr/bin/ip route show' format looks like this:
// default via 192.168.178.1 dev wlp3s0 metric 303
// 192.168.178.0/24 dev wlp3s0 proto kernel scope link src 192.168.178.76 metric 303
lines := strings.Split(string(output), "\n")
for _, line := range lines {
fields := strings.Fields(line)
if len(fields) >= 3 && fields[0] == "default" {
ip := net.ParseIP(fields[2])
if ip != nil {
return ip, nil
}
}
}
return nil, errNoGateway
}
func parseLinuxRoute(output []byte) (net.IP, error) {
// Linux route out format is always like this:
// Kernel IP routing table
// Destination Gateway Genmask Flags Metric Ref Use Iface
// 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
lines := strings.Split(string(output), "\n")
for _, line := range lines {
fields := strings.Fields(line)
if len(fields) >= 2 && fields[0] == "0.0.0.0" {
ip := net.ParseIP(fields[1])
if ip != nil {
return ip, nil
}
}
}
return nil, errNoGateway
}
func parseDarwinRouteGet(output []byte) (net.IP, error) {
// Darwin route out format is always like this:
// route to: default
// destination: default
// mask: default
// gateway: 192.168.1.1
lines := strings.Split(string(output), "\n")
for _, line := range lines {
fields := strings.Fields(line)
if len(fields) >= 2 && fields[0] == "gateway:" {
ip := net.ParseIP(fields[1])
if ip != nil {
return ip, nil
}
}
}
return nil, errNoGateway
}
func parseBSDSolarisNetstat(output []byte) (net.IP, error) {
// netstat -rn produces the following on FreeBSD:
// Routing tables
//
// Internet:
// Destination Gateway Flags Netif Expire
// default 10.88.88.2 UGS em0
// 10.88.88.0/24 link#1 U em0
// 10.88.88.148 link#1 UHS lo0
// 127.0.0.1 link#2 UH lo0
//
// Internet6:
// Destination Gateway Flags Netif Expire
// ::/96 ::1 UGRS lo0
// ::1 link#2 UH lo0
// ::ffff:0.0.0.0/96 ::1 UGRS lo0
// fe80::/10 ::1 UGRS lo0
// ...
outputLines := strings.Split(string(output), "\n")
for _, line := range outputLines {
fields := strings.Fields(line)
if len(fields) >= 2 && fields[0] == "default" {
ip := net.ParseIP(fields[1])
if ip != nil {
return ip, nil
}
}
}
return nil, errNoGateway
}

16
vendor/github.com/jackpal/gateway/gateway_darwin.go generated vendored Normal file
View File

@@ -0,0 +1,16 @@
package gateway
import (
"net"
"os/exec"
)
func DiscoverGateway() (net.IP, error) {
routeCmd := exec.Command("/sbin/route", "-n", "get", "0.0.0.0")
output, err := routeCmd.CombinedOutput()
if err != nil {
return nil, err
}
return parseDarwinRouteGet(output)
}

16
vendor/github.com/jackpal/gateway/gateway_freebsd.go generated vendored Normal file
View File

@@ -0,0 +1,16 @@
package gateway
import (
"net"
"os/exec"
)
func DiscoverGateway() (ip net.IP, err error) {
routeCmd := exec.Command("netstat", "-rn")
output, err := routeCmd.CombinedOutput()
if err != nil {
return nil, err
}
return parseBSDSolarisNetstat(output)
}

34
vendor/github.com/jackpal/gateway/gateway_linux.go generated vendored Normal file
View File

@@ -0,0 +1,34 @@
package gateway
import (
"net"
"os/exec"
)
func DiscoverGateway() (ip net.IP, err error) {
ip, err = discoverGatewayUsingRoute()
if err != nil {
ip, err = discoverGatewayUsingIp()
}
return
}
func discoverGatewayUsingIp() (net.IP, error) {
routeCmd := exec.Command("/usr/bin/ip", "route", "show")
output, err := routeCmd.CombinedOutput()
if err != nil {
return nil, err
}
return parseLinuxIPRoute(output)
}
func discoverGatewayUsingRoute() (net.IP, error) {
routeCmd := exec.Command("/usr/bin/route", "-n")
output, err := routeCmd.CombinedOutput()
if err != nil {
return nil, err
}
return parseLinuxRoute(output)
}

16
vendor/github.com/jackpal/gateway/gateway_solaris.go generated vendored Normal file
View File

@@ -0,0 +1,16 @@
package gateway
import (
"net"
"os/exec"
)
func DiscoverGateway() (ip net.IP, err error) {
routeCmd := exec.Command("netstat", "-rn")
output, err := routeCmd.CombinedOutput()
if err != nil {
return nil, err
}
return parseBSDSolarisNetstat(output)
}

View File

@@ -0,0 +1,14 @@
// +build !darwin,!linux,!windows,!solaris,!freebsd
package gateway
import (
"fmt"
"net"
"runtime"
)
func DiscoverGateway() (ip net.IP, err error) {
err = fmt.Errorf("DiscoverGateway not implemented for OS %s", runtime.GOOS)
return
}

16
vendor/github.com/jackpal/gateway/gateway_windows.go generated vendored Normal file
View File

@@ -0,0 +1,16 @@
package gateway
import (
"net"
"os/exec"
)
func DiscoverGateway() (ip net.IP, err error) {
routeCmd := exec.Command("route", "print", "0.0.0.0")
output, err := routeCmd.CombinedOutput()
if err != nil {
return nil, err
}
return parseWindowsRoutePrint(output)
}