mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-08-14 22:22:31 +00:00
* Fixed the man page to include the latest modifications.
* Bound ^F and ^B for navigating and swapped ^P and ^N in some windows to get correct behavior. * Sanitized and added PeerInfo and PeerList to the API. * HashTorrent now waits for the last outstanding chunks finish before allowing a chunk mapping error to bork the hashing. * Lowered the default hash_interval to 5 msec and hash_max_tries to 5. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@765 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
+29
-126
@@ -68,16 +68,12 @@ supporting B, K, M and G suffixes.
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>up | down</term>
|
||||
<term>up | down | left | right arrow keys</term>
|
||||
<term>^P | ^N | ^B | ^F</term>
|
||||
<listitem><para>
|
||||
Select item.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><-</term>
|
||||
<listitem><para>
|
||||
Go back to the previous screen.
|
||||
Select entries or change windows. The right arrow key or ^F is often
|
||||
used for viewing details about the selected entry, while the left
|
||||
arrow key or ^B often returns to the previous screen.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -121,104 +117,94 @@ supporting B, K, M and G suffixes.
|
||||
<varlistentry>
|
||||
<term>-></term>
|
||||
<listitem><para>
|
||||
View download.
|
||||
View download.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>1 - 7</term>
|
||||
<listitem><para>
|
||||
|
||||
Change view.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>^S</term>
|
||||
<listitem><para>
|
||||
Start download.
|
||||
Start download.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>^D</term>
|
||||
<listitem><para>
|
||||
|
||||
Stop an active download, or remove a stopped download.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>^K</term>
|
||||
<listitem><para>
|
||||
|
||||
Close a torrent and its files.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>^R</term>
|
||||
<listitem><para>
|
||||
Initiate hash check of torrent.
|
||||
Initiate hash check of torrent.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>^O</term>
|
||||
<listitem><para>
|
||||
Change the destination directory of the download. The
|
||||
torrent must be closed.
|
||||
Change the destination directory of the download. The torrent must be
|
||||
closed.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>^X</term>
|
||||
<listitem><para>
|
||||
Call commands or change settings.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>+ | -</term>
|
||||
<listitem><para>
|
||||
Change the priority of the download.
|
||||
Change the priority of the download.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>backspace</term>
|
||||
<listitem><para>
|
||||
Add torrent using an URL or file path. Use
|
||||
<emphasis>tab</emphasis> to view directory content and do
|
||||
auto-complete.
|
||||
Add torrent using an URL or file path. Use
|
||||
<emphasis>tab</emphasis> to view directory content and do
|
||||
auto-complete.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>l</term>
|
||||
<listitem><para>
|
||||
View log. Exit by pressing the space-bar.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>^P</term>
|
||||
<listitem><para>
|
||||
Call commands or change settings.
|
||||
View log. Exit by pressing the space-bar.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>U</term>
|
||||
<listitem><para>
|
||||
|
||||
Delete the file the torrent is tied to, and clear the association.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>I</term>
|
||||
<listitem><para>
|
||||
|
||||
Toggle whether torrent ignores ratio settings.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -234,16 +220,15 @@ Toggle whether torrent ignores ratio settings.
|
||||
<varlistentry>
|
||||
<term>-></term>
|
||||
<listitem><para>
|
||||
View torrent file list. Use the space-bar to change the
|
||||
file priority and <emphasis>*</emphasis> to change the
|
||||
priority of all files.
|
||||
View torrent file list. Use the space-bar to change the file priority
|
||||
and <emphasis>*</emphasis> to change the priority of all files.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>1 | 2</term>
|
||||
<listitem><para>
|
||||
Adjust max uploads.
|
||||
Adjust max uploads.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -251,79 +236,65 @@ Toggle whether torrent ignores ratio settings.
|
||||
<varlistentry>
|
||||
<term>3 | 4</term>
|
||||
<listitem><para>
|
||||
Adjust min peers.
|
||||
Adjust min peers.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>5 | 6</term>
|
||||
<listitem><para>
|
||||
Adjust max peers.
|
||||
Adjust max peers.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>u</term>
|
||||
<listitem><para>
|
||||
|
||||
Display transfering blocks.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>i</term>
|
||||
<listitem><para>
|
||||
|
||||
Display chunk rarity.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>o</term>
|
||||
<listitem><para>
|
||||
|
||||
Display the tracker list. Cycle the trackers in a group
|
||||
|
||||
with the space-bar.
|
||||
Display the tracker list. Cycle the trackers in a group with the
|
||||
space-bar.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>p</term>
|
||||
<listitem><para>
|
||||
|
||||
View peer and torrent information.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>t | T</term>
|
||||
<listitem><para>
|
||||
|
||||
Initiate tracker request. Use capital T to force the request, ignoring
|
||||
the "min interval" set by the tracker.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>k</term>
|
||||
<listitem><para>
|
||||
|
||||
Disconnect peer.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>*</term>
|
||||
<listitem><para>
|
||||
|
||||
Choke/Snub peer.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -342,46 +313,36 @@ Choke/Snub peer.
|
||||
<varlistentry>
|
||||
<term>-b <replaceable>a.b.c.d</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Bind listening socket and outgoing connections to this network
|
||||
interface address.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-d <replaceable>directory</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the default download directory. Defaults to "./".
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-h</term>
|
||||
<listitem><para>
|
||||
|
||||
Display help and exit.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-i <replaceable>a.b.c.d</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the address reported to the tracker.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-n</term>
|
||||
<listitem><para>
|
||||
|
||||
Don't load ~/.rtorrent.rc on startup.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -389,34 +350,28 @@ Don't load ~/.rtorrent.rc on startup.
|
||||
<term>-o key1=opt1,...</term>
|
||||
<term>-O key=opt</term>
|
||||
<listitem><para>
|
||||
|
||||
Set any number of options, see the SETTINGS section. The options given
|
||||
here override the resource files. Use capital <emphasis>-O</emphasis>
|
||||
to allow comma in the option.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-p <replaceable>a-b</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Try to open a listening port in the range <emphasis>a</emphasis> up to
|
||||
and including <emphasis>b</emphasis>.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-s <replaceable>directory</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Session management will be enabled and the torrent files for all open
|
||||
downloads will be stored in this directory. Only one instance of
|
||||
rtorrent should be used with each session directory, though at the
|
||||
moment no locking is done. An empty string will disable the session
|
||||
directory.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -435,75 +390,59 @@ directory.
|
||||
<varlistentry>
|
||||
<term>max_peers = <replaceable>value</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the maximum number of peers to allow in each download.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>min_peers = <replaceable>value</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the minimum number of peers to try to connect to in each download.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>max_peers_seed = <replaceable>value</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the maximum number of peers to allow while seeding, or -1 (default) to use
|
||||
max_peers.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>min_peers_seed = <replaceable>value</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the minimum number of peers to try to connect to while seeding, or -1 (default) to use
|
||||
min_peers.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>max_uploads = <replaceable>value</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the maximum number of simultaneous uploads per download.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>download_rate = <replaceable>KB</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the maximum global download rate.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>upload_rate = <replaceable>KB</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the maximum global upload rate.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>bind = <replaceable>a.b.c.d</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Bind listening socket and outgoing connections to this network
|
||||
interface address.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -511,86 +450,69 @@ interface address.
|
||||
<term>ip = <replaceable>a.b.c.d</replaceable></term>
|
||||
<term>ip = <replaceable>hostname</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the address reported to the tracker.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>port_range = <replaceable>a-b</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Try to open a listening port in the range <emphasis>a</emphasis> up to
|
||||
and including <emphasis>b</emphasis>.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>port_random = <replaceable>yes | no</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Open the listening port at a random position in the port range.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>check_hash = <replaceable>yes | no</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Perform hash check on torrents that have finished downloading.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>directory = <replaceable>directory</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Set the default download directory. Defaults to "./".
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>session = <replaceable>directory</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Session management will be enabled and the torrent files for all open
|
||||
downloads will be stored in this directory. Only one instance of
|
||||
rtorrent should be used with each session directory, though at the
|
||||
moment no locking is done. An empty string will disable the session
|
||||
directory.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>http_proxy = <replaceable>url</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Use a http proxy. Use an empty string to disable.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>encoding_list = <replaceable>encoding</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Add a preferred filename encoding to the list. The encodings are
|
||||
attempted in the order they are inserted, if none match the torrent
|
||||
default is used.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>schedule = <replaceable>id</replaceable>,<replaceable>start</replaceable>,<replaceable>interval</replaceable>,<replaceable>command</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Call <emphasis>command</emphasis> every <emphasis>interval</emphasis>
|
||||
seconds, starting from <emphasis>start</emphasis>. An
|
||||
<emphasis>interval</emphasis> of zero calls the task once, while a
|
||||
@@ -601,25 +523,20 @@ seconds, starting from <emphasis>start</emphasis>. An
|
||||
optionally use a time format, <emphasis>dd:hh:mm:ss</emphasis>. F.ex to
|
||||
start a task every day at <emphasis>18:00</emphasis>, use
|
||||
<emphasis>18:00:00,24:00:00</emphasis>.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>schedule_remove = <replaceable>id</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Delete <emphasis>id</emphasis> from the scheduler.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>start_tied =</term>
|
||||
<listitem><para>
|
||||
|
||||
Start torrents that are tied to filenames that have been re-added.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -628,21 +545,17 @@ Start torrents that are tied to filenames that have been re-added.
|
||||
<term>close_untied =</term>
|
||||
<term>remove_untied =</term>
|
||||
<listitem><para>
|
||||
|
||||
Stop, close or remove the torrents that are tied to filenames that
|
||||
have been deleted. Clear the association with the 'U' key.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>close_low_diskspace = <replaceable>space</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Close any active torrents on filesystems with less than
|
||||
<emphasis>space</emphasis> diskspace left. Use with
|
||||
the <emphasis>schedule</emphasis> option.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -651,7 +564,6 @@ the <emphasis>schedule</emphasis> option.
|
||||
<term>stop_on_ratio = <replaceable>min_ratio</replaceable>,<replaceable>min_upload</replaceable></term>
|
||||
<term>stop_on_ratio = <replaceable>min_ratio</replaceable>,<replaceable>min_upload</replaceable>,<replaceable>max_ratio</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Stop torrents when they reach the given upload ratio
|
||||
<emphasis>min_ratio</emphasis> in percent. If the optional
|
||||
<emphasis>min_upload</emphasis> is given, require a total
|
||||
@@ -661,7 +573,6 @@ when reaching this ratio regardless of the total upload
|
||||
amount. Exclude certain torrent by pressing
|
||||
<emphasis>Shift+I</emphasis> in the downlist list.
|
||||
Use with the <emphasis>schedule</emphasis> option.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -671,13 +582,11 @@ Use with the <emphasis>schedule</emphasis> option.
|
||||
<term>load_start = <replaceable>file</replaceable></term>
|
||||
<term>load_start_verbose = <replaceable>file</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Load and possibly start a file, or possibly multiple files by using the
|
||||
wild-card "*". This is meant for use with
|
||||
<emphasis>schedule</emphasis>, though ensure that the
|
||||
<emphasis>start</emphasis> is non-zero. The loaded file will be tied
|
||||
to the filename provided.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -685,10 +594,8 @@ to the filename provided.
|
||||
<term>import = <replaceable>file</replaceable></term>
|
||||
<term>try_import = <replaceable>file</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Load a resource file. <emphasis>try_import</emphasis> does not throw
|
||||
torrent::input_error exception on bad input.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -708,9 +615,7 @@ torrent::input_error exception on bad input.
|
||||
<varlistentry>
|
||||
<term>view_add = <replaceable>name</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Create a new view.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -718,13 +623,11 @@ Create a new view.
|
||||
<term>view_sort = <replaceable>name</replaceable></term>
|
||||
<term>view_sort = <replaceable>name</replaceable>,<replaceable>seconds</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Sort a view according the the criteria set by
|
||||
<emphasis>view_sort_current</emphasis>. If the optional argument is
|
||||
supplied, the view is not sorted if a change happened during the last
|
||||
<emphasis>seconds</emphasis>. This command is meant to be used with
|
||||
<emphasis>schedule</emphasis>.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
||||
+59
-12
@@ -76,8 +76,8 @@ public:
|
||||
// Should we need to set AF_UNSPEC?
|
||||
void clear() { std::memset(this, 0, sizeof(socket_address)); set_family(); }
|
||||
|
||||
sa_family_t family() const { return m_sa.m_sockaddr.sa_family; }
|
||||
void set_family() { m_sa.m_sockaddr.sa_family = af_unspec; }
|
||||
sa_family_t family() const { return m_sockaddr.sa_family; }
|
||||
void set_family() { m_sockaddr.sa_family = af_unspec; }
|
||||
|
||||
uint16_t port() const;
|
||||
void set_port(uint16_t p);
|
||||
@@ -95,18 +95,18 @@ public:
|
||||
socket_address_inet* sa_inet() { return reinterpret_cast<socket_address_inet*>(this); }
|
||||
const socket_address_inet* sa_inet() const { return reinterpret_cast<const socket_address_inet*>(this); }
|
||||
|
||||
sockaddr* c_sockaddr() { return &m_sa.m_sockaddr; }
|
||||
sockaddr_in* c_sockaddr_inet() { return &m_sa.m_sockaddrInet; }
|
||||
sockaddr* c_sockaddr() { return &m_sockaddr; }
|
||||
sockaddr_in* c_sockaddr_inet() { return &m_sockaddrInet; }
|
||||
|
||||
const sockaddr* c_sockaddr() const { return &m_sa.m_sockaddr; }
|
||||
const sockaddr_in* c_sockaddr_inet() const { return &m_sa.m_sockaddrInet; }
|
||||
const sockaddr* c_sockaddr() const { return &m_sockaddr; }
|
||||
const sockaddr_in* c_sockaddr_inet() const { return &m_sockaddrInet; }
|
||||
|
||||
#ifdef RAK_USE_INET6
|
||||
socket_address_inet6* sa_inet6() { return reinterpret_cast<socket_address_inet6*>(this); }
|
||||
const socket_address_inet6* sa_inet6() const { return reinterpret_cast<const socket_address_inet6*>(this); }
|
||||
|
||||
sockaddr_in6* c_sockaddr_inet6() { return &m_sa.m_sockaddrInet6; }
|
||||
const sockaddr_in6* c_sockaddr_inet6() const { return &m_sa.m_sockaddrInet6; }
|
||||
sockaddr_in6* c_sockaddr_inet6() { return &m_sockaddrInet6; }
|
||||
const sockaddr_in6* c_sockaddr_inet6() const { return &m_sockaddrInet6; }
|
||||
#endif
|
||||
|
||||
// Copy a socket address which has the length 'length. Zero out any
|
||||
@@ -120,18 +120,21 @@ public:
|
||||
// The different families will be sorted according to the
|
||||
// sa_family_t's numeric value.
|
||||
bool operator == (const socket_address& rhs) const;
|
||||
bool operator < (const socket_address& rhs) const;
|
||||
bool operator < (const socket_address& rhs) const;
|
||||
|
||||
bool operator == (const sockaddr& rhs) const { return *this == *cast_from(&rhs); }
|
||||
bool operator == (const sockaddr* rhs) const { return *this == *cast_from(rhs); }
|
||||
bool operator < (const sockaddr& rhs) const { return *this == *cast_from(&rhs); }
|
||||
bool operator < (const sockaddr* rhs) const { return *this == *cast_from(rhs); }
|
||||
|
||||
private:
|
||||
union sa_union {
|
||||
union {
|
||||
sockaddr m_sockaddr;
|
||||
sockaddr_in m_sockaddrInet;
|
||||
#ifdef RAK_USE_INET6
|
||||
sockaddr_in6 m_sockaddrInet6;
|
||||
#endif
|
||||
};
|
||||
|
||||
sa_union m_sa;
|
||||
};
|
||||
|
||||
// Remeber to set the AF_INET.
|
||||
@@ -181,6 +184,50 @@ private:
|
||||
struct sockaddr_in m_sockaddr;
|
||||
};
|
||||
|
||||
// Unique key for the address, excluding port numbers etc.
|
||||
class socket_address_key {
|
||||
public:
|
||||
// socket_address_host_key() {}
|
||||
|
||||
socket_address_key(const socket_address& sa) {
|
||||
*this = sa;
|
||||
}
|
||||
|
||||
socket_address_key& operator = (const socket_address& sa) {
|
||||
if (sa.family() == 0) {
|
||||
std::memset(this, 0, sizeof(socket_address_key));
|
||||
|
||||
} else if (sa.family() == socket_address::af_inet) {
|
||||
// Using hardware order as we use operator < to compare when
|
||||
// using inet only.
|
||||
m_addr.s_addr = sa.sa_inet()->address_h();
|
||||
|
||||
} else {
|
||||
// When we implement INET6 handling, embed the ipv4 address in
|
||||
// the ipv6 address.
|
||||
throw std::logic_error("socket_address_key(...) received an unsupported protocol family.");
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
// socket_address_key& operator = (const socket_address_key& sa) {
|
||||
// }
|
||||
|
||||
bool operator < (const socket_address_key& sa) const {
|
||||
// Compare the memory area instead.
|
||||
return m_addr.s_addr < sa.m_addr.s_addr;
|
||||
}
|
||||
|
||||
private:
|
||||
union {
|
||||
in_addr m_addr;
|
||||
// #ifdef RAK_USE_INET6
|
||||
// in_addr6 m_addr6;
|
||||
// #endif
|
||||
};
|
||||
};
|
||||
|
||||
inline bool
|
||||
socket_address::is_valid() const {
|
||||
switch (family()) {
|
||||
|
||||
@@ -321,10 +321,12 @@ DownloadList::setup_keys() {
|
||||
m_bindings['\x0F'] = sigc::bind(sigc::mem_fun(*this, &DownloadList::receive_view_input), INPUT_CHANGE_DIRECTORY);
|
||||
m_bindings['X' - '@'] = sigc::bind(sigc::mem_fun(*this, &DownloadList::receive_view_input), INPUT_COMMAND);
|
||||
|
||||
m_uiArray[DISPLAY_LOG]->bindings()[' '] = sigc::bind(sigc::mem_fun(*this, &DownloadList::activate_display), DISPLAY_DOWNLOAD_LIST);
|
||||
m_uiArray[DISPLAY_LOG]->bindings()[KEY_LEFT] = sigc::bind(sigc::mem_fun(*this, &DownloadList::activate_display), DISPLAY_DOWNLOAD_LIST);
|
||||
m_uiArray[DISPLAY_LOG]->bindings()[KEY_LEFT] =
|
||||
m_uiArray[DISPLAY_LOG]->bindings()['B' - '@'] =
|
||||
m_uiArray[DISPLAY_LOG]->bindings()[' '] = sigc::bind(sigc::mem_fun(*this, &DownloadList::activate_display), DISPLAY_DOWNLOAD_LIST);
|
||||
|
||||
m_uiArray[DISPLAY_DOWNLOAD_LIST]->bindings()[KEY_RIGHT] = sigc::bind(sigc::mem_fun(*this, &DownloadList::activate_display), DISPLAY_DOWNLOAD);
|
||||
m_uiArray[DISPLAY_DOWNLOAD_LIST]->bindings()[KEY_RIGHT] =
|
||||
m_uiArray[DISPLAY_DOWNLOAD_LIST]->bindings()['F' - '@'] = sigc::bind(sigc::mem_fun(*this, &DownloadList::activate_display), DISPLAY_DOWNLOAD);
|
||||
m_uiArray[DISPLAY_DOWNLOAD_LIST]->bindings()['l'] = sigc::bind(sigc::mem_fun(*this, &DownloadList::activate_display), DISPLAY_LOG);
|
||||
}
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ ElementChunksSeen::ElementChunksSeen(core::Download* d) :
|
||||
m_window(NULL),
|
||||
m_focus(0) {
|
||||
|
||||
m_bindings[KEY_LEFT] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
m_bindings[KEY_LEFT] = m_bindings['B' - '@'] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
|
||||
m_bindings[KEY_DOWN] = sigc::mem_fun(*this, &ElementChunksSeen::receive_next);
|
||||
m_bindings[KEY_UP] = sigc::mem_fun(*this, &ElementChunksSeen::receive_prev);
|
||||
|
||||
@@ -53,15 +53,15 @@ ElementFileList::ElementFileList(core::Download* d) :
|
||||
m_window(NULL),
|
||||
m_focus(0) {
|
||||
|
||||
m_bindings[KEY_LEFT] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
m_bindings[KEY_LEFT] = m_bindings['B' - '@'] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
|
||||
m_bindings[' '] = sigc::mem_fun(*this, &ElementFileList::receive_priority);
|
||||
m_bindings['*'] = sigc::mem_fun(*this, &ElementFileList::receive_change_all);
|
||||
m_bindings[KEY_NPAGE] = sigc::mem_fun(*this, &ElementFileList::receive_pagenext);
|
||||
m_bindings[KEY_PPAGE] = sigc::mem_fun(*this, &ElementFileList::receive_pageprev);
|
||||
|
||||
m_bindings[KEY_DOWN] = m_bindings['P' - '@'] = sigc::mem_fun(*this, &ElementFileList::receive_next);
|
||||
m_bindings[KEY_UP] = m_bindings['N' - '@'] = sigc::mem_fun(*this, &ElementFileList::receive_prev);
|
||||
m_bindings[KEY_DOWN] = m_bindings['N' - '@'] = sigc::mem_fun(*this, &ElementFileList::receive_next);
|
||||
m_bindings[KEY_UP] = m_bindings['P' - '@'] = sigc::mem_fun(*this, &ElementFileList::receive_prev);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -72,8 +72,8 @@ ElementMenu::ElementMenu() :
|
||||
m_entry(entry_invalid) {
|
||||
|
||||
// Move bindings into a function that defines default bindings.
|
||||
m_bindings[KEY_LEFT] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
m_bindings[KEY_RIGHT] = sigc::mem_fun(this, &ElementMenu::entry_select);
|
||||
m_bindings[KEY_LEFT] = m_bindings['B' - '@'] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
m_bindings[KEY_RIGHT] = m_bindings['F' - '@'] = sigc::mem_fun(this, &ElementMenu::entry_select);
|
||||
|
||||
m_bindings[KEY_UP] = m_bindings['P' - '@'] = sigc::mem_fun(this, &ElementMenu::entry_prev);
|
||||
m_bindings[KEY_DOWN] = m_bindings['N' - '@'] = sigc::mem_fun(this, &ElementMenu::entry_next);
|
||||
|
||||
@@ -72,8 +72,8 @@ ElementPeerList::ElementPeerList(core::Download* d) :
|
||||
|
||||
m_bindings['k'] = sigc::mem_fun(this, &ElementPeerList::receive_disconnect_peer);
|
||||
m_bindings['*'] = sigc::mem_fun(this, &ElementPeerList::receive_snub_peer);
|
||||
m_bindings[KEY_LEFT] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
m_bindings[KEY_RIGHT] = sigc::bind(sigc::mem_fun(this, &ElementPeerList::activate_display), DISPLAY_INFO);
|
||||
m_bindings[KEY_LEFT] = m_bindings['B' - '@'] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
m_bindings[KEY_RIGHT] = m_bindings['F' - '@'] = sigc::bind(sigc::mem_fun(this, &ElementPeerList::activate_display), DISPLAY_INFO);
|
||||
|
||||
m_bindings[KEY_UP] = m_bindings['P' - '@'] = sigc::mem_fun(this, &ElementPeerList::receive_prev);
|
||||
m_bindings[KEY_DOWN] = m_bindings['N' - '@'] = sigc::mem_fun(this, &ElementPeerList::receive_next);
|
||||
|
||||
@@ -54,11 +54,11 @@ ElementText::ElementText(void *object) :
|
||||
m_columnWidth(0) {
|
||||
|
||||
// Move bindings into a function that defines default bindings.
|
||||
m_bindings[KEY_LEFT] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
m_bindings[KEY_LEFT] = m_bindings['B' - '@'] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
|
||||
// m_bindings[KEY_UP] = sigc::mem_fun(this, &ElementText::entry_prev);
|
||||
// m_bindings[KEY_DOWN] = sigc::mem_fun(this, &ElementText::entry_next);
|
||||
// m_bindings[KEY_RIGHT] = sigc::mem_fun(this, &ElementText::entry_select);
|
||||
// m_bindings[KEY_RIGHT] = m_bindings['F' - '@'] = sigc::mem_fun(this, &ElementText::entry_select);
|
||||
}
|
||||
|
||||
ElementText::~ElementText() {
|
||||
|
||||
@@ -54,13 +54,13 @@ ElementTrackerList::ElementTrackerList(core::Download* d) :
|
||||
m_window(NULL),
|
||||
m_focus(0) {
|
||||
|
||||
m_bindings[KEY_LEFT] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
m_bindings[KEY_LEFT] = m_bindings['B' - '@'] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
|
||||
m_bindings[' '] = sigc::mem_fun(*this, &ElementTrackerList::receive_cycle_group);
|
||||
m_bindings['*'] = sigc::mem_fun(*this, &ElementTrackerList::receive_disable);
|
||||
|
||||
m_bindings[KEY_DOWN] = m_bindings['P' - '@'] = sigc::mem_fun(*this, &ElementTrackerList::receive_next);
|
||||
m_bindings[KEY_UP] = m_bindings['N' - '@'] = sigc::mem_fun(*this, &ElementTrackerList::receive_prev);
|
||||
m_bindings[KEY_DOWN] = m_bindings['N' - '@'] = sigc::mem_fun(*this, &ElementTrackerList::receive_next);
|
||||
m_bindings[KEY_UP] = m_bindings['P' - '@'] = sigc::mem_fun(*this, &ElementTrackerList::receive_prev);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -52,7 +52,7 @@ ElementTransferList::ElementTransferList(core::Download* d) :
|
||||
m_window(NULL),
|
||||
m_focus(0) {
|
||||
|
||||
m_bindings[KEY_LEFT] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
m_bindings[KEY_LEFT] = m_bindings['B' - '@'] = sigc::mem_fun(&m_slotExit, &slot_type::operator());
|
||||
|
||||
m_bindings[KEY_DOWN] = sigc::mem_fun(*this, &ElementTransferList::receive_next);
|
||||
m_bindings[KEY_UP] = sigc::mem_fun(*this, &ElementTransferList::receive_prev);
|
||||
|
||||
Reference in New Issue
Block a user