mirror of
https://github.com/bjdgyc/anylink.git
synced 2025-08-08 19:22:42 +08:00
添加 github.com/pion/dtls 代码
This commit is contained in:
72
dtls-2.0.9/examples/listen/psk/main.go
Normal file
72
dtls-2.0.9/examples/listen/psk/main.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/pion/dtls/v2"
|
||||
"github.com/pion/dtls/v2/examples/util"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Prepare the IP to connect to
|
||||
addr := &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: 4444}
|
||||
|
||||
// Create parent context to cleanup handshaking connections on exit.
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
//
|
||||
// Everything below is the pion-DTLS API! Thanks for using it ❤️.
|
||||
//
|
||||
|
||||
// Prepare the configuration of the DTLS connection
|
||||
config := &dtls.Config{
|
||||
PSK: func(hint []byte) ([]byte, error) {
|
||||
fmt.Printf("Client's hint: %s \n", hint)
|
||||
return []byte{0xAB, 0xC1, 0x23}, nil
|
||||
},
|
||||
PSKIdentityHint: []byte("Pion DTLS Client"),
|
||||
CipherSuites: []dtls.CipherSuiteID{dtls.TLS_PSK_WITH_AES_128_CCM_8},
|
||||
ExtendedMasterSecret: dtls.RequireExtendedMasterSecret,
|
||||
// Create timeout context for accepted connection.
|
||||
ConnectContextMaker: func() (context.Context, func()) {
|
||||
return context.WithTimeout(ctx, 30*time.Second)
|
||||
},
|
||||
}
|
||||
|
||||
// Connect to a DTLS server
|
||||
listener, err := dtls.Listen("udp", addr, config)
|
||||
util.Check(err)
|
||||
defer func() {
|
||||
util.Check(listener.Close())
|
||||
}()
|
||||
|
||||
fmt.Println("Listening")
|
||||
|
||||
// Simulate a chat session
|
||||
hub := util.NewHub()
|
||||
|
||||
go func() {
|
||||
for {
|
||||
// Wait for a connection.
|
||||
conn, err := listener.Accept()
|
||||
util.Check(err)
|
||||
// defer conn.Close() // TODO: graceful shutdown
|
||||
|
||||
// `conn` is of type `net.Conn` but may be casted to `dtls.Conn`
|
||||
// using `dtlsConn := conn.(*dtls.Conn)` in order to to expose
|
||||
// functions like `ConnectionState` etc.
|
||||
|
||||
// Register the connection with the chat hub
|
||||
if err == nil {
|
||||
hub.Register(conn)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// Start chatting
|
||||
hub.Chat()
|
||||
}
|
73
dtls-2.0.9/examples/listen/selfsign/main.go
Normal file
73
dtls-2.0.9/examples/listen/selfsign/main.go
Normal file
@@ -0,0 +1,73 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/pion/dtls/v2"
|
||||
"github.com/pion/dtls/v2/examples/util"
|
||||
"github.com/pion/dtls/v2/pkg/crypto/selfsign"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Prepare the IP to connect to
|
||||
addr := &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: 4444}
|
||||
|
||||
// Generate a certificate and private key to secure the connection
|
||||
certificate, genErr := selfsign.GenerateSelfSigned()
|
||||
util.Check(genErr)
|
||||
|
||||
// Create parent context to cleanup handshaking connections on exit.
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
//
|
||||
// Everything below is the pion-DTLS API! Thanks for using it ❤️.
|
||||
//
|
||||
|
||||
// Prepare the configuration of the DTLS connection
|
||||
config := &dtls.Config{
|
||||
Certificates: []tls.Certificate{certificate},
|
||||
ExtendedMasterSecret: dtls.RequireExtendedMasterSecret,
|
||||
// Create timeout context for accepted connection.
|
||||
ConnectContextMaker: func() (context.Context, func()) {
|
||||
return context.WithTimeout(ctx, 30*time.Second)
|
||||
},
|
||||
}
|
||||
|
||||
// Connect to a DTLS server
|
||||
listener, err := dtls.Listen("udp", addr, config)
|
||||
util.Check(err)
|
||||
defer func() {
|
||||
util.Check(listener.Close())
|
||||
}()
|
||||
|
||||
fmt.Println("Listening")
|
||||
|
||||
// Simulate a chat session
|
||||
hub := util.NewHub()
|
||||
|
||||
go func() {
|
||||
for {
|
||||
// Wait for a connection.
|
||||
conn, err := listener.Accept()
|
||||
util.Check(err)
|
||||
// defer conn.Close() // TODO: graceful shutdown
|
||||
|
||||
// `conn` is of type `net.Conn` but may be casted to `dtls.Conn`
|
||||
// using `dtlsConn := conn.(*dtls.Conn)` in order to to expose
|
||||
// functions like `ConnectionState` etc.
|
||||
|
||||
// Register the connection with the chat hub
|
||||
if err == nil {
|
||||
hub.Register(conn)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// Start chatting
|
||||
hub.Chat()
|
||||
}
|
80
dtls-2.0.9/examples/listen/verify/main.go
Normal file
80
dtls-2.0.9/examples/listen/verify/main.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"crypto/x509"
|
||||
"fmt"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/pion/dtls/v2"
|
||||
"github.com/pion/dtls/v2/examples/util"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Prepare the IP to connect to
|
||||
addr := &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: 4444}
|
||||
|
||||
// Create parent context to cleanup handshaking connections on exit.
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
//
|
||||
// Everything below is the pion-DTLS API! Thanks for using it ❤️.
|
||||
//
|
||||
|
||||
certificate, err := util.LoadKeyAndCertificate("examples/certificates/server.pem",
|
||||
"examples/certificates/server.pub.pem")
|
||||
util.Check(err)
|
||||
|
||||
rootCertificate, err := util.LoadCertificate("examples/certificates/server.pub.pem")
|
||||
util.Check(err)
|
||||
certPool := x509.NewCertPool()
|
||||
cert, err := x509.ParseCertificate(rootCertificate.Certificate[0])
|
||||
util.Check(err)
|
||||
certPool.AddCert(cert)
|
||||
|
||||
// Prepare the configuration of the DTLS connection
|
||||
config := &dtls.Config{
|
||||
Certificates: []tls.Certificate{*certificate},
|
||||
ExtendedMasterSecret: dtls.RequireExtendedMasterSecret,
|
||||
ClientAuth: dtls.RequireAndVerifyClientCert,
|
||||
ClientCAs: certPool,
|
||||
// Create timeout context for accepted connection.
|
||||
ConnectContextMaker: func() (context.Context, func()) {
|
||||
return context.WithTimeout(ctx, 30*time.Second)
|
||||
},
|
||||
}
|
||||
|
||||
// Connect to a DTLS server
|
||||
listener, err := dtls.Listen("udp", addr, config)
|
||||
util.Check(err)
|
||||
defer func() {
|
||||
util.Check(listener.Close())
|
||||
}()
|
||||
|
||||
fmt.Println("Listening")
|
||||
|
||||
// Simulate a chat session
|
||||
hub := util.NewHub()
|
||||
|
||||
go func() {
|
||||
for {
|
||||
// Wait for a connection.
|
||||
conn, err := listener.Accept()
|
||||
util.Check(err)
|
||||
// defer conn.Close() // TODO: graceful shutdown
|
||||
|
||||
// `conn` is of type `net.Conn` but may be casted to `dtls.Conn`
|
||||
// using `dtlsConn := conn.(*dtls.Conn)` in order to to expose
|
||||
// functions like `ConnectionState` etc.
|
||||
|
||||
// Register the connection with the chat hub
|
||||
hub.Register(conn)
|
||||
}
|
||||
}()
|
||||
|
||||
// Start chatting
|
||||
hub.Chat()
|
||||
}
|
Reference in New Issue
Block a user