* Workers need not register/unregister sock for every loop
* No need of explicit socket.settimeout(0) which is same as socket.setblocking(False)
* Remove settimeout assertion
* Only store sender side of Pipe(). Also ensure both end of the Pipe() are closed on shutdown
* Make now global. Also we seem to be using datetime.utcnow and time.time for similar purposes
* Use time.time throughout. Remove incomplete test_cache_responses_plugin to avoid resource leak in tests
* Remove unused
* Wrap selector register/unregister within a context manager
* Refactor in preparation of threadless request handling
* MyPy generator fix
* Add --threadless flag
* Internally call them acceptors
* Internally use acceptors
* Add Threadless class.
Also no need to pass family over pipe to acceptors.
* Make threadless work for a single client :)
* Threadless is soon be our default
* Close client queue
* Use context manager for register/unregister
* Fix Acceptor tests broken after refactoring
* Use asyncio tasks to invoke ProtocolHandle.handle_events
This gives all client threads a chance to respond without
waiting for other handlers to return.
* Explicitly initialize event loop per Threadless process
* Mypy fixes
* Add ThreadlessWork abstract class implemented by ProtocolHandler
* Add benchmark.py
Avoid TIME_WAIT by properly shutting down the connection.
* Add benchmark.py as part of testing workflow
* When e2e encryption is enabled, unwrap socket before shutdown to ensure CLOSED state
* MyPy fixes, Union should have worked, but likely unwrap is not part of socket.socket hence
* Unwrap if wrapped before shutdown
* Unwrap if wrapped before shutdown
* socket.SHUT_RDWR will cause leaks
* MyPy
* Add instructions for monitor.sh
* Avoid recursive exception in new_socket_connection and only invoke plugins/shutdown if server connection was initialized
* Add Fast & Scalable section
* Update internal classes section
* Dont print out local dir path in help text :)
* Refactor
* Fix a bug where response parser for HTTP only requests was reused for pipelined requests resulting in a hang
* Add chrome_with_proxy.sh helper script
* Handle OSError during client.flush which can happen due to invalid protocol type for socket error
* Remove redundant e
* Add classmethods to quickly construct a parser object
* Don't raise from TcpConnection abstract class.
This allows both client/socket side of communication to handle
exceptions as necessary. We might refactor this again later to remove
redundant code :)
* Disable response parsing when TLS interception is enabled. See issue #127
* remove unused imports
* Within webserver parse pipelined requests only if we have a route
* Add ShortLinkPlugin plugin
* Add more shortlinks
* Add ShortLinkPlugin to README.md
* Add path forwarding too instead of leaving as excercise ;)
* Add shortlink to TOC
* Ensure no socket leaks
* Ensure no leaks
* Naming
* Default number of clients 1
* Avoid shortlinking localhost
* Stress more
* Add --timeout flag with default value of 5. This value was previously hardcoded to 30
* --timeout=10 by default
* Dispatch 408 timeout when connection is dropped due to inactivity
* Add httpStatusCodes named tuple
* Update plugin client connection reference after TLS connection upgrade
* Initialize skeleton electron app
* Attempt to open devtools
* Electron free
* Initialize public/devtools
* Add basic support for static file serving and chrome devtools.
1. No cache header management for static file serving yet.
2. No chunked encoded responses for static files yet.
3. Chrome Devtool initialization.
* Fix static serving with query params
* profile using py-spy
* Complete websocket client loop
* lint check
* Add support for building websocket frames
* Remove redundant CDT params
* Lint check
* Refactor web server base plugin name
* Devtools integrated, need more polish
* Add START_TIME global var
* lint fix
* Remove outdated chrome rdp
* Add FAQs
* Add FAQs
* socket_connection decorator + context manager
* Defer SSL handshake and plugin initialize until protocol handler thread
has started.
This is a follow up to this PR
https://github.com/abhinavsingh/proxy.py/pull/111
* Add tests for new_socket_connection and its friend socket_connection
* Address an issue which came back after being fixed in https://github.com/abhinavsingh/proxy.py/pull/92
* Lint fixes
* uff ye str and bytes
* Remove explicit flushes outside of write ready descriptor handlers
* add links to import proxy
* Only try websocket upgrade if a route is registered
* Add plugin_examples.WebServerPlugin and use precision logging for levelname
* Remove redundant comments
* Add --devtools-ws-path flag
* Add on_websocket_open and on_websocket_close callbacks
* Add empty stubs for incomplete CDT responses
* Ensure client is ready before final flush
* Shutdown on write side of socket, may be client is still reading
* Since client.closed can be set, explicitly call client.connection.closed
* Add ModifyPostDataPlugin example.
Was first asked and referenced here
https://github.com/abhinavsingh/proxy.py/issues/115
* Start adding TestHttpProxyPlugin
* Fixes#116