aboutsummaryrefslogtreecommitdiff
path: root/src/gnunet/message/msg_transport.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/gnunet/message/msg_transport.go')
-rw-r--r--src/gnunet/message/msg_transport.go114
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.
39type TransportTCPWelcomeMsg struct { 39type 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.
63func (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
77type TransportPingMsg struct { 70type 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.
118func (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
162type TransportPongMsg struct { 148type 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.
172func NewTransportPongMsg(challenge uint32, a *util.Address) *TransportPongMsg { 157func 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.
199func (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.
204func (m *TransportPongMsg) Sign(prv *ed25519.PrivateKey) error { 183func (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
235type SessionAckMsg struct { 214type 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).
241func NewSessionAckMsg() *SessionAckMsg { 219func 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.
254func (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
263type SessionSynMsg struct { 235type 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
271func NewSessionSynMsg() *SessionSynMsg { 242func 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.
286func (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
295type SessionSynAckMsg struct { 260type 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
303func NewSessionSynAckMsg() *SessionSynAckMsg { 267func 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.
318func (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
327type SessionQuotaMsg struct { 285type 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.
334func NewSessionQuotaMsg(quota uint32) *SessionQuotaMsg { 291func 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.
350func (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.
359type SessionKeepAliveMsg struct { 311type 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.
366func NewSessionKeepAliveMsg() *SessionKeepAliveMsg { 317func 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.
381func (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.
390type SessionKeepAliveRespMsg struct { 335type 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.
397func NewSessionKeepAliveRespMsg(nonce uint32) *SessionKeepAliveRespMsg { 341func 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 {
407func (m *SessionKeepAliveRespMsg) String() string { 350func (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.
412func (m *SessionKeepAliveRespMsg) Header() *Header {
413 return &Header{m.MsgSize, m.MsgType}
414}