.. include:: header.rst

`home`__

__ reference.html

.. contents:: Table of contents
  :depth: 2
  :backlinks: none


You have some control over `session`__ configuration through the session::apply_settings()
member function. To change one or more configuration options, create a `settings_pack`__
object and fill it with the settings to be set and pass it in to session::apply_settings().

The `settings_pack`__ object is a collection of settings updates that are applied
to the `session`__ when passed to session::apply_settings(). It's empty when
constructed.

You have control over proxy and authorization settings and also the user-agent
that will be sent to the tracker. The user-agent will also be used to identify the
client with other peers.

Each configuration option is named with an enum value inside the
`settings_pack`__ class. These are the available settings:

.. raw:: html

	<a name="settings_pack"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:class+settings_pack&labels=documentation&body=Documentation+under+heading+%22class+settings_pack%22+could+be+improved">report issue</a>]</span>



settings_pack
-------------

Declared in "`libtorrent/settings_pack.hpp`__"


__ reference-Session.html#session
__ reference-Settings.html#settings_pack
__ reference-Settings.html#settings_pack
__ reference-Session.html#session
__ reference-Settings.html#settings_pack
__ include/libtorrent/settings_pack.hpp

The ``settings_pack`` struct, contains the names of all settings as
enum values. These values are passed in to the ``set_str()``,
``set_int()``, ``set_bool()`` functions, to specify the setting to
change.

The ``settings_pack`` only stores values for settings that have been
explicitly set on this object. However, it can still be queried for
settings that have not been set and returns the default value for those
settings.


.. include:: settings-ref.rst





.. parsed-literal::
	

	struct settings_pack final : settings_interface
	{
	   friend  void **apply_pack_impl** (settings\_pack const\*
	      , aux\:\:session\_settings\_single\_thread&
	      , std\:\:vector<void(aux\:\:session\_impl\:\:\*)()>\*);
	   void **set_int** (int name, flags\:\:bitfield\_flag<Type, Tag> const val);
	   void **set_bool** (int name, bool val) override;
	   void **set_int** (int name, int val) override;
	   void **set_str** (int name, std\:\:string val) override;
	   bool **has_val** (int name) const override;
	   void **clear** ();
	   void **clear** (int name);
	   bool **get_bool** (int name) const override;
	   std::string const& **get_str** (int name) const override;
	   int **get_int** (int name) const override;
	   void **for_each** (Fun&& f) const;
	
	   enum type_bases
	   {
	      string_type_base,
	      int_type_base,
	      bool_type_base,
	      type_mask,
	      index_mask,
	   };
	
	   enum mmap_write_mode_t
	   {
	      always_pwrite,
	      always_mmap_write,
	      auto_mmap_write,
	   };
	
	   enum suggest_mode_t
	   {
	      no_piece_suggestions,
	      suggest_read_cache,
	   };
	
	   enum choking_algorithm_t
	   {
	      fixed_slots_choker,
	      rate_based_choker,
	      deprecated_bittyrant_choker,
	   };
	
	   enum seed_choking_algorithm_t
	   {
	      round_robin,
	      fastest_upload,
	      anti_leech,
	   };
	
	   enum io_buffer_mode_t
	   {
	      enable_os_cache,
	      deprecated_disable_os_cache_for_aligned_files,
	      disable_os_cache,
	      write_through,
	   };
	
	   enum bandwidth_mixed_algo_t
	   {
	      prefer_tcp,
	      peer_proportional,
	   };
	
	   enum enc_policy
	   {
	      pe_forced,
	      pe_enabled,
	      pe_disabled,
	   };
	
	   enum enc_level
	   {
	      pe_plaintext,
	      pe_rc4,
	      pe_both,
	   };
	
	   enum proxy_type_t
	   {
	      none,
	      socks4,
	      socks5,
	      socks5_pw,
	      http,
	      http_pw,
	      i2p_proxy,
	   };
	};

