mirror of
https://git.numenor-labs.us/dsfx.git
synced 2025-04-29 08:10:34 +00:00
47 lines
887 B
Go
47 lines
887 B
Go
package network
|
|
|
|
import (
|
|
"context"
|
|
"crypto/ecdsa"
|
|
"net"
|
|
|
|
"koti.casa/numenor-labs/dsfx/pkg/handshake"
|
|
"koti.casa/numenor-labs/dsfx/pkg/logging"
|
|
)
|
|
|
|
// Dial ...
|
|
func Dial(
|
|
ctx context.Context,
|
|
identity *ecdsa.PrivateKey,
|
|
laddr *Addr,
|
|
raddr *Addr,
|
|
) (*Conn, error) {
|
|
conn, err := net.DialTCP("tcp", laddr.TCPAddr(), raddr.TCPAddr())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sessionKey, err := handshake.Handshake(ctx, conn, identity, raddr.PublicKey())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return NewConn(conn, sessionKey, laddr.PublicKey(), raddr.PublicKey()), nil
|
|
}
|
|
|
|
// Listen ...
|
|
func Listen(
|
|
ctx context.Context,
|
|
identity *ecdsa.PrivateKey,
|
|
laddr *Addr,
|
|
) (net.Listener, error) {
|
|
tcpListener, err := net.ListenTCP("tcp", laddr.TCPAddr())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
logger := logging.FromContext(ctx)
|
|
|
|
return &Listener{logger, tcpListener, identity}, nil
|
|
}
|