user.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package protocol
  2. import (
  3. "time"
  4. "v2ray.com/core/common/errors"
  5. )
  6. var (
  7. ErrAccountMissing = errors.New("Account is not specified.")
  8. ErrNonMessageType = errors.New("Not a protobuf message.")
  9. ErrUnknownAccountType = errors.New("Unknown account type.")
  10. )
  11. func (v *User) GetTypedAccount() (Account, error) {
  12. if v.GetAccount() == nil {
  13. return nil, ErrAccountMissing
  14. }
  15. rawAccount, err := v.Account.GetInstance()
  16. if err != nil {
  17. return nil, err
  18. }
  19. if asAccount, ok := rawAccount.(AsAccount); ok {
  20. return asAccount.AsAccount()
  21. }
  22. if account, ok := rawAccount.(Account); ok {
  23. return account, nil
  24. }
  25. return nil, errors.New("Unknown account type: ", v.Account.Type)
  26. }
  27. func (v *User) GetSettings() UserSettings {
  28. settings := UserSettings{}
  29. switch v.Level {
  30. case 0:
  31. settings.PayloadTimeout = time.Second * 30
  32. case 1:
  33. settings.PayloadTimeout = time.Minute * 2
  34. default:
  35. settings.PayloadTimeout = time.Minute * 5
  36. }
  37. return settings
  38. }
  39. type UserSettings struct {
  40. PayloadTimeout time.Duration
  41. }