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

Migration to Smack 4.1.0 started.

All libraries source code removed from project - gradle used.
It is very first working version - successfull build, account login, message sending.
 Many things do not work so far, such as MUC, avatars, vcard, OTR, certificate problems, proxies, etc.
 Some lines of code were commented out just to go away from build mistakes.
parent 43ed3697
......@@ -51,5 +51,9 @@ dependencies {
compile 'com.github.bumptech.glide:glide:3.6.0'
compile 'com.google.zxing:android-integration:3.1.0'
compile 'com.jcraft:jzlib:1.1.3'
compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"
compile "org.igniterealtime.smack:smack-experimental:4.1.0"
compile "org.igniterealtime.smack:smack-tcp:4.1.0"
compile project('otr4j')
}
/* **************************************************************************
* $OpenLDAP: /com/novell/sasl/client/ParsedDirective.java,v 1.1 2003/08/21 10:06:26 kkanil Exp $
*
* Copyright (C) 2002 Novell, Inc. All Rights Reserved.
*
* THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND
* TREATIES. USE, MODIFICATION, AND REDISTRIBUTION OF THIS WORK IS SUBJECT
* TO VERSION 2.0.1 OF THE OPENLDAP PUBLIC LICENSE, A COPY OF WHICH IS
* AVAILABLE AT HTTP://WWW.OPENLDAP.ORG/LICENSE.HTML OR IN THE FILE "LICENSE"
* IN THE TOP-LEVEL DIRECTORY OF THE DISTRIBUTION. ANY USE OR EXPLOITATION
* OF THIS WORK OTHER THAN AS AUTHORIZED IN VERSION 2.0.1 OF THE OPENLDAP
* PUBLIC LICENSE, OR OTHER PRIOR WRITTEN CONSENT FROM NOVELL, COULD SUBJECT
* THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
******************************************************************************/
package com.novell.sasl.client;
/**
* Implements the ParsedDirective class which will be used in the
* DigestMD5SaslClient mechanism.
*/
class ParsedDirective {
public static final int QUOTED_STRING_VALUE = 1;
public static final int TOKEN_VALUE = 2;
private int m_valueType;
private String m_name;
private String m_value;
ParsedDirective(
String name,
String value,
int type) {
m_name = name;
m_value = value;
m_valueType = type;
}
String getValue() {
return m_value;
}
String getName() {
return m_name;
}
int getValueType() {
return m_valueType;
}
}
/* **************************************************************************
* $OpenLDAP: /com/novell/sasl/client/ResponseAuth.java,v 1.3 2005/01/17 15:00:54 sunilk Exp $
*
* Copyright (C) 2002 Novell, Inc. All Rights Reserved.
*
* THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND
* TREATIES. USE, MODIFICATION, AND REDISTRIBUTION OF THIS WORK IS SUBJECT
* TO VERSION 2.0.1 OF THE OPENLDAP PUBLIC LICENSE, A COPY OF WHICH IS
* AVAILABLE AT HTTP://WWW.OPENLDAP.ORG/LICENSE.HTML OR IN THE FILE "LICENSE"
* IN THE TOP-LEVEL DIRECTORY OF THE DISTRIBUTION. ANY USE OR EXPLOITATION
* OF THIS WORK OTHER THAN AS AUTHORIZED IN VERSION 2.0.1 OF THE OPENLDAP
* PUBLIC LICENSE, OR OTHER PRIOR WRITTEN CONSENT FROM NOVELL, COULD SUBJECT
* THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
******************************************************************************/
package com.novell.sasl.client;
import java.util.*;
import org.apache.harmony.javax.security.sasl.*;
/**
* Implements the ResponseAuth class used by the DigestMD5SaslClient mechanism
*/
class ResponseAuth {
private String m_responseValue;
ResponseAuth(
byte[] responseAuth)
throws SaslException {
m_responseValue = null;
DirectiveList dirList = new DirectiveList(responseAuth);
try {
dirList.parseDirectives();
checkSemantics(dirList);
} catch (SaslException e) {
}
}
/**
* Checks the semantics of the directives in the directive list as parsed
* from the digest challenge byte array.
*
* @param dirList the list of directives parsed from the digest challenge
* @throws SaslException If a semantic error occurs
*/
void checkSemantics(
DirectiveList dirList) throws SaslException {
Iterator directives = dirList.getIterator();
ParsedDirective directive;
String name;
while (directives.hasNext()) {
directive = (ParsedDirective) directives.next();
name = directive.getName();
if (name.equals("rspauth"))
m_responseValue = directive.getValue();
}
/* post semantic check */
if (m_responseValue == null)
throw new SaslException("Missing response-auth directive.");
}
/**
* returns the ResponseValue
*
* @return the ResponseValue as a String.
*/
public String getResponseValue() {
return m_responseValue;
}
}
/* **************************************************************************
* $OpenLDAP: /com/novell/sasl/client/TokenParser.java,v 1.3 2005/01/17 15:00:54 sunilk Exp $
*
* Copyright (C) 2002 Novell, Inc. All Rights Reserved.
*
* THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND
* TREATIES. USE, MODIFICATION, AND REDISTRIBUTION OF THIS WORK IS SUBJECT
* TO VERSION 2.0.1 OF THE OPENLDAP PUBLIC LICENSE, A COPY OF WHICH IS
* AVAILABLE AT HTTP://WWW.OPENLDAP.ORG/LICENSE.HTML OR IN THE FILE "LICENSE"
* IN THE TOP-LEVEL DIRECTORY OF THE DISTRIBUTION. ANY USE OR EXPLOITATION
* OF THIS WORK OTHER THAN AS AUTHORIZED IN VERSION 2.0.1 OF THE OPENLDAP
* PUBLIC LICENSE, OR OTHER PRIOR WRITTEN CONSENT FROM NOVELL, COULD SUBJECT
* THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
******************************************************************************/
package com.novell.sasl.client;
import org.apache.harmony.javax.security.sasl.*;
/**
* The TokenParser class will parse individual tokens from a list of tokens that
* are a directive value for a DigestMD5 authentication.The tokens are separated
* commas.
*/
class TokenParser extends Object {
private static final int STATE_LOOKING_FOR_FIRST_TOKEN = 1;
private static final int STATE_LOOKING_FOR_TOKEN = 2;
private static final int STATE_SCANNING_TOKEN = 3;
private static final int STATE_LOOKING_FOR_COMMA = 4;
private static final int STATE_PARSING_ERROR = 5;
private static final int STATE_DONE = 6;
private int m_curPos;
private int m_scanStart;
private int m_state;
private String m_tokens;
TokenParser(
String tokens) {
m_tokens = tokens;
m_curPos = 0;
m_scanStart = 0;
m_state = STATE_LOOKING_FOR_FIRST_TOKEN;
}
/**
* This function parses the next token from the tokens string and returns
* it as a string. If there are no more tokens a null reference is returned.
*
* @return the parsed token or a null reference if there are no more
* tokens
* @throws SASLException if an error occurs while parsing
*/
String parseToken() throws SaslException {
char currChar;
String token = null;
if (m_state == STATE_DONE)
return null;
while (m_curPos < m_tokens.length() && (token == null)) {
currChar = m_tokens.charAt(m_curPos);
switch (m_state) {
case STATE_LOOKING_FOR_FIRST_TOKEN:
case STATE_LOOKING_FOR_TOKEN:
if (isWhiteSpace(currChar)) {
break;
} else if (isValidTokenChar(currChar)) {
m_scanStart = m_curPos;
m_state = STATE_SCANNING_TOKEN;
} else {
m_state = STATE_PARSING_ERROR;
throw new SaslException("Invalid token character at position " + m_curPos);
}
break;
case STATE_SCANNING_TOKEN:
if (isValidTokenChar(currChar)) {
break;
} else if (isWhiteSpace(currChar)) {
token = m_tokens.substring(m_scanStart, m_curPos);
m_state = STATE_LOOKING_FOR_COMMA;
} else if (',' == currChar) {
token = m_tokens.substring(m_scanStart, m_curPos);
m_state = STATE_LOOKING_FOR_TOKEN;
} else {
m_state = STATE_PARSING_ERROR;
throw new SaslException("Invalid token character at position " + m_curPos);
}
break;
case STATE_LOOKING_FOR_COMMA:
if (isWhiteSpace(currChar))
break;
else if (currChar == ',')
m_state = STATE_LOOKING_FOR_TOKEN;
else {
m_state = STATE_PARSING_ERROR;
throw new SaslException("Expected a comma, found '" +
currChar + "' at postion " +
m_curPos);
}
break;
}
m_curPos++;
} /* end while loop */
if (token == null) { /* check the ending state */
switch (m_state) {
case STATE_SCANNING_TOKEN:
token = m_tokens.substring(m_scanStart);
m_state = STATE_DONE;
break;
case STATE_LOOKING_FOR_FIRST_TOKEN:
case STATE_LOOKING_FOR_COMMA:
break;
case STATE_LOOKING_FOR_TOKEN:
throw new SaslException("Trialing comma");
}
}
return token;
}
/**
* This function returns TRUE if the character is a valid token character.
* <p/>
* token = 1*<any CHAR except CTLs or separators>
* <p/>
* separators = "(" | ")" | "<" | ">" | "@"
* | "," | ";" | ":" | "\" | <">
* | "/" | "[" | "]" | "?" | "="
* | "{" | "}" | SP | HT
* <p/>
* CTL = <any US-ASCII control character
* (octets 0 - 31) and DEL (127)>
* <p/>
* CHAR = <any US-ASCII character (octets 0 - 127)>
*
* @param c character to be validated
* @return True if character is valid Token character else it returns
* false
*/
boolean isValidTokenChar(
char c) {
if (((c >= '\u0000') && (c <= '\u0020')) ||
((c >= '\u003a') && (c <= '\u0040')) ||
((c >= '\u005b') && (c <= '\u005d')) ||
('\u002c' == c) ||
('\u0025' == c) ||
('\u0028' == c) ||
('\u0029' == c) ||
('\u007b' == c) ||
('\u007d' == c) ||
('\u007f' == c))
return false;
return true;
}
/**
* This function returns TRUE if the character is linear white space (LWS).
* LWS = [CRLF] 1*( SP | HT )
*
* @param c character to be validated
* @return True if character is liner whitespace else it returns false
*/
boolean isWhiteSpace(
char c) {
if (('\t' == c) || // HORIZONTAL TABULATION.
('\n' == c) || // LINE FEED.
('\r' == c) || // CARRIAGE RETURN.
('\u0020' == c))
return true;
return false;
}
}
/**
* Copyright (c) 2013, Redsolution LTD. All rights reserved.
*
* This file is part of Xabber project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License, Version 3.
*
* Xabber is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License,
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.xabber.android.data;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.debugger.ConsoleDebugger;
import org.jivesoftware.smack.util.ReaderListener;
import org.jivesoftware.smack.util.WriterListener;
import android.os.Environment;
/**
* Writer for connection log to the file.
*
* @author alexander.ivanov
*/
public class FileLogDebugger extends ConsoleDebugger {
private FileWriter writer;
private boolean readerClosed;
private boolean writerClosed;
private final static SimpleDateFormat FILE_NAME_FORMAT = new SimpleDateFormat(
"yyyy-MM-dd-HH-mm-ss");
public FileLogDebugger(Connection connection, Writer writer, Reader reader) {
super(connection, writer, reader);
File dir = new File(Environment.getExternalStorageDirectory(),
"xabber-log");
dir.mkdirs();
File file = new File(dir, FILE_NAME_FORMAT.format(new Date()) + " - "
+ connection.hashCode() + ".xml");
try {
this.writer = new FileWriter(file);
this.writer.write("<xml>");
this.writer.write("\n");
this.writer.flush();
} catch (IOException e) {
LogManager.forceException(this, e);
}
}
@Override
protected ReaderListener createReaderListener() {
final ReaderListener inherited = super.createReaderListener();
return new ReaderListener() {
@Override
public void read(String str) {
inherited.read(str);
synchronized (this) {
if (writerClosed && readerClosed)
return;
try {
writer.write("\n");
writer.write(dateFormatter.format(new Date()));
writer.write(" RCV ");
writer.write(str);
writer.flush();
} catch (IOException e) {
LogManager.forceException(this, e);
}
}
}
@Override
public void close() {
inherited.close();
System.out.println(dateFormatter.format(new Date())
+ " RCV CLOSED (" + connection.hashCode() + ")");
synchronized (this) {
if (readerClosed)
return;
try {
writer.write("\n");
writer.write(dateFormatter.format(new Date()));
writer.write(" RCV - CLOSED ");
writer.flush();
} catch (IOException e) {
LogManager.exception(this, e);
}
readerClosed = true;
onClose();
}
}
};
}
@Override
protected WriterListener createWriterListener() {
final WriterListener inherited = super.createWriterListener();
return new WriterListener() {
@Override
public void write(String str) {
inherited.write(str);
synchronized (this) {
if (writerClosed && readerClosed)
return;
try {
writer.write("\n");
writer.write(dateFormatter.format(new Date()));
writer.write(" SNT ");
writer.write(str);
writer.flush();
} catch (IOException e) {
LogManager.forceException(this, e);
}
}
}
@Override
public void close() {
inherited.close();
System.out.println(dateFormatter.format(new Date())
+ " SENT CLOSED (" + connection.hashCode() + ")");
synchronized (this) {
if (writerClosed)
return;
try {
writer.write("\n");
writer.write(dateFormatter.format(new Date()));
writer.write(" SNT - CLOSED");
writer.flush();
} catch (IOException e) {
LogManager.exception(this, e);
}
writerClosed = true;
onClose();
}
}
};
}
private void onClose() {
if (writerClosed && readerClosed) {
try {
writer.write("\n");
writer.write("</xml>");
writer.close();
} catch (IOException e) {
LogManager.exception(this, e);
}
}
}
}
......@@ -17,7 +17,7 @@ package com.xabber.android.data;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.SmackConfiguration;
import org.xbill.DNS.Options;
import android.content.pm.ApplicationInfo;
......@@ -59,7 +59,7 @@ public class LogManager implements OnLoadListener {
"org.jivesoftware.smack.debugger.ConsoleDebugger");
// "com.xabber.android.data.FileLogDebugger");
System.setProperty("smack.debugEnabled", "true");
Connection.DEBUG_ENABLED = true;
SmackConfiguration.DEBUG = true;
Options.set("verbose");
Options.set("verbosemsg");
Options.set("verbosecompression");
......
......@@ -36,6 +36,7 @@ import com.xabber.android.data.roster.RosterManager;
import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.util.StringUtils;
import org.jxmpp.util.XmppStringUtils;
import java.security.KeyPair;
import java.util.ArrayList;
......@@ -54,7 +55,7 @@ import java.util.Map;
* Each account has unique full jid (userName@serverName/resource). This jid is
* persistent and independent from real jid assigned by server. Real full jid
* (assigned by server) of account can be taken by
* {@link AccountItem#getRealAccount()}.
* {@link AccountItem#getRealJid()}.
*
* @author alexander.ivanov
*/
......@@ -353,9 +354,9 @@ public class AccountManager implements OnLoadListener, OnWipeListener {
}
}
String serverName = StringUtils.parseServer(user);
String userName = StringUtils.parseName(user);
String resource = StringUtils.parseResource(user);
String serverName = XmppStringUtils.parseDomain(user);
String userName = XmppStringUtils.parseLocalpart(user);
String resource = XmppStringUtils.parseResource(user);
String host = accountType.getHost();
int port = accountType.getPort();
boolean tlsRequired = accountType.isTLSRequired();
......@@ -948,10 +949,6 @@ public class AccountManager implements OnLoadListener, OnWipeListener {
/**
* Sets status for account.
*
* @param account
* @param statusMode
* @param statusText
*/
private void setStatus(AccountItem accountItem, StatusMode statusMode, String statusText) {
boolean changed = accountItem.isEnabled()
......@@ -1012,9 +1009,6 @@ public class AccountManager implements OnLoadListener, OnWipeListener {
/**
* Remove status from presets.
*
* @param statusMode
* @param statusText
*/
public void removeSavedStatus(final SavedStatus savedStatus) {
if (!savedStatuses.remove(savedStatus)) {
......
......@@ -24,7 +24,6 @@ import com.xabber.android.data.OnLoadListener;
import com.xabber.android.data.notification.BaseNotificationProvider;
import com.xabber.android.data.notification.NotificationManager;
import org.jivesoftware.smack.CertificateListener;
import org.jivesoftware.smack.util.StringUtils;
import java.io.File;
......@@ -416,43 +415,4 @@ public class CertificateManager implements OnLoadListener, OnClearListener {
});
}
public CertificateListener createCertificateListener(
ConnectionItem connectionItem) {
final String server = connectionItem.getConnectionSettings()
.getServerName();
return new CertificateListener() {
@Override
public boolean onValid(X509Certificate[] chain) {
return true;
}
@Override
public boolean onSelfSigned(X509Certificate certificate,
CertificateException exception) {
LogManager.exception(CertificateManager.this, exception);
return isTrustedCertificate(server, certificate,
CertificateInvalidReason.selfSigned);
}
@Override
public boolean onInvalidTarget(X509Certificate certificate,
CertificateException exception) {
LogManager.exception(CertificateManager.this, exception);
return isTrustedCertificate(server, certificate,
CertificateInvalidReason.invalidTarget);
}
@Override
public boolean onInvalidChain(X509Certificate[] chain,
CertificateException exception) {
LogManager.exception(CertificateManager.this, exception);
return isTrustedCertificate(server, chain[0],
CertificateInvalidReason.invalidChane);
}
};
}
}
......@@ -19,6 +19,7 @@ import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager;
import com.xabber.android.data.account.AccountProtocol;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.XMPPConnection;
/**
......@@ -204,8 +205,7 @@ public abstract class ConnectionItem {
Thread thread = new Thread("Disconnection thread for " + this) {
@Override
public void run() {
XMPPConnection xmppConnection = connectionThread
.getXMPPConnection();
AbstractXMPPConnection xmppConnection = connectionThread.getXMPPConnection();
if (xmppConnection != null)
try {
xmppConnection.disconnect();
......@@ -296,8 +296,9 @@ public abstract class ConnectionItem {
else
LogManager
.i(this, "onClose " + xmppConnection.hashCode() + " - "
+ xmppConnection.connectionCounterValue + ", "
+ xmppConnection.getConnectionCounter() + ", "
+ acceptable);
ConnectionManager.getInstance().onDisconnect(connectionThread);
if (acceptable)
connectionThread.shutdown();
......
......@@ -25,17 +25,17 @@ import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.entity.NestedMap;
import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.wlm.XMessengerOAuth2;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
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;
......@@ -67,15 +67,13 @@ public class ConnectionManager implements OnInitializedListener,
instance = new ConnectionManager();
Application.getInstance().addManager(instance);
SmackConfiguration.setPacketReplyTimeout(PACKET_REPLY_TIMEOUT);
SmackConfiguration.setDefaultPacketReplyTimeout(PACKET_REPLY_TIMEOUT);
ServiceDiscoveryManager.setIdentityType("handheld");
ServiceDiscoveryManager.setIdentityName(Application.getInstance()
.getString(R.string.client_name));
SASLAuthentication.registerSASLMechanism("X-MESSENGER-OAUTH2",
XMessengerOAuth2.class);
SASLAuthentication.supportSASLMechanism("X-MESSENGER-OAUTH2");
// 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)
......@@ -85,14 +83,12 @@ public class ConnectionManager implements OnInitializedListener,
else
TRUST_STORE_PATH = path;
Connection
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final Connection connection) {
ServiceDiscoveryManager.getInstanceFor(connection)
.addFeature("sslc2s");
}
});
XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final XMPPConnection connection) {
ServiceDiscoveryManager.getInstanceFor(connection).addFeature("sslc2s");
}
});
}
/**
......@@ -164,7 +160,7 @@ public class ConnectionManager implements OnInitializedListener,
* @param account
* @param packet
*/
public void sendPacket(String account, Packet packet)
public void sendPacket(String account, Stanza packet)
throws NetworkException {
ConnectionThread connectionThread = null;
for (ConnectionThread check : managedConnections)
......@@ -179,9 +175,11 @@ public class ConnectionManager implements OnInitializedListener,
.isConnected())
throw new NetworkException(R.string.NOT_CONNECTED);
XMPPConnection xmppConnection = connectionThread.getXMPPConnection();
try {
xmppConnection.sendPacket(packet);
} catch (IllegalStateException e) {
xmppConnection.sendStanza(packet);
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
throw new NetworkException(R.string.XMPP_EXCEPTION);
}
}
......@@ -221,11 +219,11 @@ public class ConnectionManager implements OnInitializedListener,
public void onAuthorized(ConnectionThread connectionThread) {
if (!managedConnections.contains(connectionThread))
return;
LogManager.i(this,
"onAuthorized: " + connectionThread.getConnectionItem());
for (OnAuthorizedListener listener : Application.getInstance()
.getManagers(OnAuthorizedListener.class))
LogManager.i(this, "onAuthorized: " + connectionThread.getConnectionItem());
for (OnAuthorizedListener listener : Application.getInstance().getManagers(OnAuthorizedListener.class)) {
listener.onAuthorized(connectionThread.getConnectionItem());
}
LogManager.i(this, "onAuthorized: finished");
}
public void onDisconnect(ConnectionThread connectionThread) {
......@@ -245,25 +243,23 @@ public class ConnectionManager implements OnInitializedListener,
listener.onDisconnect(connectionThread.getConnectionItem());
}
public void processPacket(ConnectionThread connectionThread, Packet packet) {
public void processPacket(ConnectionThread connectionThread, Stanza packet) {
if (!managedConnections.contains(connectionThread))
return;
ConnectionItem connectionItem = connectionThread.getConnectionItem();
if (packet instanceof IQ && connectionItem instanceof AccountItem) {
IQ iq = (IQ) packet;
String packetId = iq.getPacketID();
String packetId = iq.getStanzaId();
if (packetId != null
&& (iq.getType() == Type.RESULT || iq.getType() == Type.ERROR)) {
&& (iq.getType() == Type.result || iq.getType() == Type.error)) {
String account = ((AccountItem) connectionItem).getAccount();
RequestHolder requestHolder = requests
.remove(account, packetId);
if (requestHolder != null) {
if (iq.getType() == Type.RESULT)
requestHolder.getListener().onReceived(account,
packetId, iq);
if (iq.getType() == Type.result)
requestHolder.getListener().onReceived(account, packetId, iq);
else
requestHolder.getListener().onError(account, packetId,
iq);
requestHolder.getListener().onError(account, packetId, iq);
}
}
}
......@@ -277,17 +273,19 @@ public class ConnectionManager implements OnInitializedListener,
public void onTimer() {
if (NetworkManager.getInstance().getState() != NetworkState.suspended) {
Collection<ConnectionItem> reconnect = new ArrayList<ConnectionItem>();
for (ConnectionThread connectionThread : managedConnections)
if (connectionThread.getConnectionItem().getState()
.isConnected()
// XMPPConnection can`t be null here
&& !connectionThread.getXMPPConnection().isAlive()) {
LogManager.i(connectionThread.getConnectionItem(),
"forceReconnect on checkAlive");
reconnect.add(connectionThread.getConnectionItem());
}
for (ConnectionItem connection : reconnect)
for (ConnectionThread connectionThread : managedConnections) {
// if (connectionThread.getConnectionItem().getState().isConnected()
// // TODO find the way to check if connection is alive
// // XMPPConnection can`t be null here
//// && !connectionThread.getXMPPConnection().isAlive()
// ) {
// LogManager.i(connectionThread.getConnectionItem(), "forceReconnect on checkAlive");
// reconnect.add(connectionThread.getConnectionItem());
// }
}
for (ConnectionItem connection : reconnect) {
connection.forceReconnect();
}
}
long now = new Date().getTime();
Iterator<NestedMap.Entry<RequestHolder>> iterator = requests.iterator();
......
......@@ -14,10 +14,10 @@
*/
package com.xabber.android.data.connection;
import org.jivesoftware.smack.packet.Packet;
import com.xabber.android.data.BaseManagerInterface;
import org.jivesoftware.smack.packet.Stanza;
/**
* Listener for incoming packet.
*
......@@ -33,6 +33,6 @@ public interface OnPacketListener extends BaseManagerInterface {
* @param packet
* @return
*/
void onPacket(ConnectionItem connection, String bareAddress, Packet packet);
void onPacket(ConnectionItem connection, String bareAddress, Stanza packet);
}
......@@ -41,11 +41,11 @@ public enum TLSMode {
SecurityMode getSecurityMode() {
if (this == enabled)
return SecurityMode.enabled;
return SecurityMode.ifpossible;
else if (this == required)
return SecurityMode.required;
else if (this == legacy)
return SecurityMode.legacy;
return SecurityMode.disabled;
else
throw new IllegalStateException();
}
......
......@@ -60,7 +60,7 @@ import com.xabber.xmpp.rsm.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.Stanza;
import java.util.Collection;
import java.util.Date;
......@@ -294,8 +294,7 @@ public class MessageArchiveManager implements OnPacketListener,
}
@Override
public void onPacket(ConnectionItem connection, final String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem))
return;
String account = ((AccountItem) connection).getAccount();
......@@ -306,19 +305,19 @@ public class MessageArchiveManager implements OnPacketListener,
if (!(packet instanceof IQ))
return;
IQ iq = (IQ) packet;
if (iq.getType() == Type.SET && packet instanceof Pref
if (iq.getType() == Type.set && packet instanceof Pref
&& ((Pref) packet).isValid())
onPreferenceReceived(account, (Pref) packet);
else if (iq.getType() == Type.SET && packet instanceof ItemRemove
else if (iq.getType() == Type.set && packet instanceof ItemRemove
&& ((ItemRemove) packet).isValid())
onItemRemoveReceived(account, (ItemRemove) packet);
else if (iq.getType() == Type.SET && packet instanceof SessionRemove
else if (iq.getType() == Type.set && packet instanceof SessionRemove
&& ((SessionRemove) packet).isValid())
onSessionRemoveReceived(account, (SessionRemove) packet);
else if (iq.getType() == Type.RESULT && packet instanceof List
else if (iq.getType() == Type.result && packet instanceof List
&& ((List) packet).isValid())
onListReceived(account, (List) packet);
else if (iq.getType() == Type.RESULT && packet instanceof Chat
else if (iq.getType() == Type.result && packet instanceof Chat
&& ((Chat) packet).isValid())
onChatReceived(account, (Chat) packet);
}
......@@ -336,7 +335,7 @@ public class MessageArchiveManager implements OnPacketListener,
} else if (AccountManager.getInstance().getArchiveMode(account) == ArchiveMode.server) {
Auto auto = new Auto();
auto.setSave(true);
auto.setType(Type.SET);
auto.setType(Type.set);
try {
ConnectionManager.getInstance().sendPacket(account, auto);
} catch (NetworkException e) {
......@@ -393,7 +392,7 @@ public class MessageArchiveManager implements OnPacketListener,
defaultItem.setSave(SaveMode.body);
Pref pref = new Pref();
pref.setDefault(defaultItem);
pref.setType(Type.SET);
pref.setType(Type.set);
try {
ConnectionManager.getInstance().sendPacket(account, pref);
} catch (NetworkException e) {
......@@ -543,7 +542,7 @@ public class MessageArchiveManager implements OnPacketListener,
private void requestPreferences(String account) {
Pref pref = new Pref();
pref.setType(Type.GET);
pref.setType(Type.get);
try {
ConnectionManager.getInstance().sendRequest(account, pref,
new OnResponseListener() {
......@@ -622,7 +621,7 @@ public class MessageArchiveManager implements OnPacketListener,
private void requestModified(String account, String before) {
Modified packet = new Modified();
packet.setType(Type.GET);
packet.setType(Type.get);
Set rsm = new Set();
rsm.setMax(RSM_MAX);
rsm.setBefore(before);
......@@ -695,7 +694,7 @@ public class MessageArchiveManager implements OnPacketListener,
private String requestList(String account, String bareAddress, String before) {
List packet = new List();
packet.setType(Type.GET);
packet.setType(Type.get);
Set rsm = new Set();
rsm.setMax(RSM_MAX);
rsm.setBefore(before);
......@@ -713,7 +712,7 @@ public class MessageArchiveManager implements OnPacketListener,
private void requestChat(String account, CollectionHeader header,
String after, boolean modification) {
Retrieve packet = new Retrieve();
packet.setType(Type.GET);
packet.setType(Type.get);
Set rsm = new Set();
rsm.setMax(RSM_MAX);
rsm.setAfter(after);
......@@ -766,7 +765,7 @@ public class MessageArchiveManager implements OnPacketListener,
extension.setSave(saveMode);
Pref packet = new Pref();
packet.addItem(extension);
packet.setType(Type.SET);
packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet);
}
......@@ -776,7 +775,7 @@ public class MessageArchiveManager implements OnPacketListener,
extension.setJid(user);
ItemRemove packet = new ItemRemove();
packet.addItem(extension);
packet.setType(Type.SET);
packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet);
}
......@@ -862,7 +861,7 @@ public class MessageArchiveManager implements OnPacketListener,
extension.setSave(saveMode);
Pref packet = new Pref();
packet.addSession(extension);
packet.setType(Type.SET);
packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet);
sessionSaves.put(account, session, saveMode);
}
......@@ -873,7 +872,7 @@ public class MessageArchiveManager implements OnPacketListener,
extension.setThread(session);
SessionRemove packet = new SessionRemove();
packet.addSession(extension);
packet.setType(Type.SET);
packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet);
sessionSaves.remove(account, session);
}
......
......@@ -42,15 +42,13 @@ import com.xabber.android.data.roster.ResourceItem;
import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.attention.Attention;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import java.util.Iterator;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
/**
* XEP-0224: Attention.
......@@ -68,18 +66,15 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
Application.getInstance().addManager(instance);
enabledLock = new Object();
Connection
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final Connection connection) {
synchronized (enabledLock) {
if (SettingsManager.chatsAttention())
ServiceDiscoveryManager.getInstanceFor(
connection).addFeature(
Attention.NAMESPACE);
}
}
});
XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final XMPPConnection connection) {
synchronized (enabledLock) {
if (SettingsManager.chatsAttention())
ServiceDiscoveryManager.getInstanceFor(connection).addFeature(Attention.NAMESPACE);
}
}
});
}
private final EntityNotificationProvider<AttentionRequest> attentionRequestProvider = new EntityNotificationProvider<AttentionRequest>(
......@@ -121,10 +116,11 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
if (manager == null)
continue;
boolean contains = false;
for (Iterator<String> iterator = manager.getFeatures(); iterator
.hasNext(); )
if (Attention.NAMESPACE.equals(iterator.next()))
for (String feature : manager.getFeatures()) {
if (Attention.NAMESPACE.equals(feature)) {
contains = true;
}
}
if (SettingsManager.chatsAttention() == contains)
continue;
if (SettingsManager.chatsAttention())
......@@ -152,8 +148,7 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
}
@Override
public void onPacket(ConnectionItem connection, String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem))
return;
if (!(packet instanceof Message))
......@@ -163,7 +158,7 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
final String account = ((AccountItem) connection).getAccount();
if (bareAddress == null)
return;
for (PacketExtension packetExtension : packet.getExtensions())
for (ExtensionElement packetExtension : packet.getExtensions()) {
if (packetExtension instanceof Attention) {
MessageManager.getInstance().openChat(account, bareAddress);
MessageManager.getInstance()
......@@ -172,6 +167,7 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
attentionRequestProvider.add(new AttentionRequest(account,
bareAddress), true);
}
}
}
public void sendAttention(String account, String user)
......
......@@ -37,9 +37,9 @@ import com.xabber.android.data.extension.vcard.VCardManager;
import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.avatar.VCardUpdate;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Stanza;
import java.util.HashMap;
import java.util.HashSet;
......@@ -405,8 +405,7 @@ public class AvatarManager implements OnLoadListener, OnLowMemoryListener, OnPac
}
@Override
public void onPacket(ConnectionItem connection, String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
if (!(packet instanceof Presence) || bareAddress == null) {
return;
}
......@@ -418,7 +417,7 @@ public class AvatarManager implements OnLoadListener, OnLowMemoryListener, OnPac
if (presence.getType() == Presence.Type.error) {
return;
}
for (PacketExtension packetExtension : presence.getExtensions()) {
for (ExtensionElement packetExtension : presence.getExtensions()) {
if (packetExtension instanceof VCardUpdate) {
VCardUpdate vCardUpdate = (VCardUpdate) packetExtension;
if (vCardUpdate.isValid() && vCardUpdate.isPhotoReady()) {
......
......@@ -17,10 +17,11 @@ package com.xabber.android.data.extension.capability;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.jivesoftware.smack.util.Base64;
import com.xabber.android.data.entity.BaseEntity;
import org.jivesoftware.smack.util.stringencoder.Base64;
class Capability extends BaseEntity {
private static final String SHA1_METHOD = "sha-1";
......@@ -80,7 +81,7 @@ class Capability extends BaseEntity {
try {
MessageDigest md = MessageDigest.getInstance(hash.toUpperCase());
byte[] digest = md.digest(value.getBytes());
return Base64.encodeBytes(digest);
return Base64.encodeToString(digest);
} catch (NoSuchAlgorithmException nsae) {
return null;
}
......
......@@ -14,17 +14,6 @@
*/
package com.xabber.android.data.extension.capability;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type;
import org.jivesoftware.smackx.packet.DiscoverInfo;
import org.jivesoftware.smackx.packet.DiscoverInfo.Feature;
import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountItem;
......@@ -35,6 +24,15 @@ import com.xabber.android.data.connection.OnAuthorizedListener;
import com.xabber.android.data.connection.OnResponseListener;
import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type;
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class ServerInfoManager implements OnAuthorizedListener,
OnResponseListener {
......@@ -66,7 +64,7 @@ public class ServerInfoManager implements OnAuthorizedListener,
if (protocols.get(account) == null) {
DiscoverInfo packet = new DiscoverInfo();
packet.setTo(Jid.getServer(account));
packet.setType(Type.GET);
packet.setType(Type.get);
try {
ConnectionManager.getInstance().sendRequest(account,
packet, this);
......@@ -92,9 +90,9 @@ public class ServerInfoManager implements OnAuthorizedListener,
}
ArrayList<String> features = new ArrayList<String>();
DiscoverInfo discoverInfo = (DiscoverInfo) iq;
Iterator<Feature> iterator = discoverInfo.getFeatures();
while (iterator.hasNext())
features.add(iterator.next().getVar());
for (DiscoverInfo.Feature feature : discoverInfo.getFeatures()) {
features.add(feature.getVar());
}
protocols.put(account, features);
onAvailable(AccountManager.getInstance().getAccount(account));
}
......@@ -116,9 +114,7 @@ public class ServerInfoManager implements OnAuthorizedListener,
public boolean isProtocolSupported(String account, String feature) {
Collection<String> collection = protocols.get(account);
if (collection == null)
return false;
return collection.contains(feature);
return collection != null && collection.contains(feature);
}
}
......@@ -38,16 +38,17 @@ import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.receiver.ComposingPausedReceiver;
import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Presence.Type;
import org.jivesoftware.smackx.ChatState;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import org.jivesoftware.smackx.packet.ChatStateExtension;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.chatstates.ChatState;
import org.jivesoftware.smackx.chatstates.packet.ChatStateExtension;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import java.util.Calendar;
import java.util.Map;
......@@ -70,14 +71,11 @@ public class ChatStateManager implements OnDisconnectListener,
instance = new ChatStateManager();
Application.getInstance().addManager(instance);
Connection
.addConnectionCreationListener(new ConnectionCreationListener() {
XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final Connection connection) {
ServiceDiscoveryManager
.getInstanceFor(connection)
.addFeature(
"http://jabber.org/protocol/chatstates");
public void connectionCreated(final XMPPConnection connection) {
ServiceDiscoveryManager.getInstanceFor(connection)
.addFeature("http://jabber.org/protocol/chatstates");
}
});
}
......@@ -238,7 +236,7 @@ public class ChatStateManager implements OnDisconnectListener,
/**
* Must be call each time user change text message.
*
* @param accunt
* @param account
* @param user
*/
public void onComposing(String account, String user, CharSequence text) {
......@@ -295,8 +293,7 @@ public class ChatStateManager implements OnDisconnectListener,
}
@Override
public void onPacket(ConnectionItem connection, final String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem))
return;
final String resource = Jid.getResource(packet.getFrom());
......@@ -312,11 +309,10 @@ public class ChatStateManager implements OnDisconnectListener,
supports.remove(account, bareAddress, resource);
} else if (packet instanceof Message) {
boolean support = false;
for (PacketExtension extension : packet.getExtensions())
for (ExtensionElement extension : packet.getExtensions())
if (extension instanceof ChatStateExtension) {
removeCallback(account, bareAddress, resource);
ChatState chatState = ((ChatStateExtension) extension)
.getState();
ChatState chatState = ((ChatStateExtension) extension).getChatState();
chatStates.put(account, bareAddress, resource, chatState);
if (chatState != ChatState.active) {
Runnable runnable = new Runnable() {
......
......@@ -35,12 +35,15 @@ import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.data.roster.RosterManager;
import com.xabber.xmpp.muc.MUC;
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.packet.MUCUser;
import org.jivesoftware.smackx.muc.MultiUserChatManager;
import org.jivesoftware.smackx.muc.packet.MUCUser;
import java.util.ArrayList;
import java.util.Collection;
......@@ -293,7 +296,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
}
final MultiUserChat multiUserChat;
try {
multiUserChat = new MultiUserChat(xmppConnection, room);
multiUserChat = MultiUserChatManager.getInstanceFor(xmppConnection).getMultiUserChat(room);
} catch (IllegalStateException e) {
Application.getInstance().onError(R.string.NOT_CONNECTED);
return;
......@@ -323,7 +326,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
}
});
return;
} catch (final XMPPException e) {
} catch (final XMPPException.XMPPErrorException e) {
Application.getInstance().runOnUiThread(new Runnable() {
@Override
public void run() {
......@@ -332,13 +335,14 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
}
roomChat.setState(RoomState.error);
addAuthorizationError(account, room);
if (e.getXMPPError() != null && e.getXMPPError().getCode() == 409) {
Application.getInstance().onError(R.string.NICK_ALREADY_USED);
} else if (e.getXMPPError() != null && e.getXMPPError().getCode() == 401) {
Application.getInstance().onError(R.string.AUTHENTICATION_FAILED);
} else {
Application.getInstance().onError(R.string.NOT_CONNECTED);
}
// if (e.getXMPPError() != null && e.getXMPPError().getCode() == 409) {
// Application.getInstance().onError(R.string.NICK_ALREADY_USED);
// } else if (e.getXMPPError() != null && e.getXMPPError().getCode() == 401) {
// Application.getInstance().onError(R.string.AUTHENTICATION_FAILED);
// } else {
// Application.getInstance().onError(R.string.NOT_CONNECTED);
// }
RosterManager.getInstance().onContactChanged(account, room);
}
});
......@@ -381,8 +385,8 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
public void run() {
try {
multiUserChat.leave();
} catch (IllegalStateException e) {
// Do nothing
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
}
};
......@@ -393,7 +397,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
}
@Override
public void onPacket(ConnectionItem connection, String bareAddress, Packet packet) {
public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem)) {
return;
}
......
......@@ -31,11 +31,12 @@ import com.xabber.xmpp.muc.Role;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.packet.MUCUser;
import org.jivesoftware.smackx.muc.packet.MUCItem;
import org.jivesoftware.smackx.muc.packet.MUCUser;
import org.jxmpp.util.XmppStringUtils;
import java.util.Collection;
import java.util.Collections;
......@@ -179,12 +180,12 @@ public class RoomChat extends AbstractChat {
}
@Override
protected boolean onPacket(String bareAddress, Packet packet) {
protected boolean onPacket(String bareAddress, Stanza packet) {
if (!super.onPacket(bareAddress, packet)) {
return false;
}
final String from = packet.getFrom();
final String resource = StringUtils.parseResource(from);
final String resource = XmppStringUtils.parseResource(from);
if (packet instanceof Message) {
final Message message = (Message) packet;
if (message.getType() == Message.Type.error) {
......@@ -268,22 +269,22 @@ public class RoomChat extends AbstractChat {
occupants.remove(stringPrep);
MUCUser mucUser = MUC.getMUCUserExtension(presence);
if (mucUser != null && mucUser.getStatus() != null) {
String code = mucUser.getStatus().getCode();
if ("307".equals(code)) {
onKick(resource, mucUser.getItem().getActor());
} else if ("301".equals(code)) {
onBan(resource, mucUser.getItem().getActor());
} else if ("303".equals(code)) {
String newNick = mucUser.getItem().getNick();
if (newNick == null) {
return true;
}
onRename(resource, newNick);
Occupant occupant = createOccupant(newNick, presence);
occupants.put(Jid.getStringPrep(newNick), occupant);
} else if ("321".equals(code)) {
onRevoke(resource, mucUser.getItem().getActor());
}
// String code = mucUser.getStatus().getCode();
// if ("307".equals(code)) {
// onKick(resource, mucUser.getItem().getActor());
// } else if ("301".equals(code)) {
// onBan(resource, mucUser.getItem().getActor());
// } else if ("303".equals(code)) {
// String newNick = mucUser.getItem().getNick();
// if (newNick == null) {
// return true;
// }
// onRename(resource, newNick);
// Occupant occupant = createOccupant(newNick, presence);
// occupants.put(Jid.getStringPrep(newNick), occupant);
// } else if ("321".equals(code)) {
// onRevoke(resource, mucUser.getItem().getActor());
// }
} else {
onLeave(resource);
}
......@@ -356,15 +357,15 @@ public class RoomChat extends AbstractChat {
String statusText = null;
MUCUser mucUser = MUC.getMUCUserExtension(presence);
if (mucUser != null) {
MUCUser.Item item = mucUser.getItem();
MUCItem item = mucUser.getItem();
if (item != null) {
jid = item.getJid();
try {
affiliation = Affiliation.fromString(item.getAffiliation());
affiliation = Affiliation.fromString(item.getAffiliation().toString());
} catch (NoSuchElementException e) {
}
try {
role = Role.fromString(item.getRole());
role = Role.fromString(item.getRole().toString());
} catch (NoSuchElementException e) {
}
statusMode = StatusMode.createStatusMode(presence);
......
......@@ -14,13 +14,6 @@
*/
package com.xabber.android.data.extension.ping;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import org.jivesoftware.smackx.packet.Ping;
import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException;
......@@ -29,6 +22,14 @@ import com.xabber.android.data.connection.ConnectionItem;
import com.xabber.android.data.connection.ConnectionManager;
import com.xabber.android.data.connection.OnPacketListener;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.ping.packet.Ping;
/**
* Reply on incoming ping requests.
*
......@@ -41,15 +42,13 @@ public class PingManager implements OnPacketListener {
static {
instance = new PingManager();
Application.getInstance().addManager(instance);
Connection
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final Connection connection) {
ServiceDiscoveryManager.getInstanceFor(connection)
.addFeature("urn:xmpp:ping");
}
});
XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final XMPPConnection connection) {
ServiceDiscoveryManager.getInstanceFor(connection)
.addFeature("urn:xmpp:ping");
}
});
}
public static PingManager getInstance() {
......@@ -60,15 +59,14 @@ public class PingManager implements OnPacketListener {
}
@Override
public void onPacket(ConnectionItem connection, final String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem))
return;
final String account = ((AccountItem) connection).getAccount();
if (!(packet instanceof Ping))
return;
final Ping ping = (Ping) packet;
if (ping.getType() != IQ.Type.GET)
if (ping.getType() != IQ.Type.get)
return;
try {
ConnectionManager.getInstance().sendPacket(account,
......
......@@ -14,13 +14,6 @@
*/
package com.xabber.android.data.extension.ssn;
import java.util.Collection;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.packet.DataForm;
import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountItem;
......@@ -40,6 +33,13 @@ import com.xabber.xmpp.ssn.Feature;
import com.xabber.xmpp.ssn.LoggingValue;
import com.xabber.xmpp.ssn.SecurityValue;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.xdata.packet.DataForm;
import java.util.Collection;
/**
* Stanza Session Negotiation.
* <p/>
......@@ -82,8 +82,7 @@ public class SSNManager implements OnPacketListener, OnAccountRemovedListener {
}
@Override
public void onPacket(ConnectionItem connection, final String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
String from = packet.getFrom();
if (from == null)
return;
......@@ -95,7 +94,7 @@ public class SSNManager implements OnPacketListener, OnAccountRemovedListener {
String session = message.getThread();
if (session == null)
return;
for (PacketExtension packetExtension : packet.getExtensions())
for (ExtensionElement packetExtension : packet.getExtensions())
if (packetExtension instanceof Feature) {
Feature feature = (Feature) packetExtension;
if (!feature.isValid())
......
......@@ -14,18 +14,6 @@
*/
package com.xabber.android.data.extension.time;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountItem;
......@@ -39,6 +27,19 @@ import com.xabber.android.data.extension.capability.ServerInfoManager;
import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.time.Time;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Manage server time and response with local time.
*
......@@ -65,14 +66,12 @@ public class TimeManager implements OnServerInfoReceivedListener,
instance = new TimeManager();
Application.getInstance().addManager(instance);
Connection
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final Connection connection) {
ServiceDiscoveryManager.getInstanceFor(connection)
.addFeature(FEATURE);
}
});
XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final XMPPConnection connection) {
ServiceDiscoveryManager.getInstanceFor(connection).addFeature(FEATURE);
}
});
}
public static TimeManager getInstance() {
......@@ -98,7 +97,7 @@ public class TimeManager implements OnServerInfoReceivedListener,
sents.put(account, new Date());
Time packet = new Time();
packet.setTo(Jid.getServer(account));
packet.setType(Type.GET);
packet.setType(Type.get);
try {
ConnectionManager.getInstance().sendRequest(account, packet,
this);
......@@ -110,17 +109,16 @@ public class TimeManager implements OnServerInfoReceivedListener,
}
@Override
public void onPacket(ConnectionItem connection, final String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem))
return;
String account = ((AccountItem) connection).getAccount();
if (!(packet instanceof Time))
return;
Time time = (Time) packet;
if (time.getType() == Type.GET) {
if (time.getType() == Type.get) {
Time result = new Time();
result.setType(Type.RESULT);
result.setType(Type.result);
result.setPacketID(time.getPacketID());
result.setFrom(time.getTo());
result.setTo(time.getFrom());
......
......@@ -26,6 +26,7 @@ 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;
import android.database.Cursor;
......@@ -187,7 +188,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
}
VCard packet = new VCard();
packet.setTo(bareAddress);
packet.setType(Type.GET);
packet.setType(Type.get);
VCardRequest request = new VCardRequest(account, bareAddress,
packet.getPacketID());
requests.add(request);
......@@ -243,8 +244,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
}
@Override
public void onPacket(ConnectionItem connection, final String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem))
return;
String account = ((AccountItem) connection).getAccount();
......@@ -258,7 +258,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
request(account, bareAddress, null);
} else if (packet instanceof IQ) {
IQ iq = (IQ) packet;
if (iq.getType() != Type.ERROR && !(packet instanceof VCard))
if (iq.getType() != Type.error && !(packet instanceof VCard))
return;
String packetId = iq.getPacketID();
VCardRequest request = null;
......@@ -274,7 +274,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
if (request == null || !request.getUser().equals(bareAddress))
return;
final StructuredName name;
if (iq.getType() == Type.ERROR) {
if (iq.getType() == Type.error) {
onVCardFailed(account, bareAddress);
invalidHashes.addAll(request.getHashes());
if (names.containsKey(bareAddress))
......
......@@ -35,8 +35,9 @@ 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.packet.DelayInformation;
import org.jivesoftware.smackx.delay.packet.DelayInformation;
import java.util.ArrayList;
import java.util.Collection;
......@@ -659,7 +660,7 @@ public abstract class AbstractChat extends BaseEntity {
* @param packet
* @return Whether packet was directed to this chat.
*/
protected boolean onPacket(String bareAddress, Packet packet) {
protected boolean onPacket(String bareAddress, Stanza packet) {
return accept(bareAddress, packet.getFrom());
}
......
......@@ -45,10 +45,12 @@ import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.carbon.CarbonManager.Direction;
import com.xabber.xmpp.delay.Delay;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.packet.MUCUser;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.muc.packet.MUCUser;
import java.io.BufferedWriter;
import java.io.File;
......@@ -460,7 +462,7 @@ public class MessageManager implements OnLoadListener, OnPacketListener, OnDisco
}
@Override
public void onPacket(ConnectionItem connection, String bareAddress, Packet packet) {
public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem)) {
return;
}
......@@ -492,7 +494,7 @@ public class MessageManager implements OnLoadListener, OnPacketListener, OnDisco
if (body == null) {
return;
}
for (PacketExtension packetExtension : message.getExtensions()) {
for (ExtensionElement packetExtension : message.getExtensions()) {
if (packetExtension instanceof MUCUser) {
return;
}
......
......@@ -14,13 +14,6 @@
*/
package com.xabber.android.data.message;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener;
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.LogManager;
import com.xabber.android.data.NetworkException;
......@@ -34,6 +27,14 @@ import com.xabber.android.data.extension.muc.RoomChat;
import com.xabber.xmpp.receipt.Received;
import com.xabber.xmpp.receipt.Request;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
/**
* Manage message receive receipts as well as error replies.
*
......@@ -52,14 +53,13 @@ public class ReceiptManager implements OnPacketListener, OnDisconnectListener {
instance = new ReceiptManager();
Application.getInstance().addManager(instance);
Connection
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final Connection connection) {
ServiceDiscoveryManager.getInstanceFor(connection)
.addFeature("urn:xmpp:receipts");
}
});
XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final XMPPConnection connection) {
ServiceDiscoveryManager.getInstanceFor(connection)
.addFeature("urn:xmpp:receipts");
}
});
}
public static ReceiptManager getInstance() {
......@@ -86,8 +86,7 @@ public class ReceiptManager implements OnPacketListener, OnDisconnectListener {
}
@Override
public void onPacket(ConnectionItem connection, String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem))
return;
String account = ((AccountItem) connection).getAccount();
......@@ -115,7 +114,7 @@ public class ReceiptManager implements OnPacketListener, OnDisconnectListener {
messageItem.getChat().getUser(), false);
}
} else {
for (PacketExtension packetExtension : message.getExtensions())
for (ExtensionElement packetExtension : message.getExtensions())
if (packetExtension instanceof Received) {
Received received = (Received) packetExtension;
String id = received.getId();
......
......@@ -31,9 +31,9 @@ import net.java.otr4j.OtrException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.packet.MUCUser;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.muc.packet.MUCUser;
/**
* Represents normal chat.
......@@ -114,7 +114,7 @@ public class RegularChat extends AbstractChat {
}
@Override
protected boolean onPacket(String bareAddress, Packet packet) {
protected boolean onPacket(String bareAddress, Stanza packet) {
if (!super.onPacket(bareAddress, packet))
return false;
final String resource = Jid.getResource(packet.getFrom());
......
......@@ -33,12 +33,11 @@ import com.xabber.android.data.notification.NotificationManager;
import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Presence.Type;
import org.jivesoftware.smack.packet.RosterPacket;
import org.jivesoftware.smack.packet.RosterPacket.ItemType;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.roster.packet.RosterPacket;
import org.jxmpp.util.XmppStringUtils;
import java.util.ArrayList;
import java.util.Collection;
......@@ -218,8 +217,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
}
@Override
public void onPacket(ConnectionItem connection, String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem))
return;
String account = ((AccountItem) connection).getAccount();
......@@ -242,7 +240,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
}
return;
}
String verbose = StringUtils.parseResource(presence.getFrom());
String verbose = XmppStringUtils.parseResource(presence.getFrom());
String resource = Jid.getResource(presence.getFrom());
ResourceContainer resourceContainer = presenceContainers.get(
account, bareAddress);
......@@ -316,11 +314,11 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
RosterManager.getInstance().onContactChanged(account, bareAddress);
} else if (packet instanceof RosterPacket
&& ((RosterPacket) packet).getType() != IQ.Type.ERROR) {
&& ((RosterPacket) packet).getType() != IQ.Type.error) {
RosterPacket rosterPacket = (RosterPacket) packet;
for (RosterPacket.Item item : rosterPacket.getRosterItems()) {
if (item.getItemType() == ItemType.both
|| item.getItemType() == ItemType.from) {
if (item.getItemType() == RosterPacket.ItemType.both
|| item.getItemType() == RosterPacket.ItemType.from) {
String user = Jid.getBareAddress(item.getUser());
if (user == null)
continue;
......
......@@ -38,9 +38,8 @@ import com.xabber.android.data.message.MessageManager;
import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.RosterPacket;
import org.jivesoftware.smack.packet.RosterPacket.ItemType;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.roster.packet.RosterPacket;
import java.util.ArrayList;
import java.util.Collection;
......@@ -135,7 +134,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
/**
* Adds new group to be managed.
*
* @param contact
* @param group
*/
void addRosterGroup(RosterGroup group) {
rosterGroups.put(group.getAccount(), group.getName(), group);
......@@ -297,7 +296,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
public void createContact(String account, String bareAddress, String name,
Collection<String> groups) throws NetworkException {
RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET);
packet.setType(IQ.Type.set);
RosterPacket.Item item = new RosterPacket.Item(bareAddress, name);
for (String group : groups)
if (group.trim().length() > 0)
......@@ -316,7 +315,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
public void removeContact(String account, String bareAddress)
throws NetworkException {
RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET);
packet.setType(IQ.Type.set);
RosterPacket.Item item = new RosterPacket.Item(bareAddress, "");
item.setItemType(RosterPacket.ItemType.remove);
packet.addRosterItem(item);
......@@ -352,7 +351,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
private void updateRosterContact(String account, String bareAddress, String name, Collection<String> groups) throws NetworkException {
RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET);
packet.setType(IQ.Type.set);
RosterPacket.Item item = new RosterPacket.Item(bareAddress, name);
for (String group : groups) {
item.addGroupName(group);
......@@ -371,7 +370,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
public void removeGroup(String account, String group)
throws NetworkException {
RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET);
packet.setType(IQ.Type.set);
for (RosterContact contact : rosterContacts.getNested(account).values()) {
HashSet<String> groups = new HashSet<String>(
contact.getGroupNames());
......@@ -424,7 +423,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
if (newGroup.equals(oldGroup))
return;
RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET);
packet.setType(IQ.Type.set);
for (RosterContact contact : rosterContacts.getNested(account).values()) {
HashSet<String> groups = new HashSet<String>(
contact.getGroupNames());
......@@ -531,14 +530,13 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
}
@Override
public void onPacket(ConnectionItem connection, String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem))
return;
String account = ((AccountItem) connection).getAccount();
if (!(packet instanceof RosterPacket))
return;
if (((RosterPacket) packet).getType() != IQ.Type.ERROR) {
if (((RosterPacket) packet).getType() != IQ.Type.error) {
boolean rosterWasReceived = requestedRosters.remove(account);
ArrayList<RosterContact> remove = new ArrayList<RosterContact>();
if (rosterWasReceived)
......@@ -592,8 +590,8 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
for (RosterGroupReference rosterGroup : removeGroupReferences)
removeGroupReference(contact, rosterGroup,
removedGroups, removedGroupReference);
contact.setSubscribed(item.getItemType() == ItemType.both
|| item.getItemType() == ItemType.to);
contact.setSubscribed(item.getItemType() == RosterPacket.ItemType.both
|| item.getItemType() == RosterPacket.ItemType.to);
}
}
for (RosterContact contact : remove) {
......@@ -637,8 +635,6 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
/**
* Notifies registered {@link OnContactChangedListener}.
*
* @param entities
*/
public void onContactChanged(String account, String bareAddress) {
final ArrayList<BaseEntity> entities = new ArrayList<BaseEntity>();
......
......@@ -24,7 +24,7 @@ import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.ui.adapter.AccountChooseAdapter;
import org.jivesoftware.smack.util.StringUtils;
import org.jxmpp.util.XmppStringUtils;
public class ConferenceAddFragment extends Fragment implements AdapterView.OnItemSelectedListener {
......@@ -88,8 +88,8 @@ public class ConferenceAddFragment extends Fragment implements AdapterView.OnIte
accountView.setOnItemSelectedListener(this);
if (room != null) {
serverView.setText(StringUtils.parseServer(room));
roomView.setText(StringUtils.parseName(room));
serverView.setText(XmppStringUtils.parseDomain(room));
roomView.setText(XmppStringUtils.parseLocalpart(room));
}
if (account != null && room != null) {
......@@ -165,7 +165,7 @@ public class ConferenceAddFragment extends Fragment implements AdapterView.OnIte
return "";
}
String nickname = AccountManager.getInstance().getNickName(account);
String name = StringUtils.parseName(nickname);
String name = XmppStringUtils.parseLocalpart(nickname);
if ("".equals(name)) {
return nickname;
} else {
......
......@@ -144,7 +144,7 @@ public class ContactVcardViewerFragment extends Fragment implements OnVCardListe
super.onSaveInstanceState(outState);
outState.putBoolean(SAVED_VCARD_ERROR, vCardError);
if (vCard != null) {
outState.putString(SAVED_VCARD, vCard.getChildElementXML());
outState.putString(SAVED_VCARD, vCard.getChildElementXML().toString());
}
}
......
......@@ -23,7 +23,8 @@ import com.xabber.android.R;
import com.xabber.android.data.extension.cs.ChatStateManager;
import com.xabber.android.data.roster.AbstractContact;
import org.jivesoftware.smackx.ChatState;
import org.jivesoftware.smackx.chatstates.ChatState;
public class ContactTitleInflater {
......
......@@ -14,7 +14,7 @@
*/
package com.xabber.xmpp;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.xmlpull.v1.XmlPullParser;
/**
......@@ -24,9 +24,11 @@ import org.xmlpull.v1.XmlPullParser;
* @author alexander.ivanov
*/
public abstract class AbstractExtensionProvider<Extension extends PacketExtension>
extends AbstractProvider<Extension> implements PacketExtensionProvider {
extends AbstractProvider<Extension>
// TODO
// implements PacketExtensionProvider
{
@Override
public Extension parseExtension(XmlPullParser parser) throws Exception {
return provideInstance(parser);
}
......
......@@ -14,7 +14,6 @@
*/
package com.xabber.xmpp;
import org.jivesoftware.smack.provider.IQProvider;
import org.xmlpull.v1.XmlPullParser;
/**
......@@ -23,10 +22,12 @@ import org.xmlpull.v1.XmlPullParser;
* @param <T>
* @author alexander.ivanov
*/
public abstract class AbstractIQProvider<T extends IQ> extends
AbstractProvider<T> implements IQProvider {
@Override
// TODO
public abstract class AbstractIQProvider<T extends IQ> extends AbstractProvider<T>
//implements IQProvider
{
public IQ parseIQ(XmlPullParser parser) throws Exception {
return provideInstance(parser);
}
......
......@@ -14,6 +14,8 @@
*/
package com.xabber.xmpp;
import com.xabber.android.data.LogManager;
import java.io.IOException;
import org.xmlpull.v1.XmlSerializer;
......@@ -25,17 +27,33 @@ import org.xmlpull.v1.XmlSerializer;
*
* @author alexander.ivanov
*/
public abstract class IQ extends org.jivesoftware.smack.packet.IQ implements
Container {
public abstract class IQ extends org.jivesoftware.smack.packet.IQ implements Container {
public IQ(org.jivesoftware.smack.packet.IQ iq) {
super(iq);
}
protected IQ(String childElementName) {
super(childElementName);
}
protected IQ(String childElementName, String childElementNamespace) {
super(childElementName, childElementNamespace);
}
@Override
public void serialize(XmlSerializer serializer) throws IOException {
// LogManager.i(this, "serialize ");
SerializerUtils.serialize(serializer, this);
}
@Override
public String getChildElementXML() {
return SerializerUtils.toXml(this);
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
// TODO ?
// LogManager.i(this, "getIQChildElementBuilder");
xml.append(SerializerUtils.toXml(this));
return xml;
}
}
......@@ -26,7 +26,7 @@ import org.xmlpull.v1.XmlSerializer;
* @author alexander.ivanov
*/
public abstract class PacketExtension implements Container,
org.jivesoftware.smack.packet.PacketExtension {
org.jivesoftware.smack.packet.ExtensionElement {
@Override
public void serialize(XmlSerializer serializer) throws IOException {
......
......@@ -25,6 +25,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jivesoftware.smack.util.StringUtils;
import org.jxmpp.util.XmppDateTime;
import org.xmlpull.v1.XmlPullParser;
import com.xabber.android.data.LogManager;
......@@ -69,7 +70,7 @@ public class ProviderUtils {
if (matcher.matches())
dateString = matcher.group(1) + matcher.group(2);
try {
return StringUtils.parseXEP0082Date(dateString);
return XmppDateTime.parseXEP0082Date(dateString);
} catch (ParseException e) {
synchronized (XEP_0082_UTC_FORMAT_WITHOUT_MILLIS) {
try {
......
......@@ -14,16 +14,16 @@
*/
package com.xabber.xmpp;
import android.util.Xml;
import org.jxmpp.util.XmppDateTime;
import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Date;
import org.jivesoftware.smack.util.StringUtils;
import org.xmlpull.v1.XmlSerializer;
import android.util.Xml;
/**
* Set of functions commonly used by packet writers.
*
......@@ -151,7 +151,7 @@ public final class SerializerUtils {
public static String serializeDateTime(Date value) {
if (value == null)
return null;
return StringUtils.formatXEP0082Date(value);
return XmppDateTime.formatXEP0082Date(value);
}
/**
......@@ -165,7 +165,7 @@ public final class SerializerUtils {
}
/**
* @param date
* @param value
* @return <code>null</code> if value was <code>null</code>.
*/
public static String serializeBoolean(Boolean value) {
......
......@@ -17,6 +17,7 @@ package com.xabber.xmpp.address;
import java.util.Locale;
import org.jivesoftware.smack.util.StringUtils;
import org.jxmpp.util.XmppStringUtils;
/**
* Provides methods to process Jabber Identifier.
......@@ -37,8 +38,7 @@ public class Jid {
* argument.
*/
public static String getResource(String user) {
return user == null ? null : StringUtils.parseResource(user
.toLowerCase(Locale.US));
return user == null ? null : XmppStringUtils.parseResource(user.toLowerCase(Locale.US));
}
/**
......@@ -47,8 +47,7 @@ public class Jid {
* <code>null</code> argument.
*/
public static String getServer(String user) {
return user == null ? null : StringUtils.parseServer(user
.toLowerCase(Locale.US));
return user == null ? null : XmppStringUtils.parseDomain(user.toLowerCase(Locale.US));
}
/**
......@@ -57,8 +56,7 @@ public class Jid {
* <code>null</code> argument.
*/
public static String getName(String user) {
return user == null ? null : StringUtils.parseName(user
.toLowerCase(Locale.US));
return user == null ? null : XmppStringUtils.parseLocalpart(user.toLowerCase(Locale.US));
}
/**
......@@ -67,8 +65,7 @@ public class Jid {
* <code>null</code> argument.
*/
public static String getBareAddress(String user) {
return user == null ? null : StringUtils.parseBareAddress(user
.toLowerCase(Locale.US));
return user == null ? null : XmppStringUtils.parseBareJid(user.toLowerCase(Locale.US));
}
/**
......
......@@ -14,16 +14,16 @@
*/
package com.xabber.xmpp.archive;
import java.io.IOException;
import java.util.Date;
import com.xabber.xmpp.IQ;
import com.xabber.xmpp.SerializerUtils;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.xmlpull.v1.XmlSerializer;
import com.xabber.xmpp.IQ;
import com.xabber.xmpp.SerializerUtils;
import java.io.IOException;
import java.util.Date;
public abstract class AbstractChat extends IQ implements PacketExtension {
public abstract class AbstractChat extends IQ implements ExtensionElement {
static final String NAMESPACE = "urn:xmpp:archive";
......@@ -34,6 +34,10 @@ public abstract class AbstractChat extends IQ implements PacketExtension {
private String startString;
private String with;
public AbstractChat(String childElementName) {
super(childElementName, NAMESPACE);
}
@Override
public void serializeContent(XmlSerializer serializer) throws IOException {
if (startString != null)
......
......@@ -38,6 +38,7 @@ public class Auto extends IQ {
private boolean save;
public Auto() {
super(ELEMENT_NAME, NAMESPACE);
}
@Override
......
......@@ -50,6 +50,7 @@ public class Chat extends AbstractChat implements CollectionHeader {
// TODO: notes
public Chat() {
super(ELEMENT_NAME);
messages = new ArrayList<AbstractMessage>();
}
......
......@@ -14,19 +14,20 @@
*/
package com.xabber.xmpp.archive;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
import com.xabber.xmpp.AbstractIQProvider;
import com.xabber.xmpp.ProviderUtils;
import com.xabber.xmpp.rsm.Set;
public class ChatProvider extends AbstractIQProvider<Chat> implements
PacketExtensionProvider {
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
@Override
public class ChatProvider extends AbstractIQProvider<Chat>
//TODO
// implements DataPacketProvider.PacketExtensionProvider
{
// @Override
public Chat parseExtension(XmlPullParser parser) throws Exception {
return provideInstance(parser);
}
......@@ -78,9 +79,8 @@ public class ChatProvider extends AbstractIQProvider<Chat> implements
instance.setPrevious(value);
} else if (Set.ELEMENT_NAME.equals(name)
&& Set.NAMESPACE.equals(parser.getNamespace())) {
PacketExtension packetExtension = PacketParserUtils
.parsePacketExtension(Set.ELEMENT_NAME, Set.NAMESPACE,
parser);
ExtensionElement packetExtension = PacketParserUtils
.parseExtensionElement(Set.ELEMENT_NAME, Set.NAMESPACE, parser);
if (packetExtension instanceof Set
&& ((Set) packetExtension).isValid())
instance.setRsm((Set) packetExtension);
......
......@@ -38,6 +38,7 @@ public class ItemRemove extends IQ {
private final Collection<Item> items;
public ItemRemove() {
super(ELEMENT_NAME, NAMESPACE);
items = new ArrayList<Item>();
}
......
......@@ -51,6 +51,7 @@ public class List extends IQ {
private final Collection<Chat> chats;
public List() {
super(ELEMENT_NAME, NAMESPACE);
chats = new ArrayList<Chat>();
}
......
......@@ -14,14 +14,14 @@
*/
package com.xabber.xmpp.archive;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
import com.xabber.xmpp.AbstractIQProvider;
import com.xabber.xmpp.ProviderUtils;
import com.xabber.xmpp.rsm.Set;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
public class ListProvider extends AbstractIQProvider<List> {
@Override
......@@ -54,9 +54,8 @@ public class ListProvider extends AbstractIQProvider<List> {
instance.addChat(value);
} else if (Set.ELEMENT_NAME.equals(name)
&& Set.NAMESPACE.equals(parser.getNamespace())) {
PacketExtension packetExtension = PacketParserUtils
.parsePacketExtension(Set.ELEMENT_NAME, Set.NAMESPACE,
parser);
ExtensionElement packetExtension = PacketParserUtils
.parseExtensionElement(Set.ELEMENT_NAME, Set.NAMESPACE, parser);
if (packetExtension instanceof Set
&& ((Set) packetExtension).isValid())
instance.setRsm((Set) packetExtension);
......
......@@ -45,6 +45,7 @@ public class Modified extends IQ {
private final Collection<AbstractModified> chats;
public Modified() {
super(ELEMENT_NAME, NAMESPACE);
chats = new ArrayList<AbstractModified>();
}
......
......@@ -14,14 +14,14 @@
*/
package com.xabber.xmpp.archive;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
import com.xabber.xmpp.AbstractIQProvider;
import com.xabber.xmpp.ProviderUtils;
import com.xabber.xmpp.rsm.Set;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
public class ModifiedProvider extends AbstractIQProvider<Modified> {
@Override
......@@ -54,9 +54,8 @@ public class ModifiedProvider extends AbstractIQProvider<Modified> {
instance.addModified(value);
} else if (Set.ELEMENT_NAME.equals(name)
&& Set.NAMESPACE.equals(parser.getNamespace())) {
PacketExtension packetExtension = PacketParserUtils
.parsePacketExtension(Set.ELEMENT_NAME, Set.NAMESPACE,
parser);
ExtensionElement packetExtension = PacketParserUtils
.parseExtensionElement(Set.ELEMENT_NAME, Set.NAMESPACE, parser);
if (packetExtension instanceof Set
&& ((Set) packetExtension).isValid())
instance.setRsm((Set) packetExtension);
......
......@@ -55,6 +55,7 @@ public class Pref extends IQ {
private final Map<TypeMode, UseMode> methods;
public Pref() {
super(ELEMENT_NAME, NAMESPACE);
items = new ArrayList<Item>();
sessions = new ArrayList<Session>();
methods = new HashMap<TypeMode, UseMode>();
......
......@@ -40,6 +40,10 @@ public class Remove extends AbstractChat {
private boolean open;
private Date end;
public Remove() {
super(ELEMENT_NAME);
}
@Override
public void serializeContent(XmlSerializer serializer) throws IOException {
super.serializeContent(serializer);
......
......@@ -33,6 +33,10 @@ public class Retrieve extends AbstractChat {
private Set rsm;
public Retrieve() {
super(ELEMENT_NAME);
}
@Override
public void serializeContent(XmlSerializer serializer) throws IOException {
super.serializeContent(serializer);
......
......@@ -38,6 +38,7 @@ public class SessionRemove extends IQ {
private final Collection<Session> sessions;
public SessionRemove() {
super(ELEMENT_NAME, NAMESPACE);
sessions = new ArrayList<Session>();
}
......
......@@ -15,16 +15,14 @@ import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.MessageItem;
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.XMPPConnectionRegistry;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
/**
* Packet extension for XEP-0280: Message Carbons. This class implements
......@@ -44,11 +42,11 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
instance = new CarbonManager();
Application.getInstance().addManager(instance);
Connection.addConnectionCreationListener(new ConnectionCreationListener() {
XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(final Connection connection) {
public void connectionCreated(final XMPPConnection connection) {
if (!(connection instanceof XMPPConnection)) {
if (connection == null) {
return;
}
......@@ -62,7 +60,7 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
});
}
private Connection connection;
private XMPPConnection connection;
private volatile boolean enabled_state = false;
private CarbonManager() {
......@@ -83,20 +81,20 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
msg.addExtension(new Private());
}
private IQ carbonsEnabledIQ(final boolean new_state) {
if (!checkConnected()) {
return null;
}
IQ setIQ = new IQ() {
public String getChildElementXML() {
return String.format("<%s xmlns='%s'/>", new_state ? "enable" : "disable", NAMESPACE);
}
};
setIQ.setType(IQ.Type.SET);
setIQ.setFrom(connection.getUser());
return setIQ;
}
// private IQ carbonsEnabledIQ(final boolean new_state) {
//
// if (!checkConnected()) {
// return null;
// }
// IQ setIQ = new IQ() {
// public String getChildElementXML() {
// return String.format("<%s xmlns='%s'/>", new_state ? "enable" : "disable", NAMESPACE);
// }
// };
// setIQ.setType(IQ.Type.set);
// setIQ.setFrom(connection.getUser());
// return setIQ;
// }
private boolean checkConnected() {
......@@ -121,8 +119,7 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
if (!checkConnected()) {
return false;
}
boolean isCarbonSupported = ServerInfoManager.getInstance().isProtocolSupported(connection.getUser(), NAMESPACE);
return isCarbonSupported;
return ServerInfoManager.getInstance().isProtocolSupported(connection.getUser(), NAMESPACE);
}
/**
......@@ -141,18 +138,18 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
return;
}
IQ setIQ = carbonsEnabledIQ(new_state);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
IQ result = (IQ) packet;
if (result.getType() == IQ.Type.RESULT) {
enabled_state = new_state;
}
connection.removePacketListener(this);
}
}, new PacketIDFilter(setIQ.getPacketID()));
connection.sendPacket(setIQ);
// IQ setIQ = carbonsEnabledIQ(new_state);
// connection.addAsyncStanzaListener(new StanzaListener() {
// public void processPacket(Stanza packet) {
// IQ result = (IQ) packet;
// if (result.getType() == IQ.Type.result) {
// enabled_state = new_state;
// }
// connection.removeAsyncStanzaListener(this);
// }
// }, new StanzaIdFilter(setIQ.getStanzaId()));
//
// connection.sendPacket(setIQ);
}
/**
......@@ -180,8 +177,7 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
}
@Override
public void onPacket(ConnectionItem connection, String bareAddress,
Packet packet) {
public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem)) {
return;
......@@ -198,23 +194,21 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
if (!getCarbonsEnabled()) {
return;
}
PacketExtension carbonExtension = null;
ExtensionElement carbonExtension = null;
Direction dir = null;
for (PacketExtension packetExtension : message.getExtensions()) {
for (ExtensionElement 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;
if (dir == Direction.sent) {
Sent carbon = (Sent) carbonExtension;
forwarded = carbon.getForwarded();
......
......@@ -3,7 +3,8 @@ package com.xabber.xmpp.carbon;
import java.io.IOException;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smackx.packet.DelayInfo;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.delay.packet.DelayInformation;
import org.xmlpull.v1.XmlSerializer;
import com.xabber.xmpp.Container;
......@@ -23,8 +24,8 @@ public class Forwarded extends PacketExtension implements Container {
public static final String NAMESPACE = "urn:xmpp:forward:0";
public static final String ELEMENT_NAME = "forwarded";
private DelayInfo delay;
private Packet forwardedPacket;
private DelayInformation delay;
private Stanza forwardedPacket;
public Forwarded() {
}
......@@ -32,10 +33,10 @@ public class Forwarded extends PacketExtension implements Container {
/**
* Creates a new Forwarded packet extension.
*
* @param delay an optional {@link DelayInfo} timestamp of the packet.
* @param delay an optional {@link DelayInformation} timestamp of the packet.
* @param fwdPacket the packet that is forwarded (required).
*/
public Forwarded(DelayInfo delay, Packet fwdPacket) {
public Forwarded(DelayInformation delay, Stanza fwdPacket) {
this();
this.delay = delay;
this.forwardedPacket = fwdPacket;
......@@ -77,9 +78,9 @@ public class Forwarded extends PacketExtension implements Container {
/**
* get the timestamp of the forwarded packet.
*
* @return the {@link DelayInfo} representing the time when the original packet was sent. May be null.
* @return the {@link DelayInformation} representing the time when the original packet was sent. May be null.
*/
public DelayInfo getDelayInfo() {
public DelayInformation getDelayInfo() {
return delay;
}
}
\ No newline at end of file
package com.xabber.xmpp.carbon;
import java.io.IOException;
import com.xabber.xmpp.AbstractExtensionProvider;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.jivesoftware.smackx.packet.DelayInfo;
import org.jivesoftware.smackx.provider.DelayInfoProvider;
import org.jivesoftware.smackx.delay.packet.DelayInformation;
import org.jivesoftware.smackx.delay.provider.DelayInformationProvider;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import com.xabber.android.data.LogManager;
import com.xabber.xmpp.AbstractExtensionProvider;
/**
* Packet extension for XEP-0297: Stanza Forwarding. This class implements
* a {@link PacketExtensionProvider} to parse forwarded messages from a packet.
* a {@link AbstractExtensionProvider} to parse forwarded messages from a packet.
* The extension <a href="http://xmpp.org/extensions/xep-0297.html">XEP-0297</a>
* is a prerequisite for XEP-0280 (Message Carbons).
*
......@@ -27,7 +22,7 @@ import com.xabber.xmpp.AbstractExtensionProvider;
*/
public class ForwardedProvider extends AbstractExtensionProvider<Forwarded> {
DelayInfoProvider dip = new DelayInfoProvider();
DelayInformationProvider dip = new DelayInformationProvider();
@Override
protected Forwarded createInstance(XmlPullParser parser) {
......@@ -37,16 +32,16 @@ public class ForwardedProvider extends AbstractExtensionProvider<Forwarded> {
@Override
public Forwarded parseExtension(XmlPullParser parser) throws Exception {
DelayInfoProvider dip = new DelayInfoProvider();
DelayInfo di = null;
Packet packet = null;
DelayInformationProvider delayInformationProvider = new DelayInformationProvider();
DelayInformation delayInformation = null;
Stanza packet = null;
boolean done = false;
while (!done) {
int eventType = parser.next();
if (eventType == XmlPullParser.START_TAG) {
if (parser.getName().equals("delay"))
di = (DelayInfo)dip.parseExtension(parser);
delayInformation = delayInformationProvider.parse(parser);
else if (parser.getName().equals("message"))
packet = PacketParserUtils.parseMessage(parser);
else throw new Exception("Unsupported forwarded packet type: " + parser.getName());
......@@ -56,6 +51,6 @@ public class ForwardedProvider extends AbstractExtensionProvider<Forwarded> {
}
if (packet == null)
throw new Exception("forwarded extension must contain a packet");
return new Forwarded(di, packet);
return new Forwarded(delayInformation, packet);
}
}
package com.xabber.xmpp.carbon;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.xmlpull.v1.XmlPullParser;
import com.xabber.xmpp.AbstractExtensionProvider;
/**
* Packet extension for XEP-0280: Message Carbons. This class implements
* a {@link PacketExtensionProvider} to exclude a <message/> from being
* a {@link AbstractExtensionProvider} to exclude a <message/> from being
* forwarded to other Carbons-enabled resources.
* The extension <a href="http://xmpp.org/extensions/xep-0280.html">XEP-0280</a>
* is meant to synchronize a message flow to multiple presences of a user.
......
package com.xabber.xmpp.carbon;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
......@@ -9,7 +8,7 @@ import com.xabber.xmpp.AbstractExtensionProvider;
/**
* Packet extension for XEP-0280: Message Carbons. This class implements
* a {@link PacketExtensionProvider} to parse a received message from a packet.
* a {@link AbstractExtensionProvider} to parse a received message from a packet.
* The extension <a href="http://xmpp.org/extensions/xep-0280.html">XEP-0280</a>
* is meant to synchronize a message flow to multiple presences of a user.
*
......
package com.xabber.xmpp.carbon;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
......@@ -9,7 +8,7 @@ import com.xabber.xmpp.AbstractExtensionProvider;
/**
* Packet extension for XEP-0280: Message Carbons. This class implements
* a {@link PacketExtensionProvider} to parse a sent message from a packet.
* a {@link AbstractExtensionProvider} to parse a sent message from a packet.
* The extension <a href="http://xmpp.org/extensions/xep-0280.html">XEP-0280</a>
* is meant to synchronize a message flow to multiple presences of a user.
*
......
......@@ -14,13 +14,13 @@
*/
package com.xabber.xmpp.delay;
import java.util.Date;
import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.packet.DelayInformation;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.delay.packet.DelayInformation;
import com.xabber.xmpp.address.Jid;
import java.util.Date;
/**
* Helper class to get delay information.
......@@ -37,13 +37,12 @@ public class Delay {
* @return Delay value from packet. <code>null</code> if no delay is
* specified.
*/
public static Date getDelay(Packet packet) {
DelayInformation delay = (DelayInformation) packet.getExtension(
"delay", "urn:xmpp:delay");
public static Date getDelay(Stanza packet) {
DelayInformation delay = packet.getExtension("delay", "urn:xmpp:delay");
// If there was no delay based on XEP-0203, then try XEP-0091 for
// backward compatibility
if (delay == null) {
delay = (DelayInformation) packet.getExtension("x",
delay = packet.getExtension("x",
"jabber:x:delay");
}
if (delay == null)
......@@ -57,8 +56,8 @@ public class Delay {
* @param packet
* @return Whether message was delayed by server.
*/
public static boolean isOfflineMessage(String server, Packet packet) {
for (PacketExtension extension : packet.getExtensions())
public static boolean isOfflineMessage(String server, Stanza packet) {
for (ExtensionElement extension : packet.getExtensions())
if (extension instanceof DelayInformation) {
String from = ((DelayInformation) extension).getFrom();
if (server.equals(Jid.getStringPrep(from)))
......
......@@ -14,9 +14,9 @@
*/
package com.xabber.xmpp.muc;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.packet.MUCUser;
import org.jivesoftware.smackx.muc.packet.MUCUser;
/**
* Helper class to get MUC information.
......@@ -37,7 +37,7 @@ public class MUC {
*/
public static MUCUser getMUCUserExtension(Packet packet) {
if (packet != null)
for (PacketExtension extension : packet.getExtensions())
for (ExtensionElement extension : packet.getExtensions())
if (extension instanceof MUCUser)
return (MUCUser) extension;
return null;
......
......@@ -14,9 +14,10 @@
*/
package com.xabber.xmpp.ssn;
import org.jivesoftware.smackx.xdata.FormField;
import java.util.NoSuchElementException;
import org.jivesoftware.smackx.FormField.Option;
/**
* Disclosure parameter values.
......@@ -41,8 +42,8 @@ public enum DisclosureValue {
this.label = label;
}
public Option createOption() {
return new Option(label, name());
public FormField.Option createOption() {
return new FormField.Option(label, name());
}
public static DisclosureValue fromString(String value)
......
......@@ -14,9 +14,10 @@
*/
package com.xabber.xmpp.ssn;
import org.jivesoftware.smackx.xdata.FormField;
import java.util.NoSuchElementException;
import org.jivesoftware.smackx.FormField.Option;
/**
* Logging parameter values.
......@@ -37,8 +38,8 @@ public enum LoggingValue {
this.label = label;
}
public Option createOption() {
return new Option(label, name());
public FormField.Option createOption() {
return new FormField.Option(label, name());
}
public static LoggingValue fromString(String value)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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