mirror of
https://github.com/v2fly/v2ray-core
synced 2024-02-27 03:18:06 +00:00
Use []byte in pool instead of buffer
This commit is contained in:
@@ -36,7 +36,6 @@ func (vconn *FreedomConnection) Dispatch(firstPacket v2net.Packet, ray core.Outb
|
||||
if chunk := firstPacket.Chunk(); chunk != nil {
|
||||
conn.Write(chunk.Value)
|
||||
chunk.Release()
|
||||
chunk = nil
|
||||
}
|
||||
|
||||
if !firstPacket.MoreChunks() {
|
||||
@@ -74,7 +73,6 @@ func dumpOutput(conn net.Conn, output chan<- *alloc.Buffer, finish *sync.Mutex,
|
||||
output <- response
|
||||
} else {
|
||||
response.Release()
|
||||
response = nil
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
|
||||
+4
-2
@@ -40,22 +40,25 @@ func (server *SocksServer) getUDPAddr() v2net.Address {
|
||||
func (server *SocksServer) AcceptPackets(conn *net.UDPConn) error {
|
||||
for {
|
||||
buffer := alloc.NewBuffer()
|
||||
defer buffer.Release()
|
||||
nBytes, addr, err := conn.ReadFromUDP(buffer.Value)
|
||||
if err != nil {
|
||||
log.Error("Socks failed to read UDP packets: %v", err)
|
||||
buffer.Release()
|
||||
continue
|
||||
}
|
||||
buffer.Slice(0, nBytes)
|
||||
log.Info("Client UDP connection from %v", addr)
|
||||
request, err := protocol.ReadUDPRequest(buffer.Value)
|
||||
buffer.Release()
|
||||
if err != nil {
|
||||
log.Error("Socks failed to parse UDP request: %v", err)
|
||||
request.Data.Release()
|
||||
continue
|
||||
}
|
||||
if request.Fragment != 0 {
|
||||
log.Warning("Dropping framented UDP packets.")
|
||||
// TODO handle fragments
|
||||
request.Data.Release()
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -79,7 +82,6 @@ func (server *SocksServer) handlePacket(conn *net.UDPConn, packet v2net.Packet,
|
||||
udpMessage := response.Bytes(nil)
|
||||
nBytes, err := conn.WriteToUDP(udpMessage, clientAddr)
|
||||
response.Data.Release()
|
||||
response.Data = nil
|
||||
if err != nil {
|
||||
log.Error("Socks failed to write UDP message (%d bytes) to %s: %v", nBytes, clientAddr.String(), err)
|
||||
}
|
||||
|
||||
@@ -91,14 +91,15 @@ func (handler *VMessInboundHandler) HandleConnection(connection *net.TCPConn) er
|
||||
}
|
||||
|
||||
// Optimize for small response packet
|
||||
buffer := make([]byte, 0, 4*1024)
|
||||
buffer = append(buffer, request.ResponseHeader...)
|
||||
buffer := alloc.NewBuffer()
|
||||
buffer.Clear()
|
||||
buffer.Append(request.ResponseHeader)
|
||||
|
||||
if data, open := <-output; open {
|
||||
buffer = append(buffer, data.Value...)
|
||||
data = nil
|
||||
responseWriter.Write(buffer)
|
||||
buffer = nil
|
||||
buffer.Append(data.Value)
|
||||
data.Release()
|
||||
responseWriter.Write(buffer.Value)
|
||||
buffer.Release()
|
||||
go handleOutput(request, responseWriter, output, &writeFinish)
|
||||
writeFinish.Lock()
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ func (handler *VMessInboundHandler) AcceptPackets(conn *net.UDPConn) {
|
||||
nBytes, err = cryptReader.Read(data.Value)
|
||||
if err != nil {
|
||||
log.Warning("VMessIn: Unable to decrypt data: %v", err)
|
||||
data.Release()
|
||||
continue
|
||||
}
|
||||
data.Slice(0, nBytes)
|
||||
@@ -91,7 +92,6 @@ func (handler *VMessInboundHandler) handlePacket(conn *net.UDPConn, request *pro
|
||||
hasData = true
|
||||
responseWriter.Write(data.Value)
|
||||
data.Release()
|
||||
data = nil
|
||||
}
|
||||
|
||||
if hasData {
|
||||
|
||||
@@ -150,11 +150,9 @@ func handleRequest(conn net.Conn, request *protocol.VMessRequest, firstPacket v2
|
||||
encryptRequestWriter.Crypt(firstChunk.Value)
|
||||
requestBytes = append(requestBytes, firstChunk.Value...)
|
||||
firstChunk.Release()
|
||||
firstChunk = nil
|
||||
|
||||
_, err = conn.Write(requestBytes)
|
||||
buffer.Release()
|
||||
buffer = nil
|
||||
if err != nil {
|
||||
log.Error("VMessOut: Failed to write VMess request: %v", err)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user