MCPcopy Create free account
hub / github.com/encodeous/nylon / SendStagedPackets

Method SendStagedPackets

polyamide/device/send.go:301–366  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

299}
300
301func (peer *Peer) SendStagedPackets() {
302top:
303 if len(peer.queue.staged) == 0 || !peer.device.isUp() {
304 return
305 }
306
307 keypair := peer.keypairs.Current()
308 if keypair == nil || keypair.sendNonce.Load() >= RejectAfterMessages || time.Since(keypair.created) >= RejectAfterTime {
309 peer.SendHandshakeInitiation(false)
310 return
311 }
312
313 for {
314 var elemsContainerOOO *QueueOutboundElementsContainer
315 select {
316 case elemsContainer := <-peer.queue.staged:
317 i := 0
318 for _, elem := range elemsContainer.elems {
319 elem.peer = peer
320 elem.nonce = keypair.sendNonce.Add(1) - 1
321 if elem.nonce >= RejectAfterMessages {
322 keypair.sendNonce.Store(RejectAfterMessages)
323 if elemsContainerOOO == nil {
324 elemsContainerOOO = peer.device.GetOutboundElementsContainer()
325 }
326 elemsContainerOOO.elems = append(elemsContainerOOO.elems, elem)
327 continue
328 } else {
329 elemsContainer.elems[i] = elem
330 i++
331 }
332
333 elem.keypair = keypair
334 }
335 elemsContainer.Lock()
336 elemsContainer.elems = elemsContainer.elems[:i]
337
338 if elemsContainerOOO != nil {
339 peer.StagePackets(elemsContainerOOO) // XXX: Out of order, but we can't front-load go chans
340 }
341
342 if len(elemsContainer.elems) == 0 {
343 peer.device.PutOutboundElementsContainer(elemsContainer)
344 goto top
345 }
346
347 // add to parallel and sequential queue
348 if peer.isRunning.Load() {
349 peer.queue.outbound.c <- elemsContainer
350 peer.device.queue.encryption.c <- elemsContainer
351 } else {
352 for _, elem := range elemsContainer.elems {
353 peer.device.PutMessageBuffer(elem.buffer)
354 peer.device.PutOutboundElement(elem)
355 }
356 peer.device.PutOutboundElementsContainer(elemsContainer)
357 }
358

Callers 5

SendKeepaliveMethod · 0.95
TCBatchMethod · 0.80
handlePostConfigMethod · 0.80

Calls 8

StagePacketsMethod · 0.95
isUpMethod · 0.80
CurrentMethod · 0.80
PutMessageBufferMethod · 0.80
PutOutboundElementMethod · 0.80

Tested by

no test coverage detected