.. raw:: html

	<a name="set_str()"></a>
	<a name="set_bool()"></a>
	<a name="set_int()"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:settings_pack%3A%3A%5Bset_str%28%29+set_bool%28%29+set_int%28%29%5D&labels=documentation&body=Documentation+under+heading+%22settings_pack%3A%3A%5Bset_str%28%29+set_bool%28%29+set_int%28%29%5D%22+could+be+improved">report issue</a>]</span>



set_str() set_bool() set_int()
..............................

.. parsed-literal::
	
	void **set_int** (int name, flags\:\:bitfield\_flag<Type, Tag> const val);
	void **set_bool** (int name, bool val) override;
	void **set_int** (int name, int val) override;
	void **set_str** (int name, std\:\:string val) override;
	

set a configuration option in the `settings_pack`__. ``name`` is one of
the enum values from string_types, int_types or bool_types. They must
match the respective type of the set_* function.


__ reference-Settings.html#settings_pack

.. raw:: html

	<a name="has_val()"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:settings_pack%3A%3A%5Bhas_val%28%29%5D&labels=documentation&body=Documentation+under+heading+%22settings_pack%3A%3A%5Bhas_val%28%29%5D%22+could+be+improved">report issue</a>]</span>



has_val()
.........

.. parsed-literal::
	
	bool **has_val** (int name) const override;
	

queries whether the specified configuration option has a value set in
this pack. ``name`` can be any enumeration value from string_types,
int_types or bool_types.



.. raw:: html

	<a name="clear()"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:settings_pack%3A%3A%5Bclear%28%29%5D&labels=documentation&body=Documentation+under+heading+%22settings_pack%3A%3A%5Bclear%28%29%5D%22+could+be+improved">report issue</a>]</span>



clear()
.......

.. parsed-literal::
	
	void **clear** ();
	

clear the settings pack from all settings



.. raw:: html

	<a name="clear()"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:settings_pack%3A%3A%5Bclear%28%29%5D&labels=documentation&body=Documentation+under+heading+%22settings_pack%3A%3A%5Bclear%28%29%5D%22+could+be+improved">report issue</a>]</span>



clear()
.......

.. parsed-literal::
	
	void **clear** (int name);
	

clear a specific setting from the pack



.. raw:: html

	<a name="get_str()"></a>
	<a name="get_int()"></a>
	<a name="get_bool()"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:settings_pack%3A%3A%5Bget_str%28%29+get_int%28%29+get_bool%28%29%5D&labels=documentation&body=Documentation+under+heading+%22settings_pack%3A%3A%5Bget_str%28%29+get_int%28%29+get_bool%28%29%5D%22+could+be+improved">report issue</a>]</span>



get_str() get_int() get_bool()
..............................

.. parsed-literal::
	
	bool **get_bool** (int name) const override;
	std::string const& **get_str** (int name) const override;
	int **get_int** (int name) const override;
	

queries the current configuration option from the `settings_pack`__.
``name`` is one of the enumeration values from string_types, int_types
or bool_types. The enum value must match the type of the get_*
function. If the specified setting field has not been set, the default
value is returned.


__ reference-Settings.html#settings_pack

.. raw:: html

	<a name="type_bases"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:enum+type_bases&labels=documentation&body=Documentation+under+heading+%22enum+type_bases%22+could+be+improved">report issue</a>]</span>



enum type_bases
...............

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

+------------------+-------+-------------+
| name             | value | description |
+==================+=======+=============+
| string_type_base | 0     |             |
+------------------+-------+-------------+
| int_type_base    | 16384 |             |
+------------------+-------+-------------+
| bool_type_base   | 32768 |             |
+------------------+-------+-------------+
| type_mask        | 49152 |             |
+------------------+-------+-------------+
| index_mask       | 16383 |             |
+------------------+-------+-------------+



.. raw:: html

	<a name="mmap_write_mode_t"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:enum+mmap_write_mode_t&labels=documentation&body=Documentation+under+heading+%22enum+mmap_write_mode_t%22+could+be+improved">report issue</a>]</span>



enum mmap_write_mode_t
......................

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

