diff --git a/common/protocol/encoding.go b/common/protocol/encoding.go new file mode 100644 index 000000000..85a423cc7 --- /dev/null +++ b/common/protocol/encoding.go @@ -0,0 +1,27 @@ +package protocol + +import ( + "io" + + "github.com/v2ray/v2ray-core/common/alloc" +) + +type RequestEncoder interface { + EncodeHeader(*RequestHeader) *alloc.Buffer + EncodeBody(io.Writer) io.Writer +} + +type RequestDecoder interface { + DecodeHeader(io.Reader) *RequestHeader + DecodeBody(io.Reader) io.Reader +} + +type ResponseEncoder interface { + EncodeHeader(*ResponseHeader) *alloc.Buffer + EncodeBody(io.Writer) io.Writer +} + +type ResponseDecoder interface { + DecodeHeader(io.Reader) *ResponseHeader + DecodeBody(io.Reader) io.Reader +} diff --git a/common/protocol/headers.go b/common/protocol/headers.go new file mode 100644 index 000000000..887fbae46 --- /dev/null +++ b/common/protocol/headers.go @@ -0,0 +1,33 @@ +package protocol + +import ( + v2net "github.com/v2ray/v2ray-core/common/net" +) + +type RequestCommand byte + +const ( + RequestCommandTCP = RequestCommand(0x01) + RequestCommandUDP = RequestCommand(0x02) +) + +type RequestOption byte + +const ( + RequestOptionChunkStream = RequestOption(0x01) +) + +type RequestHeader struct { + Version byte + User *User + Command RequestCommand + Option RequestOption + Address v2net.Address + Port v2net.Port +} + +type ResponseCommand interface{} + +type ResponseHeader struct { + Command ResponseCommand +}