diff options
Diffstat (limited to 'src/gnunet/message/msg_transport.go')
-rw-r--r-- | src/gnunet/message/msg_transport.go | 114 |
1 files changed, 26 insertions, 88 deletions
diff --git a/src/gnunet/message/msg_transport.go b/src/gnunet/message/msg_transport.go index fca651f..410e34c 100644 --- a/src/gnunet/message/msg_transport.go +++ b/src/gnunet/message/msg_transport.go | |||
@@ -37,9 +37,8 @@ import ( | |||
37 | 37 | ||
38 | // TransportTCPWelcomeMsg is a welcome message for new TCP connections. | 38 | // TransportTCPWelcomeMsg is a welcome message for new TCP connections. |
39 | type TransportTCPWelcomeMsg struct { | 39 | type TransportTCPWelcomeMsg struct { |
40 | MsgSize uint16 `order:"big"` // total size of message | 40 | MsgHeader |
41 | MsgType uint16 `order:"big"` // TRANSPORT_TCP_WELCOME (61) | 41 | PeerID *util.PeerID // Peer identity (EdDSA public key) |
42 | PeerID *util.PeerID // Peer identity (EdDSA public key) | ||
43 | } | 42 | } |
44 | 43 | ||
45 | // NewTransportTCPWelcomeMsg creates a new message for a given peer. | 44 | // NewTransportTCPWelcomeMsg creates a new message for a given peer. |
@@ -48,9 +47,8 @@ func NewTransportTCPWelcomeMsg(peerid *util.PeerID) *TransportTCPWelcomeMsg { | |||
48 | peerid = util.NewPeerID(nil) | 47 | peerid = util.NewPeerID(nil) |
49 | } | 48 | } |
50 | return &TransportTCPWelcomeMsg{ | 49 | return &TransportTCPWelcomeMsg{ |
51 | MsgSize: 36, | 50 | MsgHeader: MsgHeader{36, enums.MSG_TRANSPORT_TCP_WELCOME}, |
52 | MsgType: TRANSPORT_TCP_WELCOME, | 51 | PeerID: peerid, |
53 | PeerID: peerid, | ||
54 | } | 52 | } |
55 | } | 53 | } |
56 | 54 | ||
@@ -59,11 +57,6 @@ func (m *TransportTCPWelcomeMsg) String() string { | |||
59 | return fmt.Sprintf("TransportTcpWelcomeMsg{peer=%s}", m.PeerID) | 57 | return fmt.Sprintf("TransportTcpWelcomeMsg{peer=%s}", m.PeerID) |
60 | } | 58 | } |
61 | 59 | ||
62 | // Header returns the message header in a separate instance. | ||
63 | func (m *TransportTCPWelcomeMsg) Header() *Header { | ||
64 | return &Header{m.MsgSize, m.MsgType} | ||
65 | } | ||
66 | |||
67 | //---------------------------------------------------------------------- | 60 | //---------------------------------------------------------------------- |
68 | // TRANSPORT_PING | 61 | // TRANSPORT_PING |
69 | // | 62 | // |
@@ -75,8 +68,7 @@ func (m *TransportTCPWelcomeMsg) Header() *Header { | |||
75 | 68 | ||
76 | // TransportPingMsg is a PING request message | 69 | // TransportPingMsg is a PING request message |
77 | type TransportPingMsg struct { | 70 | type TransportPingMsg struct { |
78 | MsgSize uint16 `order:"big"` // total size of message | 71 | MsgHeader |
79 | MsgType uint16 `order:"big"` // TRANSPORT_PING (372) | ||
80 | Challenge uint32 // Challenge code (to ensure fresh reply) | 72 | Challenge uint32 // Challenge code (to ensure fresh reply) |
81 | Target *util.PeerID // EdDSA public key (long-term) of target peer | 73 | Target *util.PeerID // EdDSA public key (long-term) of target peer |
82 | Address []byte `size:"*"` // encoded address | 74 | Address []byte `size:"*"` // encoded address |
@@ -89,8 +81,7 @@ func NewTransportPingMsg(target *util.PeerID, a *util.Address) *TransportPingMsg | |||
89 | target = util.NewPeerID(nil) | 81 | target = util.NewPeerID(nil) |
90 | } | 82 | } |
91 | m := &TransportPingMsg{ | 83 | m := &TransportPingMsg{ |
92 | MsgSize: uint16(40), | 84 | MsgHeader: MsgHeader{40, enums.MSG_TRANSPORT_PING}, |
93 | MsgType: TRANSPORT_PING, | ||
94 | Challenge: util.RndUInt32(), | 85 | Challenge: util.RndUInt32(), |
95 | Target: target, | 86 | Target: target, |
96 | Address: nil, | 87 | Address: nil, |
@@ -114,11 +105,6 @@ func (m *TransportPingMsg) String() string { | |||
114 | m.Target, a, m.Challenge) | 105 | m.Target, a, m.Challenge) |
115 | } | 106 | } |
116 | 107 | ||
117 | // Header returns the message header in a separate instance. | ||
118 | func (m *TransportPingMsg) Header() *Header { | ||
119 | return &Header{m.MsgSize, m.MsgType} | ||
120 | } | ||
121 | |||
122 | //---------------------------------------------------------------------- | 108 | //---------------------------------------------------------------------- |
123 | // TRANSPORT_PONG | 109 | // TRANSPORT_PONG |
124 | // | 110 | // |
@@ -160,8 +146,7 @@ func NewSignedAddress(a *util.Address) *SignedAddress { | |||
160 | 146 | ||
161 | // TransportPongMsg is a response message for a PING request | 147 | // TransportPongMsg is a response message for a PING request |
162 | type TransportPongMsg struct { | 148 | type TransportPongMsg struct { |
163 | MsgSize uint16 `order:"big"` // total size of message | 149 | MsgHeader |
164 | MsgType uint16 `order:"big"` // TRANSPORT_PING (372) | ||
165 | Challenge uint32 // Challenge code (to ensure fresh reply) | 150 | Challenge uint32 // Challenge code (to ensure fresh reply) |
166 | Signature []byte `size:"64"` // Signature of address | 151 | Signature []byte `size:"64"` // Signature of address |
167 | SignedBlock *SignedAddress // signed block of data | 152 | SignedBlock *SignedAddress // signed block of data |
@@ -171,8 +156,7 @@ type TransportPongMsg struct { | |||
171 | // peer wants to be reached. | 156 | // peer wants to be reached. |
172 | func NewTransportPongMsg(challenge uint32, a *util.Address) *TransportPongMsg { | 157 | func NewTransportPongMsg(challenge uint32, a *util.Address) *TransportPongMsg { |
173 | m := &TransportPongMsg{ | 158 | m := &TransportPongMsg{ |
174 | MsgSize: 72, | 159 | MsgHeader: MsgHeader{72, enums.MSG_TRANSPORT_PONG}, |
175 | MsgType: TRANSPORT_PONG, | ||
176 | Challenge: challenge, | 160 | Challenge: challenge, |
177 | Signature: make([]byte, 64), | 161 | Signature: make([]byte, 64), |
178 | SignedBlock: new(SignedAddress), | 162 | SignedBlock: new(SignedAddress), |
@@ -195,11 +179,6 @@ func (m *TransportPongMsg) String() string { | |||
195 | return fmt.Sprintf("TransportPongMsg{addr=<unknown>,%d}", m.Challenge) | 179 | return fmt.Sprintf("TransportPongMsg{addr=<unknown>,%d}", m.Challenge) |
196 | } | 180 | } |
197 | 181 | ||
198 | // Header returns the message header in a separate instance. | ||
199 | func (m *TransportPongMsg) Header() *Header { | ||
200 | return &Header{m.MsgSize, m.MsgType} | ||
201 | } | ||
202 | |||
203 | // Sign the address block of a pong message. | 182 | // Sign the address block of a pong message. |
204 | func (m *TransportPongMsg) Sign(prv *ed25519.PrivateKey) error { | 183 | func (m *TransportPongMsg) Sign(prv *ed25519.PrivateKey) error { |
205 | data, err := data.Marshal(m.SignedBlock) | 184 | data, err := data.Marshal(m.SignedBlock) |
@@ -233,15 +212,13 @@ func (m *TransportPongMsg) Verify(pub *ed25519.PublicKey) (bool, error) { | |||
233 | 212 | ||
234 | // SessionAckMsg is a message to acknowledge a session request | 213 | // SessionAckMsg is a message to acknowledge a session request |
235 | type SessionAckMsg struct { | 214 | type SessionAckMsg struct { |
236 | MsgSize uint16 `order:"big"` // total size of message | 215 | MsgHeader |
237 | MsgType uint16 `order:"big"` // TRANSPORT_SESSION_ACK (377) | ||
238 | } | 216 | } |
239 | 217 | ||
240 | // NewSessionAckMsg creates an new message (no body required). | 218 | // NewSessionAckMsg creates an new message (no body required). |
241 | func NewSessionAckMsg() *SessionAckMsg { | 219 | func NewSessionAckMsg() *SessionAckMsg { |
242 | return &SessionAckMsg{ | 220 | return &SessionAckMsg{ |
243 | MsgSize: 16, | 221 | MsgHeader: MsgHeader{4, enums.MSG_TRANSPORT_SESSION_ACK}, |
244 | MsgType: TRANSPORT_SESSION_ACK, | ||
245 | } | 222 | } |
246 | } | 223 | } |
247 | 224 | ||
@@ -250,19 +227,13 @@ func (m *SessionAckMsg) String() string { | |||
250 | return "SessionAck{}" | 227 | return "SessionAck{}" |
251 | } | 228 | } |
252 | 229 | ||
253 | // Header returns the message header in a separate instance. | ||
254 | func (m *SessionAckMsg) Header() *Header { | ||
255 | return &Header{m.MsgSize, m.MsgType} | ||
256 | } | ||
257 | |||
258 | //---------------------------------------------------------------------- | 230 | //---------------------------------------------------------------------- |
259 | // TRANSPORT_SESSION_SYN | 231 | // TRANSPORT_SESSION_SYN |
260 | //---------------------------------------------------------------------- | 232 | //---------------------------------------------------------------------- |
261 | 233 | ||
262 | // SessionSynMsg is a synchronization request message for sessions | 234 | // SessionSynMsg is a synchronization request message for sessions |
263 | type SessionSynMsg struct { | 235 | type SessionSynMsg struct { |
264 | MsgSize uint16 `order:"big"` // total size of message | 236 | MsgHeader |
265 | MsgType uint16 `order:"big"` // TRANSPORT_SESSION_SYN (375) | ||
266 | Reserved uint32 `order:"big"` // reserved (=0) | 237 | Reserved uint32 `order:"big"` // reserved (=0) |
267 | Timestamp util.AbsoluteTime // usec epoch | 238 | Timestamp util.AbsoluteTime // usec epoch |
268 | } | 239 | } |
@@ -270,8 +241,7 @@ type SessionSynMsg struct { | |||
270 | // NewSessionSynMsg creates a SYN request for the a session | 241 | // NewSessionSynMsg creates a SYN request for the a session |
271 | func NewSessionSynMsg() *SessionSynMsg { | 242 | func NewSessionSynMsg() *SessionSynMsg { |
272 | return &SessionSynMsg{ | 243 | return &SessionSynMsg{ |
273 | MsgSize: 16, | 244 | MsgHeader: MsgHeader{16, enums.MSG_TRANSPORT_SESSION_SYN}, |
274 | MsgType: TRANSPORT_SESSION_SYN, | ||
275 | Reserved: 0, | 245 | Reserved: 0, |
276 | Timestamp: util.AbsoluteTimeNow(), | 246 | Timestamp: util.AbsoluteTimeNow(), |
277 | } | 247 | } |
@@ -282,19 +252,13 @@ func (m *SessionSynMsg) String() string { | |||
282 | return fmt.Sprintf("SessionSyn{timestamp=%s}", m.Timestamp) | 252 | return fmt.Sprintf("SessionSyn{timestamp=%s}", m.Timestamp) |
283 | } | 253 | } |
284 | 254 | ||
285 | // Header returns the message header in a separate instance. | ||
286 | func (m *SessionSynMsg) Header() *Header { | ||
287 | return &Header{m.MsgSize, m.MsgType} | ||
288 | } | ||
289 | |||
290 | //---------------------------------------------------------------------- | 255 | //---------------------------------------------------------------------- |
291 | // TRANSPORT_SESSION_SYN_ACK | 256 | // TRANSPORT_SESSION_SYN_ACK |
292 | //---------------------------------------------------------------------- | 257 | //---------------------------------------------------------------------- |
293 | 258 | ||
294 | // SessionSynAckMsg responds to a SYN request message | 259 | // SessionSynAckMsg responds to a SYN request message |
295 | type SessionSynAckMsg struct { | 260 | type SessionSynAckMsg struct { |
296 | MsgSize uint16 `order:"big"` // total size of message | 261 | MsgHeader |
297 | MsgType uint16 `order:"big"` // TRANSPORT_SESSION_SYN_ACK (376) | ||
298 | Reserved uint32 `order:"big"` // reserved (=0) | 262 | Reserved uint32 `order:"big"` // reserved (=0) |
299 | Timestamp util.AbsoluteTime // usec epoch | 263 | Timestamp util.AbsoluteTime // usec epoch |
300 | } | 264 | } |
@@ -302,8 +266,7 @@ type SessionSynAckMsg struct { | |||
302 | // NewSessionSynAckMsg is an ACK for a SYN request | 266 | // NewSessionSynAckMsg is an ACK for a SYN request |
303 | func NewSessionSynAckMsg() *SessionSynAckMsg { | 267 | func NewSessionSynAckMsg() *SessionSynAckMsg { |
304 | return &SessionSynAckMsg{ | 268 | return &SessionSynAckMsg{ |
305 | MsgSize: 16, | 269 | MsgHeader: MsgHeader{16, enums.MSG_TRANSPORT_SESSION_SYN_ACK}, |
306 | MsgType: TRANSPORT_SESSION_SYN_ACK, | ||
307 | Reserved: 0, | 270 | Reserved: 0, |
308 | Timestamp: util.AbsoluteTimeNow(), | 271 | Timestamp: util.AbsoluteTimeNow(), |
309 | } | 272 | } |
@@ -314,28 +277,22 @@ func (m *SessionSynAckMsg) String() string { | |||
314 | return fmt.Sprintf("SessionSynAck{timestamp=%s}", m.Timestamp) | 277 | return fmt.Sprintf("SessionSynAck{timestamp=%s}", m.Timestamp) |
315 | } | 278 | } |
316 | 279 | ||
317 | // Header returns the message header in a separate instance. | ||
318 | func (m *SessionSynAckMsg) Header() *Header { | ||
319 | return &Header{m.MsgSize, m.MsgType} | ||
320 | } | ||
321 | |||
322 | //---------------------------------------------------------------------- | 280 | //---------------------------------------------------------------------- |
323 | // TRANSPORT_SESSION_QUOTA | 281 | // TRANSPORT_SESSION_QUOTA |
324 | //---------------------------------------------------------------------- | 282 | //---------------------------------------------------------------------- |
325 | 283 | ||
326 | // SessionQuotaMsg is a message to announce quotas for a session | 284 | // SessionQuotaMsg is a message to announce quotas for a session |
327 | type SessionQuotaMsg struct { | 285 | type SessionQuotaMsg struct { |
328 | MsgSize uint16 `order:"big"` // total size of message | 286 | MsgHeader |
329 | MsgType uint16 `order:"big"` // TRANSPORT_SESSION_QUOTA (379) | 287 | Quota uint32 `order:"big"` // Quota in bytes per second |
330 | Quota uint32 `order:"big"` // Quota in bytes per second | ||
331 | } | 288 | } |
332 | 289 | ||
333 | // NewSessionQuotaMsg announces a session quota to the other end of the session. | 290 | // NewSessionQuotaMsg announces a session quota to the other end of the session. |
334 | func NewSessionQuotaMsg(quota uint32) *SessionQuotaMsg { | 291 | func NewSessionQuotaMsg(quota uint32) *SessionQuotaMsg { |
335 | m := new(SessionQuotaMsg) | 292 | m := new(SessionQuotaMsg) |
293 | m.MsgSize = 8 | ||
294 | m.MsgType = enums.MSG_TRANSPORT_SESSION_QUOTA | ||
336 | if quota > 0 { | 295 | if quota > 0 { |
337 | m.MsgSize = 8 | ||
338 | m.MsgType = TRANSPORT_SESSION_QUOTA | ||
339 | m.Quota = quota | 296 | m.Quota = quota |
340 | } | 297 | } |
341 | return m | 298 | return m |
@@ -346,28 +303,21 @@ func (m *SessionQuotaMsg) String() string { | |||
346 | return fmt.Sprintf("SessionQuotaMsg{%sB/s}", util.Scale1024(uint64(m.Quota))) | 303 | return fmt.Sprintf("SessionQuotaMsg{%sB/s}", util.Scale1024(uint64(m.Quota))) |
347 | } | 304 | } |
348 | 305 | ||
349 | // Header returns the message header in a separate instance. | ||
350 | func (m *SessionQuotaMsg) Header() *Header { | ||
351 | return &Header{m.MsgSize, m.MsgType} | ||
352 | } | ||
353 | |||
354 | //---------------------------------------------------------------------- | 306 | //---------------------------------------------------------------------- |
355 | // TRANSPORT_SESSION_KEEPALIVE | 307 | // TRANSPORT_SESSION_KEEPALIVE |
356 | //---------------------------------------------------------------------- | 308 | //---------------------------------------------------------------------- |
357 | 309 | ||
358 | // SessionKeepAliveMsg is a message send by peers to keep a session alive. | 310 | // SessionKeepAliveMsg is a message send by peers to keep a session alive. |
359 | type SessionKeepAliveMsg struct { | 311 | type SessionKeepAliveMsg struct { |
360 | MsgSize uint16 `order:"big"` // total size of message | 312 | MsgHeader |
361 | MsgType uint16 `order:"big"` // TRANSPORT_SESSION_KEEPALIVE (381) | 313 | Nonce uint32 |
362 | Nonce uint32 | ||
363 | } | 314 | } |
364 | 315 | ||
365 | // NewSessionKeepAliveMsg creates a new request to keep a session. | 316 | // NewSessionKeepAliveMsg creates a new request to keep a session. |
366 | func NewSessionKeepAliveMsg() *SessionKeepAliveMsg { | 317 | func NewSessionKeepAliveMsg() *SessionKeepAliveMsg { |
367 | m := &SessionKeepAliveMsg{ | 318 | m := &SessionKeepAliveMsg{ |
368 | MsgSize: 8, | 319 | MsgHeader: MsgHeader{8, enums.MSG_TRANSPORT_SESSION_KEEPALIVE}, |
369 | MsgType: TRANSPORT_SESSION_KEEPALIVE, | 320 | Nonce: util.RndUInt32(), |
370 | Nonce: util.RndUInt32(), | ||
371 | } | 321 | } |
372 | return m | 322 | return m |
373 | } | 323 | } |
@@ -377,28 +327,21 @@ func (m *SessionKeepAliveMsg) String() string { | |||
377 | return fmt.Sprintf("SessionKeepAliveMsg{%d}", m.Nonce) | 327 | return fmt.Sprintf("SessionKeepAliveMsg{%d}", m.Nonce) |
378 | } | 328 | } |
379 | 329 | ||
380 | // Header returns the message header in a separate instance. | ||
381 | func (m *SessionKeepAliveMsg) Header() *Header { | ||
382 | return &Header{m.MsgSize, m.MsgType} | ||
383 | } | ||
384 | |||
385 | //---------------------------------------------------------------------- | 330 | //---------------------------------------------------------------------- |
386 | // TRANSPORT_SESSION_KEEPALIVE_RESPONSE | 331 | // TRANSPORT_SESSION_KEEPALIVE_RESPONSE |
387 | //---------------------------------------------------------------------- | 332 | //---------------------------------------------------------------------- |
388 | 333 | ||
389 | // SessionKeepAliveRespMsg is a response for a peer to a "keep-alive" request. | 334 | // SessionKeepAliveRespMsg is a response for a peer to a "keep-alive" request. |
390 | type SessionKeepAliveRespMsg struct { | 335 | type SessionKeepAliveRespMsg struct { |
391 | MsgSize uint16 `order:"big"` // total size of message | 336 | MsgHeader |
392 | MsgType uint16 `order:"big"` // TRANSPORT_SESSION_KEEPALIVE_RESPONSE (382) | 337 | Nonce uint32 |
393 | Nonce uint32 | ||
394 | } | 338 | } |
395 | 339 | ||
396 | // NewSessionKeepAliveRespMsg is a response message for a "keep session" request. | 340 | // NewSessionKeepAliveRespMsg is a response message for a "keep session" request. |
397 | func NewSessionKeepAliveRespMsg(nonce uint32) *SessionKeepAliveRespMsg { | 341 | func NewSessionKeepAliveRespMsg(nonce uint32) *SessionKeepAliveRespMsg { |
398 | m := &SessionKeepAliveRespMsg{ | 342 | m := &SessionKeepAliveRespMsg{ |
399 | MsgSize: 8, | 343 | MsgHeader: MsgHeader{8, enums.MSG_TRANSPORT_SESSION_KEEPALIVE_RESPONSE}, |
400 | MsgType: TRANSPORT_SESSION_KEEPALIVE_RESPONSE, | 344 | Nonce: nonce, |
401 | Nonce: nonce, | ||
402 | } | 345 | } |
403 | return m | 346 | return m |
404 | } | 347 | } |
@@ -407,8 +350,3 @@ func NewSessionKeepAliveRespMsg(nonce uint32) *SessionKeepAliveRespMsg { | |||
407 | func (m *SessionKeepAliveRespMsg) String() string { | 350 | func (m *SessionKeepAliveRespMsg) String() string { |
408 | return fmt.Sprintf("SessionKeepAliveRespMsg{%d}", m.Nonce) | 351 | return fmt.Sprintf("SessionKeepAliveRespMsg{%d}", m.Nonce) |
409 | } | 352 | } |
410 | |||
411 | // Header returns the message header in a separate instance. | ||
412 | func (m *SessionKeepAliveRespMsg) Header() *Header { | ||
413 | return &Header{m.MsgSize, m.MsgType} | ||
414 | } | ||