mirror of
https://github.com/anthonyraymond/joal.git
synced 2024-09-20 07:16:26 +08:00
Switch back to tomcat and fix some warnings
This commit is contained in:
parent
b5c78dd0d7
commit
78df5e9859
12
pom.xml
12
pom.xml
|
@ -21,7 +21,7 @@
|
|||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.0.1.RELEASE</version>
|
||||
<version>2.0.3.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
|||
<commons-codec.version>1.11</commons-codec.version>
|
||||
<fluent-hc.version>4.5.5</fluent-hc.version>
|
||||
<generex.version>1.0.2</generex.version>
|
||||
<google.guava.version>25.0-jre</google.guava.version>
|
||||
<google.guava.version>25.1-jre</google.guava.version>
|
||||
<ttorrent-core.version>1.5</ttorrent-core.version>
|
||||
|
||||
<!-- TESTS -->
|
||||
|
@ -68,20 +68,20 @@
|
|||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<!--<exclusion>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||
</exclusion>
|
||||
</exclusion>-->
|
||||
<exclusion>
|
||||
<groupId>org.hibernate.validator</groupId>
|
||||
<artifactId>hibernate-validator</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<!--<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-undertow</artifactId>
|
||||
</dependency>
|
||||
</dependency>-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-websocket</artifactId>
|
||||
|
|
|
@ -28,7 +28,7 @@ public class CoreEventListener {
|
|||
@Async
|
||||
@Order(Ordered.HIGHEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void handleTorrentFileAddedForSeed(final TorrentFileAddedEvent event) throws IOException {
|
||||
public void handleTorrentFileAddedForSeed(final TorrentFileAddedEvent event) throws IOException {
|
||||
logger.debug("Event TorrentFileAddedEvent caught.");
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,7 @@ public class CoreEventListener {
|
|||
@Async
|
||||
@Order(Ordered.HIGHEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void handleSeedSessionHasEnded(final GlobalSeedStoppedEvent event) {
|
||||
public void handleSeedSessionHasEnded(final GlobalSeedStoppedEvent event) {
|
||||
logger.debug("Event GlobalSeedStoppedEvent caught.");
|
||||
// TODO : log that the seed session is over
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import com.google.common.collect.Maps;
|
|||
import org.araymond.joal.core.bandwith.BandwidthDispatcher;
|
||||
import org.araymond.joal.core.bandwith.RandomSpeedProvider;
|
||||
import org.araymond.joal.core.bandwith.Speed;
|
||||
import org.araymond.joal.core.bandwith.SpeedChangedListener;
|
||||
import org.araymond.joal.core.client.emulated.BitTorrentClient;
|
||||
import org.araymond.joal.core.client.emulated.BitTorrentClientProvider;
|
||||
import org.araymond.joal.core.config.AppConfiguration;
|
||||
|
@ -93,9 +94,7 @@ public class SeedManager {
|
|||
|
||||
final RandomSpeedProvider randomSpeedProvider = new RandomSpeedProvider(appConfiguration);
|
||||
this.bandwidthDispatcher = new BandwidthDispatcher(5000, randomSpeedProvider);
|
||||
this.bandwidthDispatcher.setSpeedListener((speeds -> {
|
||||
this.publisher.publishEvent(new SeedingSpeedsHasChangedEvent(speeds));
|
||||
}));
|
||||
this.bandwidthDispatcher.setSpeedListener(new SeedManagerSpeedChangeListener(this.publisher));
|
||||
this.bandwidthDispatcher.start();
|
||||
|
||||
final AnnounceDataAccessor announceDataAccessor = new AnnounceDataAccessor(bitTorrentClient, bandwidthDispatcher, this.connectionHandler);
|
||||
|
@ -235,4 +234,17 @@ public class SeedManager {
|
|||
}
|
||||
}
|
||||
|
||||
private static final class SeedManagerSpeedChangeListener implements SpeedChangedListener {
|
||||
private final ApplicationEventPublisher publisher;
|
||||
|
||||
private SeedManagerSpeedChangeListener(final ApplicationEventPublisher publisher) {
|
||||
this.publisher = publisher;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void speedsHasChanged(final Map<InfoHash, Speed> speeds) {
|
||||
this.publisher.publishEvent(new SeedingSpeedsHasChangedEvent(speeds));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -49,13 +49,14 @@ public class BandwidthDispatcher implements BandwidthDispatcherFacade, Runnable
|
|||
* And even if it happens, we returns 0 by default.
|
||||
*/
|
||||
public TorrentSeedStats getSeedStatForTorrent(final InfoHash infoHash) {
|
||||
return this.torrentsSeedStats.getOrDefault(infoHash, new TorrentSeedStats());
|
||||
final TorrentSeedStats torrentSeedStats = this.torrentsSeedStats.get(infoHash);
|
||||
return torrentSeedStats == null ? new TorrentSeedStats() : torrentSeedStats;
|
||||
}
|
||||
|
||||
public Map<InfoHash, Speed> getSpeedMap() {
|
||||
try {
|
||||
this.lock.readLock().lock();
|
||||
return speedMap;
|
||||
return Maps.newHashMap(speedMap);
|
||||
} finally {
|
||||
this.lock.readLock().unlock();
|
||||
}
|
||||
|
@ -97,7 +98,8 @@ public class BandwidthDispatcher implements BandwidthDispatcherFacade, Runnable
|
|||
this.lock.readLock().unlock();
|
||||
|
||||
for (final Map.Entry<InfoHash, TorrentSeedStats> entry : entrySet) {
|
||||
final long speedInBytesPerSecond = this.speedMap.getOrDefault(entry.getKey(), new Speed(0)).getBytesPerSeconds();
|
||||
final Speed speed = this.speedMap.get(entry.getKey());
|
||||
final long speedInBytesPerSecond = speed == null ? 0: speed.getBytesPerSeconds(); // avoid Map#getOrDefault as it will trigger a lot of Speed object instantiation for nothing.
|
||||
// Divide by 1000 because of the thread pause interval being in milliseconds
|
||||
// The multiplication HAS to be done before the division, otherwise we're going to have trailing zeroes
|
||||
entry.getValue().addUploaded((speedInBytesPerSecond * this.threadPauseInterval) / 1000);
|
||||
|
|
|
@ -132,7 +132,7 @@ public class BitTorrentClient {
|
|||
public List<Map.Entry<String, String>> createRequestHeaders() {
|
||||
final List<Map.Entry<String, String>> headers = new ArrayList<>(this.headers.size() + 1);
|
||||
|
||||
this.headers.stream().forEachOrdered(header -> {
|
||||
for (final Map.Entry<String, String> header : this.headers) {
|
||||
final String name = header.getKey();
|
||||
final String value = header.getValue()
|
||||
.replaceAll("\\{java}", System.getProperty("java.version"))
|
||||
|
@ -146,7 +146,7 @@ public class BitTorrentClient {
|
|||
}
|
||||
|
||||
headers.add(new AbstractMap.SimpleImmutableEntry<>(name, value));
|
||||
});
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@ import java.nio.file.Files;
|
|||
import java.nio.file.Path;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package org.araymond.joal.core.client.emulated.generator.peerid.generation;
|
|||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.base.Objects;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.araymond.joal.core.client.emulated.TorrentClientConfigIntegrityException;
|
||||
|
@ -60,7 +61,7 @@ public class RandomPoolWithChecksumPeerIdAlgorithm implements PeerIdAlgorithm {
|
|||
|
||||
@VisibleForTesting
|
||||
byte[] createSecureRandomSeed() {
|
||||
return Instant.now().toString().getBytes();
|
||||
return Instant.now().toString().getBytes(Charsets.UTF_8);
|
||||
}
|
||||
|
||||
private Integer getRandomIntBetween10And50() {
|
||||
|
|
|
@ -62,7 +62,7 @@ public class TorrentFileProvider extends FileAlterationListenerAdaptor {
|
|||
}
|
||||
|
||||
this.archiveFolder = joalFoldersPath.getTorrentArchivedPath();
|
||||
this.torrentFiles = Collections.synchronizedMap(new HashMap<File, MockedTorrent>());
|
||||
this.torrentFiles = Collections.synchronizedMap(new HashMap<>());
|
||||
this.watcher = new TorrentFileWatcher(this, torrentFolder);
|
||||
this.torrentFileChangeListener = new HashSet<>();
|
||||
}
|
||||
|
|
|
@ -69,7 +69,7 @@ public class Client implements TorrentFileChangeAware, ClientFacade {
|
|||
this.thread = new Thread(() -> {
|
||||
while (!this.stop) {
|
||||
final List<AnnounceRequest> availables = this.delayQueue.getAvailables();
|
||||
availables.forEach(req -> {
|
||||
for (final AnnounceRequest req : availables) {
|
||||
this.announcerExecutor.execute(req);
|
||||
try {
|
||||
this.lock.writeLock().lock();
|
||||
|
@ -78,7 +78,7 @@ public class Client implements TorrentFileChangeAware, ClientFacade {
|
|||
} finally {
|
||||
this.lock.writeLock().unlock();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
package org.araymond.joal.core.ttorrent.client;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.*;
|
||||
import java.nio.channels.ServerSocketChannel;
|
||||
|
@ -76,8 +78,13 @@ public class ConnectionHandler {
|
|||
InetAddress readIpFromProvider(final String providerUrl) throws IOException {
|
||||
final URLConnection urlConnection = new URL(providerUrl).openConnection();
|
||||
urlConnection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
|
||||
try (final BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()))) {
|
||||
try (final BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), Charsets.UTF_8))) {
|
||||
return InetAddress.getByName(in.readLine());
|
||||
}finally {
|
||||
// Ensure all streams associated with http connection are closed
|
||||
final InputStream err = ((HttpURLConnection) urlConnection).getErrorStream();
|
||||
try { if (err != null) err.close(); }
|
||||
catch (final IOException ignored) {}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import org.araymond.joal.core.events.announce.FailedToAnnounceEvent;
|
|||
import org.araymond.joal.core.events.announce.SuccessfullyAnnounceEvent;
|
||||
import org.araymond.joal.core.events.announce.TooManyAnnouncesFailedEvent;
|
||||
import org.araymond.joal.core.events.announce.WillAnnounceEvent;
|
||||
import org.araymond.joal.core.torrent.torrent.InfoHash;
|
||||
import org.araymond.joal.core.ttorrent.client.announcer.Announcer;
|
||||
import org.araymond.joal.core.ttorrent.client.announcer.exceptions.TooMuchAnnouncesFailedInARawException;
|
||||
import org.araymond.joal.core.ttorrent.client.announcer.request.SuccessAnnounceResponse;
|
||||
|
@ -75,7 +74,6 @@ public class AnnounceEventPublisher implements AnnounceResponseHandlerChainEleme
|
|||
if(logger.isDebugEnabled()) {
|
||||
logger.debug("Publish FailedToAnnounceEvent event for {}.", announcer.getTorrentInfoHash().humanReadableValue());
|
||||
}
|
||||
final InfoHash infoHash = announcer.getTorrentInfoHash();
|
||||
this.eventPublisher.publishEvent(new FailedToAnnounceEvent(announcer, RequestEvent.STOPPED, throwable.getMessage()));
|
||||
}
|
||||
|
||||
|
|
|
@ -80,7 +80,9 @@ public class TrackerClient {
|
|||
host += ":" + announceUri.getPort();
|
||||
}
|
||||
request.addHeader("Host", host);
|
||||
headers.forEach(entry -> request.addHeader(entry.getKey(), entry.getValue()));
|
||||
for (final Map.Entry<String, String> entry : headers) {
|
||||
request.addHeader(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
final Response response;
|
||||
try {
|
||||
|
|
|
@ -6,7 +6,7 @@ import org.springframework.messaging.Message;
|
|||
import org.springframework.messaging.MessageChannel;
|
||||
import org.springframework.messaging.simp.stomp.StompCommand;
|
||||
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
|
||||
import org.springframework.messaging.support.ChannelInterceptorAdapter;
|
||||
import org.springframework.messaging.support.ChannelInterceptor;
|
||||
import org.springframework.messaging.support.MessageHeaderAccessor;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
|
@ -19,7 +19,7 @@ import javax.inject.Inject;
|
|||
*/
|
||||
@ConditionalOnWebUi
|
||||
@Component
|
||||
public class AuthChannelInterceptorAdapter extends ChannelInterceptorAdapter {
|
||||
public class AuthChannelInterceptorAdapter implements ChannelInterceptor {
|
||||
static final String USERNAME_HEADER = "X-Joal-Username";
|
||||
static final String TOKEN_HEADER = "X-Joal-Auth-Token";
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ public class SeedingSpeedHasChangedPayload implements MessagePayload {
|
|||
|
||||
public SeedingSpeedHasChangedPayload(final SeedingSpeedsHasChangedEvent event) {
|
||||
this.speeds = event.getSpeeds().entrySet().stream()
|
||||
.map(entry -> new SpeedPayload(entry.getKey(), Long.valueOf(entry.getValue().getBytesPerSeconds())))
|
||||
.map(entry -> new SpeedPayload(entry.getKey(), entry.getValue().getBytesPerSeconds()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ public class WebAnnounceEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void failedToAnnounce(final FailedToAnnounceEvent event) {
|
||||
public void failedToAnnounce(final FailedToAnnounceEvent event) {
|
||||
logger.debug("Send FailedToAnnouncePayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/announce", new FailedToAnnouncePayload(event));
|
||||
|
@ -42,7 +42,7 @@ public class WebAnnounceEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void successfullyAnnounce(final SuccessfullyAnnounceEvent event) {
|
||||
public void successfullyAnnounce(final SuccessfullyAnnounceEvent event) {
|
||||
logger.debug("Send SuccessfullyAnnouncePayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/announce", new SuccessfullyAnnouncePayload(event));
|
||||
|
@ -50,7 +50,7 @@ public class WebAnnounceEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void tooManyAnnouncesFailed(final TooManyAnnouncesFailedEvent event) {
|
||||
public void tooManyAnnouncesFailed(final TooManyAnnouncesFailedEvent event) {
|
||||
logger.debug("Send TooManyAnnouncesFailedPayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/announce", new TooManyAnnouncesFailedPayload(event));
|
||||
|
@ -58,7 +58,7 @@ public class WebAnnounceEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void willAnnounce(final WillAnnounceEvent event) {
|
||||
public void willAnnounce(final WillAnnounceEvent event) {
|
||||
logger.debug("Send WillAnnouncePayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/announce", new WillAnnouncePayload(event));
|
||||
|
|
|
@ -32,7 +32,7 @@ public class WebConfigEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void configHasBeenLoaded(final ConfigHasBeenLoadedEvent event) {
|
||||
public void configHasBeenLoaded(final ConfigHasBeenLoadedEvent event) {
|
||||
logger.debug("Send ConfigHasBeenLoadedPayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/config", new ConfigHasBeenLoadedPayload(event));
|
||||
|
@ -40,7 +40,7 @@ public class WebConfigEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void configIsInDirtyState(final ConfigurationIsInDirtyStateEvent event) {
|
||||
public void configIsInDirtyState(final ConfigurationIsInDirtyStateEvent event) {
|
||||
logger.debug("Send ConfigIsInDirtyStatePayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/config", new ConfigIsInDirtyStatePayload(event));
|
||||
|
@ -48,7 +48,7 @@ public class WebConfigEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void clientFilesDiscovered(final ListOfClientFilesEvent event) {
|
||||
public void clientFilesDiscovered(final ListOfClientFilesEvent event) {
|
||||
logger.debug("Send ListOfClientFilesPayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/config", new ListOfClientFilesPayload(event));
|
||||
|
|
|
@ -31,7 +31,7 @@ public class WebGlobalEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void globalSeedStarted(final GlobalSeedStartedEvent event) {
|
||||
public void globalSeedStarted(final GlobalSeedStartedEvent event) {
|
||||
logger.debug("Send GlobalSeedStartedPayload to clients.");
|
||||
|
||||
final String client = event.getBitTorrentClient().getHeaders().stream()
|
||||
|
@ -45,7 +45,7 @@ public class WebGlobalEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void globalSeedStopped(@SuppressWarnings("unused") final GlobalSeedStoppedEvent event) {
|
||||
public void globalSeedStopped(@SuppressWarnings("unused") final GlobalSeedStoppedEvent event) {
|
||||
logger.debug("Send GlobalSeedStoppedPayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/global", new GlobalSeedStoppedPayload());
|
||||
|
|
|
@ -28,7 +28,7 @@ public class WebSpeedEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void failedToAnnounce(final SeedingSpeedsHasChangedEvent event) {
|
||||
public void failedToAnnounce(final SeedingSpeedsHasChangedEvent event) {
|
||||
logger.debug("Send SeedingSpeedHasChangedPayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/speed", new SeedingSpeedHasChangedPayload(event));
|
||||
|
|
|
@ -32,7 +32,7 @@ public class WebTorrentFileEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void torrentFileAdded(final TorrentFileAddedEvent event) {
|
||||
public void torrentFileAdded(final TorrentFileAddedEvent event) {
|
||||
logger.debug("Send TorrentFileAddedPayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/torrents", new TorrentFileAddedPayload(event));
|
||||
|
@ -40,7 +40,7 @@ public class WebTorrentFileEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void torrentFileDeleted(final TorrentFileDeletedEvent event) {
|
||||
public void torrentFileDeleted(final TorrentFileDeletedEvent event) {
|
||||
logger.debug("Send TorrentFileDeletedPayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/torrents", new TorrentFileDeletedPayload(event));
|
||||
|
@ -48,7 +48,7 @@ public class WebTorrentFileEventListener extends WebEventListener {
|
|||
|
||||
@Order(Ordered.LOWEST_PRECEDENCE)
|
||||
@EventListener
|
||||
void failedToAddTorrentFile(final FailedToAddTorrentFileEvent event) {
|
||||
public void failedToAddTorrentFile(final FailedToAddTorrentFileEvent event) {
|
||||
logger.debug("Send FailedToAddTorrentFilePayload to clients.");
|
||||
|
||||
this.messagingTemplate.convertAndSend("/torrents", new FailedToAddTorrentFilePayload(event));
|
||||
|
|
Loading…
Reference in a new issue