vendor: Mega update all dependencies
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4080
This commit is contained in:
66
vendor/github.com/ccding/go-stun/README.md
generated
vendored
66
vendor/github.com/ccding/go-stun/README.md
generated
vendored
@@ -1,66 +0,0 @@
|
||||
go-stun
|
||||
=======
|
||||
|
||||
[]
|
||||
(https://travis-ci.org/ccding/go-stun)
|
||||
[]
|
||||
(https://opensource.org/licenses/Apache-2.0)
|
||||
[]
|
||||
(http://godoc.org/github.com/ccding/go-stun/stun)
|
||||
[]
|
||||
(https://goreportcard.com/report/github.com/ccding/go-stun)
|
||||
|
||||
go-stun is a STUN (RFC 3489, 5389) client implementation in golang
|
||||
(a.k.a. UDP hole punching).
|
||||
|
||||
[RFC 3489](https://tools.ietf.org/html/rfc3489):
|
||||
STUN - Simple Traversal of User Datagram Protocol (UDP)
|
||||
Through Network Address Translators (NATs)
|
||||
|
||||
[RFC 5389](https://tools.ietf.org/html/rfc5389):
|
||||
Session Traversal Utilities for NAT (STUN)
|
||||
|
||||
### Use the Command Line Tool
|
||||
|
||||
Simply run these commands (if you have installed golang and set `$GOPATH`)
|
||||
```
|
||||
go get github.com/ccding/go-stun
|
||||
go-stun
|
||||
```
|
||||
or clone this repo and run these commands
|
||||
```
|
||||
go build
|
||||
./go-stun
|
||||
```
|
||||
You will get the output like
|
||||
```
|
||||
NAT Type: Full cone NAT
|
||||
External IP Family: 1
|
||||
External IP: 166.111.4.100
|
||||
External Port: 23009
|
||||
```
|
||||
You can use `-s` flag to use another STUN server, and use `-v` to work on
|
||||
verbose mode.
|
||||
```bash
|
||||
> ./go-stun --help
|
||||
Usage of ./go-stun:
|
||||
-s string
|
||||
server address (default "stun1.l.google.com:19302")
|
||||
-v verbose mode
|
||||
```
|
||||
|
||||
### Use the Library
|
||||
|
||||
The library `github.com/ccding/go-stun/stun` is extremely easy to use -- just
|
||||
one line of code.
|
||||
|
||||
```go
|
||||
import "github.com/ccding/go-stun/stun"
|
||||
|
||||
func main() {
|
||||
nat, host, err := stun.NewClient().Discover()
|
||||
}
|
||||
```
|
||||
|
||||
More details please go to `main.go` and [GoDoc]
|
||||
(http://godoc.org/github.com/ccding/go-stun/stun)
|
||||
56
vendor/github.com/ccding/go-stun/main.go
generated
vendored
56
vendor/github.com/ccding/go-stun/main.go
generated
vendored
@@ -1,56 +0,0 @@
|
||||
// Copyright 2013, Cong Ding. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
// author: Cong Ding <dinggnu@gmail.com>
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
"github.com/ccding/go-stun/stun"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var serverAddr = flag.String("s", stun.DefaultServerAddr, "STUN server address")
|
||||
var v = flag.Bool("v", false, "verbose mode")
|
||||
var vv = flag.Bool("vv", false, "double verbose mode (includes -v)")
|
||||
var vvv = flag.Bool("vvv", false, "triple verbose mode (includes -v and -vv)")
|
||||
flag.Parse()
|
||||
|
||||
// Creates a STUN client. NewClientWithConnection can also be used if
|
||||
// you want to handle the UDP listener by yourself.
|
||||
client := stun.NewClient()
|
||||
// The default addr (stun.DefaultServerAddr) will be used unless we
|
||||
// call SetServerAddr.
|
||||
client.SetServerAddr(*serverAddr)
|
||||
// Non verbose mode will be used by default unless we call
|
||||
// SetVerbose(true) or SetVVerbose(true).
|
||||
client.SetVerbose(*v || *vv || *vvv)
|
||||
client.SetVVerbose(*vv || *vvv)
|
||||
// Discover the NAT and return the result.
|
||||
nat, host, err := client.Discover()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("NAT Type:", nat)
|
||||
if host != nil {
|
||||
fmt.Println("External IP Family:", host.Family())
|
||||
fmt.Println("External IP:", host.IP())
|
||||
fmt.Println("External Port:", host.Port())
|
||||
}
|
||||
}
|
||||
5
vendor/github.com/ccding/go-stun/stun/discover.go
generated
vendored
5
vendor/github.com/ccding/go-stun/stun/discover.go
generated
vendored
@@ -88,6 +88,11 @@ func (c *Client) discover(conn net.PacketConn, addr *net.UDPAddr) (NATType, *Hos
|
||||
resp.serverAddr.Port() != uint16(addr.Port) {
|
||||
return NATError, mappedAddr, errors.New("Server error: response IP/port")
|
||||
}
|
||||
// if changedAddr is not available, use otherAddr as changedAddr,
|
||||
// which is updated in RFC 5780
|
||||
if changedAddr == nil {
|
||||
changedAddr = resp.otherAddr
|
||||
}
|
||||
// changedAddr shall not be nil
|
||||
if changedAddr == nil {
|
||||
return NATError, mappedAddr, errors.New("Server error: no changed address.")
|
||||
|
||||
4
vendor/github.com/ccding/go-stun/stun/packet.go
generated
vendored
4
vendor/github.com/ccding/go-stun/stun/packet.go
generated
vendored
@@ -98,6 +98,10 @@ func (v *packet) getChangedAddr() *Host {
|
||||
return v.getRawAddr(attributeChangedAddress)
|
||||
}
|
||||
|
||||
func (v *packet) getOtherAddr() *Host {
|
||||
return v.getRawAddr(attributeOtherAddress)
|
||||
}
|
||||
|
||||
func (v *packet) getRawAddr(attribute uint16) *Host {
|
||||
for _, a := range v.attributes {
|
||||
if a.types == attribute {
|
||||
|
||||
61
vendor/github.com/ccding/go-stun/stun/packet_test.go
generated
vendored
61
vendor/github.com/ccding/go-stun/stun/packet_test.go
generated
vendored
@@ -1,61 +0,0 @@
|
||||
// Copyright 2016, Cong Ding. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
// Author: Cong Ding <dinggnu@gmail.com>
|
||||
|
||||
package stun
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNewPacketFromBytes(t *testing.T) {
|
||||
b := make([]byte, 23)
|
||||
_, err := newPacketFromBytes(b)
|
||||
if err == nil {
|
||||
t.Errorf("newPacketFromBytes error")
|
||||
}
|
||||
b = make([]byte, 24)
|
||||
_, err = newPacketFromBytes(b)
|
||||
if err != nil {
|
||||
t.Errorf("newPacketFromBytes error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewPacket(t *testing.T) {
|
||||
_, err := newPacket()
|
||||
if err != nil {
|
||||
t.Errorf("newPacket error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPacketAll(t *testing.T) {
|
||||
p, err := newPacket()
|
||||
if err != nil {
|
||||
t.Errorf("newPacket error")
|
||||
}
|
||||
p.addAttribute(*newChangeReqAttribute(true, true))
|
||||
p.addAttribute(*newSoftwareAttribute("aaa"))
|
||||
p.addAttribute(*newFingerprintAttribute(p))
|
||||
pkt, err := newPacketFromBytes(p.bytes())
|
||||
if err != nil {
|
||||
t.Errorf("newPacketFromBytes error")
|
||||
}
|
||||
if pkt.types != 0 {
|
||||
t.Errorf("newPacketFromBytes error")
|
||||
}
|
||||
if pkt.length < 24 {
|
||||
t.Errorf("newPacketFromBytes error")
|
||||
}
|
||||
}
|
||||
12
vendor/github.com/ccding/go-stun/stun/response.go
generated
vendored
12
vendor/github.com/ccding/go-stun/stun/response.go
generated
vendored
@@ -26,11 +26,12 @@ type response struct {
|
||||
serverAddr *Host // the address received packet
|
||||
changedAddr *Host // parsed from packet
|
||||
mappedAddr *Host // parsed from packet, external addr of client NAT
|
||||
otherAddr *Host // parsed from packet, to replace changedAddr in RFC 5780
|
||||
identical bool // if mappedAddr is in local addr list
|
||||
}
|
||||
|
||||
func newResponse(pkt *packet, conn net.PacketConn) *response {
|
||||
resp := &response{pkt, nil, nil, nil, false}
|
||||
resp := &response{pkt, nil, nil, nil, nil, false}
|
||||
if pkt == nil {
|
||||
return resp
|
||||
}
|
||||
@@ -52,6 +53,12 @@ func newResponse(pkt *packet, conn net.PacketConn) *response {
|
||||
changedAddrHost := newHostFromStr(changedAddr.String())
|
||||
resp.changedAddr = changedAddrHost
|
||||
}
|
||||
// compute otherAddr
|
||||
otherAddr := pkt.getOtherAddr()
|
||||
if otherAddr != nil {
|
||||
otherAddrHost := newHostFromStr(otherAddr.String())
|
||||
resp.otherAddr = otherAddrHost
|
||||
}
|
||||
|
||||
return resp
|
||||
}
|
||||
@@ -61,10 +68,11 @@ func (r *response) String() string {
|
||||
if r == nil {
|
||||
return "Nil"
|
||||
}
|
||||
return fmt.Sprintf("{packet nil: %v, local: %v, remote: %v, changed: %v, identical: %v}",
|
||||
return fmt.Sprintf("{packet nil: %v, local: %v, remote: %v, changed: %v, other: %v, identical: %v}",
|
||||
r.packet == nil,
|
||||
r.mappedAddr,
|
||||
r.serverAddr,
|
||||
r.changedAddr,
|
||||
r.otherAddr,
|
||||
r.identical)
|
||||
}
|
||||
|
||||
69
vendor/github.com/ccding/go-stun/stun/utils_test.go
generated
vendored
69
vendor/github.com/ccding/go-stun/stun/utils_test.go
generated
vendored
@@ -1,69 +0,0 @@
|
||||
// Copyright 2015, Cong Ding. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
// Author: Cong Ding <dinggnu@gmail.com>
|
||||
|
||||
package stun
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestPadding(t *testing.T) {
|
||||
b := []byte{1, 2}
|
||||
expected := []byte{1, 2, 0, 0}
|
||||
result := padding(b)
|
||||
if len(result) != len(expected) {
|
||||
t.Errorf("Padding error: result size wrong.\n")
|
||||
}
|
||||
for i := range expected {
|
||||
if expected[i] != result[i] {
|
||||
t.Errorf("Padding error: data wrong in bit %d.\n", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestAlign(t *testing.T) {
|
||||
d := make(map[uint16]uint16)
|
||||
d[1] = 4
|
||||
d[4] = 4
|
||||
d[5] = 8
|
||||
d[6] = 8
|
||||
d[7] = 8
|
||||
d[8] = 8
|
||||
d[65528] = 65528
|
||||
d[65529] = 65532
|
||||
d[65531] = 65532
|
||||
d[65532] = 65532
|
||||
for k, v := range d {
|
||||
if align(k) != v {
|
||||
t.Errorf("Align error: expected %d, get %d", align(k), v)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsLocalAddress(t *testing.T) {
|
||||
if !isLocalAddress(":1234", "127.0.0.1:8888") {
|
||||
t.Errorf("isLocal error")
|
||||
}
|
||||
if !isLocalAddress("192.168.0.1:1234", "192.168.0.1:8888") {
|
||||
t.Errorf("isLocal error")
|
||||
}
|
||||
if !isLocalAddress("8.8.8.8:1234", "8.8.8.8:8888") {
|
||||
t.Errorf("isLocal error")
|
||||
}
|
||||
if isLocalAddress(":1234", "8.8.8.8:8888") {
|
||||
t.Errorf("isLocal error")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user