aboutsummaryrefslogtreecommitdiff
path: root/src/gnunet/transport/endpoint.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/gnunet/transport/endpoint.go')
-rw-r--r--src/gnunet/transport/endpoint.go31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/gnunet/transport/endpoint.go b/src/gnunet/transport/endpoint.go
index d98776a..a2f54d7 100644
--- a/src/gnunet/transport/endpoint.go
+++ b/src/gnunet/transport/endpoint.go
@@ -39,7 +39,7 @@ var (
39 ErrEndpExists = errors.New("endpoint exists") 39 ErrEndpExists = errors.New("endpoint exists")
40 ErrEndpNoAddress = errors.New("no address for endpoint") 40 ErrEndpNoAddress = errors.New("no address for endpoint")
41 ErrEndpNoConnection = errors.New("no connection on endpoint") 41 ErrEndpNoConnection = errors.New("no connection on endpoint")
42 ErrEndpMaybeSent = errors.New("message may have been sent - cant know") 42 ErrEndpMaybeSent = errors.New("message may have been sent - can't know")
43 ErrEndpWriteShort = errors.New("write too short") 43 ErrEndpWriteShort = errors.New("write too short")
44) 44)
45 45
@@ -48,10 +48,10 @@ var (
48// remote endpoints for TCP and UDP traffic. 48// remote endpoints for TCP and UDP traffic.
49type Endpoint interface { 49type Endpoint interface {
50 // Run the endpoint and send received messages to channel 50 // Run the endpoint and send received messages to channel
51 Run(context.Context, chan *TransportMessage) error 51 Run(context.Context, chan *Message) error
52 52
53 // Send message on endpoint 53 // Send message on endpoint
54 Send(context.Context, net.Addr, *TransportMessage) error 54 Send(context.Context, net.Addr, *Message) error
55 55
56 // Address returns the listening address for the endpoint 56 // Address returns the listening address for the endpoint
57 Address() net.Addr 57 Address() net.Addr
@@ -84,16 +84,17 @@ func NewEndpoint(addr net.Addr) (ep Endpoint, err error) {
84 84
85// PacketEndpoint for packet-oriented network protocols 85// PacketEndpoint for packet-oriented network protocols
86type PaketEndpoint struct { 86type PaketEndpoint struct {
87 sync.Mutex
88
87 id int // endpoint identifier 89 id int // endpoint identifier
88 netw string // network identifier ("udp", "udp4", "udp6", ...) 90 netw string // network identifier ("udp", "udp4", "udp6", ...)
89 addr net.Addr // endpoint address 91 addr net.Addr // endpoint address
90 conn net.PacketConn // packet connection 92 conn net.PacketConn // packet connection
91 buf []byte // buffer for read/write operations 93 buf []byte // buffer for read/write operations
92 mtx sync.Mutex // mutex for send operations
93} 94}
94 95
95// Run packet endpoint: send incoming messages to the handler. 96// Run packet endpoint: send incoming messages to the handler.
96func (ep *PaketEndpoint) Run(ctx context.Context, hdlr chan *TransportMessage) (err error) { 97func (ep *PaketEndpoint) Run(ctx context.Context, hdlr chan *Message) (err error) {
97 // create listener 98 // create listener
98 var lc net.ListenConfig 99 var lc net.ListenConfig
99 xproto := ep.addr.Network() 100 xproto := ep.addr.Network()
@@ -144,7 +145,7 @@ func (ep *PaketEndpoint) Run(ctx context.Context, hdlr chan *TransportMessage) (
144} 145}
145 146
146// Read a transport message from endpoint based on extended protocol 147// Read a transport message from endpoint based on extended protocol
147func (ep *PaketEndpoint) read() (tm *TransportMessage, err error) { 148func (ep *PaketEndpoint) read() (tm *Message, err error) {
148 // read next packet (assuming that it contains one complete message) 149 // read next packet (assuming that it contains one complete message)
149 var n int 150 var n int
150 if n, _, err = ep.conn.ReadFrom(ep.buf); err != nil { 151 if n, _, err = ep.conn.ReadFrom(ep.buf); err != nil {
@@ -167,7 +168,7 @@ func (ep *PaketEndpoint) read() (tm *TransportMessage, err error) {
167 panic(ErrEndpProtocolUnknown) 168 panic(ErrEndpProtocolUnknown)
168 } 169 }
169 // return transport message 170 // return transport message
170 return &TransportMessage{ 171 return &Message{
171 Peer: peer, 172 Peer: peer,
172 Msg: msg, 173 Msg: msg,
173 Resp: nil, 174 Resp: nil,
@@ -176,10 +177,10 @@ func (ep *PaketEndpoint) read() (tm *TransportMessage, err error) {
176} 177}
177 178
178// Send message to address from endpoint 179// Send message to address from endpoint
179func (ep *PaketEndpoint) Send(ctx context.Context, addr net.Addr, msg *TransportMessage) (err error) { 180func (ep *PaketEndpoint) Send(ctx context.Context, addr net.Addr, msg *Message) (err error) {
180 // only one sender at a time 181 // only one sender at a time
181 ep.mtx.Lock() 182 ep.Lock()
182 defer ep.mtx.Unlock() 183 defer ep.Unlock()
183 184
184 // check for valid connection 185 // check for valid connection
185 if ep.conn == nil { 186 if ep.conn == nil {
@@ -284,7 +285,7 @@ type StreamEndpoint struct {
284} 285}
285 286
286// Run packet endpoint: send incoming messages to the handler. 287// Run packet endpoint: send incoming messages to the handler.
287func (ep *StreamEndpoint) Run(ctx context.Context, hdlr chan *TransportMessage) (err error) { 288func (ep *StreamEndpoint) Run(ctx context.Context, hdlr chan *Message) (err error) {
288 // create listener 289 // create listener
289 var lc net.ListenConfig 290 var lc net.ListenConfig
290 xproto := ep.addr.Network() 291 xproto := ep.addr.Network()
@@ -331,7 +332,7 @@ func (ep *StreamEndpoint) Run(ctx context.Context, hdlr chan *TransportMessage)
331} 332}
332 333
333// Read a transport message from endpoint based on extended protocol 334// Read a transport message from endpoint based on extended protocol
334func (ep *StreamEndpoint) read(ctx context.Context, conn net.Conn) (tm *TransportMessage, err error) { 335func (ep *StreamEndpoint) read(ctx context.Context, conn net.Conn) (tm *Message, err error) {
335 // parse transport message based on extended protocol 336 // parse transport message based on extended protocol
336 var ( 337 var (
337 peer *util.PeerID 338 peer *util.PeerID
@@ -341,7 +342,7 @@ func (ep *StreamEndpoint) read(ctx context.Context, conn net.Conn) (tm *Transpor
341 case "ip+udp": 342 case "ip+udp":
342 // parse peer id 343 // parse peer id
343 peer = util.NewPeerID(nil) 344 peer = util.NewPeerID(nil)
344 if _, err = conn.Read(peer.Key); err != nil { 345 if _, err = conn.Read(peer.Data); err != nil {
345 return 346 return
346 } 347 }
347 // read next message from connection 348 // read next message from connection
@@ -352,14 +353,14 @@ func (ep *StreamEndpoint) read(ctx context.Context, conn net.Conn) (tm *Transpor
352 panic(ErrEndpProtocolUnknown) 353 panic(ErrEndpProtocolUnknown)
353 } 354 }
354 // return transport message 355 // return transport message
355 return &TransportMessage{ 356 return &Message{
356 Peer: peer, 357 Peer: peer,
357 Msg: msg, 358 Msg: msg,
358 }, nil 359 }, nil
359} 360}
360 361
361// Send message to address from endpoint 362// Send message to address from endpoint
362func (ep *StreamEndpoint) Send(ctx context.Context, addr net.Addr, msg *TransportMessage) error { 363func (ep *StreamEndpoint) Send(ctx context.Context, addr net.Addr, msg *Message) error {
363 return nil 364 return nil
364} 365}
365 366