dsfx/pkg/network/network.go

47 lines
890 B
Go
Raw Normal View History

2025-03-09 15:52:33 -04:00
package network
2025-03-08 15:07:27 -05:00
import (
"context"
2025-03-10 10:29:54 -04:00
"crypto/ed25519"
2025-03-08 15:07:27 -05:00
"net"
2025-03-09 15:52:33 -04:00
"koti.casa/numenor-labs/dsfx/pkg/handshake"
"koti.casa/numenor-labs/dsfx/pkg/logging"
2025-03-08 15:07:27 -05:00
)
// Dial ...
func Dial(
ctx context.Context,
2025-03-10 10:29:54 -04:00
identity ed25519.PrivateKey,
2025-03-09 12:33:27 -04:00
laddr *Addr,
raddr *Addr,
2025-03-08 15:07:27 -05:00
) (*Conn, error) {
2025-03-09 12:33:27 -04:00
conn, err := net.DialTCP("tcp", laddr.TCPAddr(), raddr.TCPAddr())
2025-03-08 15:07:27 -05:00
if err != nil {
return nil, err
}
2025-03-09 17:09:21 -04:00
sessionKey, err := handshake.Initiate(ctx, conn, identity, raddr.PublicKey())
2025-03-08 15:07:27 -05:00
if err != nil {
return nil, err
}
2025-03-09 12:33:27 -04:00
return NewConn(conn, sessionKey, laddr.PublicKey(), raddr.PublicKey()), nil
2025-03-08 15:07:27 -05:00
}
// Listen ...
func Listen(
ctx context.Context,
2025-03-10 10:29:54 -04:00
identity ed25519.PrivateKey,
2025-03-09 12:33:27 -04:00
laddr *Addr,
2025-03-08 15:07:27 -05:00
) (net.Listener, error) {
2025-03-09 12:33:27 -04:00
tcpListener, err := net.ListenTCP("tcp", laddr.TCPAddr())
2025-03-08 15:07:27 -05:00
if err != nil {
return nil, err
}
2025-03-09 15:52:33 -04:00
logger := logging.FromContext(ctx)
2025-03-08 15:07:27 -05:00
return &Listener{logger, tcpListener, identity}, nil
}