+-------------------+-------+-----------------------------------------------------------------+
| name              | value | description                                                     |
+===================+=======+=================================================================+
| always_pwrite     | 0     | disable writing to disk via mmap, always use normal write calls |
|                   |       |                                                                 |
+-------------------+-------+-----------------------------------------------------------------+
| always_mmap_write | 1     | prefer using memory mapped files for disk writes (at least for  |
|                   |       | large files where it might make sense)                          |
|                   |       |                                                                 |
+-------------------+-------+-----------------------------------------------------------------+
| auto_mmap_write   | 2     | determine whether to use pwrite or memory mapped files for disk |
|                   |       | writes depending on the kind of storage behind the save path    |
|                   |       |                                                                 |
+-------------------+-------+-----------------------------------------------------------------+



.. raw:: html

	<a name="suggest_mode_t"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:enum+suggest_mode_t&labels=documentation&body=Documentation+under+heading+%22enum+suggest_mode_t%22+could+be+improved">report issue</a>]</span>



enum suggest_mode_t
...................

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

+----------------------+-------+-------------+
| name                 | value | description |
+======================+=======+=============+
| no_piece_suggestions | 0     |             |
+----------------------+-------+-------------+
| suggest_read_cache   | 1     |             |
+----------------------+-------+-------------+



.. raw:: html

	<a name="choking_algorithm_t"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:enum+choking_algorithm_t&labels=documentation&body=Documentation+under+heading+%22enum+choking_algorithm_t%22+could+be+improved">report issue</a>]</span>



enum choking_algorithm_t
........................

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

+-----------------------------+-------+-------------------------------------------------------------------+
| name                        | value | description                                                       |
+=============================+=======+===================================================================+
| fixed_slots_choker          | 0     | This is the traditional choker with a fixed number of unchoke     |
|                             |       | slots (as specified by `settings_pack::unchoke_slots_limit`__).   |
|                             |       |                                                                   |
+-----------------------------+-------+-------------------------------------------------------------------+
| rate_based_choker           | 2     | This opens up unchoke slots based on the upload rate achieved to  |
|                             |       | peers. The more slots that are opened, the marginal upload rate   |
|                             |       | required to open up another slot increases. Configure the initial |
|                             |       | threshold with `settings_pack::rate_choker_initial_threshold`__.  |
|                             |       |                                                                   |
|                             |       | For more information, see `rate based choking`_.                  |
|                             |       |                                                                   |
+-----------------------------+-------+-------------------------------------------------------------------+
| deprecated_bittyrant_choker | 3     |                                                                   |
+-----------------------------+-------+-------------------------------------------------------------------+


__ reference-Settings.html#unchoke_slots_limit
__ reference-Settings.html#rate_choker_initial_threshold

.. raw:: html

	<a name="seed_choking_algorithm_t"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:enum+seed_choking_algorithm_t&labels=documentation&body=Documentation+under+heading+%22enum+seed_choking_algorithm_t%22+could+be+improved">report issue</a>]</span>



enum seed_choking_algorithm_t
.............................

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

+----------------+-------+--------------------------------------------------------------------+
| name           | value | description                                                        |
+================+=======+====================================================================+
| round_robin    | 0     | which round-robins the peers that are unchoked                     |
|                |       | when seeding. This distributes the upload bandwidth uniformly and  |
|                |       | fairly. It minimizes the ability for a peer to download everything |
|                |       | without redistributing it.                                         |
|                |       |                                                                    |
+----------------+-------+--------------------------------------------------------------------+
| fastest_upload | 1     | unchokes the peers we can send to the fastest. This might be a     |
|                |       | bit more reliable in utilizing all available capacity.             |
|                |       |                                                                    |
+----------------+-------+--------------------------------------------------------------------+
| anti_leech     | 2     | prioritizes peers who have just started or are                     |
|                |       | just about to finish the download. The intention is to force       |
|                |       | peers in the middle of the download to trade with each other.      |
|                |       | This does not just take into account the pieces a peer is          |
|                |       | reporting having downloaded, but also the pieces we have sent      |
|                |       | to it.                                                             |
|                |       |                                                                    |
+----------------+-------+--------------------------------------------------------------------+



