user.go 1.1 KB

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