config.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package http
  2. import (
  3. "strings"
  4. "v2ray.com/core/common/dice"
  5. )
  6. func (v *Version) GetValue() string {
  7. if v == nil {
  8. return "1.1"
  9. }
  10. return v.Value
  11. }
  12. func (v *Method) GetValue() string {
  13. if v == nil {
  14. return "GET"
  15. }
  16. return v.Value
  17. }
  18. func (v *Status) GetCode() string {
  19. if v == nil {
  20. return "200"
  21. }
  22. return v.Code
  23. }
  24. func (v *Status) GetReason() string {
  25. if v == nil {
  26. return "OK"
  27. }
  28. return v.Reason
  29. }
  30. func pickString(arr []string) string {
  31. n := len(arr)
  32. switch n {
  33. case 0:
  34. return ""
  35. case 1:
  36. return arr[0]
  37. default:
  38. return arr[dice.Roll(n)]
  39. }
  40. }
  41. func (v *RequestConfig) PickUri() string {
  42. return pickString(v.Uri)
  43. }
  44. func (v *RequestConfig) PickHeaders() []string {
  45. n := len(v.Header)
  46. if n == 0 {
  47. return nil
  48. }
  49. headers := make([]string, n)
  50. for idx, headerConfig := range v.Header {
  51. headerName := headerConfig.Name
  52. headerValue := pickString(headerConfig.Value)
  53. headers[idx] = headerName + ": " + headerValue
  54. }
  55. return headers
  56. }
  57. func (v *RequestConfig) GetFullVersion() string {
  58. return "HTTP/" + v.Version.GetValue()
  59. }
  60. func (v *ResponseConfig) HasHeader(header string) bool {
  61. cHeader := strings.ToLower(header)
  62. for _, tHeader := range v.Header {
  63. if strings.ToLower(tHeader.Name) == cHeader {
  64. return true
  65. }
  66. }
  67. return false
  68. }
  69. func (v *ResponseConfig) PickHeaders() []string {
  70. n := len(v.Header)
  71. if n == 0 {
  72. return nil
  73. }
  74. headers := make([]string, n)
  75. for idx, headerConfig := range v.Header {
  76. headerName := headerConfig.Name
  77. headerValue := pickString(headerConfig.Value)
  78. headers[idx] = headerName + ": " + headerValue
  79. }
  80. return headers
  81. }
  82. func (v *ResponseConfig) GetFullVersion() string {
  83. return "HTTP/" + v.Version.GetValue()
  84. }