mirror of https://github.com/sipwise/jitsi.git
parent
766d4bbb8f
commit
88bf145942
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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<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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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<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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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<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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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<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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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<String, String> containerFilter =
|
||||||
|
new Hashtable<String, String>();
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -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)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -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<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)
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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
|
||||||
Loading…
Reference in new issue