ConfigSectionIPFilterpublic class ConfigSectionIPFilter extends Object implements org.gudy.azureus2.ui.swt.plugins.UISWTConfigSection
Fields Summary |
---|
com.aelitis.azureus.core.AzureusCore | azureus_core | IpFilter | filter | Table | table | boolean | noChange | FilterComparator | comparator | private boolean | bIsCachingDescriptions | IpRange[] | ipRanges | Label | percentage_blocked | private IPFilterListener | filterListener |
Methods Summary |
---|
public void | addRange()
new IpFilterEditor(azureus_core,table.getShell(), null);
//noChange = false;
//refresh();
| public Composite | configSectionCreate(Composite parent)
Image imgOpenFolder = ImageRepository.getImage("openFolderButton");
String sCurConfigID;
GridData gridData;
int userMode = COConfigurationManager.getIntParameter("User Mode");
final IpFilterManager ipFilterManager = azureus_core.getIpFilterManager();
filter = ipFilterManager.getIPFilter();
Composite gFilter = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
gFilter.setLayout(layout);
gridData = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL);
gFilter.setLayoutData(gridData);
// start controls
// row: enable filter + allow/deny
gridData = new GridData();
BooleanParameter enabled = new BooleanParameter(gFilter, "Ip Filter Enabled");
enabled.setLayoutData( gridData );
Messages.setLanguageText(enabled.getControl(), "ConfigView.section.ipfilter.enable");
gridData = new GridData();
BooleanParameter deny = new BooleanParameter(gFilter, "Ip Filter Allow");
deny.setLayoutData( gridData );
Messages.setLanguageText(deny.getControl(), "ConfigView.section.ipfilter.allow");
deny.addChangeListener(
new ParameterChangeAdapter()
{
public void
parameterChanged(
Parameter p,
boolean caused_internally )
{
setPercentageBlocked();
}
});
// row persist banning
gridData = new GridData();
BooleanParameter persist_bad_data_banning = new BooleanParameter(gFilter, "Ip Filter Banning Persistent");
persist_bad_data_banning.setLayoutData( gridData );
Messages.setLanguageText(persist_bad_data_banning.getControl(), "ConfigView.section.ipfilter.persistblocking");
Group gBlockBanning = new Group(gFilter, SWT.NULL);
Messages.setLanguageText(gBlockBanning, "ConfigView.section.ipfilter.peerblocking.group");
layout = new GridLayout();
layout.numColumns = 2;
gBlockBanning.setLayout(layout);
// row block bad + group ban
BooleanParameter enable_bad_data_banning = new BooleanParameter(
gBlockBanning, "Ip Filter Enable Banning",
"ConfigView.section.ipfilter.enablebanning");
gridData = new GridData();
gridData.horizontalSpan = 2;
enable_bad_data_banning.setLayoutData(gridData);
Label discard_label = new Label(gBlockBanning, SWT.NULL);
Messages.setLanguageText(discard_label,
"ConfigView.section.ipfilter.discardbanning");
FloatParameter discard_ratio = new FloatParameter(gBlockBanning, "Ip Filter Ban Discard Ratio");
gridData = new GridData();
gridData.widthHint = 30;
discard_ratio.setLayoutData(gridData);
Composite cIndent = new Composite(gBlockBanning, SWT.NONE);
gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 2;
gridData.horizontalIndent = 15;
cIndent.setLayoutData(gridData);
layout = new GridLayout(3, false);
layout.marginHeight = 0;
layout.marginWidth = 0;
cIndent.setLayout(layout);
Label label = new Label(cIndent, SWT.NULL);
Image img = ImageRepository.getImage("subitem");
img.setBackground(label.getBackground());
gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
label.setLayoutData(gridData);
label.setImage(img);
Label discard_min_label = new Label(cIndent, SWT.NULL);
Messages.setLanguageText(discard_min_label,
"ConfigView.section.ipfilter.discardminkb", new String[]{ DisplayFormatters.getUnit( DisplayFormatters.UNIT_KB)});
IntParameter discard_min = new IntParameter(cIndent, "Ip Filter Ban Discard Min KB");
gridData = new GridData();
gridData.widthHint = 30;
discard_min.setLayoutData(gridData);
// block banning
Label block_label = new Label(gBlockBanning, SWT.NULL);
Messages.setLanguageText(block_label,
"ConfigView.section.ipfilter.blockbanning");
IntParameter block_banning = new IntParameter(gBlockBanning,
"Ip Filter Ban Block Limit");
gridData = new GridData();
gridData.widthHint = 30;
block_banning.setLayoutData(gridData);
// triggers
enable_bad_data_banning.setAdditionalActionPerformer(new ChangeSelectionActionPerformer(
new Control[] {
block_banning.getControl(), block_label,
discard_ratio.getControl(), discard_label,
discard_min.getControl(), discard_min_label }));
Group gAutoLoad = new Group(gFilter, SWT.NONE);
Messages.setLanguageText(gAutoLoad, "ConfigView.section.ipfilter.autoload.group");
layout = new GridLayout();
layout.numColumns = 4;
gAutoLoad.setLayout(layout);
gAutoLoad.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Load from file
sCurConfigID = "Ip Filter Autoload File";
//allConfigIDs.add(sCurConfigID);
Label lblDefaultDir = new Label(gAutoLoad, SWT.NONE);
Messages.setLanguageText(lblDefaultDir, "ConfigView.section.ipfilter.autoload.file");
lblDefaultDir.setLayoutData(new GridData());
gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.minimumWidth = 50;
final StringParameter pathParameter = new StringParameter(gAutoLoad, sCurConfigID);
pathParameter.setLayoutData(gridData);
Button browse = new Button(gAutoLoad, SWT.PUSH);
browse.setImage(imgOpenFolder);
imgOpenFolder.setBackground(browse.getBackground());
browse.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
FileDialog dialog = new FileDialog(parent.getShell(), SWT.APPLICATION_MODAL);
dialog.setFilterPath(pathParameter.getValue());
dialog.setText(MessageText.getString("ConfigView.section.ipfilter.autoload.file"));
dialog.setFilterExtensions(new String[] {
"*.dat" + File.pathSeparator + "*.p2p" + File.pathSeparator + "*.p2b"
+ File.pathSeparator + "*.txt",
"*.*"
});
dialog.setFileName("ipfilter.dat");
String file = dialog.open();
if (file != null) {
pathParameter.setValue(file);
}
}
});
browse.setLayoutData(new GridData());
final Button btnLoadNow = new Button(gAutoLoad, SWT.PUSH);
Messages.setLanguageText(btnLoadNow, "ConfigView.section.ipfilter.autoload.loadnow");
btnLoadNow.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
try {
btnLoadNow.getShell().setCursor(btnLoadNow.getDisplay().getSystemCursor(
SWT.CURSOR_WAIT));
COConfigurationManager.setParameter(IpFilterAutoLoaderImpl.CFG_AUTOLOAD_LAST, 0);
filter.reload();
btnLoadNow.getShell().setCursor(btnLoadNow.getDisplay().getSystemCursor(
SWT.CURSOR_ARROW));
} catch (Exception e) {
e.printStackTrace();
}
}
});
btnLoadNow.setLayoutData(new GridData());
Label lblAutoLoadInfo = new Label(gAutoLoad, SWT.WRAP);
Messages.setLanguageText(lblAutoLoadInfo, "ConfigView.section.ipfilter.autoload.info");
lblAutoLoadInfo.setLayoutData(Utils.getWrappableLabelGridData(4, 0));
// description scratch file
if (userMode > 0) {
gridData = new GridData();
BooleanParameter enableDesc = new BooleanParameter(gFilter,
"Ip Filter Enable Description Cache");
enableDesc.setLayoutData(gridData);
Messages.setLanguageText(enableDesc.getControl(),
"ConfigView.section.ipfilter.enable.descriptionCache");
}
// table
table = new Table(gFilter, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION | SWT.VIRTUAL);
String[] headers = { "ConfigView.section.ipfilter.description", "ConfigView.section.ipfilter.start", "ConfigView.section.ipfilter.end" };
int[] sizes = { 110, 110, 110 };
int[] aligns = { SWT.LEFT, SWT.CENTER, SWT.CENTER };
for (int i = 0; i < headers.length; i++) {
TableColumn tc = new TableColumn(table, aligns[i]);
tc.setText(headers[i]);
tc.setWidth(sizes[i]);
Messages.setLanguageText(tc, headers[i]); //$NON-NLS-1$
}
TableColumn[] columns = table.getColumns();
columns[0].setData(new Integer(FilterComparator.FIELD_NAME));
columns[1].setData(new Integer(FilterComparator.FIELD_START_IP));
columns[2].setData(new Integer(FilterComparator.FIELD_END_IP));
Listener listener = new Listener() {
public void handleEvent(Event e) {
TableColumn tc = (TableColumn) e.widget;
int field = ((Integer) tc.getData()).intValue();
comparator.setField(field);
if (field == FilterComparator.FIELD_NAME && !bIsCachingDescriptions) {
ipFilterManager.cacheAllDescriptions();
bIsCachingDescriptions = true;
}
ipRanges = getSortedRanges(filter.getRanges());
table.setItemCount(ipRanges.length);
table.clearAll();
// bug 69398 on Windows
table.redraw();
}
};
columns[0].addListener(SWT.Selection,listener);
columns[1].addListener(SWT.Selection,listener);
columns[2].addListener(SWT.Selection,listener);
table.setHeaderVisible(true);
gridData = new GridData(GridData.FILL_BOTH);
gridData.heightHint = table.getHeaderHeight() * 3;
gridData.widthHint = 200;
table.setLayoutData(gridData);
Composite cArea = new Composite(gFilter, SWT.NULL);
layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
layout.numColumns = 4;
cArea.setLayout(layout);
gridData = new GridData(GridData.FILL_HORIZONTAL);
cArea.setLayoutData(gridData);
Button add = new Button(cArea, SWT.PUSH);
gridData = new GridData(GridData.CENTER);
gridData.widthHint = 100;
add.setLayoutData(gridData);
Messages.setLanguageText(add, "ConfigView.section.ipfilter.add");
add.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event arg0) {
addRange();
}
});
Button remove = new Button(cArea, SWT.PUSH);
gridData = new GridData(GridData.CENTER);
gridData.widthHint = 100;
remove.setLayoutData(gridData);
Messages.setLanguageText(remove, "ConfigView.section.ipfilter.remove");
remove.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event arg0) {
TableItem[] selection = table.getSelection();
if (selection.length == 0)
return;
removeRange((IpRange) selection[0].getData());
ipRanges = getSortedRanges(filter.getRanges());
table.setItemCount(ipRanges.length);
table.clearAll();
table.redraw();
}
});
Button edit = new Button(cArea, SWT.PUSH);
gridData = new GridData(GridData.CENTER);
gridData.widthHint = 100;
edit.setLayoutData(gridData);
Messages.setLanguageText(edit, "ConfigView.section.ipfilter.edit");
edit.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event arg0) {
TableItem[] selection = table.getSelection();
if (selection.length == 0)
return;
editRange((IpRange) selection[0].getData());
}
});
percentage_blocked = new Label(cArea, SWT.WRAP | SWT.RIGHT);
percentage_blocked.setLayoutData(Utils.getWrappableLabelGridData(1, 0));
setPercentageBlocked();
table.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent arg0) {
TableItem[] selection = table.getSelection();
if (selection.length == 0)
return;
editRange((IpRange) selection[0].getData());
}
});
Control[] controls = new Control[3];
controls[0] = add;
controls[1] = remove;
controls[2] = edit;
IAdditionalActionPerformer enabler = new ChangeSelectionActionPerformer(controls);
enabled.setAdditionalActionPerformer(enabler);
ipRanges = getSortedRanges(filter.getRanges());
table.addListener(SWT.SetData, new Listener() {
public void handleEvent(Event event) {
TableItem item = (TableItem) event.item;
int index = table.indexOf(item);
// seems we can get -1 here (see bug 1219314 )
if (index < 0 || index >= ipRanges.length) {
return;
}
IpRange range = ipRanges[index];
item.setText(0, range.getDescription());
item.setText(1, range.getStartIp());
item.setText(2, range.getEndIp());
item.setData(range);
}
});
table.setItemCount(ipRanges.length);
table.clearAll();
// bug 69398 on Windows
table.redraw();
table.addListener(SWT.Resize, new Listener() {
public void handleEvent(Event e) {
resizeTable();
}
});
gFilter.addListener(SWT.Resize, new Listener() {
public void handleEvent(Event e) {
resizeTable();
}
});
filterListener = new IPFilterListener() {
public boolean canIPBeBanned(String ip) {
return true;
}
public void IPBanned(BannedIp ip) {
}
public void IPBlockedListChanged(final IpFilter filter) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
if (table.isDisposed()) {
filter.removeListener(filterListener);
return;
}
ipRanges = getSortedRanges(filter.getRanges());
table.setItemCount(ipRanges.length);
table.clearAll();
table.redraw();
}
});
}
public boolean
canIPBeBlocked(
String ip,
byte[] torrent_hash )
{
return true;
}
};
filter.addListener(filterListener);
return gFilter;
| public void | configSectionDelete()
if (bIsCachingDescriptions) {
IpFilterManager ipFilterManager = azureus_core.getIpFilterManager();
ipFilterManager.clearDescriptionCache();
bIsCachingDescriptions = false;
}
if (filter != null) {
filter.removeListener(filterListener);
}
| public java.lang.String | configSectionGetName()
return "ipfilter";
| public java.lang.String | configSectionGetParentSection()
return ConfigSection.SECTION_ROOT;
| public void | configSectionSave()
try{
if (filter != null)
filter.save();
}catch( Exception e ){
Logger.log(new LogAlert(LogAlert.UNREPEATABLE,
"Save of filter file fails", e));
}
| public void | editRange(IpRange range)
new IpFilterEditor(azureus_core,table.getShell(), range);
noChange = false;
//refresh();
| protected IpRange[] | getSortedRanges(IpRange[] ranges)
Arrays.sort(
ranges,
comparator);
return( ranges );
| public void | refresh()
if (table == null || table.isDisposed() || noChange)
return;
noChange = true;
TableItem[] items = table.getItems();
for (int i = 0; i < items.length; i++) {
if (items[i] == null || items[i].isDisposed())
continue;
String tmp = items[i].getText(0);
IpRange range = (IpRange) items[i].getData();
String desc = range.getDescription();
if (desc != null && !desc.equals(tmp))
items[i].setText(0, desc);
tmp = items[i].getText(1);
if (range.getStartIp() != null && !range.getStartIp().equals(tmp))
items[i].setText(1, range.getStartIp());
tmp = items[i].getText(2);
if (range.getEndIp() != null && !range.getEndIp().equals(tmp))
items[i].setText(2, range.getEndIp());
}
| public void | removeRange(IpRange range)
filter.removeRange( range );
//noChange = false;
//refresh();
| private void | resizeTable()
int iNewWidth = table.getClientArea().width -
table.getColumn(1).getWidth() -
table.getColumn(2).getWidth() - 20;
if (iNewWidth > 50)
table.getColumn(0).setWidth(iNewWidth);
| protected void | setPercentageBlocked()
long nbIPsBlocked = filter.getTotalAddressesInRange();
if ( COConfigurationManager.getBooleanParameter( "Ip Filter Allow" )){
nbIPsBlocked = 0x100000000L - nbIPsBlocked;
}
int percentIPsBlocked = (int) (nbIPsBlocked * 1000L / (256L * 256L * 256L * 256L));
String nbIps = "" + nbIPsBlocked;
String percentIps = DisplayFormatters.formatPercentFromThousands(percentIPsBlocked);
Messages.setLanguageText(percentage_blocked,"ConfigView.section.ipfilter.totalIPs",new String[]{nbIps,percentIps});
|
|