.. raw:: html

	<a name="io_buffer_mode_t"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:enum+io_buffer_mode_t&labels=documentation&body=Documentation+under+heading+%22enum+io_buffer_mode_t%22+could+be+improved">report issue</a>]</span>



enum io_buffer_mode_t
.....................

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

+-----------------------------------------------+-------+-------------+
| name                                          | value | description |
+===============================================+=======+=============+
| enable_os_cache                               | 0     |             |
+-----------------------------------------------+-------+-------------+
| deprecated_disable_os_cache_for_aligned_files | 1     |             |
+-----------------------------------------------+-------+-------------+
| disable_os_cache                              | 2     |             |
+-----------------------------------------------+-------+-------------+
| write_through                                 | 3     |             |
+-----------------------------------------------+-------+-------------+



.. raw:: html

	<a name="bandwidth_mixed_algo_t"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:enum+bandwidth_mixed_algo_t&labels=documentation&body=Documentation+under+heading+%22enum+bandwidth_mixed_algo_t%22+could+be+improved">report issue</a>]</span>



enum bandwidth_mixed_algo_t
...........................

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

+-------------------+-------+-------------------------------------------------------------+
| name              | value | description                                                 |
+===================+=======+=============================================================+
| prefer_tcp        | 0     | disables the mixed mode bandwidth balancing                 |
|                   |       |                                                             |
+-------------------+-------+-------------------------------------------------------------+
| peer_proportional | 1     | does not throttle uTP, throttles TCP to the same proportion |
|                   |       | of throughput as there are TCP connections                  |
|                   |       |                                                             |
+-------------------+-------+-------------------------------------------------------------+



.. raw:: html

	<a name="enc_policy"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:enum+enc_policy&labels=documentation&body=Documentation+under+heading+%22enum+enc_policy%22+could+be+improved">report issue</a>]</span>



enum enc_policy
...............

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

+-------------+-------+---------------------------------------------------------------------+
| name        | value | description                                                         |
+=============+=======+=====================================================================+
| pe_forced   | 0     | Only encrypted connections are allowed. Incoming connections that   |
|             |       | are not encrypted are closed and if the encrypted outgoing          |
|             |       | connection fails, a non-encrypted retry will not be made.           |
|             |       |                                                                     |
+-------------+-------+---------------------------------------------------------------------+
| pe_enabled  | 1     | encrypted connections are enabled, but non-encrypted connections    |
|             |       | are allowed. An incoming non-encrypted connection will be accepted, |
|             |       | and if an outgoing encrypted connection fails, a non- encrypted     |
|             |       | connection will be tried.                                           |
|             |       |                                                                     |
+-------------+-------+---------------------------------------------------------------------+
| pe_disabled | 2     | only non-encrypted connections are allowed.                         |
|             |       |                                                                     |
+-------------+-------+---------------------------------------------------------------------+



.. raw:: html

	<a name="enc_level"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:enum+enc_level&labels=documentation&body=Documentation+under+heading+%22enum+enc_level%22+could+be+improved">report issue</a>]</span>



enum enc_level
..............

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

+--------------+-------+--------------------------------+
| name         | value | description                    |
+==============+=======+================================+
| pe_plaintext | 1     | use only plain text encryption |
|              |       |                                |
+--------------+-------+--------------------------------+
| pe_rc4       | 2     | use only RC4 encryption        |
|              |       |                                |
+--------------+-------+--------------------------------+
| pe_both      | 3     | allow both                     |
|              |       |                                |
+--------------+-------+--------------------------------+



.. raw:: html

	<a name="proxy_type_t"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:enum+proxy_type_t&labels=documentation&body=Documentation+under+heading+%22enum+proxy_type_t%22+could+be+improved">report issue</a>]</span>



enum proxy_type_t
.................

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

