Commit 2cc0fb51 authored by Grigory Fedorov's avatar Grigory Fedorov

CarbonManager: code format (indent)

parent 797bf743
package com.xabber.xmpp.carbon; package com.xabber.xmpp.carbon;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.filter.PacketIDFilter;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
...@@ -26,125 +15,146 @@ import com.xabber.android.data.message.AbstractChat; ...@@ -26,125 +15,146 @@ import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.MessageItem; import com.xabber.android.data.message.MessageItem;
import com.xabber.android.data.message.MessageManager; import com.xabber.android.data.message.MessageManager;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.filter.PacketIDFilter;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
/** /**
* Packet extension for XEP-0280: Message Carbons. This class implements * Packet extension for XEP-0280: Message Carbons. This class implements
* the manager for registering {@link Carbon} support, enabling and disabling * the manager for registering {@link Carbon} support, enabling and disabling
* message carbons. * message carbons.
* * <p/>
* You should call enableCarbons() before sending your first undirected * You should call enableCarbons() before sending your first undirected
* presence. * presence.
* *
* @author Georg Lukas, Semyon Baranov * @author Georg Lukas, Semyon Baranov
*/ */
public class CarbonManager implements OnServerInfoReceivedListener, OnPacketListener public class CarbonManager implements OnServerInfoReceivedListener, OnPacketListener {
{
private final static CarbonManager instance;
private Connection connection;
private volatile boolean enabled_state = false;
public static final String NAMESPACE = "urn:xmpp:carbons:2"; public static final String NAMESPACE = "urn:xmpp:carbons:2";
private final static CarbonManager instance;
static { static {
instance = new CarbonManager(); instance = new CarbonManager();
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
Connection.addConnectionCreationListener(new ConnectionCreationListener() { Connection.addConnectionCreationListener(new ConnectionCreationListener() {
@Override @Override
public void connectionCreated(final Connection connection) { public void connectionCreated(final Connection connection) {
if (!(connection instanceof XMPPConnection)) { if (!(connection instanceof XMPPConnection)) {
return; return;
} }
ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection); ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
if (sdm != null) { if (sdm != null) {
sdm.addFeature(NAMESPACE); sdm.addFeature(NAMESPACE);
sdm.addFeature(Forwarded.NAMESPACE); sdm.addFeature(Forwarded.NAMESPACE);
} }
instance.connection = connection; instance.connection = connection;
} }
}); });
} }
public static CarbonManager getInstance() { private Connection connection;
private volatile boolean enabled_state = false;
return instance;
}
private CarbonManager() { private CarbonManager() {
} }
public static CarbonManager getInstance() {
return instance;
}
/**
* Mark a message as "private", so it will not be carbon-copied.
*
* @param msg Message object to mark private
*/
public static void disableCarbons(Message msg) {
msg.addExtension(new Private());
}
private IQ carbonsEnabledIQ(final boolean new_state) { private IQ carbonsEnabledIQ(final boolean new_state) {
if (!checkConnected()) { if (!checkConnected()) {
return null; return null;
} }
IQ setIQ = new IQ() { IQ setIQ = new IQ() {
public String getChildElementXML() { public String getChildElementXML() {
return String.format("<%s xmlns='%s'/>", new_state ? "enable" : "disable", NAMESPACE); return String.format("<%s xmlns='%s'/>", new_state ? "enable" : "disable", NAMESPACE);
} }
}; };
setIQ.setType(IQ.Type.SET); setIQ.setType(IQ.Type.SET);
setIQ.setFrom(connection.getUser()); setIQ.setFrom(connection.getUser());
return setIQ; return setIQ;
} }
private boolean checkConnected() { private boolean checkConnected() {
if (connection == null) { if (connection == null) {
LogManager.exception(this, new Exception("connection is null")); LogManager.exception(this, new Exception("connection is null"));
return false; return false;
} }
if (!connection.isConnected()) { if (!connection.isConnected()) {
LogManager.exception(this, new Exception("not connected")); LogManager.exception(this, new Exception("not connected"));
return false; return false;
} }
return true; return true;
} }
/** /**
* Returns true if XMPP Carbons are supported by the server. * Returns true if XMPP Carbons are supported by the server.
* *
* @return true if supported * @return true if supported
*/ */
public boolean isSupportedByServer() { public boolean isSupportedByServer() {
if (!checkConnected()) { if (!checkConnected()) {
return false; return false;
} }
boolean isCarbonSupported = ServerInfoManager.getInstance().isProtocolSupported(connection.getUser(), NAMESPACE); boolean isCarbonSupported = ServerInfoManager.getInstance().isProtocolSupported(connection.getUser(), NAMESPACE);
return isCarbonSupported; return isCarbonSupported;
} }
/** /**
* Notify server to change the carbons state. This method returns * Notify server to change the carbons state. This method returns
* immediately and changes the variable when the reply arrives. * immediately and changes the variable when the reply arrives.
* * <p/>
* You should first check for support using isSupportedByServer(). * You should first check for support using isSupportedByServer().
* *
* @param new_state whether carbons should be enabled or disabled * @param new_state whether carbons should be enabled or disabled
*/ */
public void sendCarbonsEnabled(final boolean new_state) { public void sendCarbonsEnabled(final boolean new_state) {
LogManager.d(this, "sendCarbonsEnabled " + String.valueOf(new_state)); LogManager.d(this, "sendCarbonsEnabled " + String.valueOf(new_state));
if (!checkConnected()) { if (!checkConnected()) {
return; return;
} }
IQ setIQ = carbonsEnabledIQ(new_state); IQ setIQ = carbonsEnabledIQ(new_state);
connection.addPacketListener(new PacketListener() { connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) { public void processPacket(Packet packet) {
IQ result = (IQ)packet; IQ result = (IQ) packet;
if (result.getType() == IQ.Type.RESULT) { if (result.getType() == IQ.Type.RESULT) {
enabled_state = new_state; enabled_state = new_state;
} }
connection.removePacketListener(this); connection.removePacketListener(this);
} }
}, new PacketIDFilter(setIQ.getPacketID())); }, new PacketIDFilter(setIQ.getPacketID()));
connection.sendPacket(setIQ); connection.sendPacket(setIQ);
} }
/** /**
* Helper method to enable carbons. * Helper method to enable carbons.
*/ */
...@@ -152,125 +162,117 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList ...@@ -152,125 +162,117 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
sendCarbonsEnabled(true); sendCarbonsEnabled(true);
} }
/** /**
* Helper method to disable carbons. * Helper method to disable carbons.
*/ */
public void disableCarbons() { public void disableCarbons() {
sendCarbonsEnabled(false); sendCarbonsEnabled(false);
} }
/** /**
* Check if carbons are enabled on this connection. * Check if carbons are enabled on this connection.
*/ */
public boolean getCarbonsEnabled() { public boolean getCarbonsEnabled() {
return enabled_state; return enabled_state;
} }
/** @Override
* Mark a message as "private", so it will not be carbon-copied. public void onPacket(ConnectionItem connection, String bareAddress,
* Packet packet) {
* @param msg Message object to mark private
*/ if (!(connection instanceof AccountItem)) {
public static void disableCarbons(Message msg) {
msg.addExtension(new Private());
}
@Override
public void onPacket(ConnectionItem connection, String bareAddress,
Packet packet) {
if (!(connection instanceof AccountItem)) {
return;
}
if (!SettingsManager.connectionUseCarbons()) {
return;
}
final String user = packet.getFrom();
if (user == null)
return;
if (!(packet instanceof Message))
return;
final Message message = (Message) packet;
if (!getCarbonsEnabled()) {
return;
}
PacketExtension carbonExtension = null;
Direction dir = null;
for (PacketExtension packetExtension : message.getExtensions()) {
if (packetExtension instanceof Received) {
carbonExtension = packetExtension;
dir = Direction.received;
} else if (packetExtension instanceof Sent) {
carbonExtension = packetExtension;
dir = Direction.sent;
} else {
continue;
}
}
if (carbonExtension == null) {
return; return;
} }
if (!SettingsManager.connectionUseCarbons()) {
return;
}
final String user = packet.getFrom();
if (user == null)
return;
if (!(packet instanceof Message))
return;
final Message message = (Message) packet;
if (!getCarbonsEnabled()) {
return;
}
PacketExtension carbonExtension = null;
Direction dir = null;
for (PacketExtension packetExtension : message.getExtensions()) {
if (packetExtension instanceof Received) {
carbonExtension = packetExtension;
dir = Direction.received;
} else if (packetExtension instanceof Sent) {
carbonExtension = packetExtension;
dir = Direction.sent;
} else {
continue;
}
}
if (carbonExtension == null) {
return;
}
Forwarded forwarded = null; Forwarded forwarded = null;
if (dir == Direction.sent) { if (dir == Direction.sent) {
Sent carbon = (Sent) carbonExtension; Sent carbon = (Sent) carbonExtension;
forwarded = carbon.getForwarded(); forwarded = carbon.getForwarded();
} else { } else {
Received carbon = (Received) carbonExtension; Received carbon = (Received) carbonExtension;
forwarded = carbon.getForwarded(); forwarded = carbon.getForwarded();
} }
if (forwarded == null) { if (forwarded == null) {
return; return;
} }
Message forwardedMsg = (Message) forwarded.getForwardedPacket(); Message forwardedMsg = (Message) forwarded.getForwardedPacket();
MessageManager.getInstance().displayForwardedMessage(connection, forwardedMsg, dir); MessageManager.getInstance().displayForwardedMessage(connection, forwardedMsg, dir);
} }
@Override @Override
public void onServerInfoReceived(ConnectionItem connection) { public void onServerInfoReceived(ConnectionItem connection) {
if (isSupportedByServer()) { if (isSupportedByServer()) {
onUseCarbonsSettingsChanged(); onUseCarbonsSettingsChanged();
}
}
/**
* Sends the new state of message carbons to the server
* when this setting has been changed
*/
public void onUseCarbonsSettingsChanged() {
sendCarbonsEnabled(SettingsManager.connectionUseCarbons());
}
/**
* Update outgoing message before sending.
* Marks the message as non-carbon-copied in the following cases:
* - Message Carbons is enabled and OTR mode is enabled.
* - Message Carbons is enabled and OTR security level != plain.
*
* @param abstractChat
* @param message the <tt>Message</tt> to be sent
* @param messageItem
*/
public void updateOutgoingMessage(AbstractChat abstractChat, Message message, MessageItem messageItem) {
if (!SettingsManager.connectionUseCarbons()) {
return;
} }
} if (SettingsManager.securityOtrMode() == SecurityOtrMode.disabled) {
return;
/** }
* Sends the new state of message carbons to the server if (OTRManager.getInstance().getSecurityLevel(abstractChat.getAccount(),
* when this setting has been changed abstractChat.getUser()) != SecurityLevel.plain) {
*/ return;
public void onUseCarbonsSettingsChanged() { }
message.addExtension(new Private());
sendCarbonsEnabled(SettingsManager.connectionUseCarbons()); }
}
public enum Direction {
/** sent, received
* Update outgoing message before sending. }
* Marks the message as non-carbon-copied in the following cases:
* - Message Carbons is enabled and OTR mode is enabled.
* - Message Carbons is enabled and OTR security level != plain.
* @param abstractChat
* @param message the <tt>Message</tt> to be sent
* @param messageItem
*/
public void updateOutgoingMessage(AbstractChat abstractChat, Message message, MessageItem messageItem) {
if (!SettingsManager.connectionUseCarbons()) {
return;
}
if (SettingsManager.securityOtrMode() == SecurityOtrMode.disabled) {
return;
}
if (OTRManager.getInstance().getSecurityLevel(abstractChat.getAccount(),
abstractChat.getUser()) != SecurityLevel.plain) {
return;
}
message.addExtension(new Private());
}
public enum Direction {
sent, received
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment