Files
go-i2p/lib/transport/noise/session.go

99 lines
2.5 KiB
Go
Raw Normal View History

package noise
import (
"bytes"
"fmt"
2022-07-18 12:32:16 -04:00
"net"
"sync"
"time"
2022-07-18 12:32:16 -04:00
cb "github.com/emirpasic/gods/queues/circularbuffer"
"github.com/flynn/noise"
2022-07-18 12:32:16 -04:00
"github.com/go-i2p/go-i2p/lib/common/router_info"
"github.com/go-i2p/go-i2p/lib/transport"
)
type NoiseSession struct {
2022-07-18 12:32:16 -04:00
router_info.RouterInfo
*noise.CipherState
sync.Mutex
*sync.Cond
*NoiseTransport // The parent transport, which "Dialed" the connection to the peer whith whom we established the session
RecvQueue *cb.Queue
SendQueue *cb.Queue
SendKey noise.DHKey
RecvKey noise.DHKey
HandKey noise.DHKey
VerifyCallback VerifyCallbackFunc
handshakeBuffer bytes.Buffer
activeCall int32
handshakeComplete bool
Conn net.Conn
}
// RemoteAddr implements net.Conn
func (noise_session *NoiseSession) RemoteAddr() net.Addr {
return &noise_session.RouterInfo
}
// SetDeadline implements net.Conn
func (noise_session *NoiseSession) SetDeadline(t time.Time) error {
return noise_session.Conn.SetDeadline(t)
}
// SetReadDeadline implements net.Conn
func (noise_session *NoiseSession) SetReadDeadline(t time.Time) error {
return noise_session.Conn.SetReadDeadline(t)
}
// SetWriteDeadline implements net.Conn
func (noise_session *NoiseSession) SetWriteDeadline(t time.Time) error {
return noise_session.Conn.SetWriteDeadline(t)
}
2024-10-03 22:36:23 -04:00
var exampleNoiseSession transport.TransportSession = &NoiseSession{}
var ExampleNoiseSession net.Conn = exampleNoiseSession.(*NoiseSession)
func (s *NoiseSession) LocalAddr() net.Addr {
return s.Conn.LocalAddr()
}
func (s *NoiseSession) Close() error {
s.SendQueue.Clear()
s.RecvQueue.Clear()
return nil
}
func (c *NoiseSession) processCallback(publicKey []byte, payload []byte) error {
if c.VerifyCallback == nil {
return nil
}
err := c.VerifyCallback(publicKey, payload)
return err
}
2022-11-13 23:46:57 -05:00
// newBlock allocates a new packet, from hc's free list if possible.
func newBlock() []byte {
return make([]byte, MaxPayloadSize)
2022-11-13 23:46:57 -05:00
}
type VerifyCallbackFunc func(publicKey []byte, data []byte) error
func NewNoiseTransportSession(ri router_info.RouterInfo) (transport.TransportSession, error) {
2024-10-03 22:36:23 -04:00
//socket, err := DialNoise("noise", ri)
for _, addr := range ri.RouterAddresses() {
socket, err := net.Dial("tcp", string(addr.Bytes()))
if err != nil {
return nil, err
}
return &NoiseSession{
SendQueue: cb.New(1024),
RecvQueue: cb.New(1024),
RouterInfo: ri,
Conn: socket,
}, nil
}
return nil, fmt.Errorf("Transport constructor error")
}