Add device.InputPacket

This commit is contained in:
世界 2024-11-20 18:53:51 +08:00
parent 606102e010
commit b2a20cdd77
No known key found for this signature in database
GPG key ID: CD109927C34A63C4

View file

@ -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 {