+-----------+-------+-------------------------------------------------------------------------------+
| name      | value | description                                                                   |
+===========+=======+===============================================================================+
| none      | 0     | No proxy server is used and all other fields are ignored.                     |
|           |       |                                                                               |
+-----------+-------+-------------------------------------------------------------------------------+
| socks4    | 1     | The server is assumed to be a `SOCKS4 server`_ that requires a                |
|           |       | username.                                                                     |
|           |       |                                                                               |
|           |       | .. _`SOCKS4 server`: http://www.ufasoft.com/doc/socks4_protocol.htm           |
|           |       |                                                                               |
+-----------+-------+-------------------------------------------------------------------------------+
| socks5    | 2     | The server is assumed to be a SOCKS5 server (`RFC 1928`_) that does           |
|           |       | not require any authentication. The username and password are                 |
|           |       | ignored.                                                                      |
|           |       |                                                                               |
|           |       | .. _`RFC 1928`: http://www.faqs.org/rfcs/rfc1928.html                         |
|           |       |                                                                               |
+-----------+-------+-------------------------------------------------------------------------------+
| socks5_pw | 3     | The server is assumed to be a SOCKS5 server that supports plain               |
|           |       | text username and password authentication (`RFC 1929`_). The                  |
|           |       | username and password specified may be sent to the proxy if it                |
|           |       | requires.                                                                     |
|           |       |                                                                               |
|           |       | .. _`RFC 1929`: http://www.faqs.org/rfcs/rfc1929.html                         |
|           |       |                                                                               |
+-----------+-------+-------------------------------------------------------------------------------+
| http      | 4     | The server is assumed to be an HTTP proxy. If the transport used              |
|           |       | for the connection is non-HTTP, the server is assumed to support              |
|           |       | the CONNECT_ method. i.e. for web seeds and HTTP trackers, a plain            |
|           |       | proxy will suffice. The proxy is assumed to not require                       |
|           |       | authorization. The username and password will not be used.                    |
|           |       |                                                                               |
|           |       | .. _CONNECT: http://tools.ietf.org/html/draft-luotonen-web-proxy-tunneling-01 |
|           |       |                                                                               |
+-----------+-------+-------------------------------------------------------------------------------+
| http_pw   | 5     | The server is assumed to be an HTTP proxy that requires user                  |
|           |       | authorization. The username and password will be sent to the proxy.           |
|           |       |                                                                               |
+-----------+-------+-------------------------------------------------------------------------------+
| i2p_proxy | 6     | route through a i2p SAM proxy                                                 |
|           |       |                                                                               |
+-----------+-------+-------------------------------------------------------------------------------+



.. raw:: html

	<a name="setting_by_name()"></a>
	<a name="name_for_setting()"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:setting_by_name%28%29+name_for_setting%28%29&labels=documentation&body=Documentation+under+heading+%22setting_by_name%28%29+name_for_setting%28%29%22+could+be+improved">report issue</a>]</span>



setting_by_name() name_for_setting()
------------------------------------

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

.. parsed-literal::
	
	int **setting_by_name** (string\_view name);
	char const* **name_for_setting** (int s);
	

converts a setting integer (from the enums string_types, int_types or
bool_types) to a string, and vice versa.



.. raw:: html

	<a name="default_settings()"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:default_settings%28%29&labels=documentation&body=Documentation+under+heading+%22default_settings%28%29%22+could+be+improved">report issue</a>]</span>



default_settings()
------------------

Declared in "`libtorrent/settings_pack.hpp`__"


__ include/libtorrent/settings_pack.hpp

.. parsed-literal::
	
	settings_pack **default_settings** ();
	

returns a `settings_pack`__ with every setting set to its default value


__ reference-Settings.html#settings_pack

.. raw:: html

	<a name="min_memory_usage()"></a>
	<a name="high_performance_seed()"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:min_memory_usage%28%29+high_performance_seed%28%29&labels=documentation&body=Documentation+under+heading+%22min_memory_usage%28%29+high_performance_seed%28%29%22+could+be+improved">report issue</a>]</span>



