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) {
|
func (peer *Peer) StagePackets(elems *QueueOutboundElementsContainer) {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue