Package com.biglybt.core.speedmanager
Class SpeedLimitHandler
- java.lang.Object
-
- com.biglybt.core.speedmanager.SpeedLimitHandler
-
- All Implemented Interfaces:
LongTermStatsListener
public class SpeedLimitHandler extends java.lang.Object implements LongTermStatsListener
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
SpeedLimitHandler.DML
private static class
SpeedLimitHandler.IPSetTagType
private class
SpeedLimitHandler.LimitDetails
(package private) class
SpeedLimitHandler.NetLimit
class
SpeedLimitHandler.PeerSet
private class
SpeedLimitHandler.Prioritiser
private static class
SpeedLimitHandler.ScheduleRule
private class
SpeedLimitHandler.ScheduleRuleExtensions
-
Field Summary
Fields Modifier and Type Field Description private SpeedLimitHandler.ScheduleRule
active_rule
private static int
AS_ACTIVE
private static int
AS_INACTIVE
private static int
AS_UNKOWN
private FrequencyLimitedDispatcher
auto_peer_set_checker
private java.util.List<java.lang.String>
auto_peer_set_queue_client
private java.util.List<java.lang.String>
auto_peer_set_queue_intf
private BuddyPlugin
buddy_plugin
(package private) TorrentAttribute
category_attribute
private FrequencyLimitedDispatcher
check_ip_sets_limiter
(package private) Core
core
private SpeedLimitHandler.DML
current_dml
private java.util.Map<java.lang.String,SpeedLimitHandler.PeerSet>
current_ip_sets
private java.util.List<SpeedLimitHandler.Prioritiser>
current_prioritisers
private java.util.List<SpeedLimitHandler.ScheduleRule>
current_rules
private java.lang.Object
extensions_lock
private static java.lang.String
INACTIVE_PROFILE_NAME
private TimerEventPeriodic
ip_set_event
private static java.lang.Object
ip_set_peer_key
private java.util.Map<java.lang.String,RateLimiter>
ip_set_rate_limiters_down
private java.util.Map<java.lang.String,RateLimiter>
ip_set_rate_limiters_up
private SpeedLimitHandler.IPSetTagType
ip_set_tag_type
private boolean
is_enabled
private LoggerChannel
logger
private static java.lang.String
NET_IPV4
private static java.lang.String
NET_IPV6
private static java.lang.String
NET_LAN
private boolean
net_limit_listener_added
private boolean
net_limit_pause_all_active
private java.util.Map<java.lang.Integer,java.util.List<SpeedLimitHandler.NetLimit>>
net_limits
private static java.lang.String
NET_WAN
private static int
NETLIMIT_TAG_LOG_PERIOD
private static int
NETLIMIT_TAG_LOG_TICKS
private static java.lang.Object
PEER_ASN_WAIT_START_KEY
private static java.lang.Object
PEER_LT_WAIT_START_KEY
(package private) PluginInterface
plugin_interface
private java.util.List<java.lang.String>
predefined_profile_names
private boolean
preserve_inactive_limits
private static int
PRIORITISER_CHECK_PERIOD_BASE
private boolean
prioritiser_enabled
private TimerEventPeriodic
prioritiser_event
private static java.lang.Object
RL_TO_BE_REMOVED_LOCK
private static java.lang.Object
RLD_TO_BE_REMOVED_KEY
private static java.lang.Object
RLU_TO_BE_REMOVED_KEY
private boolean
rule_pause_all_active
private TimerEventPeriodic
schedule_event
private static int
SCHEDULER_PERIOD
private static SpeedLimitHandler
singleton
-
Constructor Summary
Constructors Modifier Constructor Description private
SpeedLimitHandler(Core _core)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addConfigLine(java.lang.String line, boolean auto_enable)
void
addDownloadsToProfile(java.lang.String name, java.util.List<byte[]> hashes)
private void
addLimiters(PeerManager peer_manager, Peer peer, SpeedLimitHandler.PeerSet set, java.util.List<RateLimiter> up_to_be_removed, java.util.List<RateLimiter> down_to_be_removed)
private void
addRemoveDownloadsToProfile(java.lang.String name, java.util.List<byte[]> hashes, boolean add)
private void
checkIPSets()
private void
checkIPSetsSupport()
private void
checkPrioritisers()
private void
checkSchedule(boolean start_of_day, int tick_count)
private void
checkTagNetLimits(int tick_count)
java.util.List<java.lang.String>
clearCurrentLimits()
void
deleteProfile(java.lang.String name)
void
dump(IndentWriter iw)
private void
exportBoolean(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key, boolean b)
private void
exportInt(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key, int i)
private void
exportString(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key, java.lang.String s)
private java.lang.String
format(int rate)
private java.lang.String
format(java.util.List<LimitedRateGroup> groups)
private java.lang.String
formatDown(int rate)
private java.lang.String
formatDown(java.util.List<LimitedRateGroup> groups)
private java.lang.String
formatUp(int rate)
private java.lang.String
formatUp(java.util.List<LimitedRateGroup> groups)
private SpeedLimitHandler.ScheduleRule
getActiveRule(java.util.Date date)
private int
getActiveState()
private BuddyPlugin
getBuddyPlugin()
java.util.List<java.lang.String>
getCurrent()
private long[]
getLongTermUsage(LongTermStats lts, int type, SpeedLimitHandler.NetLimit net_limit)
private int
getMins(java.lang.String str)
java.util.List<SpeedLimitHandler.PeerSet>
getPeerSets()
java.util.List<java.lang.String>
getProfile(java.lang.String name)
java.util.List<java.lang.String>
getProfileNames()
java.util.List<java.lang.String>
getProfilesForDownload(byte[] hash)
java.util.List<java.lang.String>
getProfileSupport(java.lang.String name, boolean use_hashes)
java.util.List<java.lang.String>
getSchedule()
static SpeedLimitHandler
getSingleton(Core core)
private java.lang.String
getString(long[] stats, long[] limits, boolean is_rate)
private java.lang.String
getString(LongTermStats lts, int type, java.util.List<SpeedLimitHandler.NetLimit> net_limits)
boolean
hasAnyProfiles()
private boolean
importBoolean(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key)
private int
importInt(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key)
private java.lang.String
importString(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key)
private void
initialiseIPSets(java.util.Map<java.lang.String,SpeedLimitHandler.PeerSet> sets)
boolean
isEnabled()
private java.util.Map
loadConfig()
private void
loadPauseAllActive()
java.util.List<java.lang.String>
loadProfile(java.lang.String name)
private java.util.List<java.lang.String>
loadSchedule(boolean start_of_day)
private long
parseRate(java.lang.String str)
private void
peerRemoved(Download download, PeerManager peer_manager, Peer peer)
private void
peersAdded(Download download, PeerManager peer_manager, Peer[] peers)
private boolean
profileExists(java.lang.String name)
void
removeDownloadsFromProfile(java.lang.String name, java.util.List<byte[]> hashes)
private java.util.List<java.lang.String>
resetRules()
private void
saveConfig(java.util.Map map)
java.util.List<java.lang.String>
saveProfile(java.lang.String name)
private void
setActiveState(int state)
private void
setNetLimitPauseAllActive(boolean active)
private void
setProfileActive(java.lang.String profile_name)
private void
setRulePauseAllActive(boolean active)
java.util.List<java.lang.String>
setSchedule(java.util.List<java.lang.String> lines)
private java.util.List<LimitedRateGroup>
trim(LimitedRateGroup[] groups)
void
updated(LongTermStats stats)
-
-
-
Field Detail
-
singleton
private static SpeedLimitHandler singleton
-
RL_TO_BE_REMOVED_LOCK
private static final java.lang.Object RL_TO_BE_REMOVED_LOCK
-
RLD_TO_BE_REMOVED_KEY
private static final java.lang.Object RLD_TO_BE_REMOVED_KEY
-
RLU_TO_BE_REMOVED_KEY
private static final java.lang.Object RLU_TO_BE_REMOVED_KEY
-
PEER_LT_WAIT_START_KEY
private static final java.lang.Object PEER_LT_WAIT_START_KEY
-
PEER_ASN_WAIT_START_KEY
private static final java.lang.Object PEER_ASN_WAIT_START_KEY
-
SCHEDULER_PERIOD
private static final int SCHEDULER_PERIOD
- See Also:
- Constant Field Values
-
NETLIMIT_TAG_LOG_PERIOD
private static final int NETLIMIT_TAG_LOG_PERIOD
- See Also:
- Constant Field Values
-
NETLIMIT_TAG_LOG_TICKS
private static final int NETLIMIT_TAG_LOG_TICKS
- See Also:
- Constant Field Values
-
PRIORITISER_CHECK_PERIOD_BASE
private static final int PRIORITISER_CHECK_PERIOD_BASE
- See Also:
- Constant Field Values
-
NET_IPV4
private static final java.lang.String NET_IPV4
- See Also:
- Constant Field Values
-
NET_IPV6
private static final java.lang.String NET_IPV6
- See Also:
- Constant Field Values
-
NET_LAN
private static final java.lang.String NET_LAN
- See Also:
- Constant Field Values
-
NET_WAN
private static final java.lang.String NET_WAN
- See Also:
- Constant Field Values
-
AS_UNKOWN
private static final int AS_UNKOWN
- See Also:
- Constant Field Values
-
AS_INACTIVE
private static final int AS_INACTIVE
- See Also:
- Constant Field Values
-
AS_ACTIVE
private static final int AS_ACTIVE
- See Also:
- Constant Field Values
-
core
final Core core
-
plugin_interface
final PluginInterface plugin_interface
-
category_attribute
final TorrentAttribute category_attribute
-
logger
private final LoggerChannel logger
-
is_enabled
private boolean is_enabled
-
schedule_event
private TimerEventPeriodic schedule_event
-
current_rules
private java.util.List<SpeedLimitHandler.ScheduleRule> current_rules
-
active_rule
private SpeedLimitHandler.ScheduleRule active_rule
-
preserve_inactive_limits
private boolean preserve_inactive_limits
-
prioritiser_enabled
private boolean prioritiser_enabled
-
prioritiser_event
private TimerEventPeriodic prioritiser_event
-
current_prioritisers
private java.util.List<SpeedLimitHandler.Prioritiser> current_prioritisers
-
current_ip_sets
private java.util.Map<java.lang.String,SpeedLimitHandler.PeerSet> current_ip_sets
-
ip_set_rate_limiters_up
private final java.util.Map<java.lang.String,RateLimiter> ip_set_rate_limiters_up
-
ip_set_rate_limiters_down
private final java.util.Map<java.lang.String,RateLimiter> ip_set_rate_limiters_down
-
ip_set_event
private TimerEventPeriodic ip_set_event
-
net_limit_listener_added
private boolean net_limit_listener_added
-
net_limits
private java.util.Map<java.lang.Integer,java.util.List<SpeedLimitHandler.NetLimit>> net_limits
-
INACTIVE_PROFILE_NAME
private static final java.lang.String INACTIVE_PROFILE_NAME
- See Also:
- Constant Field Values
-
predefined_profile_names
private final java.util.List<java.lang.String> predefined_profile_names
-
rule_pause_all_active
private boolean rule_pause_all_active
-
net_limit_pause_all_active
private boolean net_limit_pause_all_active
-
ip_set_tag_type
private final SpeedLimitHandler.IPSetTagType ip_set_tag_type
-
extensions_lock
private final java.lang.Object extensions_lock
-
auto_peer_set_queue_client
private final java.util.List<java.lang.String> auto_peer_set_queue_client
-
auto_peer_set_queue_intf
private final java.util.List<java.lang.String> auto_peer_set_queue_intf
-
buddy_plugin
private volatile BuddyPlugin buddy_plugin
-
current_dml
private SpeedLimitHandler.DML current_dml
-
ip_set_peer_key
private static final java.lang.Object ip_set_peer_key
-
check_ip_sets_limiter
private final FrequencyLimitedDispatcher check_ip_sets_limiter
-
auto_peer_set_checker
private final FrequencyLimitedDispatcher auto_peer_set_checker
-
-
Constructor Detail
-
SpeedLimitHandler
private SpeedLimitHandler(Core _core)
-
-
Method Detail
-
getSingleton
public static SpeedLimitHandler getSingleton(Core core)
-
getActiveState
private int getActiveState()
-
setActiveState
private void setActiveState(int state)
-
hasAnyProfiles
public boolean hasAnyProfiles()
-
loadConfig
private java.util.Map loadConfig()
-
saveConfig
private void saveConfig(java.util.Map map)
-
loadPauseAllActive
private void loadPauseAllActive()
-
getBuddyPlugin
private BuddyPlugin getBuddyPlugin()
-
setRulePauseAllActive
private void setRulePauseAllActive(boolean active)
-
setNetLimitPauseAllActive
private void setNetLimitPauseAllActive(boolean active)
-
clearCurrentLimits
public java.util.List<java.lang.String> clearCurrentLimits()
-
resetRules
private java.util.List<java.lang.String> resetRules()
-
getCurrent
public java.util.List<java.lang.String> getCurrent()
-
getString
private java.lang.String getString(LongTermStats lts, int type, java.util.List<SpeedLimitHandler.NetLimit> net_limits)
-
getLongTermUsage
private long[] getLongTermUsage(LongTermStats lts, int type, SpeedLimitHandler.NetLimit net_limit)
-
getString
private java.lang.String getString(long[] stats, long[] limits, boolean is_rate)
-
getProfileNames
public java.util.List<java.lang.String> getProfileNames()
-
loadProfile
public java.util.List<java.lang.String> loadProfile(java.lang.String name)
-
profileExists
private boolean profileExists(java.lang.String name)
-
getProfile
public java.util.List<java.lang.String> getProfile(java.lang.String name)
-
getProfileSupport
public java.util.List<java.lang.String> getProfileSupport(java.lang.String name, boolean use_hashes)
-
getProfilesForDownload
public java.util.List<java.lang.String> getProfilesForDownload(byte[] hash)
-
addRemoveDownloadsToProfile
private void addRemoveDownloadsToProfile(java.lang.String name, java.util.List<byte[]> hashes, boolean add)
-
addDownloadsToProfile
public void addDownloadsToProfile(java.lang.String name, java.util.List<byte[]> hashes)
-
removeDownloadsFromProfile
public void removeDownloadsFromProfile(java.lang.String name, java.util.List<byte[]> hashes)
-
deleteProfile
public void deleteProfile(java.lang.String name)
-
saveProfile
public java.util.List<java.lang.String> saveProfile(java.lang.String name)
-
loadSchedule
private java.util.List<java.lang.String> loadSchedule(boolean start_of_day)
-
parseRate
private long parseRate(java.lang.String str)
-
isEnabled
public boolean isEnabled()
-
addConfigLine
public void addConfigLine(java.lang.String line, boolean auto_enable)
-
getPeerSets
public java.util.List<SpeedLimitHandler.PeerSet> getPeerSets()
-
getMins
private int getMins(java.lang.String str)
-
checkIPSets
private void checkIPSets()
-
initialiseIPSets
private void initialiseIPSets(java.util.Map<java.lang.String,SpeedLimitHandler.PeerSet> sets)
-
checkIPSetsSupport
private void checkIPSetsSupport()
-
peersAdded
private void peersAdded(Download download, PeerManager peer_manager, Peer[] peers)
-
peerRemoved
private void peerRemoved(Download download, PeerManager peer_manager, Peer peer)
-
addLimiters
private void addLimiters(PeerManager peer_manager, Peer peer, SpeedLimitHandler.PeerSet set, java.util.List<RateLimiter> up_to_be_removed, java.util.List<RateLimiter> down_to_be_removed)
-
checkPrioritisers
private void checkPrioritisers()
-
getActiveRule
private SpeedLimitHandler.ScheduleRule getActiveRule(java.util.Date date)
-
setProfileActive
private void setProfileActive(java.lang.String profile_name)
-
checkSchedule
private void checkSchedule(boolean start_of_day, int tick_count)
-
getSchedule
public java.util.List<java.lang.String> getSchedule()
-
setSchedule
public java.util.List<java.lang.String> setSchedule(java.util.List<java.lang.String> lines)
-
trim
private java.util.List<LimitedRateGroup> trim(LimitedRateGroup[] groups)
-
updated
public void updated(LongTermStats stats)
- Specified by:
updated
in interfaceLongTermStatsListener
-
checkTagNetLimits
private void checkTagNetLimits(int tick_count)
-
formatUp
private java.lang.String formatUp(int rate)
-
formatDown
private java.lang.String formatDown(int rate)
-
format
private java.lang.String format(int rate)
-
formatUp
private java.lang.String formatUp(java.util.List<LimitedRateGroup> groups)
-
formatDown
private java.lang.String formatDown(java.util.List<LimitedRateGroup> groups)
-
format
private java.lang.String format(java.util.List<LimitedRateGroup> groups)
-
exportBoolean
private void exportBoolean(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key, boolean b)
-
importBoolean
private boolean importBoolean(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key)
-
exportInt
private void exportInt(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key, int i)
-
importInt
private int importInt(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key)
-
exportString
private void exportString(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key, java.lang.String s)
-
importString
private java.lang.String importString(java.util.Map<java.lang.String,java.lang.Object> map, java.lang.String key)
-
dump
public void dump(IndentWriter iw)
-
-