addons.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // +build !confonly
  2. package encoding
  3. import (
  4. "io"
  5. "github.com/golang/protobuf/proto"
  6. "v2ray.com/core/common/buf"
  7. "v2ray.com/core/common/protocol"
  8. )
  9. func EncodeHeaderAddons(buffer *buf.Buffer, addons *Addons) error {
  10. switch addons.Flow {
  11. default:
  12. if err := buffer.WriteByte(0); err != nil {
  13. return newError("failed to write addons protobuf length").Base(err)
  14. }
  15. }
  16. return nil
  17. }
  18. func DecodeHeaderAddons(buffer *buf.Buffer, reader io.Reader) (*Addons, error) {
  19. addons := new(Addons)
  20. buffer.Clear()
  21. if _, err := buffer.ReadFullFrom(reader, 1); err != nil {
  22. return nil, newError("failed to read addons protobuf length").Base(err)
  23. }
  24. if length := int32(buffer.Byte(0)); length != 0 {
  25. buffer.Clear()
  26. if _, err := buffer.ReadFullFrom(reader, length); err != nil {
  27. return nil, newError("failed to read addons protobuf value").Base(err)
  28. }
  29. if err := proto.Unmarshal(buffer.Bytes(), addons); err != nil {
  30. return nil, newError("failed to unmarshal addons protobuf value").Base(err)
  31. }
  32. // Verification.
  33. switch addons.Flow {
  34. default:
  35. }
  36. }
  37. return addons, nil
  38. }
  39. // EncodeBodyAddons returns a Writer that auto-encrypt content written by caller.
  40. func EncodeBodyAddons(writer io.Writer, request *protocol.RequestHeader, addons *Addons) buf.Writer {
  41. switch addons.Flow {
  42. default:
  43. return buf.NewWriter(writer)
  44. }
  45. }
  46. // DecodeBodyAddons returns a Reader from which caller can fetch decrypted body.
  47. func DecodeBodyAddons(reader io.Reader, request *protocol.RequestHeader, addons *Addons) buf.Reader {
  48. switch addons.Flow {
  49. default:
  50. return buf.NewReader(reader)
  51. }
  52. }