Commit 4a1fae99 authored by Grigory Fedorov's avatar Grigory Fedorov

ConnectionManager light refactoring.

parent 687c63ae
......@@ -37,7 +37,6 @@ import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
......@@ -57,10 +56,6 @@ public class ConnectionManager implements OnInitializedListener,
*/
public final static int PACKET_REPLY_TIMEOUT = 5000;
/**
* Path to the trust store in this system.
*/
public final static String TRUST_STORE_PATH;
private final static ConnectionManager instance;
static {
......@@ -69,20 +64,9 @@ public class ConnectionManager implements OnInitializedListener,
SmackConfiguration.setDefaultPacketReplyTimeout(PACKET_REPLY_TIMEOUT);
// ServiceDiscoveryManager.setIdentityType("handheld");
// ServiceDiscoveryManager.setIdentityName(Application.getInstance()
// .getString(R.string.client_name));
ServiceDiscoveryManager.setDefaultIdentity(new DiscoverInfo.Identity("client", Application.getInstance()
.getString(R.string.client_name), "handheld"));
String path = System.getProperty("javax.net.ssl.trustStore");
if (path == null)
TRUST_STORE_PATH = System.getProperty("java.home") + File.separator
+ "etc" + File.separator + "security" + File.separator
+ "cacerts.bks";
else
TRUST_STORE_PATH = path;
XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final XMPPConnection connection) {
......@@ -102,8 +86,8 @@ public class ConnectionManager implements OnInitializedListener,
private final NestedMap<RequestHolder> requests;
private ConnectionManager() {
managedConnections = new ArrayList<ConnectionThread>();
requests = new NestedMap<RequestHolder>();
managedConnections = new ArrayList<>();
requests = new NestedMap<>();
}
public static ConnectionManager getInstance() {
......@@ -113,18 +97,16 @@ public class ConnectionManager implements OnInitializedListener,
@Override
public void onInitialized() {
updateConnections(false);
AccountManager.getInstance().onAccountsChanged(
new ArrayList<String>(AccountManager.getInstance()
.getAllAccounts()));
AccountManager.getInstance().onAccountsChanged(new ArrayList<>(AccountManager.getInstance().getAllAccounts()));
}
@Override
public void onClose() {
ArrayList<ConnectionThread> connections = new ArrayList<ConnectionThread>(
managedConnections);
ArrayList<ConnectionThread> connections = new ArrayList<>(managedConnections);
managedConnections.clear();
for (ConnectionThread connectionThread : connections)
for (ConnectionThread connectionThread : connections) {
connectionThread.getConnectionItem().disconnect(connectionThread);
}
}
/**
......@@ -137,9 +119,9 @@ public class ConnectionManager implements OnInitializedListener,
public void updateConnections(boolean userRequest) {
AccountManager accountManager = AccountManager.getInstance();
for (String account : accountManager.getAccounts()) {
if (accountManager.getAccount(account)
.updateConnection(userRequest))
if (accountManager.getAccount(account).updateConnection(userRequest)) {
AccountManager.getInstance().onAccountChanged(account);
}
}
}
......@@ -155,29 +137,28 @@ public class ConnectionManager implements OnInitializedListener,
}
/**
* Send packet to authenticated connection.
* Send stanza to authenticated connection.
*
* @param account
* @param packet
* @param stanza
*/
public void sendPacket(String account, Stanza packet)
public void sendStanza(String account, Stanza stanza)
throws NetworkException {
ConnectionThread connectionThread = null;
for (ConnectionThread check : managedConnections)
for (ConnectionThread check : managedConnections) {
if (check.getConnectionItem() instanceof AccountItem
&& ((AccountItem) check.getConnectionItem()).getAccount()
.equals(account)) {
&& ((AccountItem) check.getConnectionItem()).getAccount().equals(account)) {
connectionThread = check;
break;
}
if (connectionThread == null
|| !connectionThread.getConnectionItem().getState()
.isConnected())
}
if (connectionThread == null || !connectionThread.getConnectionItem().getState().isConnected()) {
throw new NetworkException(R.string.NOT_CONNECTED);
}
XMPPConnection xmppConnection = connectionThread.getXMPPConnection();
try {
xmppConnection.sendStanza(packet);
xmppConnection.sendStanza(stanza);
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
throw new NetworkException(R.string.XMPP_EXCEPTION);
......@@ -193,32 +174,33 @@ public class ConnectionManager implements OnInitializedListener,
* @param listener
* @throws NetworkException
*/
public void sendRequest(String account, IQ iq, OnResponseListener listener)
throws NetworkException {
String packetId = iq.getPacketID();
public void sendRequest(String account, IQ iq, OnResponseListener listener) throws NetworkException {
String stanzaId = iq.getStanzaId();
RequestHolder holder = new RequestHolder(listener);
sendPacket(account, iq);
requests.put(account, packetId, holder);
sendStanza(account, iq);
requests.put(account, stanzaId, holder);
}
public void onConnection(ConnectionThread connectionThread) {
managedConnections.add(connectionThread);
for (OnConnectionListener listener : Application.getInstance()
.getManagers(OnConnectionListener.class))
for (OnConnectionListener listener : Application.getInstance().getManagers(OnConnectionListener.class)) {
listener.onConnection(connectionThread.getConnectionItem());
}
}
public void onConnected(ConnectionThread connectionThread) {
if (!managedConnections.contains(connectionThread))
if (!managedConnections.contains(connectionThread)) {
return;
for (OnConnectedListener listener : Application.getInstance()
.getManagers(OnConnectedListener.class))
}
for (OnConnectedListener listener : Application.getInstance().getManagers(OnConnectedListener.class)) {
listener.onConnected(connectionThread.getConnectionItem());
}
}
public void onAuthorized(ConnectionThread connectionThread) {
if (!managedConnections.contains(connectionThread))
if (!managedConnections.contains(connectionThread)) {
return;
}
LogManager.i(this, "onAuthorized: " + connectionThread.getConnectionItem());
for (OnAuthorizedListener listener : Application.getInstance().getManagers(OnAuthorizedListener.class)) {
listener.onAuthorized(connectionThread.getConnectionItem());
......@@ -227,52 +209,51 @@ public class ConnectionManager implements OnInitializedListener,
}
public void onDisconnect(ConnectionThread connectionThread) {
if (!managedConnections.remove(connectionThread))
if (!managedConnections.remove(connectionThread)) {
return;
}
ConnectionItem connectionItem = connectionThread.getConnectionItem();
if (connectionItem instanceof AccountItem) {
String account = ((AccountItem) connectionItem).getAccount();
for (Entry<String, RequestHolder> entry : requests.getNested(
account).entrySet())
entry.getValue().getListener()
.onDisconnect(account, entry.getKey());
for (Entry<String, RequestHolder> entry : requests.getNested(account).entrySet()) {
entry.getValue().getListener().onDisconnect(account, entry.getKey());
}
requests.clear(account);
}
for (OnDisconnectListener listener : Application.getInstance()
.getManagers(OnDisconnectListener.class))
for (OnDisconnectListener listener : Application.getInstance().getManagers(OnDisconnectListener.class)) {
listener.onDisconnect(connectionThread.getConnectionItem());
}
}
public void processPacket(ConnectionThread connectionThread, Stanza packet) {
if (!managedConnections.contains(connectionThread))
public void processPacket(ConnectionThread connectionThread, Stanza stanza) {
if (!managedConnections.contains(connectionThread)) {
return;
}
ConnectionItem connectionItem = connectionThread.getConnectionItem();
if (packet instanceof IQ && connectionItem instanceof AccountItem) {
IQ iq = (IQ) packet;
if (stanza instanceof IQ && connectionItem instanceof AccountItem) {
IQ iq = (IQ) stanza;
String packetId = iq.getStanzaId();
if (packetId != null
&& (iq.getType() == Type.result || iq.getType() == Type.error)) {
if (packetId != null && (iq.getType() == Type.result || iq.getType() == Type.error)) {
String account = ((AccountItem) connectionItem).getAccount();
RequestHolder requestHolder = requests
.remove(account, packetId);
RequestHolder requestHolder = requests.remove(account, packetId);
if (requestHolder != null) {
if (iq.getType() == Type.result)
if (iq.getType() == Type.result) {
requestHolder.getListener().onReceived(account, packetId, iq);
else
} else {
requestHolder.getListener().onError(account, packetId, iq);
}
}
}
}
for (OnPacketListener listener : Application.getInstance().getManagers(
OnPacketListener.class))
listener.onPacket(connectionItem,
Jid.getBareAddress(packet.getFrom()), packet);
for (OnPacketListener listener : Application.getInstance().getManagers(OnPacketListener.class)) {
listener.onPacket(connectionItem, Jid.getBareAddress(stanza.getFrom()), stanza);
}
}
@Override
public void onTimer() {
if (NetworkManager.getInstance().getState() != NetworkState.suspended) {
Collection<ConnectionItem> reconnect = new ArrayList<ConnectionItem>();
Collection<ConnectionItem> reconnect = new ArrayList<>();
for (ConnectionThread connectionThread : managedConnections) {
// if (connectionThread.getConnectionItem().getState().isConnected()
// // TODO find the way to check if connection is alive
......@@ -292,8 +273,7 @@ public class ConnectionManager implements OnInitializedListener,
while (iterator.hasNext()) {
NestedMap.Entry<RequestHolder> entry = iterator.next();
if (entry.getValue().isExpired(now)) {
entry.getValue().getListener()
.onTimeout(entry.getFirst(), entry.getSecond());
entry.getValue().getListener().onTimeout(entry.getFirst(), entry.getSecond());
iterator.remove();
}
}
......
......@@ -337,7 +337,7 @@ public class MessageArchiveManager implements OnPacketListener,
auto.setSave(true);
auto.setType(Type.set);
try {
ConnectionManager.getInstance().sendPacket(account, auto);
ConnectionManager.getInstance().sendStanza(account, auto);
} catch (NetworkException e) {
}
// TODO: track results.
......@@ -394,7 +394,7 @@ public class MessageArchiveManager implements OnPacketListener,
pref.setDefault(defaultItem);
pref.setType(Type.set);
try {
ConnectionManager.getInstance().sendPacket(account, pref);
ConnectionManager.getInstance().sendStanza(account, pref);
} catch (NetworkException e) {
}
}
......@@ -703,7 +703,7 @@ public class MessageArchiveManager implements OnPacketListener,
packet.setEnd(connected.get(account));
String packetId = packet.getPacketID();
try {
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
} catch (NetworkException e) {
}
return packetId;
......@@ -722,7 +722,7 @@ public class MessageArchiveManager implements OnPacketListener,
modificationRequests.put(account, packet.getPacketID(), modification);
try {
if (!modification) {
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
return;
}
ConnectionManager.getInstance().sendRequest(account, packet,
......@@ -766,7 +766,7 @@ public class MessageArchiveManager implements OnPacketListener,
Pref packet = new Pref();
packet.addItem(extension);
packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
}
private void sendItemRemove(String account, String user)
......@@ -776,7 +776,7 @@ public class MessageArchiveManager implements OnPacketListener,
ItemRemove packet = new ItemRemove();
packet.addItem(extension);
packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
}
public void setOtrMode(String account, String user, OtrMode otrMode)
......@@ -862,7 +862,7 @@ public class MessageArchiveManager implements OnPacketListener,
Pref packet = new Pref();
packet.addSession(extension);
packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
sessionSaves.put(account, session, saveMode);
}
......@@ -873,7 +873,7 @@ public class MessageArchiveManager implements OnPacketListener,
SessionRemove packet = new SessionRemove();
packet.addSession(extension);
packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
sessionSaves.remove(account, session);
}
......
......@@ -194,7 +194,7 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
message.setTo(to);
message.setType(Message.Type.headline);
message.addExtension(new Attention());
ConnectionManager.getInstance().sendPacket(account, message);
ConnectionManager.getInstance().sendStanza(account, message);
chat.newAction(null, null, ChatAction.attention_called);
}
......
......@@ -218,7 +218,7 @@ public class CapabilitiesManager implements OnAuthorizedListener,
if (capability.getNode() != null && capability.getVersion() != null)
packet.setNode(capability.getNode() + "#" + capability.getVersion());
try {
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
} catch (NetworkException e) {
return;
}
......
......@@ -215,7 +215,7 @@ public class ChatStateManager implements OnDisconnectListener,
message.setTo(chat.getTo());
message.addExtension(new ChatStateExtension(chatState));
try {
ConnectionManager.getInstance().sendPacket(account, message);
ConnectionManager.getInstance().sendStanza(account, message);
} catch (NetworkException e) {
// Just ignore it.
}
......
......@@ -39,7 +39,6 @@ import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.muc.MultiUserChatManager;
......@@ -442,7 +441,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
invite.setReason("");
mucUser.setInvite(invite);
message.addExtension(mucUser);
ConnectionManager.getInstance().sendPacket(account, message);
ConnectionManager.getInstance().sendStanza(account, message);
roomChat.putInvite(message.getPacketID(), user);
roomChat.newAction(roomChat.getNickname(), user, ChatAction.invite_sent);
}
......
......@@ -235,7 +235,7 @@ public class OTRManager implements OtrEngineHost, OtrEngineListener,
SSNManager.getInstance().setSessionOtrMode(account, user, abstractChat.getThreadId(), OtrMode.prefer);
try {
ConnectionManager.getInstance()
.sendPacket(abstractChat.getAccount(), abstractChat.createMessagePacket(msg));
.sendStanza(abstractChat.getAccount(), abstractChat.createMessagePacket(msg));
} catch (NetworkException e) {
throw new OtrException(e);
}
......
......@@ -69,7 +69,7 @@ public class PingManager implements OnPacketListener {
if (ping.getType() != IQ.Type.get)
return;
try {
ConnectionManager.getInstance().sendPacket(account,
ConnectionManager.getInstance().sendStanza(account,
IQ.createResultIQ(ping));
} catch (NetworkException e) {
LogManager.exception(this, e);
......
......@@ -292,7 +292,7 @@ public class SSNManager implements OnPacketListener, OnAccountRemovedListener {
message.setThread(session);
message.addExtension(feature);
try {
ConnectionManager.getInstance().sendPacket(account, message);
ConnectionManager.getInstance().sendStanza(account, message);
} catch (NetworkException e) {
}
}
......
......@@ -127,7 +127,7 @@ public class TimeManager implements OnServerInfoReceivedListener,
.get(Calendar.DST_OFFSET)) / 60000);
result.setUtc(calendar.getTime());
try {
ConnectionManager.getInstance().sendPacket(account, result);
ConnectionManager.getInstance().sendStanza(account, result);
} catch (NetworkException e) {
}
}
......
......@@ -24,7 +24,6 @@ import java.util.Set;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Stanza;
......@@ -195,7 +194,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
if (hash != null)
request.addHash(hash);
try {
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
} catch (NetworkException e) {
requests.remove(request);
onVCardFailed(account, bareAddress);
......
......@@ -34,7 +34,6 @@ import com.xabber.xmpp.carbon.CarbonManager;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.delay.packet.DelayInformation;
......@@ -583,7 +582,7 @@ public abstract class AbstractChat extends BaseEntity {
.getTimestamp()));
try {
ConnectionManager.getInstance()
.sendPacket(account, message);
.sendStanza(account, message);
} catch (NetworkException e) {
break;
}
......
......@@ -137,7 +137,7 @@ public class ReceiptManager implements OnPacketListener, OnDisconnectListener {
receipt.addExtension(new Received(id));
receipt.setThread(message.getThread());
try {
ConnectionManager.getInstance().sendPacket(account,
ConnectionManager.getInstance().sendStanza(account,
receipt);
} catch (NetworkException e) {
LogManager.exception(this, e);
......
......@@ -124,7 +124,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
throws NetworkException {
Presence packet = new Presence(Presence.Type.subscribe);
packet.setTo(bareAddress);
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
HashSet<String> set = requestedSubscriptions.get(account);
if (set == null) {
set = new HashSet<String>();
......@@ -150,7 +150,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
throws NetworkException {
Presence packet = new Presence(Presence.Type.subscribed);
packet.setTo(bareAddress);
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
subscriptionRequestProvider.remove(account, bareAddress);
removeRequestedSubscription(account, bareAddress);
}
......@@ -167,7 +167,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
throws NetworkException {
Presence packet = new Presence(Presence.Type.unsubscribed);
packet.setTo(bareAddress);
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
subscriptionRequestProvider.remove(account, bareAddress);
removeRequestedSubscription(account, bareAddress);
}
......@@ -381,7 +381,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
public void resendPresence(String account) throws NetworkException {
if (!readyAccounts.contains(account))
throw new NetworkException(R.string.NOT_CONNECTED);
ConnectionManager.getInstance().sendPacket(account,
ConnectionManager.getInstance().sendStanza(account,
AccountManager.getInstance().getAccount(account).getPresence());
}
......
......@@ -302,7 +302,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
if (group.trim().length() > 0)
item.addGroupName(group);
packet.addRosterItem(item);
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
}
/**
......@@ -319,7 +319,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
RosterPacket.Item item = new RosterPacket.Item(bareAddress, "");
item.setItemType(RosterPacket.ItemType.remove);
packet.addRosterItem(item);
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
}
public void setGroups(String account, String bareAddress, Collection<String> groups) throws NetworkException {
......@@ -357,7 +357,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
item.addGroupName(group);
}
packet.addRosterItem(item);
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
}
/**
......@@ -384,7 +384,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
}
if (packet.getRosterItemCount() == 0)
return;
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
}
/**
......@@ -439,7 +439,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
}
if (packet.getRosterItemCount() == 0)
return;
ConnectionManager.getInstance().sendPacket(account, packet);
ConnectionManager.getInstance().sendStanza(account, packet);
}
/**
......@@ -500,7 +500,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
String account = ((AccountItem) connection).getAccount();
requestedRosters.add(account);
try {
ConnectionManager.getInstance().sendPacket(account,
ConnectionManager.getInstance().sendStanza(account,
new RosterPacket());
} catch (NetworkException e) {
LogManager.exception(this, e);
......
......@@ -149,7 +149,7 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
// }
// }, new StanzaIdFilter(setIQ.getStanzaId()));
//
// connection.sendPacket(setIQ);
// connection.sendStanza(setIQ);
}
/**
......
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