2013-12-21 10:54:17 +01:00
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" / >
2014-04-29 23:04:11 +02:00
< meta name = "generator" content = "Docutils 0.11: http://docutils.sourceforge.net/" / >
2013-12-21 10:54:17 +01:00
< title > Filter< / title >
< meta name = "author" content = "Arvid Norberg, arvid@rasterbar.com" / >
< link rel = "stylesheet" type = "text/css" href = "../../css/base.css" / >
< link rel = "stylesheet" type = "text/css" href = "../../css/rst.css" / >
< script type = "text/javascript" >
/* < ![CDATA[ */
(function() {
var s = document.createElement('script'), t = document.getElementsByTagName('script')[0];
s.type = 'text/javascript';
s.async = true;
s.src = 'http://api.flattr.com/js/0.6/load.js?mode=auto';
t.parentNode.insertBefore(s, t);
})();
/* ]]> */
< / script >
< link rel = "stylesheet" href = "style.css" type = "text/css" / >
< style type = "text/css" >
/* Hides from IE-mac \*/
* html pre { height: 1%; }
/* End hide from IE-mac */
< / style >
< / head >
< body >
< div class = "document" id = "filter" >
< div id = "container" >
< div id = "headerNav" >
< ul >
< li class = "first" > < a href = "/" > Home< / a > < / li >
< li > < a href = "../../products.html" > Products< / a > < / li >
< li > < a href = "../../contact.html" > Contact< / a > < / li >
< / ul >
< / div >
< div id = "header" >
< div id = "orange" > < / div >
< div id = "logo" > < / div >
< / div >
< div id = "main" >
< h1 class = "title" > Filter< / h1 >
< table class = "docinfo" frame = "void" rules = "none" >
< col class = "docinfo-name" / >
< col class = "docinfo-content" / >
< tbody valign = "top" >
< tr > < th class = "docinfo-name" > Author:< / th >
< td > Arvid Norberg, < a class = "last reference external" href = "mailto:arvid@rasterbar.com" > arvid@ rasterbar.com< / a > < / td > < / tr >
< tr > < th class = "docinfo-name" > Version:< / th >
< td > 1.0.0< / td > < / tr >
< / tbody >
< / table >
< div class = "contents topic" id = "table-of-contents" >
< p class = "topic-title first" > Table of contents< / p >
< ul class = "simple" >
< li > < a class = "reference internal" href = "#ip-filter" id = "id10" > ip_filter< / a > < / li >
< li > < a class = "reference internal" href = "#port-filter" id = "id11" > port_filter< / a > < / li >
< / ul >
< / div >
< a name = "ip_filter" > < / a > < div class = "section" id = "ip-filter" >
< h1 > ip_filter< / h1 >
< p > Declared in " < a class = "reference external" href = "../include/libtorrent/ip_filter.hpp" > libtorrent/ip_filter.hpp< / a > " < / p >
< p > The < tt class = "docutils literal" > ip_filter< / tt > class is a set of rules that uniquely categorizes all
ip addresses as allowed or disallowed. The default constructor creates
a single rule that allows all addresses (0.0.0.0 - 255.255.255.255 for
the IPv4 range, and the equivalent range covering all addresses for the
IPv6 range).< / p >
< p > A default constructed < a class = "reference external" href = "reference-Filter.html#ip_filter" > ip_filter< / a > does not filter any address.< / p >
< pre class = "literal-block" >
struct ip_filter
{
void < strong > add_rule< / strong > (address first, address last, int flags);
int < strong > access< / strong > (address const& addr) const;
filter_tuple_t < strong > export_filter< / strong > () const;
enum access_flags
{
blocked,
};
};
< / pre >
< a name = "add_rule()" > < / a > < div class = "section" id = "add-rule" >
< h2 > add_rule()< / h2 >
< pre class = "literal-block" >
void < strong > add_rule< / strong > (address first, address last, int flags);
< / pre >
< p > Adds a rule to the filter. < tt class = "docutils literal" > first< / tt > and < tt class = "docutils literal" > last< / tt > defines a range of
ip addresses that will be marked with the given flags. The < tt class = "docutils literal" > flags< / tt >
can currently be 0, which means allowed, or < tt class = "docutils literal" > < span class = "pre" > ip_filter::blocked< / span > < / tt > , which
means disallowed.< / p >
< p > precondition:
< tt class = "docutils literal" > first.is_v4() == last.is_v4() & & first.is_v6() == last.is_v6()< / tt > < / p >
< p > postcondition:
< tt class = "docutils literal" > access(x) == flags< / tt > for every < tt class = "docutils literal" > x< / tt > in the range [< tt class = "docutils literal" > first< / tt > , < tt class = "docutils literal" > last< / tt > ]< / p >
< p > This means that in a case of overlapping ranges, the last one applied takes
precedence.< / p >
< a name = "access()" > < / a > < / div >
< div class = "section" id = "access" >
< h2 > access()< / h2 >
< pre class = "literal-block" >
int < strong > access< / strong > (address const& addr) const;
< / pre >
< p > Returns the access permissions for the given address (< tt class = "docutils literal" > addr< / tt > ). The permission
can currently be 0 or < tt class = "docutils literal" > < span class = "pre" > ip_filter::blocked< / span > < / tt > . The complexity of this operation
is O(< tt class = "docutils literal" > log< / tt > n), where n is the minimum number of non-overlapping ranges to describe
the current filter.< / p >
< a name = "export_filter()" > < / a > < / div >
< div class = "section" id = "export-filter" >
< h2 > export_filter()< / h2 >
< pre class = "literal-block" >
filter_tuple_t < strong > export_filter< / strong > () const;
< / pre >
< p > This function will return the current state of the filter in the minimum number of
ranges possible. They are sorted from ranges in low addresses to high addresses. Each
< a class = "reference external" href = "reference-Bencoding.html#entry" > entry< / a > in the returned vector is a range with the access control specified in its
< tt class = "docutils literal" > flags< / tt > field.< / p >
< p > The return value is a tuple containing two range-lists. One for IPv4 addresses
and one for IPv6 addresses.< / p >
< a name = "access_flags" > < / a > < / div >
< div class = "section" id = "enum-access-flags" >
< h2 > enum access_flags< / h2 >
< p > Declared in " < a class = "reference external" href = "../include/libtorrent/ip_filter.hpp" > libtorrent/ip_filter.hpp< / a > " < / p >
< table border = "1" class = "docutils" >
< colgroup >
< col width = "12%" / >
< col width = "9%" / >
< col width = "78%" / >
< / colgroup >
< thead valign = "bottom" >
< tr > < th class = "head" > name< / th >
< th class = "head" > value< / th >
< th class = "head" > description< / th >
< / tr >
< / thead >
< tbody valign = "top" >
< tr > < td > blocked< / td >
< td > 1< / td >
< td > indicates that IPs in this range should not be connected
to nor accepted as incoming connections< / td >
< / tr >
< / tbody >
< / table >
< a name = "port_filter" > < / a > < / div >
< / div >
< div class = "section" id = "port-filter" >
< h1 > port_filter< / h1 >
< p > Declared in " < a class = "reference external" href = "../include/libtorrent/ip_filter.hpp" > libtorrent/ip_filter.hpp< / a > " < / p >
< p > the port filter maps non-overlapping port ranges to flags. This
is primarily used to indicate whether a range of ports should
be connected to or not. The default is to have the full port
range (0-65535) set to flag 0.< / p >
< pre class = "literal-block" >
class port_filter
{
void < strong > add_rule< / strong > (boost::uint16_t first, boost::uint16_t last, int flags);
int < strong > access< / strong > (boost::uint16_t port) const;
enum access_flags
{
blocked,
};
};
< / pre >
< a name = "add_rule()" > < / a > < div class = "section" id = "id6" >
< h2 > add_rule()< / h2 >
< pre class = "literal-block" >
void < strong > add_rule< / strong > (boost::uint16_t first, boost::uint16_t last, int flags);
< / pre >
< p > set the flags for the specified port range (< tt class = "docutils literal" > first< / tt > , < tt class = "docutils literal" > last< / tt > ) to
< tt class = "docutils literal" > flags< / tt > overwriting any existing rule for those ports. The range
is inclusive, i.e. the port < tt class = "docutils literal" > last< / tt > also has the flag set on it.< / p >
< a name = "access()" > < / a > < / div >
< div class = "section" id = "id7" >
< h2 > access()< / h2 >
< pre class = "literal-block" >
int < strong > access< / strong > (boost::uint16_t port) const;
< / pre >
< p > test the specified port (< tt class = "docutils literal" > port< / tt > ) for whether it is blocked
or not. The returned value is the flags set for this port.
see acces_flags.< / p >
< a name = "access_flags" > < / a > < / div >
< div class = "section" id = "id8" >
< h2 > enum access_flags< / h2 >
< p > Declared in " < a class = "reference external" href = "../include/libtorrent/ip_filter.hpp" > libtorrent/ip_filter.hpp< / a > " < / p >
< table border = "1" class = "docutils" >
< colgroup >
< col width = "13%" / >
< col width = "10%" / >
< col width = "76%" / >
< / colgroup >
< thead valign = "bottom" >
< tr > < th class = "head" > name< / th >
< th class = "head" > value< / th >
< th class = "head" > description< / th >
< / tr >
< / thead >
< tbody valign = "top" >
< tr > < td > blocked< / td >
< td > 1< / td >
< td > this flag indicates that destination ports in the
range should not be connected to< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< / div >
< / body >
< / html >