context.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package internet
  2. import (
  3. "context"
  4. "v2ray.com/core/common/net"
  5. )
  6. type key int
  7. const (
  8. streamSettingsKey key = iota
  9. dialerSrcKey
  10. transportSettingsKey
  11. securitySettingsKey
  12. )
  13. func ContextWithStreamSettings(ctx context.Context, streamSettings *StreamConfig) context.Context {
  14. return context.WithValue(ctx, streamSettingsKey, streamSettings)
  15. }
  16. func StreamSettingsFromContext(ctx context.Context) *StreamConfig {
  17. ss := ctx.Value(streamSettingsKey)
  18. if ss == nil {
  19. return nil
  20. }
  21. return ss.(*StreamConfig)
  22. }
  23. func ContextWithDialerSource(ctx context.Context, addr net.Address) context.Context {
  24. return context.WithValue(ctx, dialerSrcKey, addr)
  25. }
  26. func DialerSourceFromContext(ctx context.Context) net.Address {
  27. if addr, ok := ctx.Value(dialerSrcKey).(net.Address); ok {
  28. return addr
  29. }
  30. return net.AnyIP
  31. }
  32. func ContextWithTransportSettings(ctx context.Context, transportSettings interface{}) context.Context {
  33. return context.WithValue(ctx, transportSettingsKey, transportSettings)
  34. }
  35. func TransportSettingsFromContext(ctx context.Context) interface{} {
  36. return ctx.Value(transportSettingsKey)
  37. }
  38. func ContextWithSecuritySettings(ctx context.Context, securitySettings interface{}) context.Context {
  39. return context.WithValue(ctx, securitySettingsKey, securitySettings)
  40. }
  41. func SecuritySettingsFromContext(ctx context.Context) interface{} {
  42. return ctx.Value(securitySettingsKey)
  43. }