1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-10-19 10:13:37 -04:00
v2fly/transport/internet/request/assembler/packetconn/packetbundle.go
Xiaokang Wang (Shelikhoo) 7db39fb566
Add (Experimental) Meyka Building Blocks to request Transport (#3120)
* add packetconn assembler

* let kcp use environment dependency injection

* Add destination override to simplified setting

* add dtls dialer

* add dtls listener

* add dtls to default

* fix bugs

* add debug options to freedom outbound

* fix kcp test failure for transport environment
2024-08-22 04:05:05 +01:00

49 lines
911 B
Go

package packetconn
import (
"encoding/binary"
"io"
)
func NewPacketBundle() PacketBundle {
return &packetBundle{}
}
type packetBundle struct{}
func (p *packetBundle) Overhead() int {
return 2
}
func (p *packetBundle) WriteToBundle(b []byte, writer io.Writer) (err error) {
err = binary.Write(writer, binary.BigEndian, uint16(len(b)))
if err != nil {
return
}
_, err = writer.Write(b)
return
}
func (p *packetBundle) ReadFromBundle(writer io.Reader) (b []byte, err error) {
var length uint16
err = binary.Read(writer, binary.BigEndian, &length)
if err != nil {
return
}
b = make([]byte, length)
n, err := io.ReadFull(writer, b)
if err != nil {
return
}
if n != int(length) {
return nil, io.ErrUnexpectedEOF
}
return
}
type PacketBundle interface {
Overhead() int
WriteToBundle(b []byte, writer io.Writer) (err error)
ReadFromBundle(writer io.Reader) (b []byte, err error)
}