Ejemplo n.º 1
0
        private static void Main(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("Usage: boxxy.exe \"Port\" \"Sync directory\" \"Destination host\"");
                return;
            }

            bool interactive = args.Length == 4 && args[3] == "i";

            if (interactive)
            {
                Console.WriteLine("Starting in INTERACTIVE mode, all requests are automatically PAUSED.");
            }
            else
            {
                Console.WriteLine("Starting in NON-INTERACTIVE mode, all requests are automatically FORWARDED.");
            }

            Console.WriteLine("Press ENTER to continue.");
            Console.ReadLine();

            string listeningPort = args[0];
            string syncPath      = args[1];
            string destination   = args[2];

            if (!Directory.Exists(syncPath))
            {
                Console.WriteLine("Invalid sync directory, exiting.");
                return;
            }

            string[] files = Directory.GetFiles(syncPath, "*.json");

            var requests = new List <IncomingHttpRequest>();

            foreach (var file in files)
            {
                try {
                    using (var reader = new StreamReader(file)) {
                        string str = reader.ReadToEnd();

                        requests.Add(IncomingHttpRequest.FromString(str));
                        Debug.WriteLine("Deserialized request from file {0}", str);
                    }
                } catch (SecurityException e) {
                    ReadFailed(file, e);
                } catch (UnauthorizedAccessException e) {
                    ReadFailed(file, e);
                } catch (IOException e) {
                    ReadFailed(file, e);
                }
            }

            var store = new ProxyStore(syncPath, requests);
            var proxy = new HttpProxy(store, interactive);

            proxy.Start(string.Format("http://localhost:{0}/", listeningPort), destination);

            try {
                new MainScreen(store).Run();
            } catch (QuitMenu) {
                // Intentionally ignored, the exception is only used for control flow.
            }
        }
Ejemplo n.º 2
0
 public ChangeUrlScreen(IncomingHttpRequest request)
 {
     _request = request;
 }
Ejemplo n.º 3
0
 public ResponseDetailScreen(IncomingHttpRequest request)
 {
     _request = request;
 }
Ejemplo n.º 4
0
 public HeaderDetailScreen(IncomingHttpRequest request, int index)
 {
     _request = request;
     _index   = index;
 }
Ejemplo n.º 5
0
 public ChangeMethodScreen(IncomingHttpRequest request)
 {
     _request = request;
 }
Ejemplo n.º 6
0
 public AddHeaderScreen(IncomingHttpRequest request)
 {
     _request = request;
 }