Changeset 0d0dd1e


Ignore:
Timestamp:
Mar 27, 2019 11:16:50 AM (17 months ago)
Author:
zab2 <zab2@…>
Branches:
master
Children:
841b16ef
Parents:
62f7b2c
Message:

hook up periodic events to ST2

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/AccessFilter.java

    r62f7b2c r0d0dd1e  
    33import java.util.Map;
    44import java.util.HashMap;
     5import java.util.Set;
     6import java.util.HashSet;
     7import java.util.Iterator;
    58
     9import java.io.File;
     10import java.io.FileReader;
     11import java.io.BufferedReader;
     12import java.io.FileWriter;
     13import java.io.BufferedWriter;
    614import java.io.IOException;
    715
    816import net.i2p.I2PAppContext;
     17import net.i2p.util.SimpleTimer2;
     18import net.i2p.util.Log;
    919import net.i2p.data.Destination;
    1020import net.i2p.client.streaming.IncomingConnectionFilter;
    1121
    1222class AccessFilter implements IncomingConnectionFilter {
     23
     24    private static final long PURGE_INTERVAL = 1000;
     25    private static final long SYNC_INTERVAL = 10 * 1000;
    1326
    1427    private final FilterDefinition definition;
     
    2437    private final Map<String, DestTracker> unknownDests = new HashMap<String, DestTracker>();
    2538
    26     AccessFilter(I2PAppContext context, FilterDefinition definition) {
     39    AccessFilter(I2PAppContext context, FilterDefinition definition) throws IOException {
    2740        this.context = context;
    2841        this.definition = definition;
     42
     43        reload();
     44
     45        new Purger();
     46        new Syncer();
    2947    }
    3048
     
    5775       
    5876    }
     77
     78    private void record() throws IOException {
     79        for (Recorder recorder : definition.getRecorders()) {
     80            Threshold threshold = recorder.getThreshold();
     81            File file = recorder.getFile();
     82            Set<String> breached = new HashSet<String>();
     83            synchronized(unknownDests) {
     84                for (DestTracker tracker : unknownDests.values()) {
     85                    if (!tracker.getCounter().isBreached(threshold))
     86                        continue;
     87                    breached.add(tracker.getB32());
     88                }
     89            }
     90            if (breached.isEmpty())
     91                continue;
     92
     93            // if the file already exists, add previously breached b32s
     94            if (file.exists() && file.isFile()) {
     95                BufferedReader reader = new BufferedReader(new FileReader(file));
     96                try {
     97                    String b32;
     98                    while((b32 = reader.readLine()) != null)
     99                        breached.add(b32);
     100                } finally {
     101                    if (reader != null) try { reader.close(); } catch (IOException ignored) {}
     102                }
     103            }
     104
     105            BufferedWriter writer = new BufferedWriter(new FileWriter(file));
     106            try {
     107                for (String b32 : breached) {
     108                    writer.write(b32);
     109                    writer.newLine();
     110                }
     111            } finally {
     112                if (writer != null) try { writer.close(); } catch (IOException ignored) {}
     113            }
     114        }
     115    }
     116
     117    private void purge() {
     118        long olderThan = context.clock().now() - definition.getPurgeMinutes() * 60000;
     119       
     120        synchronized(knownDests) {
     121            for (DestTracker tracker : knownDests.values())
     122                tracker.purge(olderThan);
     123        }
     124
     125        synchronized(unknownDests) {
     126            for (Iterator<Map.Entry<String,DestTracker>> iter = unknownDests.entrySet().iterator();
     127                    iter.hasNext();) {
     128                Map.Entry<String,DestTracker> entry = iter.next();
     129                if (entry.getValue().purge(olderThan))
     130                    iter.remove();
     131            }
     132        }
     133    }
     134
     135    private class Purger extends SimpleTimer2.TimedEvent {
     136        Purger() {
     137            super(context.simpleTimer2(), PURGE_INTERVAL);
     138        }
     139        public void timeReached() {
     140            purge();
     141            schedule(PURGE_INTERVAL);
     142        }
     143    }
     144
     145    private class Syncer extends SimpleTimer2.TimedEvent {
     146        Syncer() {
     147            super(context.simpleTimer2(), SYNC_INTERVAL);
     148        }
     149        public void timeReached() {
     150            try {
     151                record();
     152                reload();
     153                schedule(SYNC_INTERVAL);
     154            } catch (IOException bad) {
     155                Log log = context.logManager().getLog(AccessFilter.class);
     156                log.log(Log.CRIT, "syncing access list failed", bad);
     157            }
     158        }
     159    }
    59160}
  • build.properties

    r62f7b2c r0d0dd1e  
    3232# for example, installing the libc6-i386 package will satisfy this requirement.
    3333# Uncomment the next line to prevent building EXEs (changing it to false will have no impact)
    34 #noExe=true
     34noExe=true
    3535
    3636# IzPack 5.1.x install dir
     
    3838
    3939# Change this to false if you don't have gettext or you want to prevent it from running during the build
    40 require.gettext=true
     40require.gettext=false
    4141
    4242# Compile for this version of Java
Note: See TracChangeset for help on using the changeset viewer.