diff options
Diffstat (limited to 'src/gnunet/transport/endpoint.go')
-rw-r--r-- | src/gnunet/transport/endpoint.go | 31 |
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. |
49 | type Endpoint interface { | 49 | type 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 |
86 | type PaketEndpoint struct { | 86 | type 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. |
96 | func (ep *PaketEndpoint) Run(ctx context.Context, hdlr chan *TransportMessage) (err error) { | 97 | func (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 |
147 | func (ep *PaketEndpoint) read() (tm *TransportMessage, err error) { | 148 | func (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 |
179 | func (ep *PaketEndpoint) Send(ctx context.Context, addr net.Addr, msg *TransportMessage) (err error) { | 180 | func (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. |
287 | func (ep *StreamEndpoint) Run(ctx context.Context, hdlr chan *TransportMessage) (err error) { | 288 | func (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 |
334 | func (ep *StreamEndpoint) read(ctx context.Context, conn net.Conn) (tm *TransportMessage, err error) { | 335 | func (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 |
362 | func (ep *StreamEndpoint) Send(ctx context.Context, addr net.Addr, msg *TransportMessage) error { | 363 | func (ep *StreamEndpoint) Send(ctx context.Context, addr net.Addr, msg *Message) error { |
363 | return nil | 364 | return nil |
364 | } | 365 | } |
365 | 366 | ||