config.go 1.9 KB

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