Files
sam3/datagram_test.go

185 lines
4.3 KiB
Go
Raw Permalink Normal View History

2015-10-15 17:21:11 -04:00
package sam3
import (
"fmt"
"testing"
"time"
2024-12-08 13:22:39 -05:00
sam3opts "github.com/go-i2p/sam3/opts"
2015-10-15 17:21:11 -04:00
)
func Test_DatagramServerClient(t *testing.T) {
if testing.Short() {
return
}
fmt.Println("Test_DatagramServerClient")
sam, err := NewSAM(yoursam)
if err != nil {
t.Fail()
return
}
defer sam.Close()
keys, err := sam.NewKeys()
if err != nil {
t.Fail()
return
}
2016-02-10 17:54:17 -05:00
// fmt.Println("\tServer: My address: " + keys.Addr().Base32())
2015-10-15 17:21:11 -04:00
fmt.Println("\tServer: Creating tunnel")
ds, err := sam.NewDatagramSession("DGserverTun", keys, []string{"inbound.length=0", "outbound.length=0", "inbound.lengthVariance=0", "outbound.lengthVariance=0", "inbound.quantity=1", "outbound.quantity=1"}, 0)
if err != nil {
fmt.Println("Server: Failed to create tunnel: " + err.Error())
t.Fail()
return
}
c, w := make(chan bool), make(chan bool)
2016-02-10 17:54:17 -05:00
go func(c, w chan (bool)) {
2015-10-15 17:21:11 -04:00
sam2, err := NewSAM(yoursam)
if err != nil {
c <- false
return
}
defer sam2.Close()
keys, err := sam2.NewKeys()
if err != nil {
c <- false
return
}
fmt.Println("\tClient: Creating tunnel")
ds2, err := sam2.NewDatagramSession("DGclientTun", keys, []string{"inbound.length=0", "outbound.length=0", "inbound.lengthVariance=0", "outbound.lengthVariance=0", "inbound.quantity=1", "outbound.quantity=1"}, 0)
if err != nil {
c <- false
return
}
defer ds2.Close()
2016-02-10 17:54:17 -05:00
// fmt.Println("\tClient: Servers address: " + ds.LocalAddr().Base32())
// fmt.Println("\tClient: Clients address: " + ds2.LocalAddr().Base32())
2015-10-15 17:21:11 -04:00
fmt.Println("\tClient: Tries to send datagram to server")
for {
select {
2016-02-10 17:54:17 -05:00
default:
_, err = ds2.WriteTo([]byte("Hello datagram-world! <3 <3 <3 <3 <3 <3"), ds.LocalAddr())
if err != nil {
fmt.Println("\tClient: Failed to send datagram: " + err.Error())
c <- false
2015-10-15 17:21:11 -04:00
return
2016-02-10 17:54:17 -05:00
}
time.Sleep(5 * time.Second)
case <-w:
fmt.Println("\tClient: Sent datagram, quitting.")
return
2015-10-15 17:21:11 -04:00
}
}
c <- true
}(c, w)
buf := make([]byte, 512)
fmt.Println("\tServer: ReadFrom() waiting...")
n, _, err := ds.ReadFrom(buf)
w <- true
if err != nil {
fmt.Println("\tServer: Failed to ReadFrom(): " + err.Error())
t.Fail()
return
}
fmt.Println("\tServer: Received datagram: " + string(buf[:n]))
2016-02-10 17:54:17 -05:00
// fmt.Println("\tServer: Senders address was: " + saddr.Base32())
2015-10-15 17:21:11 -04:00
}
func ExampleDatagramSession() {
// Creates a new DatagramSession, which behaves just like a net.PacketConn.
2016-02-10 17:54:17 -05:00
2015-10-15 17:21:11 -04:00
const samBridge = "127.0.0.1:7656"
2016-02-10 17:54:17 -05:00
2015-10-15 17:21:11 -04:00
sam, err := NewSAM(samBridge)
if err != nil {
fmt.Println(err.Error())
return
}
keys, err := sam.NewKeys()
if err != nil {
fmt.Println(err.Error())
return
}
myself := keys.Addr()
// See the example Option_* variables.
2024-12-08 13:22:39 -05:00
dg, err := sam.NewDatagramSession("DGTUN", keys, sam3opts.Options_Small, 0)
2015-10-15 17:21:11 -04:00
if err != nil {
fmt.Println(err.Error())
return
}
someone, err := sam.Lookup("zzz.i2p")
if err != nil {
fmt.Println(err.Error())
return
}
dg.WriteTo([]byte("Hello stranger!"), someone)
dg.WriteTo([]byte("Hello myself!"), myself)
buf := make([]byte, 31*1024)
n, _, err := dg.ReadFrom(buf)
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println("Got message: '" + string(buf[:n]) + "'")
2015-10-15 17:21:11 -04:00
fmt.Println("Got message: " + string(buf[:n]))
return
// Output:
// Got message: Hello myself!
2015-10-15 17:21:11 -04:00
}
2019-07-30 14:50:14 -04:00
func ExampleMiniDatagramSession() {
// Creates a new DatagramSession, which behaves just like a net.PacketConn.
const samBridge = "127.0.0.1:7656"
sam, err := NewSAM(samBridge)
if err != nil {
fmt.Println(err.Error())
return
}
keys, err := sam.NewKeys()
if err != nil {
fmt.Println(err.Error())
return
}
myself := keys.Addr()
// See the example Option_* variables.
2024-12-08 13:22:39 -05:00
dg, err := sam.NewDatagramSession("MINIDGTUN", keys, sam3opts.Options_Small, 0)
2019-07-30 14:50:14 -04:00
if err != nil {
fmt.Println(err.Error())
return
}
someone, err := sam.Lookup("zzz.i2p")
if err != nil {
fmt.Println(err.Error())
return
}
err = dg.SetWriteBuffer(14 * 1024)
if err != nil {
fmt.Println(err.Error())
return
}
dg.WriteTo([]byte("Hello stranger!"), someone)
dg.WriteTo([]byte("Hello myself!"), myself)
buf := make([]byte, 31*1024)
n, _, err := dg.ReadFrom(buf)
if err != nil {
fmt.Println(err.Error())
return
}
log.Println("Got message: '" + string(buf[:n]) + "'")
fmt.Println("Got message: " + string(buf[:n]))
return
// Output:
// Got message: Hello myself!
2019-07-30 14:50:14 -04:00
}