Add device.InputPacket
This commit is contained in:
parent
7be452de15
commit
a71256d250
1 changed files with 24 additions and 0 deletions
|
|
@ -322,6 +322,30 @@ func (device *Device) RoutineReadFromTUN() {
|
|||
}
|
||||
}
|
||||
|
||||
func (device *Device) InputPacket(destination []byte, packetSlices [][]byte) {
|
||||
peer := device.allowedips.Lookup(destination)
|
||||
if peer == nil {
|
||||
return
|
||||
}
|
||||
elem := device.NewOutboundElement()
|
||||
packet := elem.buffer[MessageTransportHeaderSize:]
|
||||
var n int
|
||||
for _, packetSlice := range packetSlices {
|
||||
n += copy(packet[n:], packetSlice)
|
||||
}
|
||||
elem.packet = packet[:n]
|
||||
elemsForPeer := device.GetOutboundElementsContainer()
|
||||
if peer.isRunning.Load() {
|
||||
elemsForPeer.elems = append(elemsForPeer.elems, elem)
|
||||
peer.StagePackets(elemsForPeer)
|
||||
peer.SendStagedPackets()
|
||||
} else {
|
||||
device.PutMessageBuffer(elem.buffer)
|
||||
device.PutOutboundElement(elem)
|
||||
device.PutOutboundElementsContainer(elemsForPeer)
|
||||
}
|
||||
}
|
||||
|
||||
func (peer *Peer) StagePackets(elems *QueueOutboundElementsContainer) {
|
||||
for {
|
||||
select {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue