From 88bf145942ace792631afc66eb7572302907303e Mon Sep 17 00:00:00 2001 From: Werner Dittmann Date: Sat, 1 Aug 2009 12:17:54 +0000 Subject: [PATCH] Integrate OTR and related modifications to crypto stuff. --- build.xml | 52 ++++- lib/felix.client.run.properties | 11 +- lib/felix.unit.test.properties | 9 +- lib/installer-exclude/lcrypto-jdk16-143.jar | Bin 0 -> 66935 bytes lib/installer-exclude/otr4j.jar | Bin 0 -> 57994 bytes lib/installer-exclude/zrtp4j-light.jar | Bin 157322 -> 116756 bytes resources/images/images.properties | 4 + ...rationSetBasicInstantMessagingIcqImpl.java | 92 +++++++- ...tionSetInstantMessageTransformIcqImpl.java | 62 ++++++ .../icq/ProtocolProviderServiceIcqImpl.java | 3 + ...ionSetBasicInstantMessagingJabberImpl.java | 80 ++++++- ...nSetInstantMessageTransformJabberImpl.java | 62 ++++++ .../ProtocolProviderServiceJabberImpl.java | 7 + ...rationSetBasicInstantMessagingMsnImpl.java | 61 +++++- ...tionSetInstantMessageTransformMsnImpl.java | 62 ++++++ .../msn/ProtocolProviderServiceMsnImpl.java | 5 +- ...tionSetBasicInstantMessagingYahooImpl.java | 91 +++++++- ...onSetInstantMessageTransformYahooImpl.java | 62 ++++++ .../ProtocolProviderServiceYahooImpl.java | 4 + .../communicator/plugin/otr/OtrActivator.java | 159 ++++++++++++++ .../sip/communicator/plugin/otr/OtrMenu.java | 93 ++++++++ .../plugin/otr/OtrTransformLayer.java | 201 ++++++++++++++++++ .../communicator/plugin/otr/otr.manifest.mf | 25 +++ .../OperationSetInstantMessageTransform.java | 1 + 24 files changed, 1104 insertions(+), 42 deletions(-) create mode 100755 lib/installer-exclude/lcrypto-jdk16-143.jar create mode 100755 lib/installer-exclude/otr4j.jar create mode 100644 src/net/java/sip/communicator/impl/protocol/icq/OperationSetInstantMessageTransformIcqImpl.java create mode 100644 src/net/java/sip/communicator/impl/protocol/jabber/OperationSetInstantMessageTransformJabberImpl.java create mode 100644 src/net/java/sip/communicator/impl/protocol/msn/OperationSetInstantMessageTransformMsnImpl.java create mode 100644 src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetInstantMessageTransformYahooImpl.java create mode 100644 src/net/java/sip/communicator/plugin/otr/OtrActivator.java create mode 100644 src/net/java/sip/communicator/plugin/otr/OtrMenu.java create mode 100644 src/net/java/sip/communicator/plugin/otr/OtrTransformLayer.java create mode 100644 src/net/java/sip/communicator/plugin/otr/otr.manifest.mf diff --git a/build.xml b/build.xml index 3eee3f9d3..7436b45ff 100644 --- a/build.xml +++ b/build.xml @@ -810,7 +810,8 @@ bundle-plugin-googletalkaccregwizz,bundle-argdelegation-service, bundle-argdelegation,bundle-zrtp4j, bundle-filehistory,bundle-metahistory,bundle-metahistory-slick, - bundle-facebook,bundle-plugin-facebookaccregwizz"/> + bundle-facebook,bundle-plugin-facebookaccregwizz, + bundle-bouncycastle,bundle-plugin-otr"/> @@ -2025,11 +2026,17 @@ org.apache.http.util"/> - + + @@ -2059,6 +2066,37 @@ org.apache.http.util"/> + + + + + + + + + + + + + + + + + + + + + @@ -2068,6 +2106,4 @@ org.apache.http.util"/> prefix="net/java/sip/communicator/slick/metahistory"/> - - diff --git a/lib/felix.client.run.properties b/lib/felix.client.run.properties index 94ca43481..5aa139e48 100644 --- a/lib/felix.client.run.properties +++ b/lib/felix.client.run.properties @@ -50,7 +50,14 @@ org.osgi.framework.system.packages.extra= org.osgi.framework; version=1.3.0, \ javax.crypto; \ javax.crypto.spec; \ javax.crypto.interfaces; \ - sun.awt.shell; + sun.awt.shell; \ + java.io; \ + java.math; \ + java.nio; \ + java.security; \ + java.security.interfaces; \ + java.security.spec; + felix.auto.start.10= \ reference:file:lib/bundle/org.apache.felix.bundlerepository-1.0.0.jar @@ -83,6 +90,7 @@ felix.auto.start.45= \ reference:file:sc-bundles/branding.jar felix.auto.start.49= \ + reference:file:sc-bundles/bouncycastle.jar \ reference:file:sc-bundles/zrtp4j.jar \ reference:file:sc-bundles/protocol.jar \ reference:file:lib/bundle/httpcore.jar @@ -157,6 +165,7 @@ felix.auto.start.67= \ reference:file:sc-bundles/keybindingChooser.jar \ reference:file:sc-bundles/generalconfig.jar \ reference:file:sc-bundles/dictaccregwizz.jar \ + reference:file:sc-bundles/otr.jar \ reference:file:sc-bundles/facebookaccregwizz.jar #level 68 is for profiler, don't use it or change the build.xml file accordingly diff --git a/lib/felix.unit.test.properties b/lib/felix.unit.test.properties index adb589474..75c97d599 100644 --- a/lib/felix.unit.test.properties +++ b/lib/felix.unit.test.properties @@ -49,7 +49,13 @@ org.osgi.framework.system.packages.extra= org.osgi.framework; ; version=1.3.0, \ javax.crypto; \ javax.crypto.spec; \ javax.crypto.interfaces; \ - sun.awt.shell; + sun.awt.shell; \ + java.io; \ + java.math; \ + java.nio; \ + java.security; \ + java.security.interfaces; \ + java.security.spec; # @@ -88,6 +94,7 @@ felix.auto.start.4= \ reference:file:sc-bundles/netaddr.jar felix.auto.start.5= \ + reference:file:sc-bundles/bouncycastle.jar \ reference:file:sc-bundles/zrtp4j.jar \ reference:file:sc-bundles/protocol.jar \ reference:file:lib/bundle/httpcore.jar diff --git a/lib/installer-exclude/lcrypto-jdk16-143.jar b/lib/installer-exclude/lcrypto-jdk16-143.jar new file mode 100755 index 0000000000000000000000000000000000000000..1153ea9a87d8a6686d8ffbd45af6d64c7767104e GIT binary patch literal 66935 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”ohIt3+%QiiC^YZzUhsB#VZ=m&xs6ts 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 Ee_Atva{vGU literal 0 HcmV?d00001 diff --git a/lib/installer-exclude/otr4j.jar b/lib/installer-exclude/otr4j.jar new file mode 100755 index 0000000000000000000000000000000000000000..52ee97e85d9b7fb51bc547e9018992a05fc5aa18 GIT binary patch literal 57994 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

