Integrate the second big patch for OTR. With this patch all the required GSoC functions are available.

cusax-fix
Werner Dittmann 16 years ago
parent d45dd664c9
commit fc523c0794

@ -2093,12 +2093,10 @@ org.apache.http.util"/>
</jar>
</target>
<!--BUNDLE-PLUGIN-OTR -->
<!--<property name="otr4j_classes" value="../otr4j/bin/classes"/>-->
<target name="bundle-plugin-otr">
<jar compress="false" destfile="${bundles.dest}/otr.jar" manifest="${src}/net/java/sip/communicator/plugin/otr/otr.manifest.mf">
<zipfileset dir="${dest}/net/java/sip/communicator/plugin/otr"
prefix="net/java/sip/communicator/plugin/otr"/>
<!--<fileset dir="${otr4j_classes}" excludes="**/*Test.class"/>-->
<zipfileset src="${lib.noinst}/otr4j.jar"/>
</jar>
</target>

Binary file not shown.

@ -409,5 +409,10 @@ plugin.notificationconfig.FOLDER_ICON=resources/images/plugin/notificationconfig
plugin.mediaconfig.PLUGIN_ICON=resources/images/impl/media/media.png
# otr plugin icons
plugin.otr.ENCRYPTED_ICON=resources/images/plugin/otr/encrypted.png
plugin.otr.DECRYPTED_ICON=resources/images/plugin/otr/decrypted.png
plugin.otr.ENCRYPTED_ICON_15x15=resources/images/plugin/otr/encrypted15x15.png
plugin.otr.ENCRYPTED_ICON_25x25=resources/images/plugin/otr/encrypted25x25.png
plugin.otr.PLAINTEXT_ICON_15x15=resources/images/plugin/otr/plaintext15x15.png
plugin.otr.PLAINTEXT_ICON_25x25=resources/images/plugin/otr/plaintext25x25.png
plugin.otr.FINISHED_ICON_15x15=resources/images/plugin/otr/finished15x15.png
plugin.otr.FINISHED_ICON_25x25=resources/images/plugin/otr/finished25x25.png
plugin.otr.HELP_ICON_15x15=resources/images/plugin/otr/help15x15.png

Before

Width:  |  Height:  |  Size: 769 B

After

Width:  |  Height:  |  Size: 769 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

Before

Width:  |  Height:  |  Size: 739 B

After

Width:  |  Height:  |  Size: 739 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

File diff suppressed because it is too large Load Diff

