Controller Responses
********************

Parses replies from the control socket.

**Module Overview:**

   convert - translates a ControlMessage into a particular response subclass

   ControlMessage - Message that's read from the control socket.
     |- SingleLineResponse - Simple tor response only including a single line of information.
     |
     |- from_str - provides a ControlMessage for the given string
     |- is_ok - response had a 250 status
     |- content - provides the parsed message content
     +- raw_content - unparsed socket data

   ControlLine - String subclass with methods for parsing controller responses.
     |- remainder - provides the unparsed content
     |- is_empty - checks if the remaining content is empty
     |- is_next_quoted - checks if the next entry is a quoted value
     |- is_next_mapping - checks if the next entry is a KEY=VALUE mapping
     |- peek_key - provides the key of the next entry
     |- pop - removes and returns the next entry
     +- pop_mapping - removes and returns the next entry as a KEY=VALUE mapping


Responses
=========

class stem.response.add_onion.AddOnionResponse(parsed_content, raw_content, arrived_at=None)

   ADD_ONION response.

   Variables:
      * **service_id** (*str*) – hidden service address without the
        ‘.onion’ suffix

      * **private_key** (*str*) – base64 encoded hidden service
        private key

      * **private_key_type** (*str*) – crypto used to generate the
        hidden service private key (such as RSA1024)

      * **client_auth** (*dict*) – newly generated client credentials
        the service accepts

class stem.response.authchallenge.AuthChallengeResponse(parsed_content, raw_content, arrived_at=None)

   AUTHCHALLENGE query response.

   Variables:
      * **server_hash** (*str*) – server hash provided by tor

      * **server_nonce** (*str*) – server nonce provided by tor

class stem.response.getconf.GetConfResponse(parsed_content, raw_content, arrived_at=None)

   Reply for a GETCONF query.

   Note that configuration parameters won’t match what we queried for
   if it’s one of the special mapping options (ex.
   ‘HiddenServiceOptions’).

   Variables:
      **entries** (*dict*) – mapping between the config parameter
      (**str**) and their values (**list** of **str**)

class stem.response.getinfo.GetInfoResponse(parsed_content, raw_content, arrived_at=None)

   Reply for a GETINFO query.

   Variables:
      **entries** (*dict*) – mapping between the queried options and
      their bytes values

class stem.response.mapaddress.MapAddressResponse(parsed_content, raw_content, arrived_at=None)

   Reply for a MAPADDRESS query. Doesn’t raise an exception unless no
   addresses were mapped successfully.

   Variables:
      **entries** (*dict*) – mapping between the original and
      replacement addresses

   Raises:
      * "stem.OperationFailed" if Tor was unable to satisfy the
        request

      * "stem.InvalidRequest" if the addresses provided were invalid

class stem.response.protocolinfo.ProtocolInfoResponse(parsed_content, raw_content, arrived_at=None)

   Version one PROTOCOLINFO query response.

   The protocol_version is the only mandatory data for a valid
   PROTOCOLINFO response, so all other values are None if undefined or
   empty if a collection.

   Variables:
      * **protocol_version** (*int*) – protocol version of the
        response

      * **tor_version** (*stem.version.Version*) – version of the tor
        process

      * **auth_methods** (*tuple*) – "stem.connection.AuthMethod"
        types that tor will accept

      * **unknown_auth_methods** (*tuple*) – strings of unrecognized
        auth methods

      * **cookie_path** (*str*) – path of tor’s authentication cookie


Events
======