ryG~0GGMo?etNRc@T<&SNYdfd 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 literal 0 HcmV?d00001 diff --git a/lib/installer-exclude/zrtp4j-light.jar b/lib/installer-exclude/zrtp4j-light.jar index ef162243aa7bd8a36814812d4a14fe5815049d45..4552187090f1cdde57641fdd99745bbbc8ee872d 100755 GIT binary patch delta 3353 zcmZuzc~q3w6@Tx}j4Z=2K-h+DAVRa8r3Ft(C9y6| z5bRhVY7rqMMxr4NL=M&#nl|Z4i=J3hEs1SNZE{+d*d9$=>(=}3_c8KKI)BW&^ZWho z^6uN_ho^k@bb6Ue9Xh=)lb;_SxV_tyq}zi-=8lBs;(=^})h|7cjT@TM?(0#p`?Gl6 z=Hda@T^=EB+rey{jwQidK8MI$9^u-?&8pBU{$b$Wt}*VbYeCTjPowcJPyfFupMIuM zo6=PYDdh2YT?UP_^)?zC^^ekcRKJMEtNI+7awx@6V<)3MU;h9Zdsam+B4c=e7m!iX z-KH34dkPdIw(o?Fs6V~(zJeTitxZ8vkJc%MYw%$MX~u^WIT@GUPEx3lQLY%4lL=(J zY#UPm`#Z_HK&&gfx+5v^M<&Kb;~0x`^$v!)%*VZk4!+xG@|X0Bf7_bk)G-$AE4J8p zu*-SDFw}Tek(xgpB-~^YbJcIb+~m zUb0IgPn!6DI9ZKme%(OU>JUDnSYeU;I1u(hG{33nCanB16JepL(^ya%56}^oFrN=9 z*7-;H0V82eHvXzVSuv%2mp561%Xy`ltXb>%W!eiPE#7dB2Vzy(?I*o1y@wml!5Mqh zm9Dpn@B6~PNZxFOaPBWfL)WeqwV)3FCb zjGowraQL-SW=a$^D%jpw7*?>Nc*s|*eTguoSl>&A0VUp?RESoZlAi`Wigh_1(v%$0 z8Spa&`#1}pS1f1FwDs8{$WSn=4JJT`XHIYj${ueuXcAEHWym4diWdV&cOk7(*K5k-ii?)QFLyX(Vc5@? z;ukePMnOJfD1g9Nc^r0hbY2XzGgjNmSjw~#$Nsiaov;-^ zHudAV0xT>d&-Igh%Z!q|nT(K^Il2APLdIfVWGq}0A#SCZDo|VNxw-dD4fM=(x)ZaH{vE8qkdv+nmjGZS5LUfl9MK3Em1w^mLPfh=PGG*HIJFZ zmT9s>l4r(MGD7UHQ|F?&J2fr2_bXJ-Hs9ZmwD`hSijh7zgIus{-PypeY>v#1;3g}s zaEXDjBu&6ge;}tPCj-RUQV60}_Pv$-_5iAjP(4qhK6hSK$9yHl$i@=mF7InWg^9OVe^xI^lgdqHAX zxvK6)LbsK1@u`8wi3{Zr8Yj=f_HWM3E5kaz2=?3yHG0yfirfkeArE^=1%|k3BzU&y ztiS>#{JMm1m{j;m1%$=PBmMgq!d)A&E!+J(BVT$ztzuUQ_Y+A@HN3MDVxMSr;v1XZ?W5Y5G_Hwey9a{zw zl;gJ&?nzZ)pDJvQoI>v}2hEMRPy=}0v`|WkgjY_j)mL@uFrLeoDeQ)m)4%=ka228vccZUF!&r5cAe^Kh2hs zm2R7reB^n2A|J$Rvowup+a&(^I9QZx9pBC{kyHagRN=xJEP2JVTK*w1RjXEcO!8a4 z?dC1wc8y9I*C2JE$xYF78@jh%rJs;={dZ>2J53NRX}ayRTe??_;04reWGq8dZEmyT z<1|AoWh4E{_cI>*4bChVFRUDmzOdD;4;0TiA(kfA>%{a=warM6Pm@XXgyZujXGcMs zHg#P#Vi7SI)TRl#;0Iby<%u%=_sZ%OSVRr#7i;tfcWU(k;#4hORyo} zQd8FDscB7v5Vyu$kDBZIJvG+(5aeFEBR{Qpq!ur{P(0b%E+icCbR4dSBr5O|8TewK zCvVP%NOy8a18Ua4;;CtGz?WC<@D_)){}bHdiMV9=cDq0QZC4L#oxH`Z27EB3Q^pzl pGp$(dBs$G^yU70vi32m7@V|vY)U5-He+esLzLAXGIEty*{{Zs?;l}^~ delta 42843 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 diff --git a/resources/images/images.properties b/resources/images/images.properties index 0ec8e45c9..ae1223b4d 100644 --- a/resources/images/images.properties +++ b/resources/images/images.properties @@ -407,3 +407,7 @@ plugin.notificationconfig.FOLDER_ICON=resources/images/plugin/notificationconfig # media configuration form 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 \ No newline at end of file diff --git a/src/net/java/sip/communicator/impl/protocol/icq/OperationSetBasicInstantMessagingIcqImpl.java b/src/net/java/sip/communicator/impl/protocol/icq/OperationSetBasicInstantMessagingIcqImpl.java index d9dd612a5..b77482e3a 100644 --- a/src/net/java/sip/communicator/impl/protocol/icq/OperationSetBasicInstantMessagingIcqImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/icq/OperationSetBasicInstantMessagingIcqImpl.java @@ -169,6 +169,27 @@ public void sendInstantMessage(Contact to, Message message) else messageContent = message.getContent(); + MessageDeliveredEvent msgDeliveryPendingEvt = new MessageDeliveredEvent( + message, to, System.currentTimeMillis()); + + OperationSetInstantMessageTransformIcqImpl messageTransform = + (OperationSetInstantMessageTransformIcqImpl)icqProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgDeliveryPendingEvt != null) + msgDeliveryPendingEvt = transformLayer.messageDeliveryPending(msgDeliveryPendingEvt); + } + } + + if (msgDeliveryPendingEvt == null) + return; + if (to.getPresenceStatus().isOnline()) { //do not add the conversation listener in here. we'll add it @@ -178,10 +199,23 @@ public void sendInstantMessage(Contact to, Message message) else imConversation.sendMessage(new SimpleMessage(messageContent), true); - MessageDeliveredEvent msgDeliveredEvt - = new MessageDeliveredEvent(message, to, System.currentTimeMillis()); + MessageDeliveredEvent msgDeliveredEvt = new MessageDeliveredEvent( + message, to, System.currentTimeMillis()); - fireMessageEvent(msgDeliveredEvt); + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgDeliveredEvt != null) + msgDeliveredEvt = transformLayer.messageDelivered(msgDeliveredEvt); + } + } + + if (msgDeliveredEvt != null) + fireMessageEvent(msgDeliveredEvt); } @@ -258,9 +292,28 @@ public void handleResponse(SnacResponseEvent evt) createMessage(offlineMsgCmd.getContents()), sourceContact, msgDate); - logger.debug("fire msg received for : " + - offlineMsgCmd.getContents()); - fireMessageEvent(msgReceivedEvt); + + OperationSetInstantMessageTransformIcqImpl messageTransform = + (OperationSetInstantMessageTransformIcqImpl)icqProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgReceivedEvt != null) + msgReceivedEvt = transformLayer.messageReceived(msgReceivedEvt); + } + } + + if (msgReceivedEvt != null) + { + logger.debug("fire msg received for : " + + offlineMsgCmd.getContents()); + fireMessageEvent(msgReceivedEvt); + } } else if (snac instanceof OfflineMsgDoneCmd) { @@ -527,11 +580,30 @@ public void gotMessage(Conversation conversation, MessageInfo minfo) msgDate = current; - MessageReceivedEvent msgReceivedEvt - = new MessageReceivedEvent( - newMessage, sourceContact , msgDate ); + MessageReceivedEvent msgReceivedEvt = + new MessageReceivedEvent(newMessage, sourceContact, msgDate); - fireMessageEvent(msgReceivedEvt); + OperationSetInstantMessageTransformIcqImpl messageTransform = + (OperationSetInstantMessageTransformIcqImpl)icqProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgReceivedEvt != null) + msgReceivedEvt = transformLayer.messageReceived(msgReceivedEvt); + } + } + + if (msgReceivedEvt != null) + { + logger.debug("fire msg received for : " + + newMessage); + fireMessageEvent(msgReceivedEvt); + } } public void sentOtherEvent(Conversation conversation, diff --git a/src/net/java/sip/communicator/impl/protocol/icq/OperationSetInstantMessageTransformIcqImpl.java b/src/net/java/sip/communicator/impl/protocol/icq/OperationSetInstantMessageTransformIcqImpl.java new file mode 100644 index 000000000..43e2821e6 --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/icq/OperationSetInstantMessageTransformIcqImpl.java @@ -0,0 +1,62 @@ +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> transformLayers = + new Hashtable>(); + + 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()); + + transformLayers.get(defaultPriority).add(transformLayer); + } + } + + @Override + public boolean containsLayer(TransformLayer layer) + { + synchronized (transformLayers) + { + for (Map.Entry> entry : transformLayers + .entrySet()) + { + if (entry.getValue().contains(layer)) + return true; + } + + } + return false; + } + + @Override + public void removeTransformLayer(TransformLayer transformLayer) + { + synchronized (transformLayers) + { + for (Map.Entry> entry : transformLayers + .entrySet()) + { + entry.getValue().remove(transformLayer); + } + + } + } +} \ No newline at end of file diff --git a/src/net/java/sip/communicator/impl/protocol/icq/ProtocolProviderServiceIcqImpl.java b/src/net/java/sip/communicator/impl/protocol/icq/ProtocolProviderServiceIcqImpl.java index 0a35392a0..a172eff75 100644 --- a/src/net/java/sip/communicator/impl/protocol/icq/ProtocolProviderServiceIcqImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/icq/ProtocolProviderServiceIcqImpl.java @@ -455,6 +455,9 @@ protected void initialize(String screenname, if(IcqAccountID.isAIM(accountID.getAccountProperties())) USING_ICQ = false; + supportedOperationSets.put(OperationSetInstantMessageTransform.class.getName(), + new OperationSetInstantMessageTransformIcqImpl()); + //initialize the presence operationset OperationSetPersistentPresence persistentPresence = new OperationSetPersistentPresenceIcqImpl(this, screenname); diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetBasicInstantMessagingJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetBasicInstantMessagingJabberImpl.java index 2d401f88c..259f829b4 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetBasicInstantMessagingJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetBasicInstantMessagingJabberImpl.java @@ -195,7 +195,29 @@ public void processMessage( org.jivesoftware.smack.packet.Message msg = new org.jivesoftware.smack.packet.Message(); - String content = message.getContent(); + MessageDeliveredEvent msgDeliveryPendingEvt + = new MessageDeliveredEvent( + message, to, System.currentTimeMillis()); + + OperationSetInstantMessageTransformJabberImpl messageTransform = + (OperationSetInstantMessageTransformJabberImpl)jabberProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgDeliveryPendingEvt != null) + msgDeliveryPendingEvt = transformLayer.messageDeliveryPending(msgDeliveryPendingEvt); + } + } + + if (msgDeliveryPendingEvt == null) + return; + + String content = msgDeliveryPendingEvt.getSourceMessage().getContent(); if(message.getContentType().equals(HTML_MIME_TYPE)) { @@ -220,14 +242,27 @@ public void processMessage( MessageEventManager. addNotificationsRequests(msg, true, false, false, true); - + chat.sendMessage(msg); - + MessageDeliveredEvent msgDeliveredEvt = new MessageDeliveredEvent( message, to, System.currentTimeMillis()); - fireMessageEvent(msgDeliveredEvt); + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgDeliveredEvt != null) + msgDeliveredEvt = transformLayer.messageDelivered(msgDeliveredEvt); + } + } + + if (msgDeliveredEvt != null) + fireMessageEvent(msgDeliveredEvt); } catch (XMPPException ex) { @@ -392,7 +427,24 @@ public void processPacket(Packet packet) new MessageDeliveryFailedEvent(newMessage, sourceContact, errorResultCode); - fireMessageEvent(ev); + + OperationSetInstantMessageTransformJabberImpl messageTransform = + (OperationSetInstantMessageTransformJabberImpl)jabberProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (ev != null) + ev = transformLayer.messageDeliveryFailed(ev); + } + } + + if (ev != null) + fireMessageEvent(ev); return; } @@ -411,7 +463,23 @@ public void processPacket(Packet packet) = new MessageReceivedEvent( newMessage, sourceContact , System.currentTimeMillis() ); - fireMessageEvent(msgReceivedEvt); + OperationSetInstantMessageTransformJabberImpl messageTransform = + (OperationSetInstantMessageTransformJabberImpl)jabberProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgReceivedEvt != null) + msgReceivedEvt = transformLayer.messageReceived(msgReceivedEvt); + } + } + + if (msgReceivedEvt != null) + fireMessageEvent(msgReceivedEvt); } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetInstantMessageTransformJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetInstantMessageTransformJabberImpl.java new file mode 100644 index 000000000..02f60e02e --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetInstantMessageTransformJabberImpl.java @@ -0,0 +1,62 @@ +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> transformLayers = + new Hashtable>(); + + 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()); + + transformLayers.get(defaultPriority).add(transformLayer); + } + } + + @Override + public boolean containsLayer(TransformLayer layer) + { + synchronized (transformLayers) + { + for (Map.Entry> entry : transformLayers + .entrySet()) + { + if (entry.getValue().contains(layer)) + return true; + } + + } + return false; + } + + @Override + public void removeTransformLayer(TransformLayer transformLayer) + { + synchronized (transformLayers) + { + for (Map.Entry> entry : transformLayers + .entrySet()) + { + entry.getValue().remove(transformLayer); + } + + } + } +} \ No newline at end of file diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderServiceJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderServiceJabberImpl.java index 13df3e73a..6cdb119c8 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderServiceJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderServiceJabberImpl.java @@ -642,6 +642,13 @@ protected void initialize(String screenname, OperationSetFileTransfer.class.getName(), fileTransfer); + OperationSetInstantMessageTransform messageTransform + = new OperationSetInstantMessageTransformJabberImpl(); + + supportedOperationSets.put( + OperationSetInstantMessageTransform.class.getName(), + messageTransform); + // Include features we're supporting in plus of the four that // included by smack itself: // http://jabber.org/protocol/si/profile/file-transfer diff --git a/src/net/java/sip/communicator/impl/protocol/msn/OperationSetBasicInstantMessagingMsnImpl.java b/src/net/java/sip/communicator/impl/protocol/msn/OperationSetBasicInstantMessagingMsnImpl.java index 08b929cc0..9698bdfd0 100644 --- a/src/net/java/sip/communicator/impl/protocol/msn/OperationSetBasicInstantMessagingMsnImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/msn/OperationSetBasicInstantMessagingMsnImpl.java @@ -7,6 +7,7 @@ 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.*; @@ -116,15 +117,51 @@ public void sendInstantMessage(Contact to, Message message) "The specified contact is not an MSN contact." + to); + MessageDeliveredEvent msgDeliveryPendingEvt + = new MessageDeliveredEvent( + message, to, System.currentTimeMillis()); + + OperationSetInstantMessageTransformMsnImpl messageTransform = + (OperationSetInstantMessageTransformMsnImpl)msnProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgDeliveryPendingEvt != null) + msgDeliveryPendingEvt = transformLayer.messageDeliveryPending(msgDeliveryPendingEvt); + } + } + + if (msgDeliveryPendingEvt == null) + return; + msnProvider.getMessenger(). sendText( ((ContactMsnImpl)to).getSourceContact().getEmail(), - message.getContent() + msgDeliveryPendingEvt.getSourceMessage().getContent() ); MessageDeliveredEvent msgDeliveredEvt = new MessageDeliveredEvent(message, to, System.currentTimeMillis()); - fireMessageEvent(msgDeliveredEvt); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgDeliveredEvt != null) + msgDeliveredEvt = transformLayer.messageDelivered(msgDeliveredEvt); + } + } + + if (msgDeliveredEvt != null) + fireMessageEvent(msgDeliveredEvt); } /** @@ -206,8 +243,24 @@ public void instantMessageReceived(MsnSwitchboard switchboard, MessageReceivedEvent msgReceivedEvt = new MessageReceivedEvent( newMessage, sourceContact , System.currentTimeMillis() ); - - fireMessageEvent(msgReceivedEvt); + + OperationSetInstantMessageTransformMsnImpl messageTransform = + (OperationSetInstantMessageTransformMsnImpl)msnProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgReceivedEvt != null) + msgReceivedEvt = transformLayer.messageReceived(msgReceivedEvt); + } + } + + if (msgReceivedEvt != null) + fireMessageEvent(msgReceivedEvt); } /** diff --git a/src/net/java/sip/communicator/impl/protocol/msn/OperationSetInstantMessageTransformMsnImpl.java b/src/net/java/sip/communicator/impl/protocol/msn/OperationSetInstantMessageTransformMsnImpl.java new file mode 100644 index 000000000..b66797173 --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/msn/OperationSetInstantMessageTransformMsnImpl.java @@ -0,0 +1,62 @@ +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> transformLayers = + new Hashtable>(); + + 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()); + + transformLayers.get(defaultPriority).add(transformLayer); + } + } + + @Override + public boolean containsLayer(TransformLayer layer) + { + synchronized (transformLayers) + { + for (Map.Entry> entry : transformLayers + .entrySet()) + { + if (entry.getValue().contains(layer)) + return true; + } + + } + return false; + } + + @Override + public void removeTransformLayer(TransformLayer transformLayer) + { + synchronized (transformLayers) + { + for (Map.Entry> entry : transformLayers + .entrySet()) + { + entry.getValue().remove(transformLayer); + } + + } + } +} \ No newline at end of file diff --git a/src/net/java/sip/communicator/impl/protocol/msn/ProtocolProviderServiceMsnImpl.java b/src/net/java/sip/communicator/impl/protocol/msn/ProtocolProviderServiceMsnImpl.java index 984d37398..f98ea8d66 100644 --- a/src/net/java/sip/communicator/impl/protocol/msn/ProtocolProviderServiceMsnImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/msn/ProtocolProviderServiceMsnImpl.java @@ -261,9 +261,12 @@ protected void initialize(String screenname, { this.accountID = accountID; + supportedOperationSets.put(OperationSetInstantMessageTransform.class.getName(), + new OperationSetInstantMessageTransformMsnImpl()); + //initialize the presence operationset persistentPresence = new OperationSetPersistentPresenceMsnImpl(this); - + supportedOperationSets.put( OperationSetPersistentPresence.class.getName(), persistentPresence); diff --git a/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetBasicInstantMessagingYahooImpl.java b/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetBasicInstantMessagingYahooImpl.java index b92a8abd1..f21567525 100644 --- a/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetBasicInstantMessagingYahooImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetBasicInstantMessagingYahooImpl.java @@ -142,7 +142,30 @@ public void sendInstantMessage(Contact to, Message message) { String toUserID = ((ContactYahooImpl) to).getID(); - byte[] msgBytesToBeSent = message.getContent().trim().getBytes(); + MessageDeliveredEvent msgDeliveryPendingEvt + = new MessageDeliveredEvent( + message, to, System.currentTimeMillis()); + + OperationSetInstantMessageTransformYahooImpl messageTransform = + (OperationSetInstantMessageTransformYahooImpl)yahooProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgDeliveryPendingEvt != null) + msgDeliveryPendingEvt = transformLayer.messageDeliveryPending(msgDeliveryPendingEvt); + } + } + + if (msgDeliveryPendingEvt == null) + return; + + byte[] msgBytesToBeSent = msgDeliveryPendingEvt.getSourceMessage(). + getContent().trim().getBytes(); // split the message in parts with max allowed length // and send them all @@ -173,10 +196,23 @@ public void sendInstantMessage(Contact to, Message message) } MessageDeliveredEvent msgDeliveredEvt - = new MessageDeliveredEvent( - message, to, System.currentTimeMillis()); - - fireMessageEvent(msgDeliveredEvt); + = new MessageDeliveredEvent( + message, to, System.currentTimeMillis()); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgDeliveredEvt != null) + msgDeliveredEvt = transformLayer.messageDelivered(msgDeliveredEvt); + } + } + + if (msgDeliveredEvt != null) + fireMessageEvent(msgDeliveredEvt); } while(msgBytesToBeSent.length > MAX_MESSAGE_LENGTH); } @@ -188,7 +224,24 @@ public void sendInstantMessage(Contact to, Message message) message, to, MessageDeliveryFailedEvent.NETWORK_FAILURE); - fireMessageEvent(evt); + + OperationSetInstantMessageTransformYahooImpl messageTransform = + (OperationSetInstantMessageTransformYahooImpl)yahooProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (evt != null) + evt = transformLayer.messageDeliveryFailed(evt); + } + } + + if (evt != null) + fireMessageEvent(evt); return; } } @@ -430,11 +483,27 @@ private void handleNewMessage(SessionEvent ev) .createVolatileContact(ev.getFrom()); } - MessageReceivedEvent msgReceivedEvt - = new MessageReceivedEvent( - newMessage, sourceContact , System.currentTimeMillis() ); - - fireMessageEvent(msgReceivedEvt); + MessageReceivedEvent msgReceivedEvt + = new MessageReceivedEvent( + newMessage, sourceContact , System.currentTimeMillis() ); + + OperationSetInstantMessageTransformYahooImpl messageTransform = + (OperationSetInstantMessageTransformYahooImpl)yahooProvider.getOperationSet(OperationSetInstantMessageTransform.class); + + for (Map.Entry> entry : messageTransform.transformLayers + .entrySet()) + { + for (Iterator iterator = entry.getValue().iterator(); iterator + .hasNext();) + { + TransformLayer transformLayer = (TransformLayer) iterator.next(); + if (msgReceivedEvt != null) + msgReceivedEvt = transformLayer.messageReceived(msgReceivedEvt); + } + } + + if (msgReceivedEvt != null) + fireMessageEvent(msgReceivedEvt); } } diff --git a/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetInstantMessageTransformYahooImpl.java b/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetInstantMessageTransformYahooImpl.java new file mode 100644 index 000000000..7117c8239 --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetInstantMessageTransformYahooImpl.java @@ -0,0 +1,62 @@ +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> transformLayers = + new Hashtable>(); + + 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()); + + transformLayers.get(defaultPriority).add(transformLayer); + } + } + + @Override + public boolean containsLayer(TransformLayer layer) + { + synchronized (transformLayers) + { + for (Map.Entry> entry : transformLayers + .entrySet()) + { + if (entry.getValue().contains(layer)) + return true; + } + + } + return false; + } + + @Override + public void removeTransformLayer(TransformLayer transformLayer) + { + synchronized (transformLayers) + { + for (Map.Entry> entry : transformLayers + .entrySet()) + { + entry.getValue().remove(transformLayer); + } + + } + } +} \ No newline at end of file diff --git a/src/net/java/sip/communicator/impl/protocol/yahoo/ProtocolProviderServiceYahooImpl.java b/src/net/java/sip/communicator/impl/protocol/yahoo/ProtocolProviderServiceYahooImpl.java index 45baf65dc..a2e9a3a4b 100644 --- a/src/net/java/sip/communicator/impl/protocol/yahoo/ProtocolProviderServiceYahooImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/yahoo/ProtocolProviderServiceYahooImpl.java @@ -318,6 +318,10 @@ protected void initialize(String screenname, { this.accountID = accountID; + supportedOperationSets.put( + OperationSetInstantMessageTransform.class.getName(), + new OperationSetInstantMessageTransformYahooImpl()); + //initialize the presence operationset persistentPresence = new OperationSetPersistentPresenceYahooImpl(this); diff --git a/src/net/java/sip/communicator/plugin/otr/OtrActivator.java b/src/net/java/sip/communicator/plugin/otr/OtrActivator.java new file mode 100644 index 000000000..a60612c2c --- /dev/null +++ b/src/net/java/sip/communicator/plugin/otr/OtrActivator.java @@ -0,0 +1,159 @@ +package net.java.sip.communicator.plugin.otr; + +import java.util.*; + +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.util.*; + +import org.osgi.framework.*; + +public class OtrActivator + implements BundleActivator, ServiceListener +{ + + private BundleContext bundleContext = null; + + private OtrTransformLayer transformLayer = new OtrTransformLayer(); + + private static Logger logger = Logger.getLogger(OtrActivator.class); + + @Override + public void start(BundleContext bc) throws Exception + { + this.bundleContext = bc; + bc.addServiceListener(this); + + ServiceReference[] protocolProviderRefs = null; + try + { + protocolProviderRefs = + bc.getServiceReferences( + ProtocolProviderService.class.getName(), null); + } + catch (InvalidSyntaxException ex) + { + logger.error("Error while retrieving service refs", ex); + return; + } + + if (protocolProviderRefs != null) + { + logger.debug("Found " + protocolProviderRefs.length + + " already installed providers."); + for (int i = 0; i < protocolProviderRefs.length; i++) + { + ProtocolProviderService provider = + (ProtocolProviderService) bc + .getService(protocolProviderRefs[i]); + + this.handleProviderAdded(provider); + } + } + + Hashtable containerFilter = + new Hashtable(); + containerFilter.put(Container.CONTAINER_ID, + Container.CONTAINER_CONTACT_RIGHT_BUTTON_MENU.getID()); + + bundleContext.registerService(PluginComponent.class.getName(), + new OtrMenu(ResourceManagementServiceUtils + .getService(bc)), containerFilter); + } + + private void handleProviderAdded(ProtocolProviderService provider) + { + OperationSetInstantMessageTransform opSetMessageTransform = + (OperationSetInstantMessageTransform) provider + .getOperationSet(OperationSetInstantMessageTransform.class); + + if (opSetMessageTransform != null) + { + opSetMessageTransform.addTransformLayer(transformLayer); + } + else + { + logger.trace("Service did not have a transform op. set."); + } + + } + + @Override + public void stop(BundleContext bc) throws Exception + { + // start listening for newly register or removed protocol providers + bc.removeServiceListener(this); + + ServiceReference[] protocolProviderRefs = null; + try + { + protocolProviderRefs = + bc.getServiceReferences( + ProtocolProviderService.class.getName(), null); + } + catch (InvalidSyntaxException ex) + { + // this shouldn't happen since we're providing no parameter string + // but let's log just in case. + logger.error("Error while retrieving service refs", ex); + return; + } + + // in case we found any + if (protocolProviderRefs != null) + { + for (int i = 0; i < protocolProviderRefs.length; i++) + { + ProtocolProviderService provider = + (ProtocolProviderService) bc + .getService(protocolProviderRefs[i]); + + this.handleProviderRemoved(provider); + } + } + } + + private void handleProviderRemoved(ProtocolProviderService provider) + { + // check whether the provider has a basic im operation set + OperationSetInstantMessageTransform opSetMessageTransform = + (OperationSetInstantMessageTransform) provider + .getOperationSet(OperationSetInstantMessageTransform.class); + + if (opSetMessageTransform != null) + { + opSetMessageTransform.removeTransformLayer(transformLayer); + } + } + + @Override + public void serviceChanged(ServiceEvent serviceEvent) + { + Object sService = + bundleContext.getService(serviceEvent.getServiceReference()); + + logger.trace("Received a service event for: " + + sService.getClass().getName()); + + // 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) + { + logger.debug("Handling registration of a new Protocol Provider."); + + this.handleProviderAdded((ProtocolProviderService) sService); + } + else if (serviceEvent.getType() == ServiceEvent.UNREGISTERING) + { + this.handleProviderRemoved((ProtocolProviderService) sService); + } + + } + +} diff --git a/src/net/java/sip/communicator/plugin/otr/OtrMenu.java b/src/net/java/sip/communicator/plugin/otr/OtrMenu.java new file mode 100644 index 000000000..0ddaa79a1 --- /dev/null +++ b/src/net/java/sip/communicator/plugin/otr/OtrMenu.java @@ -0,0 +1,93 @@ +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) + { + } + +} \ No newline at end of file diff --git a/src/net/java/sip/communicator/plugin/otr/OtrTransformLayer.java b/src/net/java/sip/communicator/plugin/otr/OtrTransformLayer.java new file mode 100644 index 000000000..3cd39bb3f --- /dev/null +++ b/src/net/java/sip/communicator/plugin/otr/OtrTransformLayer.java @@ -0,0 +1,201 @@ +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 contacts = new Vector(); + + 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) + { + 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)) + 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); + + String processedMessageContent = + us.handleSendingMessage(user, account, protocol, msgContent); + + if (processedMessageContent == null + || processedMessageContent.length() < 1) + return null; + + if (processedMessageContent.equals(msgContent)) + return evt; + + Message processedMessage = + imOpSet.createMessage(processedMessageContent); + + MessageDeliveredEvent processedEvent = + new MessageDeliveredEvent(processedMessage, contact, evt + .getTimestamp()); + + return processedEvent; + } + + @Override + public MessageReceivedEvent messageReceived(MessageReceivedEvent evt) + { + 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 processedMessageContent = + us.handleReceivingMessage(user, account, protocol, msgContent); + + if (processedMessageContent == null + || processedMessageContent.length() < 1) + return null; + + if (processedMessageContent.equals(msgContent)) + return evt; + + Message processedMessage = + imOpSet.createMessage(processedMessageContent); + + MessageReceivedEvent processedEvent = + new MessageReceivedEvent(processedMessage, contact, evt + .getTimestamp()); + + return processedEvent; + } +} diff --git a/src/net/java/sip/communicator/plugin/otr/otr.manifest.mf b/src/net/java/sip/communicator/plugin/otr/otr.manifest.mf new file mode 100644 index 000000000..14960f990 --- /dev/null +++ b/src/net/java/sip/communicator/plugin/otr/otr.manifest.mf @@ -0,0 +1,25 @@ +Bundle-Activator: net.java.sip.communicator.plugin.otr.OtrActivator +Bundle-Name: OTR (Off-the-Record) Messaging +Bundle-Description: Support for secure, Off The Record messaging in SIP Communicator +Bundle-Vendor: sip-communicator.org +Bundle-Version: 0.0.1 +System-Bundle: yes +Import-Package: org.osgi.framework, + net.java.sip.communicator.util, + net.java.sip.communicator.service.gui, + net.java.sip.communicator.service.protocol, + net.java.sip.communicator.service.protocol.event, + net.java.sip.communicator.service.contactlist, + net.java.sip.communicator.service.resources, + javax.swing, + javax.crypto, + javax.crypto.interfaces, + javax.crypto.spec, + org.bouncycastle.crypto, + org.bouncycastle.crypto.generators, + org.bouncycastle.crypto.params, + org.bouncycastle.crypto.signers, + org.bouncycastle.crypto.engines, + org.bouncycastle.crypto.modes, + org.bouncycastle.util, + org.bouncycastle.util.encoders \ No newline at end of file diff --git a/src/net/java/sip/communicator/service/protocol/OperationSetInstantMessageTransform.java b/src/net/java/sip/communicator/service/protocol/OperationSetInstantMessageTransform.java index 2ab9c1a20..460cbd6ad 100644 --- a/src/net/java/sip/communicator/service/protocol/OperationSetInstantMessageTransform.java +++ b/src/net/java/sip/communicator/service/protocol/OperationSetInstantMessageTransform.java @@ -23,6 +23,7 @@ * */ public interface OperationSetInstantMessageTransform + extends OperationSet { /** * Adds a transformation layer to this protocol provider using a default