From 29191bb3498ab83b47eee6396285210f2bf087b4 Mon Sep 17 00:00:00 2001 From: Danny van Heumen Date: Sun, 2 Feb 2014 01:27:29 +0100 Subject: [PATCH] Added changes to irc-api NOTICE + feedback changes --- lib/installer-exclude/irc-api-1.0-NOTICE | 174 ++++++++++++++++++ lib/installer-exclude/irc-api-1.0-sources.jar | Bin 90033 -> 90071 bytes lib/installer-exclude/irc-api-1.0.jar | Bin 184264 -> 184264 bytes .../impl/protocol/irc/IrcActivator.java | 1 + .../impl/protocol/irc/IrcStack.java | 55 ++++-- 5 files changed, 210 insertions(+), 20 deletions(-) diff --git a/lib/installer-exclude/irc-api-1.0-NOTICE b/lib/installer-exclude/irc-api-1.0-NOTICE index 2f91d3c21..cc5b8d538 100644 --- a/lib/installer-exclude/irc-api-1.0-NOTICE +++ b/lib/installer-exclude/irc-api-1.0-NOTICE @@ -2,3 +2,177 @@ http://irc-api.googlecode.com/svn/trunk@179 Additional modifications: ------------------------- +commit 99062b621dcf6722fc0b8c868abc806092369086 +Author: Danny van Heumen +Date: Sun Jan 26 22:46:28 2014 +0100 + + Added support for providing custom SSLContext. + +diff --git a/src/main/java/com/ircclouds/irc/api/AbstractIRCSession.java b/src/main/java/com/ircclouds/irc/api/AbstractIRCSession.java +index 67bdecd..08b5030 100644 +--- a/src/main/java/com/ircclouds/irc/api/AbstractIRCSession.java ++++ b/src/main/java/com/ircclouds/irc/api/AbstractIRCSession.java +@@ -2,6 +2,8 @@ package com.ircclouds.irc.api; + + import java.io.*; + ++import javax.net.ssl.*; ++ + import com.ircclouds.irc.api.commands.*; + import com.ircclouds.irc.api.comms.*; + import com.ircclouds.irc.api.domain.*; +@@ -90,7 +92,7 @@ public abstract class AbstractIRCSession implements IIRCSession + } + + @Override +- public boolean open(IRCServer aServer) throws IOException ++ public boolean open(IRCServer aServer, SSLContext aCustomContext) throws IOException + { + if (!aServer.isSSL()) + { +@@ -98,7 +100,7 @@ public abstract class AbstractIRCSession implements IIRCSession + } + else + { +- conn = new SSLSocketChannelConnection(); ++ conn = new SSLSocketChannelConnection(aCustomContext); + } + + if (conn.open(aServer.getHostname(), aServer.getPort())) +diff --git a/src/main/java/com/ircclouds/irc/api/IIRCSession.java b/src/main/java/com/ircclouds/irc/api/IIRCSession.java +index eafb171..b17f1ae 100644 +--- a/src/main/java/com/ircclouds/irc/api/IIRCSession.java ++++ b/src/main/java/com/ircclouds/irc/api/IIRCSession.java +@@ -2,6 +2,8 @@ package com.ircclouds.irc.api; + + import java.io.*; + ++import javax.net.ssl.*; ++ + import com.ircclouds.irc.api.domain.*; + import com.ircclouds.irc.api.filters.*; + import com.ircclouds.irc.api.listeners.*; +@@ -14,7 +16,7 @@ public interface IIRCSession + + void removeListener(IMessageListener aListener); + +- boolean open(IRCServer aServer) throws IOException; ++ boolean open(IRCServer aServer, SSLContext aCustomContext) throws IOException; + + void close() throws IOException; + +diff --git a/src/main/java/com/ircclouds/irc/api/IRCApiImpl.java b/src/main/java/com/ircclouds/irc/api/IRCApiImpl.java +index 8b60c05..4bb1408 100644 +--- a/src/main/java/com/ircclouds/irc/api/IRCApiImpl.java ++++ b/src/main/java/com/ircclouds/irc/api/IRCApiImpl.java +@@ -96,7 +96,7 @@ public class IRCApiImpl implements IRCApi + boolean _isOpen = false; + try + { +- if (_isOpen = session.open(aServerParameters.getServer())) ++ if (_isOpen = session.open(aServerParameters.getServer(), aServerParameters.getCustomContext())) + { + executeAsync(new ConnectCmd(aServerParameters), aCallback, _d); + } +diff --git a/src/main/java/com/ircclouds/irc/api/IServerParameters.java b/src/main/java/com/ircclouds/irc/api/IServerParameters.java +index b3bc942..2338ed5 100644 +--- a/src/main/java/com/ircclouds/irc/api/IServerParameters.java ++++ b/src/main/java/com/ircclouds/irc/api/IServerParameters.java +@@ -2,6 +2,8 @@ package com.ircclouds.irc.api; + + import java.util.*; + ++import javax.net.ssl.*; ++ + import com.ircclouds.irc.api.domain.*; + + /** +@@ -41,4 +43,10 @@ public interface IServerParameters + * @return + */ + IRCServer getServer(); ++ ++ /** ++ * Returns the custom SSL context if it is specified, or null otherwise. ++ * @return returns SSLContext instance or null ++ */ ++ SSLContext getCustomContext(); + } +diff --git a/src/main/java/com/ircclouds/irc/api/comms/SSLSocketChannelConnection.java b/src/main/java/com/ircclouds/irc/api/comms/SSLSocketChannelConnection.java +index c9096ac..abec187 100644 +--- a/src/main/java/com/ircclouds/irc/api/comms/SSLSocketChannelConnection.java ++++ b/src/main/java/com/ircclouds/irc/api/comms/SSLSocketChannelConnection.java +@@ -14,7 +14,8 @@ import org.slf4j.*; + public class SSLSocketChannelConnection implements IConnection + { + private static final Logger LOG = LoggerFactory.getLogger(SSLSocketChannelConnection.class); +- ++ ++ private final SSLContext customContext; + private SocketChannel sChannel; + private SSLEngine sslEngine; + +@@ -25,12 +26,23 @@ public class SSLSocketChannelConnection implements IConnection + + private HandshakeStatus hStatus; + private int remaingUnwraps; ++ ++ public SSLSocketChannelConnection(SSLContext customContext) ++ { ++ this.customContext = customContext; ++ } + + public boolean open(String aHostname, int aPort) throws IOException + { + try + { +- sslEngine = getInitializedSSLContext().createSSLEngine(aHostname, aPort); ++ SSLContext context = this.customContext; ++ if (context == null) ++ { ++ // initialize default SSLContext ++ context = getInitializedSSLContext(); ++ } ++ sslEngine = context.createSSLEngine(aHostname, aPort); + sslEngine.setNeedClientAuth(false); + sslEngine.setUseClientMode(true); + sslEngine.beginHandshake(); +diff --git a/src/test/java/com/ircclouds/irc/api/MockServerParametersImpl.java b/src/test/java/com/ircclouds/irc/api/MockServerParametersImpl.java +index 105b509..68dd46b 100644 +--- a/src/test/java/com/ircclouds/irc/api/MockServerParametersImpl.java ++++ b/src/test/java/com/ircclouds/irc/api/MockServerParametersImpl.java +@@ -2,6 +2,8 @@ package com.ircclouds.irc.api; + + import java.util.*; + ++import javax.net.ssl.*; ++ + import com.ircclouds.irc.api.domain.*; + + class MockServerParametersImpl implements IServerParameters +@@ -11,6 +13,7 @@ class MockServerParametersImpl implements IServerParameters + private String ident; + private String realname; + private IRCServer server; ++ private SSLContext customContext; + + public MockServerParametersImpl(String aNickname, List aAltNicks, String aIdent, String aRealname, IRCServer aServer) + { +@@ -19,6 +22,7 @@ class MockServerParametersImpl implements IServerParameters + ident = aIdent; + realname = aRealname; + server = aServer; ++ customContext = null; + } + + @Override +@@ -51,4 +55,9 @@ class MockServerParametersImpl implements IServerParameters + return server; + } + ++ @Override ++ public SSLContext getCustomContext() ++ { ++ return customContext; ++ } + } diff --git a/lib/installer-exclude/irc-api-1.0-sources.jar b/lib/installer-exclude/irc-api-1.0-sources.jar index 70b7393b0ac7e4cd0664caf6c72d84f32def2aa0..579d826b626ac30358ea68ec4be749139cadbaaa 100644 GIT binary patch delta 843 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 diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java index 99e714969..77c7c9cc1 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java @@ -128,6 +128,7 @@ public static BundleContext getBundleContext() { return bundleContext; } + /** * Return the certificate verification service impl. * diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java index 351e43978..3b5e73205 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java @@ -103,8 +103,8 @@ public IrcStack(final ProtocolProviderServiceIrcImpl parentProvider, */ public boolean isConnected() { - return (this.irc != null && this.connectionState != null && this.connectionState - .isConnected()); + return (this.irc != null && this.connectionState != null + && this.connectionState.isConnected()); } /** @@ -192,7 +192,8 @@ public void onFailure(Exception e) while (!result.isDone()) { LOGGER - .trace("Waiting for the connection to be established ..."); + .trace("Waiting for the connection to be established " + + "..."); result.wait(); } @@ -203,15 +204,16 @@ public void onFailure(Exception e) && this.connectionState.isConnected()) { // if connecting succeeded, set state to registered - this.provider - .setCurrentRegistrationState(RegistrationState.REGISTERED); + this.provider.setCurrentRegistrationState( + RegistrationState.REGISTERED); } else { // if connecting failed, set state to unregistered and throw // the exception if one exists this.provider - .setCurrentRegistrationState(RegistrationState.UNREGISTERED); + .setCurrentRegistrationState( + RegistrationState.UNREGISTERED); Exception e = result.getException(); if (e != null) throw e; @@ -220,13 +222,15 @@ public void onFailure(Exception e) catch (IOException e) { this.provider - .setCurrentRegistrationState(RegistrationState.UNREGISTERED); + .setCurrentRegistrationState( + RegistrationState.UNREGISTERED); throw e; } catch (InterruptedException e) { this.provider - .setCurrentRegistrationState(RegistrationState.UNREGISTERED); + .setCurrentRegistrationState( + RegistrationState.UNREGISTERED); throw e; } } @@ -336,7 +340,8 @@ public void setSubject(ChatRoomIrcImpl chatroom, String subject) throw new IllegalArgumentException("Cannot have a null chatroom"); LOGGER.trace("Setting chat room topic to '" + subject + "'"); this.irc - .changeTopic(chatroom.getIdentifier(), subject == null ? "" : subject); + .changeTopic(chatroom.getIdentifier(), + subject == null ? "" : subject); } /** @@ -442,7 +447,8 @@ public void join(final ChatRoomIrcImpl chatroom, final String password) synchronized (joinSignal) { LOGGER - .trace("Issue join channel command to IRC library and wait for join operation to complete (un)successfully."); + .trace("Issue join channel command to IRC library and wait " + + "for join operation to complete (un)successfully."); // TODO Refactor this ridiculous nesting of functions and // classes. this.irc.joinChannel(chatroom.getIdentifier(), password, @@ -453,7 +459,8 @@ public void join(final ChatRoomIrcImpl chatroom, final String password) public void onSuccess(IRCChannel channel) { LOGGER - .trace("Started callback for successful join of channel '" + .trace("Started callback for successful join of " + + "channel '" + chatroom.getIdentifier() + "'."); ChatRoomIrcImpl actualChatRoom = chatroom; synchronized (joinSignal) @@ -482,7 +489,8 @@ public void onSuccess(IRCChannel channel) message, null, new Date(), - MessageReceivedEvent.SYSTEM_MESSAGE_RECEIVED); + MessageReceivedEvent + .SYSTEM_MESSAGE_RECEIVED); } IrcStack.this.joined.put( @@ -536,10 +544,12 @@ public void onSuccess(IRCChannel channel) .getMUC() .fireLocalUserPresenceEvent( actualChatRoom, - LocalUserChatRoomPresenceChangeEvent.LOCAL_USER_JOINED, + LocalUserChatRoomPresenceChangeEvent + .LOCAL_USER_JOINED, null); LOGGER - .trace("Finished successful join callback for channel '" + .trace("Finished successful join callback " + + "for channel '" + chatroom.getIdentifier() + "'. Waking up original thread."); // Notify waiting threads of finished @@ -554,8 +564,9 @@ public void onSuccess(IRCChannel channel) public void onFailure(Exception e) { LOGGER - .trace("Started callback for failed attempt to join channel '" - + chatroom.getIdentifier() + "'."); + .trace("Started callback for failed attempt to " + + "join channel '" + chatroom.getIdentifier() + + "'."); // TODO how should we communicate a failed attempt // at joining the channel? (System messages don't // seem to show if there is no actual chat room @@ -569,18 +580,21 @@ public void onFailure(Exception e) "Failed to join channel " + chatroom.getIdentifier() + " (" + e.getMessage() + ")", - "text/plain", "UTF-8", "Failed to join"); + "text/plain", "UTF-8", + "Failed to join"); chatroom .fireMessageReceivedEvent( message, null, new Date(), - MessageReceivedEvent.SYSTEM_MESSAGE_RECEIVED); + MessageReceivedEvent + .SYSTEM_MESSAGE_RECEIVED); } finally { LOGGER - .trace("Finished callback for failed attempt to join channel '" + .trace("Finished callback for failed " + + "attempt to join channel '" + chatroom.getIdentifier() + "'. Waking up original thread."); // Notify waiting threads of finished @@ -957,7 +971,8 @@ public void onChannelPart(ChanPartMessage msg) { LOGGER .warn( - "This should not have happened. Please report this as it is a bug.", + "This should not have happened. Please report this " + + "as it is a bug.", e); } }