mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-16 20:59:54 +01:00
Start RSS Feed Fetcher only after TransportEnabledEvent for Tor
This commit is contained in:
@@ -27,6 +27,7 @@ import org.briarproject.api.event.SettingsUpdatedEvent;
|
|||||||
import org.briarproject.api.keyagreement.KeyAgreementListener;
|
import org.briarproject.api.keyagreement.KeyAgreementListener;
|
||||||
import org.briarproject.api.keyagreement.TransportDescriptor;
|
import org.briarproject.api.keyagreement.TransportDescriptor;
|
||||||
import org.briarproject.api.plugins.Backoff;
|
import org.briarproject.api.plugins.Backoff;
|
||||||
|
import org.briarproject.api.plugins.TorConstants;
|
||||||
import org.briarproject.api.plugins.duplex.DuplexPlugin;
|
import org.briarproject.api.plugins.duplex.DuplexPlugin;
|
||||||
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
|
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
|
||||||
import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
|
import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
|
||||||
@@ -72,18 +73,17 @@ import static java.util.logging.Level.INFO;
|
|||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
import static net.freehaven.tor.control.TorControlCommands.HS_ADDRESS;
|
import static net.freehaven.tor.control.TorControlCommands.HS_ADDRESS;
|
||||||
import static net.freehaven.tor.control.TorControlCommands.HS_PRIVKEY;
|
import static net.freehaven.tor.control.TorControlCommands.HS_PRIVKEY;
|
||||||
|
import static org.briarproject.api.plugins.TorConstants.CONTROL_PORT;
|
||||||
|
import static org.briarproject.api.plugins.TorConstants.SOCKS_PORT;
|
||||||
import static org.briarproject.util.PrivacyUtils.scrubOnion;
|
import static org.briarproject.util.PrivacyUtils.scrubOnion;
|
||||||
|
|
||||||
class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
||||||
|
|
||||||
static final TransportId ID = new TransportId("tor");
|
|
||||||
|
|
||||||
private static final String PROP_ONION = "onion";
|
private static final String PROP_ONION = "onion";
|
||||||
private static final String[] EVENTS = {
|
private static final String[] EVENTS = {
|
||||||
"CIRC", "ORCONN", "HS_DESC", "NOTICE", "WARN", "ERR"
|
"CIRC", "ORCONN", "HS_DESC", "NOTICE", "WARN", "ERR"
|
||||||
};
|
};
|
||||||
private static final String OWNER = "__OwningControllerProcess";
|
private static final String OWNER = "__OwningControllerProcess";
|
||||||
private static final int SOCKS_PORT = 59050, CONTROL_PORT = 59051;
|
|
||||||
private static final int COOKIE_TIMEOUT = 3000; // Milliseconds
|
private static final int COOKIE_TIMEOUT = 3000; // Milliseconds
|
||||||
private static final Pattern ONION = Pattern.compile("[a-z2-7]{16}");
|
private static final Pattern ONION = Pattern.compile("[a-z2-7]{16}");
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
@@ -140,7 +140,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TransportId getId() {
|
public TransportId getId() {
|
||||||
return ID;
|
return TorConstants.ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import org.briarproject.api.TransportId;
|
|||||||
import org.briarproject.api.event.EventBus;
|
import org.briarproject.api.event.EventBus;
|
||||||
import org.briarproject.api.plugins.Backoff;
|
import org.briarproject.api.plugins.Backoff;
|
||||||
import org.briarproject.api.plugins.BackoffFactory;
|
import org.briarproject.api.plugins.BackoffFactory;
|
||||||
|
import org.briarproject.api.plugins.TorConstants;
|
||||||
import org.briarproject.api.plugins.duplex.DuplexPlugin;
|
import org.briarproject.api.plugins.duplex.DuplexPlugin;
|
||||||
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
|
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
|
||||||
import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
|
import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
|
||||||
@@ -48,7 +49,7 @@ public class TorPluginFactory implements DuplexPluginFactory {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TransportId getId() {
|
public TransportId getId() {
|
||||||
return TorPlugin.ID;
|
return TorConstants.ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
12
briar-api/src/org/briarproject/api/plugins/TorConstants.java
Normal file
12
briar-api/src/org/briarproject/api/plugins/TorConstants.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package org.briarproject.api.plugins;
|
||||||
|
|
||||||
|
import org.briarproject.api.TransportId;
|
||||||
|
|
||||||
|
public interface TorConstants {
|
||||||
|
|
||||||
|
TransportId ID = new TransportId("tor");
|
||||||
|
|
||||||
|
int SOCKS_PORT = 59050;
|
||||||
|
int CONTROL_PORT = 59051;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ import com.rometools.rome.io.SyndFeedInput;
|
|||||||
import com.rometools.rome.io.XmlReader;
|
import com.rometools.rome.io.XmlReader;
|
||||||
|
|
||||||
import org.briarproject.api.FormatException;
|
import org.briarproject.api.FormatException;
|
||||||
|
import org.briarproject.api.TransportId;
|
||||||
import org.briarproject.api.blogs.Blog;
|
import org.briarproject.api.blogs.Blog;
|
||||||
import org.briarproject.api.blogs.BlogManager;
|
import org.briarproject.api.blogs.BlogManager;
|
||||||
import org.briarproject.api.blogs.BlogPost;
|
import org.briarproject.api.blogs.BlogPost;
|
||||||
@@ -21,14 +22,16 @@ import org.briarproject.api.data.BdfList;
|
|||||||
import org.briarproject.api.db.DatabaseComponent;
|
import org.briarproject.api.db.DatabaseComponent;
|
||||||
import org.briarproject.api.db.DbException;
|
import org.briarproject.api.db.DbException;
|
||||||
import org.briarproject.api.db.Transaction;
|
import org.briarproject.api.db.Transaction;
|
||||||
|
import org.briarproject.api.event.Event;
|
||||||
|
import org.briarproject.api.event.EventListener;
|
||||||
|
import org.briarproject.api.event.TransportEnabledEvent;
|
||||||
import org.briarproject.api.feed.Feed;
|
import org.briarproject.api.feed.Feed;
|
||||||
import org.briarproject.api.feed.FeedManager;
|
import org.briarproject.api.feed.FeedManager;
|
||||||
import org.briarproject.api.identity.AuthorId;
|
import org.briarproject.api.identity.AuthorId;
|
||||||
import org.briarproject.api.identity.IdentityManager;
|
import org.briarproject.api.identity.IdentityManager;
|
||||||
import org.briarproject.api.identity.LocalAuthor;
|
import org.briarproject.api.identity.LocalAuthor;
|
||||||
import org.briarproject.api.lifecycle.IoExecutor;
|
import org.briarproject.api.lifecycle.IoExecutor;
|
||||||
import org.briarproject.api.lifecycle.Service;
|
import org.briarproject.api.plugins.TorConstants;
|
||||||
import org.briarproject.api.lifecycle.ServiceException;
|
|
||||||
import org.briarproject.api.sync.ClientId;
|
import org.briarproject.api.sync.ClientId;
|
||||||
import org.briarproject.api.sync.Group;
|
import org.briarproject.api.sync.Group;
|
||||||
import org.briarproject.api.sync.GroupId;
|
import org.briarproject.api.sync.GroupId;
|
||||||
@@ -39,6 +42,7 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.Proxy;
|
import java.net.Proxy;
|
||||||
|
import java.net.SocketAddress;
|
||||||
import java.security.GeneralSecurityException;
|
import java.security.GeneralSecurityException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -47,6 +51,7 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -62,8 +67,9 @@ import static org.briarproject.api.feed.FeedConstants.FETCH_DELAY_INITIAL;
|
|||||||
import static org.briarproject.api.feed.FeedConstants.FETCH_INTERVAL;
|
import static org.briarproject.api.feed.FeedConstants.FETCH_INTERVAL;
|
||||||
import static org.briarproject.api.feed.FeedConstants.FETCH_UNIT;
|
import static org.briarproject.api.feed.FeedConstants.FETCH_UNIT;
|
||||||
import static org.briarproject.api.feed.FeedConstants.KEY_FEEDS;
|
import static org.briarproject.api.feed.FeedConstants.KEY_FEEDS;
|
||||||
|
import static org.briarproject.api.plugins.TorConstants.SOCKS_PORT;
|
||||||
|
|
||||||
class FeedManagerImpl implements FeedManager, Service, Client {
|
class FeedManagerImpl implements FeedManager, Client, EventListener {
|
||||||
|
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
Logger.getLogger(FeedManagerImpl.class.getName());
|
Logger.getLogger(FeedManagerImpl.class.getName());
|
||||||
@@ -78,8 +84,9 @@ class FeedManagerImpl implements FeedManager, Service, Client {
|
|||||||
private final DatabaseComponent db;
|
private final DatabaseComponent db;
|
||||||
private final PrivateGroupFactory privateGroupFactory;
|
private final PrivateGroupFactory privateGroupFactory;
|
||||||
private final ClientHelper clientHelper;
|
private final ClientHelper clientHelper;
|
||||||
private IdentityManager identityManager;
|
private final IdentityManager identityManager;
|
||||||
private final BlogManager blogManager;
|
private final BlogManager blogManager;
|
||||||
|
private final AtomicBoolean fetcherStarted = new AtomicBoolean(false);
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@SuppressWarnings("WeakerAccess")
|
@SuppressWarnings("WeakerAccess")
|
||||||
@@ -109,8 +116,20 @@ class FeedManagerImpl implements FeedManager, Service, Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startService() throws ServiceException {
|
public void eventOccurred(Event e) {
|
||||||
|
if (e instanceof TransportEnabledEvent) {
|
||||||
|
TransportId t = ((TransportEnabledEvent) e).getTransportId();
|
||||||
|
if (t.equals(TorConstants.ID)) {
|
||||||
|
startFeedExecutor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startFeedExecutor() {
|
||||||
|
if (fetcherStarted.getAndSet(true)) return;
|
||||||
|
LOG.info("Tor started, scheduling RSS feed fetcher");
|
||||||
Runnable fetcher = new Runnable() {
|
Runnable fetcher = new Runnable() {
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
ioExecutor.execute(new Runnable() {
|
ioExecutor.execute(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
@@ -124,11 +143,6 @@ class FeedManagerImpl implements FeedManager, Service, Client {
|
|||||||
FETCH_INTERVAL, FETCH_UNIT);
|
FETCH_INTERVAL, FETCH_UNIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void stopService() throws ServiceException {
|
|
||||||
// feedExecutor will be stopped by LifecycleManager
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createLocalState(Transaction txn) throws DbException {
|
public void createLocalState(Transaction txn) throws DbException {
|
||||||
Group g = getLocalGroup();
|
Group g = getLocalGroup();
|
||||||
@@ -341,11 +355,9 @@ class FeedManagerImpl implements FeedManager, Service, Client {
|
|||||||
|
|
||||||
private InputStream getFeedInputStream(String url) throws IOException {
|
private InputStream getFeedInputStream(String url) throws IOException {
|
||||||
// Set proxy
|
// Set proxy
|
||||||
// TODO verify and use local Tor proxy address/port
|
SocketAddress socketAddress =
|
||||||
String proxyHost = "localhost";
|
new InetSocketAddress("127.0.0.1", SOCKS_PORT);
|
||||||
int proxyPort = 59050;
|
Proxy proxy = new Proxy(Proxy.Type.SOCKS, socketAddress);
|
||||||
Proxy proxy = new Proxy(Proxy.Type.SOCKS,
|
|
||||||
new InetSocketAddress(proxyHost, proxyPort));
|
|
||||||
|
|
||||||
// Build HTTP Client
|
// Build HTTP Client
|
||||||
OkHttpClient client = new OkHttpClient.Builder()
|
OkHttpClient client = new OkHttpClient.Builder()
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.briarproject.feed;
|
package org.briarproject.feed;
|
||||||
|
|
||||||
|
import org.briarproject.api.event.EventBus;
|
||||||
import org.briarproject.api.feed.FeedManager;
|
import org.briarproject.api.feed.FeedManager;
|
||||||
import org.briarproject.api.lifecycle.LifecycleManager;
|
import org.briarproject.api.lifecycle.LifecycleManager;
|
||||||
|
|
||||||
@@ -20,10 +21,10 @@ public class FeedModule {
|
|||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
FeedManager provideFeedManager(FeedManagerImpl feedManager,
|
FeedManager provideFeedManager(FeedManagerImpl feedManager,
|
||||||
LifecycleManager lifecycleManager) {
|
LifecycleManager lifecycleManager, EventBus eventBus) {
|
||||||
|
|
||||||
lifecycleManager.registerClient(feedManager);
|
lifecycleManager.registerClient(feedManager);
|
||||||
lifecycleManager.registerService(feedManager);
|
eventBus.addListener(feedManager);
|
||||||
return feedManager;
|
return feedManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user