issue #49: update howitworks.rst for command line change

wip-fakessh-exit-status
David Wilson 7 years ago
parent db9bec8720
commit e3d2c8d649

@ -26,20 +26,26 @@ implement the decompression.
Python Command Line Python Command Line
################### ###################
The Python command line sent to the host is a base64-encoded copy of the The Python command line sent to the host is a :mod:`zlib`-compressed and
:py:meth:`mitogen.master.Stream._first_stage` function, which has been base64-encoded copy of the :py:meth:`mitogen.master.Stream._first_stage`
carefully optimized to reduce its size. Prior to base64 encoding, function, which has been carefully optimized to reduce its size. Prior to
``CONTEXT_NAME`` is replaced with the desired context name in the function's compression and encoding, ``CONTEXT_NAME`` is replaced with the desired context
source code. name in the function's source code.
.. code:: .. code::
python -c 'exec "xxx".decode("base64")' python -c 'exec "xxx".decode("base64").decode("zlib")'
The command-line arranges for the Python interpreter to decode the base64'd The command-line arranges for the Python interpreter to decode the base64'd
component and execute it as Python code. Base64 is used since the first stage component, decompress it and execute it as Python code. Base64 is used since
implementation contains newlines, and many special characters that may be to protect against any special characters that may be interpreted by the system
interpreted by the system shell in use. shell in use.
Compression may seem redundant, however it is basically free and reducing IO is
always a good idea. The 33% / 200 byte saving may mean the presence or absence
of an additional frame on the network, or in real world terms after accounting
for SSH overhead, up to 2.3% reduced chance of a stall during connection setup
due to a dropped frame.
Forking The First Stage Forking The First Stage

Loading…
Cancel
Save