23
23
import java .io .File ;
24
24
import java .net .InetAddress ;
25
25
import java .net .NetworkInterface ;
26
- import java .nio .file .FileSystem ;
27
26
import java .util .*;
28
27
import java .util .function .Predicate ;
29
28
import java .util .regex .Pattern ;
38
37
import com .biglybt .core .global .GlobalManager ;
39
38
import com .biglybt .core .global .GlobalManagerStats ;
40
39
import com .biglybt .core .internat .MessageText ;
40
+ import com .biglybt .core .ipfilter .IpFilter ;
41
+ import com .biglybt .core .ipfilter .IpFilterManagerFactory ;
41
42
import com .biglybt .core .networkmanager .LimitedRateGroup ;
42
43
import com .biglybt .core .networkmanager .Transport ;
43
44
import com .biglybt .core .peer .PEPeer ;
88
89
private static final Object PEER_LT_WAIT_START_KEY = new Object ();
89
90
private static final Object PEER_ASN_WAIT_START_KEY = new Object ();
90
91
92
+ private static final IpFilter ip_filter = IpFilterManagerFactory .getSingleton ().getIPFilter ();
93
+
91
94
public static SpeedLimitHandler
92
95
getSingleton (
93
96
Core core )
@@ -6460,9 +6463,15 @@ public void run()
6460
6463
6461
6464
int actions = COConfigurationManager .getIntParameter ( "speed.limit.handler.ipset_n." + tag_id + ".eos" , -1 );
6462
6465
6463
- if ( actions == TagFeatureExecOnAssign . ACTION_DESTROY ){
6466
+ if ( actions != - 1 ){
6464
6467
6465
- super .setActionEnabled ( actions , true );
6468
+ for ( int action : new int []{TagFeatureExecOnAssign .ACTION_DESTROY , TagFeatureExecOnAssign .ACTION_BAN }){
6469
+
6470
+ if (( actions & action ) != 0 ){
6471
+
6472
+ super .setActionEnabled ( action , true );
6473
+ }
6474
+ }
6466
6475
}
6467
6476
6468
6477
int [] colour = COConfigurationManager .getRGBParameter ( "speed.limit.handler.ipset_n." + getTagID () + ".color" );
@@ -6484,7 +6493,7 @@ public void run()
6484
6493
public int
6485
6494
getSupportedActions ()
6486
6495
{
6487
- return ( TagFeatureExecOnAssign .ACTION_DESTROY );
6496
+ return ( TagFeatureExecOnAssign .ACTION_DESTROY | TagFeatureExecOnAssign . ACTION_BAN );
6488
6497
}
6489
6498
6490
6499
@ Override
@@ -6495,9 +6504,36 @@ public void run()
6495
6504
{
6496
6505
super .setActionEnabled ( action , enabled );
6497
6506
6498
- if ( action == TagFeatureExecOnAssign .ACTION_DESTROY ){
6507
+ if ( action == TagFeatureExecOnAssign .ACTION_DESTROY || action == TagFeatureExecOnAssign . ACTION_BAN ){
6499
6508
6500
- COConfigurationManager .setParameter ( "speed.limit.handler.ipset_n." + getTagID () + ".eos" , enabled ?TagFeatureExecOnAssign .ACTION_DESTROY :-1 );
6509
+ int tag_id = getTagID ();
6510
+
6511
+ int actions = COConfigurationManager .getIntParameter ( "speed.limit.handler.ipset_n." + tag_id + ".eos" , -1 );
6512
+
6513
+ if ( enabled ){
6514
+
6515
+ if ( actions == -1 ){
6516
+
6517
+ actions = action ;
6518
+
6519
+ }else {
6520
+
6521
+ actions |= action ;
6522
+ }
6523
+ }else {
6524
+
6525
+ if ( actions != -1 ){
6526
+
6527
+ actions &= ~action ;
6528
+ }
6529
+
6530
+ if ( actions == 0 ){
6531
+
6532
+ actions = -1 ; // bad default, keep it I guess
6533
+ }
6534
+ }
6535
+
6536
+ COConfigurationManager .setParameter ( "speed.limit.handler.ipset_n." + tag_id + ".eos" , actions );
6501
6537
}
6502
6538
}
6503
6539
@@ -6618,13 +6654,24 @@ public void run()
6618
6654
6619
6655
if ( to_delete != null ){
6620
6656
6657
+ boolean do_ban = isActionEnabled ( TagFeatureExecOnAssign .ACTION_BAN );
6658
+
6621
6659
for ( PEPeer peer : to_delete ){
6622
6660
6623
- PEPeerManager pm = peer .getManager ();
6661
+ PEPeerManager peer_manager = peer .getManager ();
6624
6662
6625
- if ( pm != null ){
6663
+ if ( peer_manager != null ){
6626
6664
6627
- pm .removePeer ( peer , "PeerSet removal action" , Transport .CR_IP_BLOCKED );
6665
+ if ( do_ban ){
6666
+
6667
+ ip_filter .ban ( peer .getIp (), MessageText .getString ( "tag.type.ipset" ) + ": " + getTagName ( true ), false );
6668
+
6669
+ peer_manager .removePeer ( peer , "PeerSet ban action" , Transport .CR_IP_BLOCKED );
6670
+
6671
+ }else {
6672
+
6673
+ peer_manager .removePeer ( peer , "PeerSet removal action" , Transport .CR_IP_BLOCKED );
6674
+ }
6628
6675
}
6629
6676
}
6630
6677
}
@@ -6809,7 +6856,7 @@ public void run()
6809
6856
6810
6857
if ( result ){
6811
6858
6812
- if ( isActionEnabled ( TagFeatureExecOnAssign .ACTION_DESTROY )){
6859
+ if ( isActionEnabled ( TagFeatureExecOnAssign .ACTION_DESTROY ) || isActionEnabled ( TagFeatureExecOnAssign . ACTION_BAN ) ){
6813
6860
6814
6861
return ( 3 );
6815
6862
}
@@ -6866,7 +6913,7 @@ public void run()
6866
6913
6867
6914
if ( result ){
6868
6915
6869
- if ( isActionEnabled ( TagFeatureExecOnAssign .ACTION_DESTROY )){
6916
+ if ( isActionEnabled ( TagFeatureExecOnAssign .ACTION_DESTROY ) || isActionEnabled ( TagFeatureExecOnAssign . ACTION_BAN ) ){
6870
6917
6871
6918
return ( 3 );
6872
6919
}
@@ -6934,7 +6981,7 @@ public void run()
6934
6981
6935
6982
if ( result ){
6936
6983
6937
- if ( isActionEnabled ( TagFeatureExecOnAssign .ACTION_DESTROY )){
6984
+ if ( isActionEnabled ( TagFeatureExecOnAssign .ACTION_DESTROY ) || isActionEnabled ( TagFeatureExecOnAssign . ACTION_BAN ) ){
6938
6985
6939
6986
return ( 3 );
6940
6987
}
@@ -6950,11 +6997,23 @@ public void run()
6950
6997
{
6951
6998
PEPeer peer = PluginCoreUtils .unwrap ( _peer );
6952
6999
6953
- if ( isActionEnabled ( TagFeatureExecOnAssign .ACTION_DESTROY ) && !deferEOS ()){
6954
-
6955
- peer_manager .removePeer ( _peer , "PeerSet removal action" , Transport .CR_IP_BLOCKED );
7000
+ if ( !deferEOS ()){
7001
+
7002
+ if ( isActionEnabled ( TagFeatureExecOnAssign .ACTION_BAN )){
7003
+
7004
+ ip_filter .ban ( peer .getIp (), MessageText .getString ( "tag.type.ipset" ) + ": " + getTagName ( true ), false );
7005
+
7006
+ peer_manager .removePeer ( _peer , "PeerSet ban action" , Transport .CR_IP_BLOCKED );
7007
+
7008
+ return ;
7009
+ }
7010
+
7011
+ if ( isActionEnabled ( TagFeatureExecOnAssign .ACTION_DESTROY )){
6956
7012
6957
- return ;
7013
+ peer_manager .removePeer ( _peer , "PeerSet removal action" , Transport .CR_IP_BLOCKED );
7014
+
7015
+ return ;
7016
+ }
6958
7017
}
6959
7018
6960
7019
synchronized ( this ){
@@ -6980,7 +7039,16 @@ public void run()
6980
7039
6981
7040
// immediate remove
6982
7041
6983
- peer_manager .removePeer ( _peer , "PeerSet removal action" , Transport .CR_IP_BLOCKED );
7042
+ if ( isActionEnabled ( TagFeatureExecOnAssign .ACTION_BAN )){
7043
+
7044
+ ip_filter .ban ( peer .getIp (), MessageText .getString ( "tag.type.ipset" ) + ": " + getTagName ( true ), false );
7045
+
7046
+ peer_manager .removePeer ( _peer , "PeerSet ban action" , Transport .CR_IP_BLOCKED );
7047
+
7048
+ }else {
7049
+
7050
+ peer_manager .removePeer ( _peer , "PeerSet removal action" , Transport .CR_IP_BLOCKED );
7051
+ }
6984
7052
6985
7053
return ;
6986
7054
0 commit comments