2025-03-09 15:52:33 -04:00
|
|
|
package network
|
2025-03-08 15:07:27 -05:00
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"crypto/ecdsa"
|
|
|
|
"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-09 12:33:27 -04:00
|
|
|
identity *ecdsa.PrivateKey,
|
|
|
|
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 15:52:33 -04:00
|
|
|
sessionKey, err := handshake.Handshake(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,
|
|
|
|
identity *ecdsa.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
|
|
|
|
}
|