00001
00002
00003
00004
00005
00006
00007
00008 #include <libtorrent/session.hpp>
00009 #include <libtorrent/torrent.hpp>
00010 #include <boost/python.hpp>
00011 #include "gil.hpp"
00012
00013 using namespace boost::python;
00014 using namespace libtorrent;
00015
00016 extern char const* session_status_doc;
00017 extern char const* session_status_has_incoming_connections_doc;
00018 extern char const* session_status_upload_rate_doc;
00019 extern char const* session_status_download_rate_doc;
00020 extern char const* session_status_payload_upload_rate_doc;
00021 extern char const* session_status_payload_download_rate_doc;
00022 extern char const* session_status_total_download_doc;
00023 extern char const* session_status_total_upload_doc;
00024 extern char const* session_status_total_payload_download_doc;
00025 extern char const* session_status_total_payload_upload_doc;
00026 extern char const* session_status_num_peers_doc;
00027 extern char const* session_status_dht_nodes_doc;
00028 extern char const* session_status_cache_nodes_doc;
00029 extern char const* session_status_dht_torrents_doc;
00030
00031 extern char const* session_doc;
00032 extern char const* session_init_doc;
00033 extern char const* session_listen_on_doc;
00034 extern char const* session_is_listening_doc;
00035 extern char const* session_listen_port_doc;
00036 extern char const* session_status_m_doc;
00037 extern char const* session_start_dht_doc;
00038 extern char const* session_stop_dht_doc;
00039 extern char const* session_dht_state_doc;
00040 extern char const* session_add_torrent_doc;
00041 extern char const* session_remove_torrent_doc;
00042 extern char const* session_set_download_rate_limit_doc;
00043 extern char const* session_set_upload_rate_limit_doc;
00044 extern char const* session_set_max_uploads_doc;
00045 extern char const* session_set_max_connections_doc;
00046 extern char const* session_set_max_half_open_connections_doc;
00047 extern char const* session_set_settings_doc;
00048 extern char const* session_set_severity_level_doc;
00049 extern char const* session_pop_alert_doc;
00050
00051 namespace
00052 {
00053
00054 bool listen_on(session& s, int min_, int max_, char const* interface)
00055 {
00056 allow_threading_guard guard;
00057 return s.listen_on(std::make_pair(min_, max_), interface);
00058 }
00059
00060 struct invoke_extension_factory
00061 {
00062 invoke_extension_factory(object const& callback)
00063 : cb(callback)
00064 {}
00065
00066 boost::shared_ptr<torrent_plugin> operator()(torrent* t)
00067 {
00068 lock_gil lock;
00069 return extract<boost::shared_ptr<torrent_plugin> >(cb(ptr(t)))();
00070 }
00071
00072 object cb;
00073 };
00074
00075 void add_extension(session& s, object const& e)
00076 {
00077
00078 s.add_extension(invoke_extension_factory(e));
00079 }
00080
00081 }
00082
00083 void bind_session()
00084 {
00085 class_<session_status>("session_status", session_status_doc)
00086 .def_readonly(
00087 "has_incoming_connections", &session_status::has_incoming_connections
00088 , session_status_has_incoming_connections_doc
00089 )
00090 .def_readonly(
00091 "upload_rate", &session_status::upload_rate
00092 , session_status_upload_rate_doc
00093 )
00094 .def_readonly(
00095 "download_rate", &session_status::download_rate
00096 , session_status_download_rate_doc
00097 )
00098 .def_readonly(
00099 "payload_upload_rate", &session_status::payload_upload_rate
00100 , session_status_payload_upload_rate_doc
00101 )
00102 .def_readonly(
00103 "payload_download_rate", &session_status::payload_download_rate
00104 , session_status_payload_download_rate_doc
00105 )
00106 .def_readonly(
00107 "total_download", &session_status::total_download
00108 , session_status_total_download_doc
00109 )
00110 .def_readonly(
00111 "total_upload", &session_status::total_upload
00112 , session_status_total_upload_doc
00113 )
00114 .def_readonly(
00115 "total_payload_download", &session_status::total_payload_download
00116 , session_status_total_payload_download_doc
00117 )
00118 .def_readonly(
00119 "total_payload_upload", &session_status::total_payload_upload
00120 , session_status_total_payload_upload_doc
00121 )
00122 .def_readonly(
00123 "num_peers", &session_status::num_peers
00124 , session_status_num_peers_doc
00125 )
00126 #ifndef TORRENT_DISABLE_DHT
00127 .def_readonly(
00128 "dht_nodes", &session_status::dht_nodes
00129 , session_status_dht_nodes_doc
00130 )
00131 .def_readonly(
00132 "dht_cache_nodes", &session_status::dht_node_cache
00133 , session_status_cache_nodes_doc
00134 )
00135 .def_readonly(
00136 "dht_torrents", &session_status::dht_torrents
00137 , session_status_dht_torrents_doc
00138 )
00139 #endif
00140 ;
00141
00142 torrent_handle (session::*add_torrent0)(
00143 torrent_info const&
00144 , boost::filesystem::path const&
00145 , entry const&
00146 , bool
00147 , int
00148 ) = &session::add_torrent;
00149
00150 class_<session, boost::noncopyable>("session", session_doc, no_init)
00151 .def(
00152 init<fingerprint>(arg("fingerprint")=fingerprint("LT",0,1,0,0), session_init_doc)
00153 )
00154 .def(
00155 "listen_on", &listen_on
00156 , (arg("min"), "max", arg("interface") = (char const*)0)
00157 , session_listen_on_doc
00158 )
00159 .def("is_listening", allow_threads(&session::is_listening), session_is_listening_doc)
00160 .def("listen_port", allow_threads(&session::listen_port), session_listen_port_doc)
00161 .def("status", allow_threads(&session::status), session_status_m_doc)
00162 #ifndef TORRENT_DISABLE_DHT
00163 .def("start_dht", allow_threads(&session::start_dht), session_start_dht_doc)
00164 .def("stop_dht", allow_threads(&session::stop_dht), session_stop_dht_doc)
00165 .def("dht_state", allow_threads(&session::dht_state), session_dht_state_doc)
00166 #endif
00167 .def(
00168 "add_torrent", allow_threads(add_torrent0)
00169 , (
00170 arg("torrent_info"), "save_path", arg("resume_data") = entry()
00171 , arg("compact_mode") = true, arg("block_size") = 16 * 1024
00172 )
00173 , session_add_torrent_doc
00174 )
00175 .def("remove_torrent", allow_threads(&session::remove_torrent), session_remove_torrent_doc)
00176 .def(
00177 "set_download_rate_limit", allow_threads(&session::set_download_rate_limit)
00178 , session_set_download_rate_limit_doc
00179 )
00180 .def(
00181 "set_upload_rate_limit", allow_threads(&session::set_upload_rate_limit)
00182 , session_set_upload_rate_limit_doc
00183 )
00184 .def(
00185 "set_max_uploads", allow_threads(&session::set_max_uploads)
00186 , session_set_max_uploads_doc
00187 )
00188 .def(
00189 "set_max_connections", allow_threads(&session::set_max_connections)
00190 , session_set_max_connections_doc
00191 )
00192 .def(
00193 "set_max_half_open_connections", allow_threads(&session::set_max_half_open_connections)
00194 , session_set_max_half_open_connections_doc
00195 )
00196 .def("set_settings", allow_threads(&session::set_settings), session_set_settings_doc)
00197 .def(
00198 "set_severity_level", allow_threads(&session::set_severity_level)
00199 , session_set_severity_level_doc
00200 )
00201 .def("pop_alert", allow_threads(&session::pop_alert), session_pop_alert_doc)
00202 .def("add_extension", &add_extension)
00203 ;
00204
00205 register_ptr_to_python<std::auto_ptr<alert> >();
00206 }
00207