@ -284,6 +284,11 @@ public void addChat(ChatPanel chatPanel)
chatCount ++;
chatPanel.setShown(true);
for (ChatChangeListener l : this.chatChangeListeners)
{
l.chatChanged(chatPanel);
}
}
/**
@ -456,6 +461,11 @@ public void setCurrentChatPanel(ChatPanel chatPanel)
mainToolBar.changeHistoryButtonsState(chatPanel);
chatPanel.requestFocusInWriteArea();
for (ChatChangeListener l : this.chatChangeListeners)
{
l.chatChanged(chatPanel);
}
}
/**

@ -16,6 +16,7 @@
import net.java.sip.communicator.impl.gui.event.*;
import net.java.sip.communicator.impl.gui.main.chat.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.service.contactlist.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.gui.Container;
import net.java.sip.communicator.util.*;
@ -72,6 +73,23 @@ public MessageWindowMenuBar(ChatWindow parentWindow)
this.init();
this.initPluginComponents();
this.parentWindow.addChatChangeListener(new ChatChangeListener()
{
public void chatChanged(ChatPanel panel)
{
MetaContact contact =
GuiActivator.getUIService().getChatContact(panel);
for (Component c : getComponents())
{
if (!(c instanceof PluginComponent))
continue;
((PluginComponent)c).setCurrentContact(contact);
}
}
});
}
/**

@ -20,6 +20,7 @@
import net.java.sip.communicator.impl.gui.main.chat.conference.*;
import net.java.sip.communicator.impl.gui.main.chat.history.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.service.contactlist.MetaContact;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.gui.Container;
import net.java.sip.communicator.util.*;
@ -126,6 +127,23 @@ public MainToolBar(ChatWindow messageWindow)
this.nextButton.addActionListener(this);
this.initPluginComponents();
this.messageWindow.addChatChangeListener(new ChatChangeListener()
{
public void chatChanged(ChatPanel panel)
{
MetaContact contact =
GuiActivator.getUIService().getChatContact(panel);
for (Component c : getComponents())
{
if (!(c instanceof PluginComponent))
continue;
((PluginComponent)c).setCurrentContact(contact);
}
}
});
}
/**

@ -172,20 +172,7 @@ public void sendInstantMessage(Contact to, Message message)
MessageDeliveredEvent msgDeliveryPendingEvt = new MessageDeliveredEvent(
message, to, System.currentTimeMillis());
OperationSetInstantMessageTransformIcqImpl messageTransform =
(OperationSetInstantMessageTransformIcqImpl)icqProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgDeliveryPendingEvt != null)
msgDeliveryPendingEvt = transformLayer.messageDeliveryPending(msgDeliveryPendingEvt);
}
}
msgDeliveryPendingEvt = this.messageDeliveryPendingTransform(msgDeliveryPendingEvt);
if (msgDeliveryPendingEvt == null)
return;
@ -202,17 +189,7 @@ public void sendInstantMessage(Contact to, Message message)
MessageDeliveredEvent msgDeliveredEvt = new MessageDeliveredEvent(
message, to, System.currentTimeMillis());
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgDeliveredEvt != null)
msgDeliveredEvt = transformLayer.messageDelivered(msgDeliveredEvt);
}
}
// msgDeliveredEvt = this.messageDeliveredTransform(msgDeliveredEvt);
if (msgDeliveredEvt != null)
fireMessageEvent(msgDeliveredEvt);
@ -293,20 +270,7 @@ public void handleResponse(SnacResponseEvent evt)
sourceContact,
msgDate);
OperationSetInstantMessageTransformIcqImpl messageTransform =
(OperationSetInstantMessageTransformIcqImpl)icqProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgReceivedEvt != null)
msgReceivedEvt = transformLayer.messageReceived(msgReceivedEvt);
}
}
// msgReceivedEvt = messageReceivedTransform(msgReceivedEvt);
if (msgReceivedEvt != null)
{
@ -583,20 +547,7 @@ public void gotMessage(Conversation conversation, MessageInfo minfo)
MessageReceivedEvent msgReceivedEvt =
new MessageReceivedEvent(newMessage, sourceContact, msgDate);
OperationSetInstantMessageTransformIcqImpl messageTransform =
(OperationSetInstantMessageTransformIcqImpl)icqProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgReceivedEvt != null)
msgReceivedEvt = transformLayer.messageReceived(msgReceivedEvt);
}
}
// msgReceivedEvt = messageReceivedTransform(msgReceivedEvt);
if (msgReceivedEvt != null)
{

@ -1,62 +0,0 @@
package net.java.sip.communicator.impl.protocol.icq;
import java.util.*;
import net.java.sip.communicator.service.protocol.*;
public class OperationSetInstantMessageTransformIcqImpl
implements OperationSetInstantMessageTransform
{
public final Map<Integer, Vector<TransformLayer>> transformLayers =
new Hashtable<Integer, Vector<TransformLayer>>();
private final int defaultPriority = 1;
// @Override
public void addTransformLayer(TransformLayer transformLayer)
{
this.addTransformLayer(defaultPriority, transformLayer);
}
// @Override
public void addTransformLayer(int priority, TransformLayer transformLayer)
{
synchronized (transformLayers)
{
if (!transformLayers.containsKey(defaultPriority))
transformLayers.put(defaultPriority,
new Vector<TransformLayer>());
transformLayers.get(defaultPriority).add(transformLayer);
}
}
// @Override
public boolean containsLayer(TransformLayer layer)
{
synchronized (transformLayers)
{
for (Map.Entry<Integer, Vector<TransformLayer>> entry : transformLayers
.entrySet())
{
if (entry.getValue().contains(layer))
return true;
}
}
return false;
}
// @Override
public void removeTransformLayer(TransformLayer transformLayer)
{
synchronized (transformLayers)
{
for (Map.Entry<Integer, Vector<TransformLayer>> entry : transformLayers
.entrySet())
{
entry.getValue().remove(transformLayer);
}
}
}
}

@ -456,7 +456,7 @@ protected void initialize(String screenname,
USING_ICQ = false;
supportedOperationSets.put(OperationSetInstantMessageTransform.class.getName(),
new OperationSetInstantMessageTransformIcqImpl());
new OperationSetInstantMessageTransformImpl());
//initialize the presence operationset
OperationSetPersistentPresence persistentPresence =

@ -199,20 +199,7 @@ public void processMessage(
= new MessageDeliveredEvent(
message, to, System.currentTimeMillis());
OperationSetInstantMessageTransformJabberImpl messageTransform =
(OperationSetInstantMessageTransformJabberImpl)jabberProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgDeliveryPendingEvt != null)
msgDeliveryPendingEvt = transformLayer.messageDeliveryPending(msgDeliveryPendingEvt);
}
}
msgDeliveryPendingEvt = messageDeliveryPendingTransform(msgDeliveryPendingEvt);
if (msgDeliveryPendingEvt == null)
return;
@ -249,17 +236,7 @@ public void processMessage(
= new MessageDeliveredEvent(
message, to, System.currentTimeMillis());
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgDeliveredEvt != null)
msgDeliveredEvt = transformLayer.messageDelivered(msgDeliveredEvt);
}
}
// msgDeliveredEvt = messageDeliveredTransform(msgDeliveredEvt);
if (msgDeliveredEvt != null)
fireMessageEvent(msgDeliveredEvt);
@ -428,20 +405,7 @@ public void processPacket(Packet packet)
sourceContact,
errorResultCode);
OperationSetInstantMessageTransformJabberImpl messageTransform =
(OperationSetInstantMessageTransformJabberImpl)jabberProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (ev != null)
ev = transformLayer.messageDeliveryFailed(ev);
}
}
// ev = messageDeliveryFailedTransform(ev);
if (ev != null)
fireMessageEvent(ev);
@ -463,20 +427,7 @@ public void processPacket(Packet packet)
= new MessageReceivedEvent(
newMessage, sourceContact , System.currentTimeMillis() );
OperationSetInstantMessageTransformJabberImpl messageTransform =
(OperationSetInstantMessageTransformJabberImpl)jabberProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgReceivedEvt != null)
msgReceivedEvt = transformLayer.messageReceived(msgReceivedEvt);
}
}
// msgReceivedEvt = messageReceivedTransform(msgReceivedEvt);
if (msgReceivedEvt != null)
fireMessageEvent(msgReceivedEvt);

@ -1,62 +0,0 @@
package net.java.sip.communicator.impl.protocol.jabber;
import java.util.*;
import net.java.sip.communicator.service.protocol.*;
public class OperationSetInstantMessageTransformJabberImpl
implements OperationSetInstantMessageTransform
{
public final Map<Integer, Vector<TransformLayer>> transformLayers =
new Hashtable<Integer, Vector<TransformLayer>>();
private final int defaultPriority = 1;
// @Override
public void addTransformLayer(TransformLayer transformLayer)
{
this.addTransformLayer(defaultPriority, transformLayer);
}
// @Override
public void addTransformLayer(int priority, TransformLayer transformLayer)
{
synchronized (transformLayers)
{
if (!transformLayers.containsKey(defaultPriority))
transformLayers.put(defaultPriority,
new Vector<TransformLayer>());
transformLayers.get(defaultPriority).add(transformLayer);
}
}
// @Override
public boolean containsLayer(TransformLayer layer)
{
synchronized (transformLayers)
{
for (Map.Entry<Integer, Vector<TransformLayer>> entry : transformLayers
.entrySet())
{
if (entry.getValue().contains(layer))
return true;
}
}
return false;
}
// @Override
public void removeTransformLayer(TransformLayer transformLayer)
{
synchronized (transformLayers)
{
for (Map.Entry<Integer, Vector<TransformLayer>> entry : transformLayers
.entrySet())
{
entry.getValue().remove(transformLayer);
}
}
}
}

@ -643,7 +643,7 @@ protected void initialize(String screenname,
fileTransfer);
OperationSetInstantMessageTransform messageTransform
= new OperationSetInstantMessageTransformJabberImpl();
= new OperationSetInstantMessageTransformImpl();
supportedOperationSets.put(
OperationSetInstantMessageTransform.class.getName(),

@ -7,7 +7,6 @@
package net.java.sip.communicator.impl.protocol.msn;
import java.text.*;
import java.util.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
@ -121,20 +120,7 @@ public void sendInstantMessage(Contact to, Message message)
= new MessageDeliveredEvent(
message, to, System.currentTimeMillis());
OperationSetInstantMessageTransformMsnImpl messageTransform =
(OperationSetInstantMessageTransformMsnImpl)msnProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgDeliveryPendingEvt != null)
msgDeliveryPendingEvt = transformLayer.messageDeliveryPending(msgDeliveryPendingEvt);
}
}
msgDeliveryPendingEvt = messageDeliveryPendingTransform(msgDeliveryPendingEvt);
if (msgDeliveryPendingEvt == null)
return;
@ -148,17 +134,7 @@ public void sendInstantMessage(Contact to, Message message)
= new MessageDeliveredEvent(message, to, System.currentTimeMillis());
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgDeliveredEvt != null)
msgDeliveredEvt = transformLayer.messageDelivered(msgDeliveredEvt);
}
}
// msgDeliveredEvt = messageDeliveredTransform(msgDeliveredEvt);
if (msgDeliveredEvt != null)
fireMessageEvent(msgDeliveredEvt);
@ -244,20 +220,7 @@ public void instantMessageReceived(MsnSwitchboard switchboard,
= new MessageReceivedEvent(
newMessage, sourceContact , System.currentTimeMillis() );
OperationSetInstantMessageTransformMsnImpl messageTransform =
(OperationSetInstantMessageTransformMsnImpl)msnProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgReceivedEvt != null)
msgReceivedEvt = transformLayer.messageReceived(msgReceivedEvt);
}
}
// msgReceivedEvt = messageReceivedTransform(msgReceivedEvt);
if (msgReceivedEvt != null)
fireMessageEvent(msgReceivedEvt);

@ -1,62 +0,0 @@
package net.java.sip.communicator.impl.protocol.msn;
import java.util.*;
import net.java.sip.communicator.service.protocol.*;
public class OperationSetInstantMessageTransformMsnImpl
implements OperationSetInstantMessageTransform
{
public final Map<Integer, Vector<TransformLayer>> transformLayers =
new Hashtable<Integer, Vector<TransformLayer>>();
private final int defaultPriority = 1;
// @Override
public void addTransformLayer(TransformLayer transformLayer)
{
this.addTransformLayer(defaultPriority, transformLayer);
}
// @Override
public void addTransformLayer(int priority, TransformLayer transformLayer)
{
synchronized (transformLayers)
{
if (!transformLayers.containsKey(defaultPriority))
transformLayers.put(defaultPriority,
new Vector<TransformLayer>());
transformLayers.get(defaultPriority).add(transformLayer);
}
}
// @Override
public boolean containsLayer(TransformLayer layer)
{
synchronized (transformLayers)
{
for (Map.Entry<Integer, Vector<TransformLayer>> entry : transformLayers
.entrySet())
{
if (entry.getValue().contains(layer))
return true;
}
}
return false;
}
// @Override
public void removeTransformLayer(TransformLayer transformLayer)
{
synchronized (transformLayers)
{
for (Map.Entry<Integer, Vector<TransformLayer>> entry : transformLayers
.entrySet())
{
entry.getValue().remove(transformLayer);
}
}
}
}

@ -262,7 +262,7 @@ protected void initialize(String screenname,
this.accountID = accountID;
supportedOperationSets.put(OperationSetInstantMessageTransform.class.getName(),
new OperationSetInstantMessageTransformMsnImpl());
new OperationSetInstantMessageTransformImpl());
//initialize the presence operationset
persistentPresence = new OperationSetPersistentPresenceMsnImpl(this);

@ -146,20 +146,7 @@ public void sendInstantMessage(Contact to, Message message)
= new MessageDeliveredEvent(
message, to, System.currentTimeMillis());
OperationSetInstantMessageTransformYahooImpl messageTransform =
(OperationSetInstantMessageTransformYahooImpl)yahooProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgDeliveryPendingEvt != null)
msgDeliveryPendingEvt = transformLayer.messageDeliveryPending(msgDeliveryPendingEvt);
}
}
msgDeliveryPendingEvt = messageDeliveryPendingTransform(msgDeliveryPendingEvt);
if (msgDeliveryPendingEvt == null)
return;
@ -199,17 +186,7 @@ public void sendInstantMessage(Contact to, Message message)
= new MessageDeliveredEvent(
message, to, System.currentTimeMillis());
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgDeliveredEvt != null)
msgDeliveredEvt = transformLayer.messageDelivered(msgDeliveredEvt);
}
}
// msgDeliveredEvt = messageDeliveredTransform(msgDeliveredEvt);
if (msgDeliveredEvt != null)
fireMessageEvent(msgDeliveredEvt);
@ -225,20 +202,7 @@ public void sendInstantMessage(Contact to, Message message)
to,
MessageDeliveryFailedEvent.NETWORK_FAILURE);
OperationSetInstantMessageTransformYahooImpl messageTransform =
(OperationSetInstantMessageTransformYahooImpl)yahooProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (evt != null)
evt = transformLayer.messageDeliveryFailed(evt);
}
}
// evt = messageDeliveryFailedTransform(evt);
if (evt != null)
fireMessageEvent(evt);
@ -487,20 +451,7 @@ private void handleNewMessage(SessionEvent ev)
= new MessageReceivedEvent(
newMessage, sourceContact , System.currentTimeMillis() );
OperationSetInstantMessageTransformYahooImpl messageTransform =
(OperationSetInstantMessageTransformYahooImpl)yahooProvider.getOperationSet(OperationSetInstantMessageTransform.class);
for (Map.Entry<Integer, Vector<TransformLayer>> entry : messageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (msgReceivedEvt != null)
msgReceivedEvt = transformLayer.messageReceived(msgReceivedEvt);
}
}
// msgReceivedEvt = messageReceivedTransform(msgReceivedEvt);
if (msgReceivedEvt != null)
fireMessageEvent(msgReceivedEvt);

@ -1,62 +0,0 @@
package net.java.sip.communicator.impl.protocol.yahoo;
import java.util.*;
import net.java.sip.communicator.service.protocol.*;
public class OperationSetInstantMessageTransformYahooImpl
implements OperationSetInstantMessageTransform
{
public final Map<Integer, Vector<TransformLayer>> transformLayers =
new Hashtable<Integer, Vector<TransformLayer>>();
private final int defaultPriority = 1;
// @Override
public void addTransformLayer(TransformLayer transformLayer)
{
this.addTransformLayer(defaultPriority, transformLayer);
}
// @Override
public void addTransformLayer(int priority, TransformLayer transformLayer)
{
synchronized (transformLayers)
{
if (!transformLayers.containsKey(defaultPriority))
transformLayers.put(defaultPriority,
new Vector<TransformLayer>());
transformLayers.get(defaultPriority).add(transformLayer);
}
}
// @Override
public boolean containsLayer(TransformLayer layer)
{
synchronized (transformLayers)
{
for (Map.Entry<Integer, Vector<TransformLayer>> entry : transformLayers
.entrySet())
{
if (entry.getValue().contains(layer))
return true;
}
}
return false;
}
// @Override
public void removeTransformLayer(TransformLayer transformLayer)
{
synchronized (transformLayers)
{
for (Map.Entry<Integer, Vector<TransformLayer>> entry : transformLayers
.entrySet())
{
entry.getValue().remove(transformLayer);
}
}
}
}

@ -320,7 +320,7 @@ protected void initialize(String screenname,
supportedOperationSets.put(
OperationSetInstantMessageTransform.class.getName(),
new OperationSetInstantMessageTransformYahooImpl());
new OperationSetInstantMessageTransformImpl());
//initialize the presence operationset
persistentPresence = new OperationSetPersistentPresenceYahooImpl(this);

@ -2,9 +2,10 @@
import java.util.*;
import net.java.sip.communicator.service.configuration.ConfigurationService;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.resources.*;
import net.java.sip.communicator.service.resources.ResourceManagementService;
import net.java.sip.communicator.util.*;
import org.osgi.framework.*;
@ -13,53 +14,142 @@ public class OtrActivator
implements BundleActivator, ServiceListener
{
private BundleContext bundleContext = null;
public static BundleContext bundleContext;
private OtrTransformLayer transformLayer = new OtrTransformLayer();
private OtrTransformLayer otrTransformLayer;
public static ScOtrEngine scOtrEngine;
public static ResourceManagementService resourceService;
public static UIService uiService;
public static ConfigurationService configService;
private static Logger logger = Logger.getLogger(OtrActivator.class);
// @Override
public void start(BundleContext bc) throws Exception
{
this.bundleContext = bc;
bc.addServiceListener(this);
bundleContext = bc;
if (!initServices())
return;
if (!registerTransformLayer())
return;
registerUI();
}
private boolean registerTransformLayer()
{
bundleContext.addServiceListener(this);
ServiceReference[] protocolProviderRefs = null;
try
{
protocolProviderRefs =
bc.getServiceReferences(
bundleContext.getServiceReferences(
ProtocolProviderService.class.getName(), null);
}
catch (InvalidSyntaxException ex)
{
logger.error("Error while retrieving service refs", ex);
return;
return false;
}
if (protocolProviderRefs != null)
if (protocolProviderRefs == null || protocolProviderRefs.length < 1)
return false;
logger.debug("Found " + protocolProviderRefs.length
+ " already installed providers.");
for (int i = 0; i < protocolProviderRefs.length; i++)
{
logger.debug("Found " + protocolProviderRefs.length
+ " already installed providers.");
for (int i = 0; i < protocolProviderRefs.length; i++)
{
ProtocolProviderService provider =
(ProtocolProviderService) bc
.getService(protocolProviderRefs[i]);
ProtocolProviderService provider =
(ProtocolProviderService) bundleContext
.getService(protocolProviderRefs[i]);
this.handleProviderAdded(provider);
}
this.handleProviderAdded(provider);
}
return true;
}
private void registerUI()
{
Hashtable<String, String> containerFilter =
new Hashtable<String, String>();
OtrMetaContactMenu rightClickMenu =
new OtrMetaContactMenu(
Container.CONTAINER_CONTACT_RIGHT_BUTTON_MENU);
containerFilter.put(Container.CONTAINER_ID,
Container.CONTAINER_CONTACT_RIGHT_BUTTON_MENU.getID());
bundleContext.registerService(PluginComponent.class.getName(),
new OtrMenu(ResourceManagementServiceUtils
.getService(bc)), containerFilter);
rightClickMenu, containerFilter);
OtrMetaContactMenu chatMenuBarMenu =
new OtrMetaContactMenu(Container.CONTAINER_CHAT_MENU_BAR);
containerFilter.put(Container.CONTAINER_ID,
Container.CONTAINER_CHAT_MENU_BAR.getID());
bundleContext.registerService(PluginComponent.class.getName(),
chatMenuBarMenu, containerFilter);
OtrMetaContactButton btn =
new OtrMetaContactButton(Container.CONTAINER_CHAT_TOOL_BAR);
containerFilter.put(Container.CONTAINER_ID,
Container.CONTAINER_CHAT_TOOL_BAR.getID());
bundleContext.registerService(PluginComponent.class.getName(), btn,
containerFilter);
bundleContext.registerService(ConfigurationForm.class.getName(),
new LazyConfigurationForm(
"net.java.sip.communicator.plugin.otr.OtrConfigurationPanel",
getClass().getClassLoader(), "plugin.otr.configform.ICON",
"plugin.otr.configform.TITLE", 30), null);
}
private boolean initServices()
{
scOtrEngine = new ScOtrEngineImpl();
otrTransformLayer = new OtrTransformLayer();
ServiceReference ref =
OtrActivator.bundleContext
.getServiceReference(ResourceManagementService.class.getName());
if (ref == null)
return false;
resourceService =
(ResourceManagementService) OtrActivator.bundleContext
.getService(ref);
ServiceReference refConfigService =
OtrActivator.bundleContext
.getServiceReference(ConfigurationService.class.getName());
if (refConfigService == null)
return false;
configService =
(ConfigurationService) OtrActivator.bundleContext
.getService(refConfigService);
ServiceReference refUIService =
OtrActivator.bundleContext.getServiceReference(UIService.class
.getName());
if (refUIService == null)
return false;
uiService =
(UIService) OtrActivator.bundleContext.getService(refUIService);
return true;
}
private void handleProviderAdded(ProtocolProviderService provider)
@ -70,26 +160,35 @@ private void handleProviderAdded(ProtocolProviderService provider)
if (opSetMessageTransform != null)
{
opSetMessageTransform.addTransformLayer(transformLayer);
opSetMessageTransform.addTransformLayer(this.otrTransformLayer);
}
else
{
logger.trace("Service did not have a transform op. set.");
}
}
// @Override
public void stop(BundleContext bc) throws Exception
{
unregisterTransformLayer();
unregisterUI();
}
private void unregisterUI()
{
// TODO Auto-generated method stub
}
private void unregisterTransformLayer()
{
// start listening for newly register or removed protocol providers
bc.removeServiceListener(this);
bundleContext.removeServiceListener(this);
ServiceReference[] protocolProviderRefs = null;
try
{
protocolProviderRefs =
bc.getServiceReferences(
bundleContext.getServiceReferences(
ProtocolProviderService.class.getName(), null);
}
catch (InvalidSyntaxException ex)
@ -100,17 +199,17 @@ public void stop(BundleContext bc) throws Exception
return;
}
if (protocolProviderRefs == null || protocolProviderRefs.length < 1)
return;
// in case we found any
if (protocolProviderRefs != null)
for (int i = 0; i < protocolProviderRefs.length; i++)
{
for (int i = 0; i < protocolProviderRefs.length; i++)
{
ProtocolProviderService provider =
(ProtocolProviderService) bc
.getService(protocolProviderRefs[i]);
ProtocolProviderService provider =
(ProtocolProviderService) bundleContext
.getService(protocolProviderRefs[i]);
this.handleProviderRemoved(provider);
}
this.handleProviderRemoved(provider);
}
}
@ -123,11 +222,10 @@ private void handleProviderRemoved(ProtocolProviderService provider)
if (opSetMessageTransform != null)
{
opSetMessageTransform.removeTransformLayer(transformLayer);
opSetMessageTransform.removeTransformLayer(this.otrTransformLayer);
}
}
// @Override
public void serviceChanged(ServiceEvent serviceEvent)
{
Object sService =
@ -138,9 +236,7 @@ public void serviceChanged(ServiceEvent serviceEvent)
// we don't care if the source service is not a protocol provider
if (!(sService instanceof ProtocolProviderService))
{
return;
}
logger.debug("Service is a protocol provider.");
if (serviceEvent.getType() == ServiceEvent.REGISTERED)
@ -156,4 +252,40 @@ else if (serviceEvent.getType() == ServiceEvent.UNREGISTERING)
}
private static final Map<Object, ProtocolProviderFactory> providerFactoriesMap =
new Hashtable<Object, ProtocolProviderFactory>();
public static Map<Object, ProtocolProviderFactory> getProtocolProviderFactories()
{
ServiceReference[] serRefs = null;
try
{
// get all registered provider factories
serRefs =
bundleContext.getServiceReferences(
ProtocolProviderFactory.class.getName(), null);
}
catch (InvalidSyntaxException e)
{
logger.error("LoginManager : " + e);
}
if (serRefs != null)
{
for (int i = 0; i < serRefs.length; i++)
{
ProtocolProviderFactory providerFactory =
(ProtocolProviderFactory) bundleContext
.getService(serRefs[i]);
providerFactoriesMap.put(serRefs[i]
.getProperty(ProtocolProviderFactory.PROTOCOL),
providerFactory);
}
}
return providerFactoriesMap;
}
}

@ -1,93 +0,0 @@
package net.java.sip.communicator.plugin.otr;
import java.awt.Component;
import java.awt.event.*;
import javax.swing.*;
import net.java.sip.communicator.service.contactlist.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.resources.*;
@SuppressWarnings("serial")
public class OtrMenu
extends JMenu
implements PluginComponent, ActionListener
{
private static final String imageID = "plugin.otr.DECRYPTED_ICON";
private ResourceManagementService resourceService;
public OtrMenu(ResourceManagementService resourceService)
{
super("Encryption");
this.setToolTipText("Options for OTR Encryption");
if (resourceService != null)
this.setIcon(resourceService.getImage(imageID));
// TODO Internationalize Strings...
JMenuItem mitmStartOtr = new JMenuItem("Start Private Conversation");
JMenuItem mitmEndOtr = new JMenuItem("End Private Conversation");
JMenuItem mitmRefreshOtr =
new JMenuItem("Refresh Private Conversation");
JMenuItem mitmAuthenticateBuddy = new JMenuItem("Authenticate Buddy");
JMenuItem mitmWhatsThis = new JMenuItem("What's this?");
// Shown if we don't have an OTR session.
this.add(mitmStartOtr);
// Shown if we have an OTR session.
this.add(mitmEndOtr);
this.add(mitmRefreshOtr);
this.add(mitmAuthenticateBuddy);
this.add(mitmWhatsThis);
}
// @Override
public String getConstraints()
{
return null;
}
public Component getComponent()
{
return this;
}
// @Override
public Container getContainer()
{
return Container.CONTAINER_CONTACT_RIGHT_BUTTON_MENU;
}
// @Override
public int getPositionIndex()
{
return -1;
}
// @Override
public boolean isNativeComponent()
{
return false;
}
private MetaContact metaContact;
// @Override
public void setCurrentContact(MetaContact metaContact)
{
this.metaContact = metaContact;
}
// @Override
public void setCurrentContactGroup(MetaContactGroup metaGroup)
{
}
// @Override
public void actionPerformed(ActionEvent e)
{
}
}

@ -1,148 +1,45 @@
package net.java.sip.communicator.plugin.otr;
import java.security.*;
import java.util.*;
import net.java.otr4j.*;
import net.java.otr4j.message.MessageConstants;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.util.*;
public class OtrTransformLayer
implements TransformLayer
{
private static Logger logger = Logger.getLogger(TransformLayer.class);
private UserState us = new UserState(new OTR4jListener()
{
// @Override
public void showWarning(String warn)
{
logger.warn(warn);
}
// @Override
public void showError(String err)
{
logger.error(err);
}
// @Override
public void injectMessage(String messageText, String account,
String user, String protocol)
{
Contact contact = getContact(account, user, protocol);
OperationSetBasicInstantMessaging imOpSet =
(OperationSetBasicInstantMessaging) contact
.getProtocolProvider().getOperationSet(
OperationSetBasicInstantMessaging.class);
Message message = imOpSet.createMessage(messageText);
imOpSet.sendInstantMessage(contact, message);
}
// @Override
public int getPolicy(ConnContext arg0)
{
return PolicyConstants.ALLOW_V2;
}
// @Override
public KeyPair getKeyPair(String arg0, String arg1)
throws NoSuchAlgorithmException
{
try
{
return CryptoUtils.generateDsaKeyPair();
}
catch (Exception e)
{
return null;
}
}
});
private List<Contact> contacts = new Vector<Contact>();
private Contact getContact(String account, String user, String protocol)
{
for (Contact c : contacts)
{
String cuser = c.getAddress();
ProtocolProviderService cprotoProvider = c.getProtocolProvider();
String caccount = cprotoProvider.getAccountID().toString();
String cprotocol = cprotoProvider.getProtocolName();
if (user.equals(cuser) && account.equals(caccount)
&& protocol.equals(cprotocol))
return c;
}
return null;
}
private void addContact(Contact contact)
public OtrTransformLayer()
{
if (contact == null)
return;
String user = contact.getAddress();
ProtocolProviderService protoProvider = contact.getProtocolProvider();
String account = protoProvider.getAccountID().toString();
String protocol = protoProvider.getProtocolName();
for (Contact c : contacts)
{
String cuser = c.getAddress();
ProtocolProviderService cprotoProvider = c.getProtocolProvider();
String caccount = cprotoProvider.getAccountID().toString();
String cprotocol = cprotoProvider.getProtocolName();
if (user.equals(cuser) && account.equals(caccount)
&& protocol.equals(cprotocol))
return;
}
contacts.add(contact);
}
// @Override
public MessageDeliveredEvent messageDelivered(MessageDeliveredEvent evt)
{
if (evt.getSourceMessage().getContent().contains(MessageConstants.BASE_HEAD))
if (OtrActivator.scOtrEngine.isMessageUIDInjected(evt
.getSourceMessage().getMessageUID()))
// If this is a message otr4j injected earlier, don't display it,
// this may have to change when we add support for fragmentation..
return null;
else
return evt;
}
// @Override
public MessageDeliveryFailedEvent messageDeliveryFailed(
MessageDeliveryFailedEvent evt)
{
return evt;
}
// @Override
public MessageDeliveredEvent messageDeliveryPending(
MessageDeliveredEvent evt)
{
Contact contact = evt.getDestinationContact();
addContact(contact);
String user = contact.getAddress();
ProtocolProviderService protoProvider = contact.getProtocolProvider();
String account = protoProvider.getAccountID().toString();
String protocol = protoProvider.getProtocolName();
Message msg = evt.getSourceMessage();
String msgContent = msg.getContent();
OperationSetBasicInstantMessaging imOpSet =
(OperationSetBasicInstantMessaging) contact.getProtocolProvider()
.getOperationSet(OperationSetBasicInstantMessaging.class);
{
// If this is a message otr4j injected earlier, return the event as is.
if (OtrActivator.scOtrEngine.isMessageUIDInjected(evt
.getSourceMessage().getMessageUID()))
return evt;
// Process the outgoing message.
Contact contact = evt.getDestinationContact();
String msgContent = evt.getSourceMessage().getContent();
String processedMessageContent =
us.handleSendingMessage(user, account, protocol, msgContent);
OtrActivator.scOtrEngine.transformSending(contact, msgContent);
if (processedMessageContent == null
|| processedMessageContent.length() < 1)
@ -151,9 +48,14 @@ public MessageDeliveredEvent messageDeliveryPending(
if (processedMessageContent.equals(msgContent))
return evt;
// Forge a new message based on the new contents.
OperationSetBasicInstantMessaging imOpSet =
(OperationSetBasicInstantMessaging) contact.getProtocolProvider()
.getOperationSet(OperationSetBasicInstantMessaging.class);
Message processedMessage =
imOpSet.createMessage(processedMessageContent);
// Create a new event and return.
MessageDeliveredEvent processedEvent =
new MessageDeliveredEvent(processedMessage, contact, evt
.getTimestamp());
@ -161,26 +63,14 @@ public MessageDeliveredEvent messageDeliveryPending(
return processedEvent;
}
// @Override
public MessageReceivedEvent messageReceived(MessageReceivedEvent evt)
{
// Process the incoming message.
Contact contact = evt.getSourceContact();
addContact(contact);
String user = contact.getAddress();
ProtocolProviderService protoProvider = contact.getProtocolProvider();
String account = protoProvider.getAccountID().toString();
String protocol = protoProvider.getProtocolName();
Message msg = evt.getSourceMessage();
String msgContent = msg.getContent();
OperationSetBasicInstantMessaging imOpSet =
(OperationSetBasicInstantMessaging) contact.getProtocolProvider()
.getOperationSet(OperationSetBasicInstantMessaging.class);
String msgContent = evt.getSourceMessage().getContent();
String processedMessageContent =
us.handleReceivingMessage(user, account, protocol, msgContent);
OtrActivator.scOtrEngine.transformReceiving(contact, msgContent);
if (processedMessageContent == null
|| processedMessageContent.length() < 1)
@ -189,13 +79,19 @@ public MessageReceivedEvent messageReceived(MessageReceivedEvent evt)
if (processedMessageContent.equals(msgContent))
return evt;
// Forge a new message based on the new contents.
OperationSetBasicInstantMessaging imOpSet =
(OperationSetBasicInstantMessaging) contact.getProtocolProvider()
.getOperationSet(OperationSetBasicInstantMessaging.class);
Message processedMessage =
imOpSet.createMessage(processedMessageContent);
// Create a new event and return.
MessageReceivedEvent processedEvent =
new MessageReceivedEvent(processedMessage, contact, evt
.getTimestamp());
return processedEvent;
}
}

@ -11,7 +11,13 @@ Import-Package: org.osgi.framework,
net.java.sip.communicator.service.protocol.event,
net.java.sip.communicator.service.contactlist,
net.java.sip.communicator.service.resources,
net.java.sip.communicator.service.configuration,
net.java.sip.communicator.util.swing,
javax.imageio,
javax.swing,
javax.swing.border,
javax.swing.table,
javax.swing.event,
javax.crypto,
javax.crypto.interfaces,
javax.crypto.spec,

@ -127,6 +127,14 @@ protected void fireMessageDeliveryFailed(
new MessageDeliveryFailedEvent(message, to, errorCode));
}
enum MessageEventType{
None,
MessageDelivered,
MessageReceived,
MessageDeliveryFailed,
MessageDeliveryPending,
}
/**
* Delivers the specified event to all registered message listeners.
*
@ -144,23 +152,42 @@ protected void fireMessageEvent(EventObject evt)
logger.debug("Dispatching Message Listeners=" + listeners.size()
+ " evt=" + evt);
// TODO Create a super class like this MessageEventObject that would contain the MessageEventType.
// Also we could fire an event for the MessageDeliveryPending event type (modify MessageListener and OperationSetInstantMessageTransform).
MessageEventType eventType = MessageEventType.None;
if (evt instanceof MessageDeliveredEvent)
{
eventType = MessageEventType.MessageDelivered;
}
else if (evt instanceof MessageReceivedEvent)
{
eventType = MessageEventType.MessageReceived;
}
else if (evt instanceof MessageDeliveryFailedEvent)
{
eventType = MessageEventType.MessageDeliveryFailed;
}
// Transform the event.
evt = messageTransform(evt, eventType);
if (evt == null)
return;
for (Iterator<MessageListener> listenerIter = listeners.iterator(); listenerIter
.hasNext();)
{
MessageListener listener = listenerIter.next();
if (evt instanceof MessageDeliveredEvent)
{
listener.messageDelivered((MessageDeliveredEvent) evt);
}
else if (evt instanceof MessageReceivedEvent)
{
listener.messageReceived((MessageReceivedEvent) evt);
}
else if (evt instanceof MessageDeliveryFailedEvent)
{
listener
.messageDeliveryFailed((MessageDeliveryFailedEvent) evt);
switch (eventType){
case MessageDelivered:
listener.messageDelivered((MessageDeliveredEvent) evt);
break;
case MessageDeliveryFailed:
listener
.messageDeliveryFailed((MessageDeliveryFailedEvent) evt);
break;
case MessageReceived:
listener.messageReceived((MessageReceivedEvent) evt);
break;
}
}
}
@ -192,4 +219,63 @@ public void removeMessageListener(MessageListener listener)
messageListeners.remove(listener);
}
}
public MessageDeliveredEvent messageDeliveryPendingTransform(MessageDeliveredEvent evt){
return (MessageDeliveredEvent)messageTransform(evt, MessageEventType.MessageDeliveryPending);
}
private EventObject messageTransform(EventObject evt, MessageEventType eventType){
ProtocolProviderService protocolProvider;
switch (eventType){
case MessageDelivered:
protocolProvider = ((MessageDeliveredEvent)evt).getDestinationContact().getProtocolProvider();
break;
case MessageDeliveryFailed:
protocolProvider = ((MessageDeliveryFailedEvent)evt).getDestinationContact().getProtocolProvider();
break;
case MessageDeliveryPending:
protocolProvider = ((MessageDeliveredEvent)evt).getDestinationContact().getProtocolProvider();
break;
case MessageReceived:
protocolProvider = ((MessageReceivedEvent)evt).getSourceContact().getProtocolProvider();
break;
default:
return evt;
}
OperationSetInstantMessageTransformImpl opSetMessageTransform =
(OperationSetInstantMessageTransformImpl)protocolProvider.getOperationSet(OperationSetInstantMessageTransform.class);
if (opSetMessageTransform == null)
return evt;
for (Map.Entry<Integer, Vector<TransformLayer>> entry : opSetMessageTransform.transformLayers
.entrySet())
{
for (Iterator<TransformLayer> iterator = entry.getValue().iterator(); iterator
.hasNext();)
{
TransformLayer transformLayer = (TransformLayer) iterator.next();
if (evt != null){
switch (eventType){
case MessageDelivered:
evt = transformLayer.messageDelivered((MessageDeliveredEvent)evt);
break;
case MessageDeliveryPending:
evt = transformLayer.messageDeliveryPending((MessageDeliveredEvent)evt);
break;
case MessageDeliveryFailed:
evt = transformLayer.messageDeliveryFailed((MessageDeliveryFailedEvent)evt);
break;
case MessageReceived:
evt = transformLayer.messageReceived((MessageReceivedEvent)evt);
break;
}
}
}
}
return evt;
}
}

@ -134,6 +134,15 @@ public Contact getDestinationContact()
return to;
}
/**
* Returns the message that triggered this event
* @return the <tt>Message</tt> that triggered this event.
*/
public Message getSourceMessage()
{
return (Message) getSource();
}
/**
* Returns an error code descibing the reason for the failure of the
* message delivery.

@ -92,6 +92,8 @@ public void start(BundleContext context)
addTest(TestOperationSetBasicInstantMessaging.suite());
addTest(TestOperationSetInstantMessageTransformJabberImpl.suite());
addTest(TestOperationSetTypingNotifications.suite());
//tests currently fails due to jingle lib bugs.

@ -83,6 +83,8 @@ public void start(BundleContext context)
addTest(TestOperationSetPersistentPresence.suite());
addTest(TestOperationSetBasicInstantMessaging.suite());
addTest(TestOperationSetInstantMessageTransformMsnImpl.suite());
addTest(TestOperationSetTypingNotifications.suite());

Loading…
Cancel
Save