common.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package scenarios
  2. import (
  3. "io"
  4. "net"
  5. "time"
  6. "github.com/golang/protobuf/proto"
  7. "v2ray.com/core"
  8. "v2ray.com/core/common"
  9. v2net "v2ray.com/core/common/net"
  10. )
  11. func pickPort() v2net.Port {
  12. listener, err := net.Listen("tcp4", ":0")
  13. common.Must(err)
  14. defer listener.Close()
  15. addr := listener.Addr().(*net.TCPAddr)
  16. return v2net.Port(addr.Port)
  17. }
  18. func xor(b []byte) []byte {
  19. r := make([]byte, len(b))
  20. for i, v := range b {
  21. r[i] = v ^ 'c'
  22. }
  23. return r
  24. }
  25. func readFrom(conn net.Conn, timeout time.Duration, length int) []byte {
  26. b := make([]byte, length)
  27. deadline := time.Now().Add(timeout)
  28. conn.SetReadDeadline(deadline)
  29. n, _ := io.ReadFull(conn, b[:length])
  30. return b[:n]
  31. }
  32. func InitializeServerConfig(config *core.Config) error {
  33. err := BuildV2Ray()
  34. if err != nil {
  35. return err
  36. }
  37. configBytes, err := proto.Marshal(config)
  38. if err != nil {
  39. return err
  40. }
  41. proc := RunV2RayProtobuf(configBytes)
  42. err = proc.Start()
  43. if err != nil {
  44. return err
  45. }
  46. time.Sleep(time.Second)
  47. runningServers = append(runningServers, proc)
  48. return nil
  49. }