min_memory_usage() high_performance_seed()
------------------------------------------

Declared in "`libtorrent/session.hpp`__"


__ include/libtorrent/session.hpp

.. parsed-literal::
	
	settings_pack **min_memory_usage** ();
	settings_pack **high_performance_seed** ();
	

The default values of the `session`__ settings are set for a regular
bittorrent client running on a desktop system. There are functions that
can set the `session`__ settings to pre set settings for other environments.
These can be used for the basis, and should be tweaked to fit your needs
better.

``min_memory_usage`` returns settings that will use the minimal amount of
RAM, at the potential expense of upload and download performance. It
adjusts the socket buffer sizes, disables the disk cache, lowers the send
buffer watermarks so that each connection only has at most one block in
use at any one time. It lowers the outstanding blocks send to the disk
I/O thread so that connections only have one block waiting to be flushed
to disk at any given time. It lowers the max number of peers in the peer
list for torrents. It performs multiple smaller reads when it hashes
pieces, instead of reading it all into memory before hashing.

This configuration is intended to be the starting point for embedded
devices. It will significantly reduce memory usage.

``high_performance_seed`` returns settings optimized for a seed box,
serving many peers and that doesn't do any downloading. It has a 128 MB
disk cache and has a limit of 400 files in its file pool. It support fast
upload rates by allowing large send buffers.


__ reference-Session.html#session
__ reference-Session.html#session

.. raw:: html

	<a name="generate_fingerprint()"></a>

.. raw:: html

	<span class="report-issue">[<a href="http://github.com/arvidn/libtorrent/issues/new?title=docs:generate_fingerprint%28%29&labels=documentation&body=Documentation+under+heading+%22generate_fingerprint%28%29%22+could+be+improved">report issue</a>]</span>



generate_fingerprint()
----------------------

Declared in "`libtorrent/fingerprint.hpp`__"


__ include/libtorrent/fingerprint.hpp

.. parsed-literal::
	
	std::string **generate_fingerprint** (std\:\:string name
	   , int major, int minor = 0, int revision = 0, int tag = 0);
	

This is a utility function to produce a client ID fingerprint formatted to
the most common convention. The fingerprint can be set via the
``peer_fingerprint`` setting, in `settings_pack`__.

The name string should contain exactly two characters. These are the
characters unique to your client, used to identify it. Make sure not to
clash with anybody else. Here are some taken id's:

+----------+-----------------------+
| id chars | client                |
+==========+=======================+
| LT       | libtorrent (default)  |
+----------+-----------------------+
| UT       | uTorrent              |
+----------+-----------------------+
| UM       | uTorrent Mac          |
+----------+-----------------------+
| qB       | qBittorrent           |
+----------+-----------------------+
| BP       | BitTorrent Pro        |
+----------+-----------------------+
| BT       | BitTorrent            |
+----------+-----------------------+
| DE       | Deluge                |
+----------+-----------------------+
| AZ       | Azureus               |
+----------+-----------------------+
| TL       | Tribler               |
+----------+-----------------------+

There's an informal directory of client id's here_.

.. _here: http://wiki.theory.org/BitTorrentSpecification#peer_id

The ``major``, ``minor``, ``revision`` and ``tag`` parameters are used to
identify the version of your client.


__ reference-Settings.html#settings_pack



.. _`BEP 3`: https://www.bittorrent.org/beps/bep_0003.html
.. _`BEP 17`: https://www.bittorrent.org/beps/bep_0017.html
.. _extensions: manual-ref.html#extensions
.. _`BEP 52`: https://www.bittorrent.org/beps/bep_0052.html
.. _`BEP 19`: https://www.bittorrent.org/beps/bep_0019.html
.. _`BEP 38`: https://www.bittorrent.org/beps/bep_0038.html
.. _`rate based choking`: manual-ref.html#rate-based-choking
.. _`BEP 42`: https://www.bittorrent.org/beps/bep_0042.html
