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 { ...@@ -51,5 +51,9 @@ dependencies {
compile 'com.github.bumptech.glide:glide:3.6.0' compile 'com.github.bumptech.glide:glide:3.6.0'
compile 'com.google.zxing:android-integration:3.1.0' compile 'com.google.zxing:android-integration:3.1.0'
compile 'com.jcraft:jzlib:1.1.3' 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') 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; ...@@ -17,7 +17,7 @@ package com.xabber.android.data;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter; import java.io.StringWriter;
import org.jivesoftware.smack.Connection; import org.jivesoftware.smack.SmackConfiguration;
import org.xbill.DNS.Options; import org.xbill.DNS.Options;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
...@@ -59,7 +59,7 @@ public class LogManager implements OnLoadListener { ...@@ -59,7 +59,7 @@ public class LogManager implements OnLoadListener {
"org.jivesoftware.smack.debugger.ConsoleDebugger"); "org.jivesoftware.smack.debugger.ConsoleDebugger");
// "com.xabber.android.data.FileLogDebugger"); // "com.xabber.android.data.FileLogDebugger");
System.setProperty("smack.debugEnabled", "true"); System.setProperty("smack.debugEnabled", "true");
Connection.DEBUG_ENABLED = true; SmackConfiguration.DEBUG = true;
Options.set("verbose"); Options.set("verbose");
Options.set("verbosemsg"); Options.set("verbosemsg");
Options.set("verbosecompression"); Options.set("verbosecompression");
......
...@@ -36,6 +36,7 @@ import com.xabber.android.data.roster.RosterManager; ...@@ -36,6 +36,7 @@ import com.xabber.android.data.roster.RosterManager;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
import org.jxmpp.util.XmppStringUtils;
import java.security.KeyPair; import java.security.KeyPair;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -54,7 +55,7 @@ import java.util.Map; ...@@ -54,7 +55,7 @@ import java.util.Map;
* Each account has unique full jid (userName@serverName/resource). This jid is * Each account has unique full jid (userName@serverName/resource). This jid is
* persistent and independent from real jid assigned by server. Real full jid * persistent and independent from real jid assigned by server. Real full jid
* (assigned by server) of account can be taken by * (assigned by server) of account can be taken by
* {@link AccountItem#getRealAccount()}. * {@link AccountItem#getRealJid()}.
* *
* @author alexander.ivanov * @author alexander.ivanov
*/ */
...@@ -353,9 +354,9 @@ public class AccountManager implements OnLoadListener, OnWipeListener { ...@@ -353,9 +354,9 @@ public class AccountManager implements OnLoadListener, OnWipeListener {
} }
} }
String serverName = StringUtils.parseServer(user); String serverName = XmppStringUtils.parseDomain(user);
String userName = StringUtils.parseName(user); String userName = XmppStringUtils.parseLocalpart(user);
String resource = StringUtils.parseResource(user); String resource = XmppStringUtils.parseResource(user);
String host = accountType.getHost(); String host = accountType.getHost();
int port = accountType.getPort(); int port = accountType.getPort();
boolean tlsRequired = accountType.isTLSRequired(); boolean tlsRequired = accountType.isTLSRequired();
...@@ -948,10 +949,6 @@ public class AccountManager implements OnLoadListener, OnWipeListener { ...@@ -948,10 +949,6 @@ public class AccountManager implements OnLoadListener, OnWipeListener {
/** /**
* Sets status for account. * Sets status for account.
*
* @param account
* @param statusMode
* @param statusText
*/ */
private void setStatus(AccountItem accountItem, StatusMode statusMode, String statusText) { private void setStatus(AccountItem accountItem, StatusMode statusMode, String statusText) {
boolean changed = accountItem.isEnabled() boolean changed = accountItem.isEnabled()
...@@ -1012,9 +1009,6 @@ public class AccountManager implements OnLoadListener, OnWipeListener { ...@@ -1012,9 +1009,6 @@ public class AccountManager implements OnLoadListener, OnWipeListener {
/** /**
* Remove status from presets. * Remove status from presets.
*
* @param statusMode
* @param statusText
*/ */
public void removeSavedStatus(final SavedStatus savedStatus) { public void removeSavedStatus(final SavedStatus savedStatus) {
if (!savedStatuses.remove(savedStatus)) { if (!savedStatuses.remove(savedStatus)) {
......
...@@ -24,7 +24,6 @@ import com.xabber.android.data.OnLoadListener; ...@@ -24,7 +24,6 @@ import com.xabber.android.data.OnLoadListener;
import com.xabber.android.data.notification.BaseNotificationProvider; import com.xabber.android.data.notification.BaseNotificationProvider;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import org.jivesoftware.smack.CertificateListener;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
import java.io.File; import java.io.File;
...@@ -416,43 +415,4 @@ public class CertificateManager implements OnLoadListener, OnClearListener { ...@@ -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; ...@@ -19,6 +19,7 @@ import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.account.AccountProtocol; import com.xabber.android.data.account.AccountProtocol;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
/** /**
...@@ -204,8 +205,7 @@ public abstract class ConnectionItem { ...@@ -204,8 +205,7 @@ public abstract class ConnectionItem {
Thread thread = new Thread("Disconnection thread for " + this) { Thread thread = new Thread("Disconnection thread for " + this) {
@Override @Override
public void run() { public void run() {
XMPPConnection xmppConnection = connectionThread AbstractXMPPConnection xmppConnection = connectionThread.getXMPPConnection();
.getXMPPConnection();
if (xmppConnection != null) if (xmppConnection != null)
try { try {
xmppConnection.disconnect(); xmppConnection.disconnect();
...@@ -296,8 +296,9 @@ public abstract class ConnectionItem { ...@@ -296,8 +296,9 @@ public abstract class ConnectionItem {
else else
LogManager LogManager
.i(this, "onClose " + xmppConnection.hashCode() + " - " .i(this, "onClose " + xmppConnection.hashCode() + " - "
+ xmppConnection.connectionCounterValue + ", " + xmppConnection.getConnectionCounter() + ", "
+ acceptable); + acceptable);
ConnectionManager.getInstance().onDisconnect(connectionThread); ConnectionManager.getInstance().onDisconnect(connectionThread);
if (acceptable) if (acceptable)
connectionThread.shutdown(); connectionThread.shutdown();
......
...@@ -25,17 +25,17 @@ import com.xabber.android.data.account.AccountItem; ...@@ -25,17 +25,17 @@ import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.entity.NestedMap; import com.xabber.android.data.entity.NestedMap;
import com.xabber.xmpp.address.Jid; 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.ConnectionCreationListener;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.SmackConfiguration; import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type; import org.jivesoftware.smack.packet.IQ.Type;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.ServiceDiscoveryManager; import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -67,15 +67,13 @@ public class ConnectionManager implements OnInitializedListener, ...@@ -67,15 +67,13 @@ public class ConnectionManager implements OnInitializedListener,
instance = new ConnectionManager(); instance = new ConnectionManager();
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
SmackConfiguration.setPacketReplyTimeout(PACKET_REPLY_TIMEOUT); SmackConfiguration.setDefaultPacketReplyTimeout(PACKET_REPLY_TIMEOUT);
ServiceDiscoveryManager.setIdentityType("handheld"); // ServiceDiscoveryManager.setIdentityType("handheld");
ServiceDiscoveryManager.setIdentityName(Application.getInstance() // ServiceDiscoveryManager.setIdentityName(Application.getInstance()
.getString(R.string.client_name)); // .getString(R.string.client_name));
ServiceDiscoveryManager.setDefaultIdentity(new DiscoverInfo.Identity("client", Application.getInstance()
SASLAuthentication.registerSASLMechanism("X-MESSENGER-OAUTH2", .getString(R.string.client_name), "handheld"));
XMessengerOAuth2.class);
SASLAuthentication.supportSASLMechanism("X-MESSENGER-OAUTH2");
String path = System.getProperty("javax.net.ssl.trustStore"); String path = System.getProperty("javax.net.ssl.trustStore");
if (path == null) if (path == null)
...@@ -85,12 +83,10 @@ public class ConnectionManager implements OnInitializedListener, ...@@ -85,12 +83,10 @@ public class ConnectionManager implements OnInitializedListener,
else else
TRUST_STORE_PATH = path; TRUST_STORE_PATH = path;
Connection XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override @Override
public void connectionCreated(final Connection connection) { public void connectionCreated(final XMPPConnection connection) {
ServiceDiscoveryManager.getInstanceFor(connection) ServiceDiscoveryManager.getInstanceFor(connection).addFeature("sslc2s");
.addFeature("sslc2s");
} }
}); });
} }
...@@ -164,7 +160,7 @@ public class ConnectionManager implements OnInitializedListener, ...@@ -164,7 +160,7 @@ public class ConnectionManager implements OnInitializedListener,
* @param account * @param account
* @param packet * @param packet
*/ */
public void sendPacket(String account, Packet packet) public void sendPacket(String account, Stanza packet)
throws NetworkException { throws NetworkException {
ConnectionThread connectionThread = null; ConnectionThread connectionThread = null;
for (ConnectionThread check : managedConnections) for (ConnectionThread check : managedConnections)
...@@ -179,9 +175,11 @@ public class ConnectionManager implements OnInitializedListener, ...@@ -179,9 +175,11 @@ public class ConnectionManager implements OnInitializedListener,
.isConnected()) .isConnected())
throw new NetworkException(R.string.NOT_CONNECTED); throw new NetworkException(R.string.NOT_CONNECTED);
XMPPConnection xmppConnection = connectionThread.getXMPPConnection(); XMPPConnection xmppConnection = connectionThread.getXMPPConnection();
try { try {
xmppConnection.sendPacket(packet); xmppConnection.sendStanza(packet);
} catch (IllegalStateException e) { } catch (SmackException.NotConnectedException e) {
e.printStackTrace();
throw new NetworkException(R.string.XMPP_EXCEPTION); throw new NetworkException(R.string.XMPP_EXCEPTION);
} }
} }
...@@ -221,12 +219,12 @@ public class ConnectionManager implements OnInitializedListener, ...@@ -221,12 +219,12 @@ public class ConnectionManager implements OnInitializedListener,
public void onAuthorized(ConnectionThread connectionThread) { public void onAuthorized(ConnectionThread connectionThread) {
if (!managedConnections.contains(connectionThread)) if (!managedConnections.contains(connectionThread))
return; return;
LogManager.i(this, LogManager.i(this, "onAuthorized: " + connectionThread.getConnectionItem());
"onAuthorized: " + connectionThread.getConnectionItem()); for (OnAuthorizedListener listener : Application.getInstance().getManagers(OnAuthorizedListener.class)) {
for (OnAuthorizedListener listener : Application.getInstance()
.getManagers(OnAuthorizedListener.class))
listener.onAuthorized(connectionThread.getConnectionItem()); listener.onAuthorized(connectionThread.getConnectionItem());
} }
LogManager.i(this, "onAuthorized: finished");
}
public void onDisconnect(ConnectionThread connectionThread) { public void onDisconnect(ConnectionThread connectionThread) {
if (!managedConnections.remove(connectionThread)) if (!managedConnections.remove(connectionThread))
...@@ -245,25 +243,23 @@ public class ConnectionManager implements OnInitializedListener, ...@@ -245,25 +243,23 @@ public class ConnectionManager implements OnInitializedListener,
listener.onDisconnect(connectionThread.getConnectionItem()); listener.onDisconnect(connectionThread.getConnectionItem());
} }
public void processPacket(ConnectionThread connectionThread, Packet packet) { public void processPacket(ConnectionThread connectionThread, Stanza packet) {
if (!managedConnections.contains(connectionThread)) if (!managedConnections.contains(connectionThread))
return; return;
ConnectionItem connectionItem = connectionThread.getConnectionItem(); ConnectionItem connectionItem = connectionThread.getConnectionItem();
if (packet instanceof IQ && connectionItem instanceof AccountItem) { if (packet instanceof IQ && connectionItem instanceof AccountItem) {
IQ iq = (IQ) packet; IQ iq = (IQ) packet;
String packetId = iq.getPacketID(); String packetId = iq.getStanzaId();
if (packetId != null if (packetId != null
&& (iq.getType() == Type.RESULT || iq.getType() == Type.ERROR)) { && (iq.getType() == Type.result || iq.getType() == Type.error)) {
String account = ((AccountItem) connectionItem).getAccount(); String account = ((AccountItem) connectionItem).getAccount();
RequestHolder requestHolder = requests RequestHolder requestHolder = requests
.remove(account, packetId); .remove(account, packetId);
if (requestHolder != null) { if (requestHolder != null) {
if (iq.getType() == Type.RESULT) if (iq.getType() == Type.result)
requestHolder.getListener().onReceived(account, requestHolder.getListener().onReceived(account, packetId, iq);
packetId, iq);
else else
requestHolder.getListener().onError(account, packetId, requestHolder.getListener().onError(account, packetId, iq);
iq);
} }
} }
} }
...@@ -277,18 +273,20 @@ public class ConnectionManager implements OnInitializedListener, ...@@ -277,18 +273,20 @@ public class ConnectionManager implements OnInitializedListener,
public void onTimer() { public void onTimer() {
if (NetworkManager.getInstance().getState() != NetworkState.suspended) { if (NetworkManager.getInstance().getState() != NetworkState.suspended) {
Collection<ConnectionItem> reconnect = new ArrayList<ConnectionItem>(); Collection<ConnectionItem> reconnect = new ArrayList<ConnectionItem>();
for (ConnectionThread connectionThread : managedConnections) for (ConnectionThread connectionThread : managedConnections) {
if (connectionThread.getConnectionItem().getState() // if (connectionThread.getConnectionItem().getState().isConnected()
.isConnected() // // TODO find the way to check if connection is alive
// XMPPConnection can`t be null here // // XMPPConnection can`t be null here
&& !connectionThread.getXMPPConnection().isAlive()) { //// && !connectionThread.getXMPPConnection().isAlive()
LogManager.i(connectionThread.getConnectionItem(), // ) {
"forceReconnect on checkAlive"); // LogManager.i(connectionThread.getConnectionItem(), "forceReconnect on checkAlive");
reconnect.add(connectionThread.getConnectionItem()); // reconnect.add(connectionThread.getConnectionItem());
// }
} }
for (ConnectionItem connection : reconnect) for (ConnectionItem connection : reconnect) {
connection.forceReconnect(); connection.forceReconnect();
} }
}
long now = new Date().getTime(); long now = new Date().getTime();
Iterator<NestedMap.Entry<RequestHolder>> iterator = requests.iterator(); Iterator<NestedMap.Entry<RequestHolder>> iterator = requests.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
......
...@@ -14,10 +14,10 @@ ...@@ -14,10 +14,10 @@
*/ */
package com.xabber.android.data.connection; package com.xabber.android.data.connection;
import org.jivesoftware.smack.packet.Packet;
import com.xabber.android.data.BaseManagerInterface; import com.xabber.android.data.BaseManagerInterface;
import org.jivesoftware.smack.packet.Stanza;
/** /**
* Listener for incoming packet. * Listener for incoming packet.
* *
...@@ -33,6 +33,6 @@ public interface OnPacketListener extends BaseManagerInterface { ...@@ -33,6 +33,6 @@ public interface OnPacketListener extends BaseManagerInterface {
* @param packet * @param packet
* @return * @return
*/ */
void onPacket(ConnectionItem connection, String bareAddress, Packet packet); void onPacket(ConnectionItem connection, String bareAddress, Stanza packet);
} }
...@@ -41,11 +41,11 @@ public enum TLSMode { ...@@ -41,11 +41,11 @@ public enum TLSMode {
SecurityMode getSecurityMode() { SecurityMode getSecurityMode() {
if (this == enabled) if (this == enabled)
return SecurityMode.enabled; return SecurityMode.ifpossible;
else if (this == required) else if (this == required)
return SecurityMode.required; return SecurityMode.required;
else if (this == legacy) else if (this == legacy)
return SecurityMode.legacy; return SecurityMode.disabled;
else else
throw new IllegalStateException(); throw new IllegalStateException();
} }
......
...@@ -60,7 +60,7 @@ import com.xabber.xmpp.rsm.Set; ...@@ -60,7 +60,7 @@ import com.xabber.xmpp.rsm.Set;
import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type; 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.Collection;
import java.util.Date; import java.util.Date;
...@@ -294,8 +294,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -294,8 +294,7 @@ public class MessageArchiveManager implements OnPacketListener,
} }
@Override @Override
public void onPacket(ConnectionItem connection, final String bareAddress, public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
Packet packet) {
if (!(connection instanceof AccountItem)) if (!(connection instanceof AccountItem))
return; return;
String account = ((AccountItem) connection).getAccount(); String account = ((AccountItem) connection).getAccount();
...@@ -306,19 +305,19 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -306,19 +305,19 @@ public class MessageArchiveManager implements OnPacketListener,
if (!(packet instanceof IQ)) if (!(packet instanceof IQ))
return; return;
IQ iq = (IQ) packet; IQ iq = (IQ) packet;
if (iq.getType() == Type.SET && packet instanceof Pref if (iq.getType() == Type.set && packet instanceof Pref
&& ((Pref) packet).isValid()) && ((Pref) packet).isValid())
onPreferenceReceived(account, (Pref) packet); 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()) && ((ItemRemove) packet).isValid())
onItemRemoveReceived(account, (ItemRemove) packet); 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()) && ((SessionRemove) packet).isValid())
onSessionRemoveReceived(account, (SessionRemove) packet); 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()) && ((List) packet).isValid())
onListReceived(account, (List) packet); 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()) && ((Chat) packet).isValid())
onChatReceived(account, (Chat) packet); onChatReceived(account, (Chat) packet);
} }
...@@ -336,7 +335,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -336,7 +335,7 @@ public class MessageArchiveManager implements OnPacketListener,
} else if (AccountManager.getInstance().getArchiveMode(account) == ArchiveMode.server) { } else if (AccountManager.getInstance().getArchiveMode(account) == ArchiveMode.server) {
Auto auto = new Auto(); Auto auto = new Auto();
auto.setSave(true); auto.setSave(true);
auto.setType(Type.SET); auto.setType(Type.set);
try { try {
ConnectionManager.getInstance().sendPacket(account, auto); ConnectionManager.getInstance().sendPacket(account, auto);
} catch (NetworkException e) { } catch (NetworkException e) {
...@@ -393,7 +392,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -393,7 +392,7 @@ public class MessageArchiveManager implements OnPacketListener,
defaultItem.setSave(SaveMode.body); defaultItem.setSave(SaveMode.body);
Pref pref = new Pref(); Pref pref = new Pref();
pref.setDefault(defaultItem); pref.setDefault(defaultItem);
pref.setType(Type.SET); pref.setType(Type.set);
try { try {
ConnectionManager.getInstance().sendPacket(account, pref); ConnectionManager.getInstance().sendPacket(account, pref);
} catch (NetworkException e) { } catch (NetworkException e) {
...@@ -543,7 +542,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -543,7 +542,7 @@ public class MessageArchiveManager implements OnPacketListener,
private void requestPreferences(String account) { private void requestPreferences(String account) {
Pref pref = new Pref(); Pref pref = new Pref();
pref.setType(Type.GET); pref.setType(Type.get);
try { try {
ConnectionManager.getInstance().sendRequest(account, pref, ConnectionManager.getInstance().sendRequest(account, pref,
new OnResponseListener() { new OnResponseListener() {
...@@ -622,7 +621,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -622,7 +621,7 @@ public class MessageArchiveManager implements OnPacketListener,
private void requestModified(String account, String before) { private void requestModified(String account, String before) {
Modified packet = new Modified(); Modified packet = new Modified();
packet.setType(Type.GET); packet.setType(Type.get);
Set rsm = new Set(); Set rsm = new Set();
rsm.setMax(RSM_MAX); rsm.setMax(RSM_MAX);
rsm.setBefore(before); rsm.setBefore(before);
...@@ -695,7 +694,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -695,7 +694,7 @@ public class MessageArchiveManager implements OnPacketListener,
private String requestList(String account, String bareAddress, String before) { private String requestList(String account, String bareAddress, String before) {
List packet = new List(); List packet = new List();
packet.setType(Type.GET); packet.setType(Type.get);
Set rsm = new Set(); Set rsm = new Set();
rsm.setMax(RSM_MAX); rsm.setMax(RSM_MAX);
rsm.setBefore(before); rsm.setBefore(before);
...@@ -713,7 +712,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -713,7 +712,7 @@ public class MessageArchiveManager implements OnPacketListener,
private void requestChat(String account, CollectionHeader header, private void requestChat(String account, CollectionHeader header,
String after, boolean modification) { String after, boolean modification) {
Retrieve packet = new Retrieve(); Retrieve packet = new Retrieve();
packet.setType(Type.GET); packet.setType(Type.get);
Set rsm = new Set(); Set rsm = new Set();
rsm.setMax(RSM_MAX); rsm.setMax(RSM_MAX);
rsm.setAfter(after); rsm.setAfter(after);
...@@ -766,7 +765,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -766,7 +765,7 @@ public class MessageArchiveManager implements OnPacketListener,
extension.setSave(saveMode); extension.setSave(saveMode);
Pref packet = new Pref(); Pref packet = new Pref();
packet.addItem(extension); packet.addItem(extension);
packet.setType(Type.SET); packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet); ConnectionManager.getInstance().sendPacket(account, packet);
} }
...@@ -776,7 +775,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -776,7 +775,7 @@ public class MessageArchiveManager implements OnPacketListener,
extension.setJid(user); extension.setJid(user);
ItemRemove packet = new ItemRemove(); ItemRemove packet = new ItemRemove();
packet.addItem(extension); packet.addItem(extension);
packet.setType(Type.SET); packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet); ConnectionManager.getInstance().sendPacket(account, packet);
} }
...@@ -862,7 +861,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -862,7 +861,7 @@ public class MessageArchiveManager implements OnPacketListener,
extension.setSave(saveMode); extension.setSave(saveMode);
Pref packet = new Pref(); Pref packet = new Pref();
packet.addSession(extension); packet.addSession(extension);
packet.setType(Type.SET); packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet); ConnectionManager.getInstance().sendPacket(account, packet);
sessionSaves.put(account, session, saveMode); sessionSaves.put(account, session, saveMode);
} }
...@@ -873,7 +872,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -873,7 +872,7 @@ public class MessageArchiveManager implements OnPacketListener,
extension.setThread(session); extension.setThread(session);
SessionRemove packet = new SessionRemove(); SessionRemove packet = new SessionRemove();
packet.addSession(extension); packet.addSession(extension);
packet.setType(Type.SET); packet.setType(Type.set);
ConnectionManager.getInstance().sendPacket(account, packet); ConnectionManager.getInstance().sendPacket(account, packet);
sessionSaves.remove(account, session); sessionSaves.remove(account, session);
} }
......
...@@ -42,15 +42,13 @@ import com.xabber.android.data.roster.ResourceItem; ...@@ -42,15 +42,13 @@ import com.xabber.android.data.roster.ResourceItem;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.attention.Attention; import com.xabber.xmpp.attention.Attention;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener; import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.XMPPConnection; 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.Message;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import java.util.Iterator;
/** /**
* XEP-0224: Attention. * XEP-0224: Attention.
...@@ -68,15 +66,12 @@ public class AttentionManager implements OnPacketListener, OnLoadListener { ...@@ -68,15 +66,12 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
enabledLock = new Object(); enabledLock = new Object();
Connection XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override @Override
public void connectionCreated(final Connection connection) { public void connectionCreated(final XMPPConnection connection) {
synchronized (enabledLock) { synchronized (enabledLock) {
if (SettingsManager.chatsAttention()) if (SettingsManager.chatsAttention())
ServiceDiscoveryManager.getInstanceFor( ServiceDiscoveryManager.getInstanceFor(connection).addFeature(Attention.NAMESPACE);
connection).addFeature(
Attention.NAMESPACE);
} }
} }
}); });
...@@ -121,10 +116,11 @@ public class AttentionManager implements OnPacketListener, OnLoadListener { ...@@ -121,10 +116,11 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
if (manager == null) if (manager == null)
continue; continue;
boolean contains = false; boolean contains = false;
for (Iterator<String> iterator = manager.getFeatures(); iterator for (String feature : manager.getFeatures()) {
.hasNext(); ) if (Attention.NAMESPACE.equals(feature)) {
if (Attention.NAMESPACE.equals(iterator.next()))
contains = true; contains = true;
}
}
if (SettingsManager.chatsAttention() == contains) if (SettingsManager.chatsAttention() == contains)
continue; continue;
if (SettingsManager.chatsAttention()) if (SettingsManager.chatsAttention())
...@@ -152,8 +148,7 @@ public class AttentionManager implements OnPacketListener, OnLoadListener { ...@@ -152,8 +148,7 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
} }
@Override @Override
public void onPacket(ConnectionItem connection, String bareAddress, public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
Packet packet) {
if (!(connection instanceof AccountItem)) if (!(connection instanceof AccountItem))
return; return;
if (!(packet instanceof Message)) if (!(packet instanceof Message))
...@@ -163,7 +158,7 @@ public class AttentionManager implements OnPacketListener, OnLoadListener { ...@@ -163,7 +158,7 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
final String account = ((AccountItem) connection).getAccount(); final String account = ((AccountItem) connection).getAccount();
if (bareAddress == null) if (bareAddress == null)
return; return;
for (PacketExtension packetExtension : packet.getExtensions()) for (ExtensionElement packetExtension : packet.getExtensions()) {
if (packetExtension instanceof Attention) { if (packetExtension instanceof Attention) {
MessageManager.getInstance().openChat(account, bareAddress); MessageManager.getInstance().openChat(account, bareAddress);
MessageManager.getInstance() MessageManager.getInstance()
...@@ -173,6 +168,7 @@ public class AttentionManager implements OnPacketListener, OnLoadListener { ...@@ -173,6 +168,7 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
bareAddress), true); bareAddress), true);
} }
} }
}
public void sendAttention(String account, String user) public void sendAttention(String account, String user)
throws NetworkException { throws NetworkException {
......
...@@ -37,9 +37,9 @@ import com.xabber.android.data.extension.vcard.VCardManager; ...@@ -37,9 +37,9 @@ import com.xabber.android.data.extension.vcard.VCardManager;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.avatar.VCardUpdate; import com.xabber.xmpp.avatar.VCardUpdate;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Stanza;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
...@@ -405,8 +405,7 @@ public class AvatarManager implements OnLoadListener, OnLowMemoryListener, OnPac ...@@ -405,8 +405,7 @@ public class AvatarManager implements OnLoadListener, OnLowMemoryListener, OnPac
} }
@Override @Override
public void onPacket(ConnectionItem connection, String bareAddress, public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
Packet packet) {
if (!(packet instanceof Presence) || bareAddress == null) { if (!(packet instanceof Presence) || bareAddress == null) {
return; return;
} }
...@@ -418,7 +417,7 @@ public class AvatarManager implements OnLoadListener, OnLowMemoryListener, OnPac ...@@ -418,7 +417,7 @@ public class AvatarManager implements OnLoadListener, OnLowMemoryListener, OnPac
if (presence.getType() == Presence.Type.error) { if (presence.getType() == Presence.Type.error) {
return; return;
} }
for (PacketExtension packetExtension : presence.getExtensions()) { for (ExtensionElement packetExtension : presence.getExtensions()) {
if (packetExtension instanceof VCardUpdate) { if (packetExtension instanceof VCardUpdate) {
VCardUpdate vCardUpdate = (VCardUpdate) packetExtension; VCardUpdate vCardUpdate = (VCardUpdate) packetExtension;
if (vCardUpdate.isValid() && vCardUpdate.isPhotoReady()) { if (vCardUpdate.isValid() && vCardUpdate.isPhotoReady()) {
......
...@@ -17,10 +17,11 @@ package com.xabber.android.data.extension.capability; ...@@ -17,10 +17,11 @@ package com.xabber.android.data.extension.capability;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import org.jivesoftware.smack.util.Base64;
import com.xabber.android.data.entity.BaseEntity; import com.xabber.android.data.entity.BaseEntity;
import org.jivesoftware.smack.util.stringencoder.Base64;
class Capability extends BaseEntity { class Capability extends BaseEntity {
private static final String SHA1_METHOD = "sha-1"; private static final String SHA1_METHOD = "sha-1";
...@@ -80,7 +81,7 @@ class Capability extends BaseEntity { ...@@ -80,7 +81,7 @@ class Capability extends BaseEntity {
try { try {
MessageDigest md = MessageDigest.getInstance(hash.toUpperCase()); MessageDigest md = MessageDigest.getInstance(hash.toUpperCase());
byte[] digest = md.digest(value.getBytes()); byte[] digest = md.digest(value.getBytes());
return Base64.encodeBytes(digest); return Base64.encodeToString(digest);
} catch (NoSuchAlgorithmException nsae) { } catch (NoSuchAlgorithmException nsae) {
return null; return null;
} }
......
...@@ -14,17 +14,6 @@ ...@@ -14,17 +14,6 @@
*/ */
package com.xabber.android.data.extension.capability; 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.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
...@@ -35,6 +24,15 @@ import com.xabber.android.data.connection.OnAuthorizedListener; ...@@ -35,6 +24,15 @@ import com.xabber.android.data.connection.OnAuthorizedListener;
import com.xabber.android.data.connection.OnResponseListener; import com.xabber.android.data.connection.OnResponseListener;
import com.xabber.xmpp.address.Jid; 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, public class ServerInfoManager implements OnAuthorizedListener,
OnResponseListener { OnResponseListener {
...@@ -66,7 +64,7 @@ public class ServerInfoManager implements OnAuthorizedListener, ...@@ -66,7 +64,7 @@ public class ServerInfoManager implements OnAuthorizedListener,
if (protocols.get(account) == null) { if (protocols.get(account) == null) {
DiscoverInfo packet = new DiscoverInfo(); DiscoverInfo packet = new DiscoverInfo();
packet.setTo(Jid.getServer(account)); packet.setTo(Jid.getServer(account));
packet.setType(Type.GET); packet.setType(Type.get);
try { try {
ConnectionManager.getInstance().sendRequest(account, ConnectionManager.getInstance().sendRequest(account,
packet, this); packet, this);
...@@ -92,9 +90,9 @@ public class ServerInfoManager implements OnAuthorizedListener, ...@@ -92,9 +90,9 @@ public class ServerInfoManager implements OnAuthorizedListener,
} }
ArrayList<String> features = new ArrayList<String>(); ArrayList<String> features = new ArrayList<String>();
DiscoverInfo discoverInfo = (DiscoverInfo) iq; DiscoverInfo discoverInfo = (DiscoverInfo) iq;
Iterator<Feature> iterator = discoverInfo.getFeatures(); for (DiscoverInfo.Feature feature : discoverInfo.getFeatures()) {
while (iterator.hasNext()) features.add(feature.getVar());
features.add(iterator.next().getVar()); }
protocols.put(account, features); protocols.put(account, features);
onAvailable(AccountManager.getInstance().getAccount(account)); onAvailable(AccountManager.getInstance().getAccount(account));
} }
...@@ -116,9 +114,7 @@ public class ServerInfoManager implements OnAuthorizedListener, ...@@ -116,9 +114,7 @@ public class ServerInfoManager implements OnAuthorizedListener,
public boolean isProtocolSupported(String account, String feature) { public boolean isProtocolSupported(String account, String feature) {
Collection<String> collection = protocols.get(account); Collection<String> collection = protocols.get(account);
if (collection == null) return collection != null && collection.contains(feature);
return false;
return collection.contains(feature);
} }
} }
...@@ -38,16 +38,17 @@ import com.xabber.android.data.roster.RosterManager; ...@@ -38,16 +38,17 @@ import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.receiver.ComposingPausedReceiver; import com.xabber.android.receiver.ComposingPausedReceiver;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener; 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.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;
import org.jivesoftware.smack.packet.Presence.Type; import org.jivesoftware.smack.packet.Presence.Type;
import org.jivesoftware.smackx.ChatState; import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.ServiceDiscoveryManager; import org.jivesoftware.smackx.chatstates.ChatState;
import org.jivesoftware.smackx.packet.ChatStateExtension; import org.jivesoftware.smackx.chatstates.packet.ChatStateExtension;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import java.util.Calendar; import java.util.Calendar;
import java.util.Map; import java.util.Map;
...@@ -70,14 +71,11 @@ public class ChatStateManager implements OnDisconnectListener, ...@@ -70,14 +71,11 @@ public class ChatStateManager implements OnDisconnectListener,
instance = new ChatStateManager(); instance = new ChatStateManager();
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
Connection XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override @Override
public void connectionCreated(final Connection connection) { public void connectionCreated(final XMPPConnection connection) {
ServiceDiscoveryManager ServiceDiscoveryManager.getInstanceFor(connection)
.getInstanceFor(connection) .addFeature("http://jabber.org/protocol/chatstates");
.addFeature(
"http://jabber.org/protocol/chatstates");
} }
}); });
} }
...@@ -238,7 +236,7 @@ public class ChatStateManager implements OnDisconnectListener, ...@@ -238,7 +236,7 @@ public class ChatStateManager implements OnDisconnectListener,
/** /**
* Must be call each time user change text message. * Must be call each time user change text message.
* *
* @param accunt * @param account
* @param user * @param user
*/ */
public void onComposing(String account, String user, CharSequence text) { public void onComposing(String account, String user, CharSequence text) {
...@@ -295,8 +293,7 @@ public class ChatStateManager implements OnDisconnectListener, ...@@ -295,8 +293,7 @@ public class ChatStateManager implements OnDisconnectListener,
} }
@Override @Override
public void onPacket(ConnectionItem connection, final String bareAddress, public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
Packet packet) {
if (!(connection instanceof AccountItem)) if (!(connection instanceof AccountItem))
return; return;
final String resource = Jid.getResource(packet.getFrom()); final String resource = Jid.getResource(packet.getFrom());
...@@ -312,11 +309,10 @@ public class ChatStateManager implements OnDisconnectListener, ...@@ -312,11 +309,10 @@ public class ChatStateManager implements OnDisconnectListener,
supports.remove(account, bareAddress, resource); supports.remove(account, bareAddress, resource);
} else if (packet instanceof Message) { } else if (packet instanceof Message) {
boolean support = false; boolean support = false;
for (PacketExtension extension : packet.getExtensions()) for (ExtensionElement extension : packet.getExtensions())
if (extension instanceof ChatStateExtension) { if (extension instanceof ChatStateExtension) {
removeCallback(account, bareAddress, resource); removeCallback(account, bareAddress, resource);
ChatState chatState = ((ChatStateExtension) extension) ChatState chatState = ((ChatStateExtension) extension).getChatState();
.getState();
chatStates.put(account, bareAddress, resource, chatState); chatStates.put(account, bareAddress, resource, chatState);
if (chatState != ChatState.active) { if (chatState != ChatState.active) {
Runnable runnable = new Runnable() { Runnable runnable = new Runnable() {
......
...@@ -35,12 +35,15 @@ import com.xabber.android.data.notification.NotificationManager; ...@@ -35,12 +35,15 @@ import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.xmpp.muc.MUC; import com.xabber.xmpp.muc.MUC;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.muc.MultiUserChat; 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.ArrayList;
import java.util.Collection; import java.util.Collection;
...@@ -293,7 +296,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener { ...@@ -293,7 +296,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
} }
final MultiUserChat multiUserChat; final MultiUserChat multiUserChat;
try { try {
multiUserChat = new MultiUserChat(xmppConnection, room); multiUserChat = MultiUserChatManager.getInstanceFor(xmppConnection).getMultiUserChat(room);
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
Application.getInstance().onError(R.string.NOT_CONNECTED); Application.getInstance().onError(R.string.NOT_CONNECTED);
return; return;
...@@ -323,7 +326,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener { ...@@ -323,7 +326,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
} }
}); });
return; return;
} catch (final XMPPException e) { } catch (final XMPPException.XMPPErrorException e) {
Application.getInstance().runOnUiThread(new Runnable() { Application.getInstance().runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
...@@ -332,13 +335,14 @@ public class MUCManager implements OnLoadListener, OnPacketListener { ...@@ -332,13 +335,14 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
} }
roomChat.setState(RoomState.error); roomChat.setState(RoomState.error);
addAuthorizationError(account, room); addAuthorizationError(account, room);
if (e.getXMPPError() != null && e.getXMPPError().getCode() == 409) {
Application.getInstance().onError(R.string.NICK_ALREADY_USED); // if (e.getXMPPError() != null && e.getXMPPError().getCode() == 409) {
} else if (e.getXMPPError() != null && e.getXMPPError().getCode() == 401) { // Application.getInstance().onError(R.string.NICK_ALREADY_USED);
Application.getInstance().onError(R.string.AUTHENTICATION_FAILED); // } else if (e.getXMPPError() != null && e.getXMPPError().getCode() == 401) {
} else { // Application.getInstance().onError(R.string.AUTHENTICATION_FAILED);
Application.getInstance().onError(R.string.NOT_CONNECTED); // } else {
} // Application.getInstance().onError(R.string.NOT_CONNECTED);
// }
RosterManager.getInstance().onContactChanged(account, room); RosterManager.getInstance().onContactChanged(account, room);
} }
}); });
...@@ -381,8 +385,8 @@ public class MUCManager implements OnLoadListener, OnPacketListener { ...@@ -381,8 +385,8 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
public void run() { public void run() {
try { try {
multiUserChat.leave(); multiUserChat.leave();
} catch (IllegalStateException e) { } catch (SmackException.NotConnectedException e) {
// Do nothing e.printStackTrace();
} }
} }
}; };
...@@ -393,7 +397,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener { ...@@ -393,7 +397,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
} }
@Override @Override
public void onPacket(ConnectionItem connection, String bareAddress, Packet packet) { public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem)) { if (!(connection instanceof AccountItem)) {
return; return;
} }
......
...@@ -31,11 +31,12 @@ import com.xabber.xmpp.muc.Role; ...@@ -31,11 +31,12 @@ import com.xabber.xmpp.muc.Role;
import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type; import org.jivesoftware.smack.packet.Message.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence; 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.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.Collection;
import java.util.Collections; import java.util.Collections;
...@@ -179,12 +180,12 @@ public class RoomChat extends AbstractChat { ...@@ -179,12 +180,12 @@ public class RoomChat extends AbstractChat {
} }
@Override @Override
protected boolean onPacket(String bareAddress, Packet packet) { protected boolean onPacket(String bareAddress, Stanza packet) {
if (!super.onPacket(bareAddress, packet)) { if (!super.onPacket(bareAddress, packet)) {
return false; return false;
} }
final String from = packet.getFrom(); final String from = packet.getFrom();
final String resource = StringUtils.parseResource(from); final String resource = XmppStringUtils.parseResource(from);
if (packet instanceof Message) { if (packet instanceof Message) {
final Message message = (Message) packet; final Message message = (Message) packet;
if (message.getType() == Message.Type.error) { if (message.getType() == Message.Type.error) {
...@@ -268,22 +269,22 @@ public class RoomChat extends AbstractChat { ...@@ -268,22 +269,22 @@ public class RoomChat extends AbstractChat {
occupants.remove(stringPrep); occupants.remove(stringPrep);
MUCUser mucUser = MUC.getMUCUserExtension(presence); MUCUser mucUser = MUC.getMUCUserExtension(presence);
if (mucUser != null && mucUser.getStatus() != null) { if (mucUser != null && mucUser.getStatus() != null) {
String code = mucUser.getStatus().getCode(); // String code = mucUser.getStatus().getCode();
if ("307".equals(code)) { // if ("307".equals(code)) {
onKick(resource, mucUser.getItem().getActor()); // onKick(resource, mucUser.getItem().getActor());
} else if ("301".equals(code)) { // } else if ("301".equals(code)) {
onBan(resource, mucUser.getItem().getActor()); // onBan(resource, mucUser.getItem().getActor());
} else if ("303".equals(code)) { // } else if ("303".equals(code)) {
String newNick = mucUser.getItem().getNick(); // String newNick = mucUser.getItem().getNick();
if (newNick == null) { // if (newNick == null) {
return true; // return true;
} // }
onRename(resource, newNick); // onRename(resource, newNick);
Occupant occupant = createOccupant(newNick, presence); // Occupant occupant = createOccupant(newNick, presence);
occupants.put(Jid.getStringPrep(newNick), occupant); // occupants.put(Jid.getStringPrep(newNick), occupant);
} else if ("321".equals(code)) { // } else if ("321".equals(code)) {
onRevoke(resource, mucUser.getItem().getActor()); // onRevoke(resource, mucUser.getItem().getActor());
} // }
} else { } else {
onLeave(resource); onLeave(resource);
} }
...@@ -356,15 +357,15 @@ public class RoomChat extends AbstractChat { ...@@ -356,15 +357,15 @@ public class RoomChat extends AbstractChat {
String statusText = null; String statusText = null;
MUCUser mucUser = MUC.getMUCUserExtension(presence); MUCUser mucUser = MUC.getMUCUserExtension(presence);
if (mucUser != null) { if (mucUser != null) {
MUCUser.Item item = mucUser.getItem(); MUCItem item = mucUser.getItem();
if (item != null) { if (item != null) {
jid = item.getJid(); jid = item.getJid();
try { try {
affiliation = Affiliation.fromString(item.getAffiliation()); affiliation = Affiliation.fromString(item.getAffiliation().toString());
} catch (NoSuchElementException e) { } catch (NoSuchElementException e) {
} }
try { try {
role = Role.fromString(item.getRole()); role = Role.fromString(item.getRole().toString());
} catch (NoSuchElementException e) { } catch (NoSuchElementException e) {
} }
statusMode = StatusMode.createStatusMode(presence); statusMode = StatusMode.createStatusMode(presence);
......
...@@ -14,13 +14,6 @@ ...@@ -14,13 +14,6 @@
*/ */
package com.xabber.android.data.extension.ping; 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.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
...@@ -29,6 +22,14 @@ import com.xabber.android.data.connection.ConnectionItem; ...@@ -29,6 +22,14 @@ import com.xabber.android.data.connection.ConnectionItem;
import com.xabber.android.data.connection.ConnectionManager; import com.xabber.android.data.connection.ConnectionManager;
import com.xabber.android.data.connection.OnPacketListener; 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. * Reply on incoming ping requests.
* *
...@@ -41,11 +42,9 @@ public class PingManager implements OnPacketListener { ...@@ -41,11 +42,9 @@ public class PingManager implements OnPacketListener {
static { static {
instance = new PingManager(); instance = new PingManager();
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
Connection
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override @Override
public void connectionCreated(final Connection connection) { public void connectionCreated(final XMPPConnection connection) {
ServiceDiscoveryManager.getInstanceFor(connection) ServiceDiscoveryManager.getInstanceFor(connection)
.addFeature("urn:xmpp:ping"); .addFeature("urn:xmpp:ping");
} }
...@@ -60,15 +59,14 @@ public class PingManager implements OnPacketListener { ...@@ -60,15 +59,14 @@ public class PingManager implements OnPacketListener {
} }
@Override @Override
public void onPacket(ConnectionItem connection, final String bareAddress, public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
Packet packet) {
if (!(connection instanceof AccountItem)) if (!(connection instanceof AccountItem))
return; return;
final String account = ((AccountItem) connection).getAccount(); final String account = ((AccountItem) connection).getAccount();
if (!(packet instanceof Ping)) if (!(packet instanceof Ping))
return; return;
final Ping ping = (Ping) packet; final Ping ping = (Ping) packet;
if (ping.getType() != IQ.Type.GET) if (ping.getType() != IQ.Type.get)
return; return;
try { try {
ConnectionManager.getInstance().sendPacket(account, ConnectionManager.getInstance().sendPacket(account,
......
...@@ -14,13 +14,6 @@ ...@@ -14,13 +14,6 @@
*/ */
package com.xabber.android.data.extension.ssn; 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.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
...@@ -40,6 +33,13 @@ import com.xabber.xmpp.ssn.Feature; ...@@ -40,6 +33,13 @@ import com.xabber.xmpp.ssn.Feature;
import com.xabber.xmpp.ssn.LoggingValue; import com.xabber.xmpp.ssn.LoggingValue;
import com.xabber.xmpp.ssn.SecurityValue; 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. * Stanza Session Negotiation.
* <p/> * <p/>
...@@ -82,8 +82,7 @@ public class SSNManager implements OnPacketListener, OnAccountRemovedListener { ...@@ -82,8 +82,7 @@ public class SSNManager implements OnPacketListener, OnAccountRemovedListener {
} }
@Override @Override
public void onPacket(ConnectionItem connection, final String bareAddress, public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
Packet packet) {
String from = packet.getFrom(); String from = packet.getFrom();
if (from == null) if (from == null)
return; return;
...@@ -95,7 +94,7 @@ public class SSNManager implements OnPacketListener, OnAccountRemovedListener { ...@@ -95,7 +94,7 @@ public class SSNManager implements OnPacketListener, OnAccountRemovedListener {
String session = message.getThread(); String session = message.getThread();
if (session == null) if (session == null)
return; return;
for (PacketExtension packetExtension : packet.getExtensions()) for (ExtensionElement packetExtension : packet.getExtensions())
if (packetExtension instanceof Feature) { if (packetExtension instanceof Feature) {
Feature feature = (Feature) packetExtension; Feature feature = (Feature) packetExtension;
if (!feature.isValid()) if (!feature.isValid())
......
...@@ -14,18 +14,6 @@ ...@@ -14,18 +14,6 @@
*/ */
package com.xabber.android.data.extension.time; 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.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
...@@ -39,6 +27,19 @@ import com.xabber.android.data.extension.capability.ServerInfoManager; ...@@ -39,6 +27,19 @@ import com.xabber.android.data.extension.capability.ServerInfoManager;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.time.Time; 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. * Manage server time and response with local time.
* *
...@@ -65,12 +66,10 @@ public class TimeManager implements OnServerInfoReceivedListener, ...@@ -65,12 +66,10 @@ public class TimeManager implements OnServerInfoReceivedListener,
instance = new TimeManager(); instance = new TimeManager();
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
Connection XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override @Override
public void connectionCreated(final Connection connection) { public void connectionCreated(final XMPPConnection connection) {
ServiceDiscoveryManager.getInstanceFor(connection) ServiceDiscoveryManager.getInstanceFor(connection).addFeature(FEATURE);
.addFeature(FEATURE);
} }
}); });
} }
...@@ -98,7 +97,7 @@ public class TimeManager implements OnServerInfoReceivedListener, ...@@ -98,7 +97,7 @@ public class TimeManager implements OnServerInfoReceivedListener,
sents.put(account, new Date()); sents.put(account, new Date());
Time packet = new Time(); Time packet = new Time();
packet.setTo(Jid.getServer(account)); packet.setTo(Jid.getServer(account));
packet.setType(Type.GET); packet.setType(Type.get);
try { try {
ConnectionManager.getInstance().sendRequest(account, packet, ConnectionManager.getInstance().sendRequest(account, packet,
this); this);
...@@ -110,17 +109,16 @@ public class TimeManager implements OnServerInfoReceivedListener, ...@@ -110,17 +109,16 @@ public class TimeManager implements OnServerInfoReceivedListener,
} }
@Override @Override
public void onPacket(ConnectionItem connection, final String bareAddress, public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
Packet packet) {
if (!(connection instanceof AccountItem)) if (!(connection instanceof AccountItem))
return; return;
String account = ((AccountItem) connection).getAccount(); String account = ((AccountItem) connection).getAccount();
if (!(packet instanceof Time)) if (!(packet instanceof Time))
return; return;
Time time = (Time) packet; Time time = (Time) packet;
if (time.getType() == Type.GET) { if (time.getType() == Type.get) {
Time result = new Time(); Time result = new Time();
result.setType(Type.RESULT); result.setType(Type.result);
result.setPacketID(time.getPacketID()); result.setPacketID(time.getPacketID());
result.setFrom(time.getTo()); result.setFrom(time.getTo());
result.setTo(time.getFrom()); result.setTo(time.getFrom());
......
...@@ -26,6 +26,7 @@ import org.jivesoftware.smack.packet.IQ; ...@@ -26,6 +26,7 @@ import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type; import org.jivesoftware.smack.packet.IQ.Type;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Stanza;
import android.database.Cursor; import android.database.Cursor;
...@@ -187,7 +188,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener, ...@@ -187,7 +188,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
} }
VCard packet = new VCard(); VCard packet = new VCard();
packet.setTo(bareAddress); packet.setTo(bareAddress);
packet.setType(Type.GET); packet.setType(Type.get);
VCardRequest request = new VCardRequest(account, bareAddress, VCardRequest request = new VCardRequest(account, bareAddress,
packet.getPacketID()); packet.getPacketID());
requests.add(request); requests.add(request);
...@@ -243,8 +244,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener, ...@@ -243,8 +244,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
} }
@Override @Override
public void onPacket(ConnectionItem connection, final String bareAddress, public void onPacket(ConnectionItem connection, final String bareAddress, Stanza packet) {
Packet packet) {
if (!(connection instanceof AccountItem)) if (!(connection instanceof AccountItem))
return; return;
String account = ((AccountItem) connection).getAccount(); String account = ((AccountItem) connection).getAccount();
...@@ -258,7 +258,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener, ...@@ -258,7 +258,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
request(account, bareAddress, null); request(account, bareAddress, null);
} else if (packet instanceof IQ) { } else if (packet instanceof IQ) {
IQ iq = (IQ) packet; IQ iq = (IQ) packet;
if (iq.getType() != Type.ERROR && !(packet instanceof VCard)) if (iq.getType() != Type.error && !(packet instanceof VCard))
return; return;
String packetId = iq.getPacketID(); String packetId = iq.getPacketID();
VCardRequest request = null; VCardRequest request = null;
...@@ -274,7 +274,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener, ...@@ -274,7 +274,7 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
if (request == null || !request.getUser().equals(bareAddress)) if (request == null || !request.getUser().equals(bareAddress))
return; return;
final StructuredName name; final StructuredName name;
if (iq.getType() == Type.ERROR) { if (iq.getType() == Type.error) {
onVCardFailed(account, bareAddress); onVCardFailed(account, bareAddress);
invalidHashes.addAll(request.getHashes()); invalidHashes.addAll(request.getHashes());
if (names.containsKey(bareAddress)) if (names.containsKey(bareAddress))
......
...@@ -35,8 +35,9 @@ import com.xabber.xmpp.carbon.CarbonManager; ...@@ -35,8 +35,9 @@ import com.xabber.xmpp.carbon.CarbonManager;
import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type; import org.jivesoftware.smack.packet.Message.Type;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.util.StringUtils; 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.ArrayList;
import java.util.Collection; import java.util.Collection;
...@@ -659,7 +660,7 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -659,7 +660,7 @@ public abstract class AbstractChat extends BaseEntity {
* @param packet * @param packet
* @return Whether packet was directed to this chat. * @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()); return accept(bareAddress, packet.getFrom());
} }
......
...@@ -45,10 +45,12 @@ import com.xabber.xmpp.address.Jid; ...@@ -45,10 +45,12 @@ import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.carbon.CarbonManager.Direction; import com.xabber.xmpp.carbon.CarbonManager.Direction;
import com.xabber.xmpp.delay.Delay; import com.xabber.xmpp.delay.Delay;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension; 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.BufferedWriter;
import java.io.File; import java.io.File;
...@@ -460,7 +462,7 @@ public class MessageManager implements OnLoadListener, OnPacketListener, OnDisco ...@@ -460,7 +462,7 @@ public class MessageManager implements OnLoadListener, OnPacketListener, OnDisco
} }
@Override @Override
public void onPacket(ConnectionItem connection, String bareAddress, Packet packet) { public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
if (!(connection instanceof AccountItem)) { if (!(connection instanceof AccountItem)) {
return; return;
} }
...@@ -492,7 +494,7 @@ public class MessageManager implements OnLoadListener, OnPacketListener, OnDisco ...@@ -492,7 +494,7 @@ public class MessageManager implements OnLoadListener, OnPacketListener, OnDisco
if (body == null) { if (body == null) {
return; return;
} }
for (PacketExtension packetExtension : message.getExtensions()) { for (ExtensionElement packetExtension : message.getExtensions()) {
if (packetExtension instanceof MUCUser) { if (packetExtension instanceof MUCUser) {
return; return;
} }
......
...@@ -14,13 +14,6 @@ ...@@ -14,13 +14,6 @@
*/ */
package com.xabber.android.data.message; 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.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
...@@ -34,6 +27,14 @@ import com.xabber.android.data.extension.muc.RoomChat; ...@@ -34,6 +27,14 @@ import com.xabber.android.data.extension.muc.RoomChat;
import com.xabber.xmpp.receipt.Received; import com.xabber.xmpp.receipt.Received;
import com.xabber.xmpp.receipt.Request; 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. * Manage message receive receipts as well as error replies.
* *
...@@ -52,10 +53,9 @@ public class ReceiptManager implements OnPacketListener, OnDisconnectListener { ...@@ -52,10 +53,9 @@ public class ReceiptManager implements OnPacketListener, OnDisconnectListener {
instance = new ReceiptManager(); instance = new ReceiptManager();
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
Connection XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
.addConnectionCreationListener(new ConnectionCreationListener() {
@Override @Override
public void connectionCreated(final Connection connection) { public void connectionCreated(final XMPPConnection connection) {
ServiceDiscoveryManager.getInstanceFor(connection) ServiceDiscoveryManager.getInstanceFor(connection)
.addFeature("urn:xmpp:receipts"); .addFeature("urn:xmpp:receipts");
} }
...@@ -86,8 +86,7 @@ public class ReceiptManager implements OnPacketListener, OnDisconnectListener { ...@@ -86,8 +86,7 @@ public class ReceiptManager implements OnPacketListener, OnDisconnectListener {
} }
@Override @Override
public void onPacket(ConnectionItem connection, String bareAddress, public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
Packet packet) {
if (!(connection instanceof AccountItem)) if (!(connection instanceof AccountItem))
return; return;
String account = ((AccountItem) connection).getAccount(); String account = ((AccountItem) connection).getAccount();
...@@ -115,7 +114,7 @@ public class ReceiptManager implements OnPacketListener, OnDisconnectListener { ...@@ -115,7 +114,7 @@ public class ReceiptManager implements OnPacketListener, OnDisconnectListener {
messageItem.getChat().getUser(), false); messageItem.getChat().getUser(), false);
} }
} else { } else {
for (PacketExtension packetExtension : message.getExtensions()) for (ExtensionElement packetExtension : message.getExtensions())
if (packetExtension instanceof Received) { if (packetExtension instanceof Received) {
Received received = (Received) packetExtension; Received received = (Received) packetExtension;
String id = received.getId(); String id = received.getId();
......
...@@ -31,9 +31,9 @@ import net.java.otr4j.OtrException; ...@@ -31,9 +31,9 @@ import net.java.otr4j.OtrException;
import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type; import org.jivesoftware.smack.packet.Message.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence; 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. * Represents normal chat.
...@@ -114,7 +114,7 @@ public class RegularChat extends AbstractChat { ...@@ -114,7 +114,7 @@ public class RegularChat extends AbstractChat {
} }
@Override @Override
protected boolean onPacket(String bareAddress, Packet packet) { protected boolean onPacket(String bareAddress, Stanza packet) {
if (!super.onPacket(bareAddress, packet)) if (!super.onPacket(bareAddress, packet))
return false; return false;
final String resource = Jid.getResource(packet.getFrom()); final String resource = Jid.getResource(packet.getFrom());
......
...@@ -33,12 +33,11 @@ import com.xabber.android.data.notification.NotificationManager; ...@@ -33,12 +33,11 @@ import com.xabber.android.data.notification.NotificationManager;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Presence.Type; import org.jivesoftware.smack.packet.Presence.Type;
import org.jivesoftware.smack.packet.RosterPacket; import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.packet.RosterPacket.ItemType; import org.jivesoftware.smack.roster.packet.RosterPacket;
import org.jivesoftware.smack.util.StringUtils; import org.jxmpp.util.XmppStringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
...@@ -218,8 +217,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener, ...@@ -218,8 +217,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
} }
@Override @Override
public void onPacket(ConnectionItem connection, String bareAddress, public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
Packet packet) {
if (!(connection instanceof AccountItem)) if (!(connection instanceof AccountItem))
return; return;
String account = ((AccountItem) connection).getAccount(); String account = ((AccountItem) connection).getAccount();
...@@ -242,7 +240,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener, ...@@ -242,7 +240,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
} }
return; return;
} }
String verbose = StringUtils.parseResource(presence.getFrom()); String verbose = XmppStringUtils.parseResource(presence.getFrom());
String resource = Jid.getResource(presence.getFrom()); String resource = Jid.getResource(presence.getFrom());
ResourceContainer resourceContainer = presenceContainers.get( ResourceContainer resourceContainer = presenceContainers.get(
account, bareAddress); account, bareAddress);
...@@ -316,11 +314,11 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener, ...@@ -316,11 +314,11 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
RosterManager.getInstance().onContactChanged(account, bareAddress); RosterManager.getInstance().onContactChanged(account, bareAddress);
} else if (packet instanceof RosterPacket } else if (packet instanceof RosterPacket
&& ((RosterPacket) packet).getType() != IQ.Type.ERROR) { && ((RosterPacket) packet).getType() != IQ.Type.error) {
RosterPacket rosterPacket = (RosterPacket) packet; RosterPacket rosterPacket = (RosterPacket) packet;
for (RosterPacket.Item item : rosterPacket.getRosterItems()) { for (RosterPacket.Item item : rosterPacket.getRosterItems()) {
if (item.getItemType() == ItemType.both if (item.getItemType() == RosterPacket.ItemType.both
|| item.getItemType() == ItemType.from) { || item.getItemType() == RosterPacket.ItemType.from) {
String user = Jid.getBareAddress(item.getUser()); String user = Jid.getBareAddress(item.getUser());
if (user == null) if (user == null)
continue; continue;
......
...@@ -38,9 +38,8 @@ import com.xabber.android.data.message.MessageManager; ...@@ -38,9 +38,8 @@ import com.xabber.android.data.message.MessageManager;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.packet.RosterPacket; import org.jivesoftware.smack.roster.packet.RosterPacket;
import org.jivesoftware.smack.packet.RosterPacket.ItemType;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
...@@ -135,7 +134,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -135,7 +134,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
/** /**
* Adds new group to be managed. * Adds new group to be managed.
* *
* @param contact * @param group
*/ */
void addRosterGroup(RosterGroup group) { void addRosterGroup(RosterGroup group) {
rosterGroups.put(group.getAccount(), group.getName(), group); rosterGroups.put(group.getAccount(), group.getName(), group);
...@@ -297,7 +296,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -297,7 +296,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
public void createContact(String account, String bareAddress, String name, public void createContact(String account, String bareAddress, String name,
Collection<String> groups) throws NetworkException { Collection<String> groups) throws NetworkException {
RosterPacket packet = new RosterPacket(); RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET); packet.setType(IQ.Type.set);
RosterPacket.Item item = new RosterPacket.Item(bareAddress, name); RosterPacket.Item item = new RosterPacket.Item(bareAddress, name);
for (String group : groups) for (String group : groups)
if (group.trim().length() > 0) if (group.trim().length() > 0)
...@@ -316,7 +315,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -316,7 +315,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
public void removeContact(String account, String bareAddress) public void removeContact(String account, String bareAddress)
throws NetworkException { throws NetworkException {
RosterPacket packet = new RosterPacket(); RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET); packet.setType(IQ.Type.set);
RosterPacket.Item item = new RosterPacket.Item(bareAddress, ""); RosterPacket.Item item = new RosterPacket.Item(bareAddress, "");
item.setItemType(RosterPacket.ItemType.remove); item.setItemType(RosterPacket.ItemType.remove);
packet.addRosterItem(item); packet.addRosterItem(item);
...@@ -352,7 +351,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -352,7 +351,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
private void updateRosterContact(String account, String bareAddress, String name, Collection<String> groups) throws NetworkException { private void updateRosterContact(String account, String bareAddress, String name, Collection<String> groups) throws NetworkException {
RosterPacket packet = new RosterPacket(); RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET); packet.setType(IQ.Type.set);
RosterPacket.Item item = new RosterPacket.Item(bareAddress, name); RosterPacket.Item item = new RosterPacket.Item(bareAddress, name);
for (String group : groups) { for (String group : groups) {
item.addGroupName(group); item.addGroupName(group);
...@@ -371,7 +370,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -371,7 +370,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
public void removeGroup(String account, String group) public void removeGroup(String account, String group)
throws NetworkException { throws NetworkException {
RosterPacket packet = new RosterPacket(); RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET); packet.setType(IQ.Type.set);
for (RosterContact contact : rosterContacts.getNested(account).values()) { for (RosterContact contact : rosterContacts.getNested(account).values()) {
HashSet<String> groups = new HashSet<String>( HashSet<String> groups = new HashSet<String>(
contact.getGroupNames()); contact.getGroupNames());
...@@ -424,7 +423,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -424,7 +423,7 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
if (newGroup.equals(oldGroup)) if (newGroup.equals(oldGroup))
return; return;
RosterPacket packet = new RosterPacket(); RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET); packet.setType(IQ.Type.set);
for (RosterContact contact : rosterContacts.getNested(account).values()) { for (RosterContact contact : rosterContacts.getNested(account).values()) {
HashSet<String> groups = new HashSet<String>( HashSet<String> groups = new HashSet<String>(
contact.getGroupNames()); contact.getGroupNames());
...@@ -531,14 +530,13 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -531,14 +530,13 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
} }
@Override @Override
public void onPacket(ConnectionItem connection, String bareAddress, public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
Packet packet) {
if (!(connection instanceof AccountItem)) if (!(connection instanceof AccountItem))
return; return;
String account = ((AccountItem) connection).getAccount(); String account = ((AccountItem) connection).getAccount();
if (!(packet instanceof RosterPacket)) if (!(packet instanceof RosterPacket))
return; return;
if (((RosterPacket) packet).getType() != IQ.Type.ERROR) { if (((RosterPacket) packet).getType() != IQ.Type.error) {
boolean rosterWasReceived = requestedRosters.remove(account); boolean rosterWasReceived = requestedRosters.remove(account);
ArrayList<RosterContact> remove = new ArrayList<RosterContact>(); ArrayList<RosterContact> remove = new ArrayList<RosterContact>();
if (rosterWasReceived) if (rosterWasReceived)
...@@ -592,8 +590,8 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -592,8 +590,8 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
for (RosterGroupReference rosterGroup : removeGroupReferences) for (RosterGroupReference rosterGroup : removeGroupReferences)
removeGroupReference(contact, rosterGroup, removeGroupReference(contact, rosterGroup,
removedGroups, removedGroupReference); removedGroups, removedGroupReference);
contact.setSubscribed(item.getItemType() == ItemType.both contact.setSubscribed(item.getItemType() == RosterPacket.ItemType.both
|| item.getItemType() == ItemType.to); || item.getItemType() == RosterPacket.ItemType.to);
} }
} }
for (RosterContact contact : remove) { for (RosterContact contact : remove) {
...@@ -637,8 +635,6 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -637,8 +635,6 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
/** /**
* Notifies registered {@link OnContactChangedListener}. * Notifies registered {@link OnContactChangedListener}.
*
* @param entities
*/ */
public void onContactChanged(String account, String bareAddress) { public void onContactChanged(String account, String bareAddress) {
final ArrayList<BaseEntity> entities = new ArrayList<BaseEntity>(); final ArrayList<BaseEntity> entities = new ArrayList<BaseEntity>();
......
...@@ -24,7 +24,7 @@ import com.xabber.android.data.message.MessageManager; ...@@ -24,7 +24,7 @@ import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.ui.adapter.AccountChooseAdapter; 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 { public class ConferenceAddFragment extends Fragment implements AdapterView.OnItemSelectedListener {
...@@ -88,8 +88,8 @@ public class ConferenceAddFragment extends Fragment implements AdapterView.OnIte ...@@ -88,8 +88,8 @@ public class ConferenceAddFragment extends Fragment implements AdapterView.OnIte
accountView.setOnItemSelectedListener(this); accountView.setOnItemSelectedListener(this);
if (room != null) { if (room != null) {
serverView.setText(StringUtils.parseServer(room)); serverView.setText(XmppStringUtils.parseDomain(room));
roomView.setText(StringUtils.parseName(room)); roomView.setText(XmppStringUtils.parseLocalpart(room));
} }
if (account != null && room != null) { if (account != null && room != null) {
...@@ -165,7 +165,7 @@ public class ConferenceAddFragment extends Fragment implements AdapterView.OnIte ...@@ -165,7 +165,7 @@ public class ConferenceAddFragment extends Fragment implements AdapterView.OnIte
return ""; return "";
} }
String nickname = AccountManager.getInstance().getNickName(account); String nickname = AccountManager.getInstance().getNickName(account);
String name = StringUtils.parseName(nickname); String name = XmppStringUtils.parseLocalpart(nickname);
if ("".equals(name)) { if ("".equals(name)) {
return nickname; return nickname;
} else { } else {
......
...@@ -144,7 +144,7 @@ public class ContactVcardViewerFragment extends Fragment implements OnVCardListe ...@@ -144,7 +144,7 @@ public class ContactVcardViewerFragment extends Fragment implements OnVCardListe
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
outState.putBoolean(SAVED_VCARD_ERROR, vCardError); outState.putBoolean(SAVED_VCARD_ERROR, vCardError);
if (vCard != null) { 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; ...@@ -23,7 +23,8 @@ import com.xabber.android.R;
import com.xabber.android.data.extension.cs.ChatStateManager; import com.xabber.android.data.extension.cs.ChatStateManager;
import com.xabber.android.data.roster.AbstractContact; import com.xabber.android.data.roster.AbstractContact;
import org.jivesoftware.smackx.ChatState; import org.jivesoftware.smackx.chatstates.ChatState;
public class ContactTitleInflater { public class ContactTitleInflater {
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
*/ */
package com.xabber.xmpp; package com.xabber.xmpp;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
/** /**
...@@ -24,9 +24,11 @@ import org.xmlpull.v1.XmlPullParser; ...@@ -24,9 +24,11 @@ import org.xmlpull.v1.XmlPullParser;
* @author alexander.ivanov * @author alexander.ivanov
*/ */
public abstract class AbstractExtensionProvider<Extension extends PacketExtension> 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 { public Extension parseExtension(XmlPullParser parser) throws Exception {
return provideInstance(parser); return provideInstance(parser);
} }
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
*/ */
package com.xabber.xmpp; package com.xabber.xmpp;
import org.jivesoftware.smack.provider.IQProvider;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
/** /**
...@@ -23,10 +22,12 @@ import org.xmlpull.v1.XmlPullParser; ...@@ -23,10 +22,12 @@ import org.xmlpull.v1.XmlPullParser;
* @param <T> * @param <T>
* @author alexander.ivanov * @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 { public IQ parseIQ(XmlPullParser parser) throws Exception {
return provideInstance(parser); return provideInstance(parser);
} }
......
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
*/ */
package com.xabber.xmpp; package com.xabber.xmpp;
import com.xabber.android.data.LogManager;
import java.io.IOException; import java.io.IOException;
import org.xmlpull.v1.XmlSerializer; import org.xmlpull.v1.XmlSerializer;
...@@ -25,17 +27,33 @@ import org.xmlpull.v1.XmlSerializer; ...@@ -25,17 +27,33 @@ import org.xmlpull.v1.XmlSerializer;
* *
* @author alexander.ivanov * @author alexander.ivanov
*/ */
public abstract class IQ extends org.jivesoftware.smack.packet.IQ implements public abstract class IQ extends org.jivesoftware.smack.packet.IQ implements Container {
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 @Override
public void serialize(XmlSerializer serializer) throws IOException { public void serialize(XmlSerializer serializer) throws IOException {
// LogManager.i(this, "serialize ");
SerializerUtils.serialize(serializer, this); SerializerUtils.serialize(serializer, this);
} }
@Override @Override
public String getChildElementXML() { protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
return SerializerUtils.toXml(this); // TODO ?
// LogManager.i(this, "getIQChildElementBuilder");
xml.append(SerializerUtils.toXml(this));
return xml;
} }
} }
...@@ -26,7 +26,7 @@ import org.xmlpull.v1.XmlSerializer; ...@@ -26,7 +26,7 @@ import org.xmlpull.v1.XmlSerializer;
* @author alexander.ivanov * @author alexander.ivanov
*/ */
public abstract class PacketExtension implements Container, public abstract class PacketExtension implements Container,
org.jivesoftware.smack.packet.PacketExtension { org.jivesoftware.smack.packet.ExtensionElement {
@Override @Override
public void serialize(XmlSerializer serializer) throws IOException { public void serialize(XmlSerializer serializer) throws IOException {
......
...@@ -25,6 +25,7 @@ import java.util.regex.Matcher; ...@@ -25,6 +25,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
import org.jxmpp.util.XmppDateTime;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
...@@ -69,7 +70,7 @@ public class ProviderUtils { ...@@ -69,7 +70,7 @@ public class ProviderUtils {
if (matcher.matches()) if (matcher.matches())
dateString = matcher.group(1) + matcher.group(2); dateString = matcher.group(1) + matcher.group(2);
try { try {
return StringUtils.parseXEP0082Date(dateString); return XmppDateTime.parseXEP0082Date(dateString);
} catch (ParseException e) { } catch (ParseException e) {
synchronized (XEP_0082_UTC_FORMAT_WITHOUT_MILLIS) { synchronized (XEP_0082_UTC_FORMAT_WITHOUT_MILLIS) {
try { try {
......
...@@ -14,16 +14,16 @@ ...@@ -14,16 +14,16 @@
*/ */
package com.xabber.xmpp; 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.IOException;
import java.io.StringWriter; import java.io.StringWriter;
import java.io.Writer; import java.io.Writer;
import java.util.Date; 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. * Set of functions commonly used by packet writers.
* *
...@@ -151,7 +151,7 @@ public final class SerializerUtils { ...@@ -151,7 +151,7 @@ public final class SerializerUtils {
public static String serializeDateTime(Date value) { public static String serializeDateTime(Date value) {
if (value == null) if (value == null)
return null; return null;
return StringUtils.formatXEP0082Date(value); return XmppDateTime.formatXEP0082Date(value);
} }
/** /**
...@@ -165,7 +165,7 @@ public final class SerializerUtils { ...@@ -165,7 +165,7 @@ public final class SerializerUtils {
} }
/** /**
* @param date * @param value
* @return <code>null</code> if value was <code>null</code>. * @return <code>null</code> if value was <code>null</code>.
*/ */
public static String serializeBoolean(Boolean value) { public static String serializeBoolean(Boolean value) {
......
...@@ -17,6 +17,7 @@ package com.xabber.xmpp.address; ...@@ -17,6 +17,7 @@ package com.xabber.xmpp.address;
import java.util.Locale; import java.util.Locale;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
import org.jxmpp.util.XmppStringUtils;
/** /**
* Provides methods to process Jabber Identifier. * Provides methods to process Jabber Identifier.
...@@ -37,8 +38,7 @@ public class Jid { ...@@ -37,8 +38,7 @@ public class Jid {
* argument. * argument.
*/ */
public static String getResource(String user) { public static String getResource(String user) {
return user == null ? null : StringUtils.parseResource(user return user == null ? null : XmppStringUtils.parseResource(user.toLowerCase(Locale.US));
.toLowerCase(Locale.US));
} }
/** /**
...@@ -47,8 +47,7 @@ public class Jid { ...@@ -47,8 +47,7 @@ public class Jid {
* <code>null</code> argument. * <code>null</code> argument.
*/ */
public static String getServer(String user) { public static String getServer(String user) {
return user == null ? null : StringUtils.parseServer(user return user == null ? null : XmppStringUtils.parseDomain(user.toLowerCase(Locale.US));
.toLowerCase(Locale.US));
} }
/** /**
...@@ -57,8 +56,7 @@ public class Jid { ...@@ -57,8 +56,7 @@ public class Jid {
* <code>null</code> argument. * <code>null</code> argument.
*/ */
public static String getName(String user) { public static String getName(String user) {
return user == null ? null : StringUtils.parseName(user return user == null ? null : XmppStringUtils.parseLocalpart(user.toLowerCase(Locale.US));
.toLowerCase(Locale.US));
} }
/** /**
...@@ -67,8 +65,7 @@ public class Jid { ...@@ -67,8 +65,7 @@ public class Jid {
* <code>null</code> argument. * <code>null</code> argument.
*/ */
public static String getBareAddress(String user) { public static String getBareAddress(String user) {
return user == null ? null : StringUtils.parseBareAddress(user return user == null ? null : XmppStringUtils.parseBareJid(user.toLowerCase(Locale.US));
.toLowerCase(Locale.US));
} }
/** /**
......
...@@ -14,16 +14,16 @@ ...@@ -14,16 +14,16 @@
*/ */
package com.xabber.xmpp.archive; package com.xabber.xmpp.archive;
import java.io.IOException; import com.xabber.xmpp.IQ;
import java.util.Date; import com.xabber.xmpp.SerializerUtils;
import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smack.packet.ExtensionElement;
import org.xmlpull.v1.XmlSerializer; import org.xmlpull.v1.XmlSerializer;
import com.xabber.xmpp.IQ; import java.io.IOException;
import com.xabber.xmpp.SerializerUtils; 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"; static final String NAMESPACE = "urn:xmpp:archive";
...@@ -34,6 +34,10 @@ public abstract class AbstractChat extends IQ implements PacketExtension { ...@@ -34,6 +34,10 @@ public abstract class AbstractChat extends IQ implements PacketExtension {
private String startString; private String startString;
private String with; private String with;
public AbstractChat(String childElementName) {
super(childElementName, NAMESPACE);
}
@Override @Override
public void serializeContent(XmlSerializer serializer) throws IOException { public void serializeContent(XmlSerializer serializer) throws IOException {
if (startString != null) if (startString != null)
......
...@@ -38,6 +38,7 @@ public class Auto extends IQ { ...@@ -38,6 +38,7 @@ public class Auto extends IQ {
private boolean save; private boolean save;
public Auto() { public Auto() {
super(ELEMENT_NAME, NAMESPACE);
} }
@Override @Override
......
...@@ -50,6 +50,7 @@ public class Chat extends AbstractChat implements CollectionHeader { ...@@ -50,6 +50,7 @@ public class Chat extends AbstractChat implements CollectionHeader {
// TODO: notes // TODO: notes
public Chat() { public Chat() {
super(ELEMENT_NAME);
messages = new ArrayList<AbstractMessage>(); messages = new ArrayList<AbstractMessage>();
} }
......
...@@ -14,19 +14,20 @@ ...@@ -14,19 +14,20 @@
*/ */
package com.xabber.xmpp.archive; 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.AbstractIQProvider;
import com.xabber.xmpp.ProviderUtils; import com.xabber.xmpp.ProviderUtils;
import com.xabber.xmpp.rsm.Set; import com.xabber.xmpp.rsm.Set;
public class ChatProvider extends AbstractIQProvider<Chat> implements import org.jivesoftware.smack.packet.ExtensionElement;
PacketExtensionProvider { import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
public class ChatProvider extends AbstractIQProvider<Chat>
//TODO
// implements DataPacketProvider.PacketExtensionProvider
{
@Override // @Override
public Chat parseExtension(XmlPullParser parser) throws Exception { public Chat parseExtension(XmlPullParser parser) throws Exception {
return provideInstance(parser); return provideInstance(parser);
} }
...@@ -78,9 +79,8 @@ public class ChatProvider extends AbstractIQProvider<Chat> implements ...@@ -78,9 +79,8 @@ public class ChatProvider extends AbstractIQProvider<Chat> implements
instance.setPrevious(value); instance.setPrevious(value);
} else if (Set.ELEMENT_NAME.equals(name) } else if (Set.ELEMENT_NAME.equals(name)
&& Set.NAMESPACE.equals(parser.getNamespace())) { && Set.NAMESPACE.equals(parser.getNamespace())) {
PacketExtension packetExtension = PacketParserUtils ExtensionElement packetExtension = PacketParserUtils
.parsePacketExtension(Set.ELEMENT_NAME, Set.NAMESPACE, .parseExtensionElement(Set.ELEMENT_NAME, Set.NAMESPACE, parser);
parser);
if (packetExtension instanceof Set if (packetExtension instanceof Set
&& ((Set) packetExtension).isValid()) && ((Set) packetExtension).isValid())
instance.setRsm((Set) packetExtension); instance.setRsm((Set) packetExtension);
......
...@@ -38,6 +38,7 @@ public class ItemRemove extends IQ { ...@@ -38,6 +38,7 @@ public class ItemRemove extends IQ {
private final Collection<Item> items; private final Collection<Item> items;
public ItemRemove() { public ItemRemove() {
super(ELEMENT_NAME, NAMESPACE);
items = new ArrayList<Item>(); items = new ArrayList<Item>();
} }
......
...@@ -51,6 +51,7 @@ public class List extends IQ { ...@@ -51,6 +51,7 @@ public class List extends IQ {
private final Collection<Chat> chats; private final Collection<Chat> chats;
public List() { public List() {
super(ELEMENT_NAME, NAMESPACE);
chats = new ArrayList<Chat>(); chats = new ArrayList<Chat>();
} }
......
...@@ -14,14 +14,14 @@ ...@@ -14,14 +14,14 @@
*/ */
package com.xabber.xmpp.archive; 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.AbstractIQProvider;
import com.xabber.xmpp.ProviderUtils; import com.xabber.xmpp.ProviderUtils;
import com.xabber.xmpp.rsm.Set; 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> { public class ListProvider extends AbstractIQProvider<List> {
@Override @Override
...@@ -54,9 +54,8 @@ public class ListProvider extends AbstractIQProvider<List> { ...@@ -54,9 +54,8 @@ public class ListProvider extends AbstractIQProvider<List> {
instance.addChat(value); instance.addChat(value);
} else if (Set.ELEMENT_NAME.equals(name) } else if (Set.ELEMENT_NAME.equals(name)
&& Set.NAMESPACE.equals(parser.getNamespace())) { && Set.NAMESPACE.equals(parser.getNamespace())) {
PacketExtension packetExtension = PacketParserUtils ExtensionElement packetExtension = PacketParserUtils
.parsePacketExtension(Set.ELEMENT_NAME, Set.NAMESPACE, .parseExtensionElement(Set.ELEMENT_NAME, Set.NAMESPACE, parser);
parser);
if (packetExtension instanceof Set if (packetExtension instanceof Set
&& ((Set) packetExtension).isValid()) && ((Set) packetExtension).isValid())
instance.setRsm((Set) packetExtension); instance.setRsm((Set) packetExtension);
......
...@@ -45,6 +45,7 @@ public class Modified extends IQ { ...@@ -45,6 +45,7 @@ public class Modified extends IQ {
private final Collection<AbstractModified> chats; private final Collection<AbstractModified> chats;
public Modified() { public Modified() {
super(ELEMENT_NAME, NAMESPACE);
chats = new ArrayList<AbstractModified>(); chats = new ArrayList<AbstractModified>();
} }
......
...@@ -14,14 +14,14 @@ ...@@ -14,14 +14,14 @@
*/ */
package com.xabber.xmpp.archive; 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.AbstractIQProvider;
import com.xabber.xmpp.ProviderUtils; import com.xabber.xmpp.ProviderUtils;
import com.xabber.xmpp.rsm.Set; 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> { public class ModifiedProvider extends AbstractIQProvider<Modified> {
@Override @Override
...@@ -54,9 +54,8 @@ public class ModifiedProvider extends AbstractIQProvider<Modified> { ...@@ -54,9 +54,8 @@ public class ModifiedProvider extends AbstractIQProvider<Modified> {
instance.addModified(value); instance.addModified(value);
} else if (Set.ELEMENT_NAME.equals(name) } else if (Set.ELEMENT_NAME.equals(name)
&& Set.NAMESPACE.equals(parser.getNamespace())) { && Set.NAMESPACE.equals(parser.getNamespace())) {
PacketExtension packetExtension = PacketParserUtils ExtensionElement packetExtension = PacketParserUtils
.parsePacketExtension(Set.ELEMENT_NAME, Set.NAMESPACE, .parseExtensionElement(Set.ELEMENT_NAME, Set.NAMESPACE, parser);
parser);
if (packetExtension instanceof Set if (packetExtension instanceof Set
&& ((Set) packetExtension).isValid()) && ((Set) packetExtension).isValid())
instance.setRsm((Set) packetExtension); instance.setRsm((Set) packetExtension);
......
...@@ -55,6 +55,7 @@ public class Pref extends IQ { ...@@ -55,6 +55,7 @@ public class Pref extends IQ {
private final Map<TypeMode, UseMode> methods; private final Map<TypeMode, UseMode> methods;
public Pref() { public Pref() {
super(ELEMENT_NAME, NAMESPACE);
items = new ArrayList<Item>(); items = new ArrayList<Item>();
sessions = new ArrayList<Session>(); sessions = new ArrayList<Session>();
methods = new HashMap<TypeMode, UseMode>(); methods = new HashMap<TypeMode, UseMode>();
......
...@@ -40,6 +40,10 @@ public class Remove extends AbstractChat { ...@@ -40,6 +40,10 @@ public class Remove extends AbstractChat {
private boolean open; private boolean open;
private Date end; private Date end;
public Remove() {
super(ELEMENT_NAME);
}
@Override @Override
public void serializeContent(XmlSerializer serializer) throws IOException { public void serializeContent(XmlSerializer serializer) throws IOException {
super.serializeContent(serializer); super.serializeContent(serializer);
......
...@@ -33,6 +33,10 @@ public class Retrieve extends AbstractChat { ...@@ -33,6 +33,10 @@ public class Retrieve extends AbstractChat {
private Set rsm; private Set rsm;
public Retrieve() {
super(ELEMENT_NAME);
}
@Override @Override
public void serializeContent(XmlSerializer serializer) throws IOException { public void serializeContent(XmlSerializer serializer) throws IOException {
super.serializeContent(serializer); super.serializeContent(serializer);
......
...@@ -38,6 +38,7 @@ public class SessionRemove extends IQ { ...@@ -38,6 +38,7 @@ public class SessionRemove extends IQ {
private final Collection<Session> sessions; private final Collection<Session> sessions;
public SessionRemove() { public SessionRemove() {
super(ELEMENT_NAME, NAMESPACE);
sessions = new ArrayList<Session>(); sessions = new ArrayList<Session>();
} }
......
...@@ -15,16 +15,14 @@ import com.xabber.android.data.message.AbstractChat; ...@@ -15,16 +15,14 @@ import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.MessageItem; import com.xabber.android.data.message.MessageItem;
import com.xabber.android.data.message.MessageManager; import com.xabber.android.data.message.MessageManager;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener; import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.filter.PacketIDFilter; import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
/** /**
* Packet extension for XEP-0280: Message Carbons. This class implements * Packet extension for XEP-0280: Message Carbons. This class implements
...@@ -44,11 +42,11 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList ...@@ -44,11 +42,11 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
instance = new CarbonManager(); instance = new CarbonManager();
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
Connection.addConnectionCreationListener(new ConnectionCreationListener() { XMPPConnectionRegistry.addConnectionCreationListener(new ConnectionCreationListener() {
@Override @Override
public void connectionCreated(final Connection connection) { public void connectionCreated(final XMPPConnection connection) {
if (!(connection instanceof XMPPConnection)) { if (connection == null) {
return; return;
} }
...@@ -62,7 +60,7 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList ...@@ -62,7 +60,7 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
}); });
} }
private Connection connection; private XMPPConnection connection;
private volatile boolean enabled_state = false; private volatile boolean enabled_state = false;
private CarbonManager() { private CarbonManager() {
...@@ -83,20 +81,20 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList ...@@ -83,20 +81,20 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
msg.addExtension(new Private()); msg.addExtension(new Private());
} }
private IQ carbonsEnabledIQ(final boolean new_state) { // private IQ carbonsEnabledIQ(final boolean new_state) {
//
if (!checkConnected()) { // if (!checkConnected()) {
return null; // return null;
} // }
IQ setIQ = new IQ() { // IQ setIQ = new IQ() {
public String getChildElementXML() { // public String getChildElementXML() {
return String.format("<%s xmlns='%s'/>", new_state ? "enable" : "disable", NAMESPACE); // return String.format("<%s xmlns='%s'/>", new_state ? "enable" : "disable", NAMESPACE);
} // }
}; // };
setIQ.setType(IQ.Type.SET); // setIQ.setType(IQ.Type.set);
setIQ.setFrom(connection.getUser()); // setIQ.setFrom(connection.getUser());
return setIQ; // return setIQ;
} // }
private boolean checkConnected() { private boolean checkConnected() {
...@@ -121,8 +119,7 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList ...@@ -121,8 +119,7 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
if (!checkConnected()) { if (!checkConnected()) {
return false; return false;
} }
boolean isCarbonSupported = ServerInfoManager.getInstance().isProtocolSupported(connection.getUser(), NAMESPACE); return ServerInfoManager.getInstance().isProtocolSupported(connection.getUser(), NAMESPACE);
return isCarbonSupported;
} }
/** /**
...@@ -141,18 +138,18 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList ...@@ -141,18 +138,18 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
return; return;
} }
IQ setIQ = carbonsEnabledIQ(new_state); // IQ setIQ = carbonsEnabledIQ(new_state);
connection.addPacketListener(new PacketListener() { // connection.addAsyncStanzaListener(new StanzaListener() {
public void processPacket(Packet packet) { // public void processPacket(Stanza packet) {
IQ result = (IQ) packet; // IQ result = (IQ) packet;
if (result.getType() == IQ.Type.RESULT) { // if (result.getType() == IQ.Type.result) {
enabled_state = new_state; // enabled_state = new_state;
} // }
connection.removePacketListener(this); // connection.removeAsyncStanzaListener(this);
} // }
}, new PacketIDFilter(setIQ.getPacketID())); // }, new StanzaIdFilter(setIQ.getStanzaId()));
//
connection.sendPacket(setIQ); // connection.sendPacket(setIQ);
} }
/** /**
...@@ -180,8 +177,7 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList ...@@ -180,8 +177,7 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
} }
@Override @Override
public void onPacket(ConnectionItem connection, String bareAddress, public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
Packet packet) {
if (!(connection instanceof AccountItem)) { if (!(connection instanceof AccountItem)) {
return; return;
...@@ -198,23 +194,21 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList ...@@ -198,23 +194,21 @@ public class CarbonManager implements OnServerInfoReceivedListener, OnPacketList
if (!getCarbonsEnabled()) { if (!getCarbonsEnabled()) {
return; return;
} }
PacketExtension carbonExtension = null; ExtensionElement carbonExtension = null;
Direction dir = null; Direction dir = null;
for (PacketExtension packetExtension : message.getExtensions()) { for (ExtensionElement packetExtension : message.getExtensions()) {
if (packetExtension instanceof Received) { if (packetExtension instanceof Received) {
carbonExtension = packetExtension; carbonExtension = packetExtension;
dir = Direction.received; dir = Direction.received;
} else if (packetExtension instanceof Sent) { } else if (packetExtension instanceof Sent) {
carbonExtension = packetExtension; carbonExtension = packetExtension;
dir = Direction.sent; dir = Direction.sent;
} else {
continue;
} }
} }
if (carbonExtension == null) { if (carbonExtension == null) {
return; return;
} }
Forwarded forwarded = null; Forwarded forwarded;
if (dir == Direction.sent) { if (dir == Direction.sent) {
Sent carbon = (Sent) carbonExtension; Sent carbon = (Sent) carbonExtension;
forwarded = carbon.getForwarded(); forwarded = carbon.getForwarded();
......
...@@ -3,7 +3,8 @@ package com.xabber.xmpp.carbon; ...@@ -3,7 +3,8 @@ package com.xabber.xmpp.carbon;
import java.io.IOException; import java.io.IOException;
import org.jivesoftware.smack.packet.Packet; 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 org.xmlpull.v1.XmlSerializer;
import com.xabber.xmpp.Container; import com.xabber.xmpp.Container;
...@@ -23,8 +24,8 @@ public class Forwarded extends PacketExtension implements 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 NAMESPACE = "urn:xmpp:forward:0";
public static final String ELEMENT_NAME = "forwarded"; public static final String ELEMENT_NAME = "forwarded";
private DelayInfo delay; private DelayInformation delay;
private Packet forwardedPacket; private Stanza forwardedPacket;
public Forwarded() { public Forwarded() {
} }
...@@ -32,10 +33,10 @@ public class Forwarded extends PacketExtension implements Container { ...@@ -32,10 +33,10 @@ public class Forwarded extends PacketExtension implements Container {
/** /**
* Creates a new Forwarded packet extension. * 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). * @param fwdPacket the packet that is forwarded (required).
*/ */
public Forwarded(DelayInfo delay, Packet fwdPacket) { public Forwarded(DelayInformation delay, Stanza fwdPacket) {
this(); this();
this.delay = delay; this.delay = delay;
this.forwardedPacket = fwdPacket; this.forwardedPacket = fwdPacket;
...@@ -77,9 +78,9 @@ public class Forwarded extends PacketExtension implements Container { ...@@ -77,9 +78,9 @@ public class Forwarded extends PacketExtension implements Container {
/** /**
* get the timestamp of the forwarded packet. * 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; return delay;
} }
} }
\ No newline at end of file
package com.xabber.xmpp.carbon; package com.xabber.xmpp.carbon;
import java.io.IOException; import com.xabber.xmpp.AbstractExtensionProvider;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.util.PacketParserUtils; import org.jivesoftware.smack.util.PacketParserUtils;
import org.jivesoftware.smackx.packet.DelayInfo; import org.jivesoftware.smackx.delay.packet.DelayInformation;
import org.jivesoftware.smackx.provider.DelayInfoProvider; import org.jivesoftware.smackx.delay.provider.DelayInformationProvider;
import org.xmlpull.v1.XmlPullParser; 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 * 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> * The extension <a href="http://xmpp.org/extensions/xep-0297.html">XEP-0297</a>
* is a prerequisite for XEP-0280 (Message Carbons). * is a prerequisite for XEP-0280 (Message Carbons).
* *
...@@ -27,7 +22,7 @@ import com.xabber.xmpp.AbstractExtensionProvider; ...@@ -27,7 +22,7 @@ import com.xabber.xmpp.AbstractExtensionProvider;
*/ */
public class ForwardedProvider extends AbstractExtensionProvider<Forwarded> { public class ForwardedProvider extends AbstractExtensionProvider<Forwarded> {
DelayInfoProvider dip = new DelayInfoProvider(); DelayInformationProvider dip = new DelayInformationProvider();
@Override @Override
protected Forwarded createInstance(XmlPullParser parser) { protected Forwarded createInstance(XmlPullParser parser) {
...@@ -37,16 +32,16 @@ public class ForwardedProvider extends AbstractExtensionProvider<Forwarded> { ...@@ -37,16 +32,16 @@ public class ForwardedProvider extends AbstractExtensionProvider<Forwarded> {
@Override @Override
public Forwarded parseExtension(XmlPullParser parser) throws Exception { public Forwarded parseExtension(XmlPullParser parser) throws Exception {
DelayInfoProvider dip = new DelayInfoProvider(); DelayInformationProvider delayInformationProvider = new DelayInformationProvider();
DelayInfo di = null; DelayInformation delayInformation = null;
Packet packet = null; Stanza packet = null;
boolean done = false; boolean done = false;
while (!done) { while (!done) {
int eventType = parser.next(); int eventType = parser.next();
if (eventType == XmlPullParser.START_TAG) { if (eventType == XmlPullParser.START_TAG) {
if (parser.getName().equals("delay")) if (parser.getName().equals("delay"))
di = (DelayInfo)dip.parseExtension(parser); delayInformation = delayInformationProvider.parse(parser);
else if (parser.getName().equals("message")) else if (parser.getName().equals("message"))
packet = PacketParserUtils.parseMessage(parser); packet = PacketParserUtils.parseMessage(parser);
else throw new Exception("Unsupported forwarded packet type: " + parser.getName()); else throw new Exception("Unsupported forwarded packet type: " + parser.getName());
...@@ -56,6 +51,6 @@ public class ForwardedProvider extends AbstractExtensionProvider<Forwarded> { ...@@ -56,6 +51,6 @@ public class ForwardedProvider extends AbstractExtensionProvider<Forwarded> {
} }
if (packet == null) if (packet == null)
throw new Exception("forwarded extension must contain a packet"); throw new Exception("forwarded extension must contain a packet");
return new Forwarded(di, packet); return new Forwarded(delayInformation, packet);
} }
} }
package com.xabber.xmpp.carbon; package com.xabber.xmpp.carbon;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import com.xabber.xmpp.AbstractExtensionProvider; import com.xabber.xmpp.AbstractExtensionProvider;
/** /**
* Packet extension for XEP-0280: Message Carbons. This class implements * 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. * forwarded to other Carbons-enabled resources.
* The extension <a href="http://xmpp.org/extensions/xep-0280.html">XEP-0280</a> * 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. * is meant to synchronize a message flow to multiple presences of a user.
......
package com.xabber.xmpp.carbon; package com.xabber.xmpp.carbon;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.util.PacketParserUtils; import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
...@@ -9,7 +8,7 @@ import com.xabber.xmpp.AbstractExtensionProvider; ...@@ -9,7 +8,7 @@ import com.xabber.xmpp.AbstractExtensionProvider;
/** /**
* Packet extension for XEP-0280: Message Carbons. This class implements * 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> * 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. * is meant to synchronize a message flow to multiple presences of a user.
* *
......
package com.xabber.xmpp.carbon; package com.xabber.xmpp.carbon;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.util.PacketParserUtils; import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
...@@ -9,7 +8,7 @@ import com.xabber.xmpp.AbstractExtensionProvider; ...@@ -9,7 +8,7 @@ import com.xabber.xmpp.AbstractExtensionProvider;
/** /**
* Packet extension for XEP-0280: Message Carbons. This class implements * 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> * 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. * is meant to synchronize a message flow to multiple presences of a user.
* *
......
...@@ -14,13 +14,13 @@ ...@@ -14,13 +14,13 @@
*/ */
package com.xabber.xmpp.delay; 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.ExtensionElement;
import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.packet.DelayInformation; import org.jivesoftware.smackx.delay.packet.DelayInformation;
import com.xabber.xmpp.address.Jid; import java.util.Date;
/** /**
* Helper class to get delay information. * Helper class to get delay information.
...@@ -37,13 +37,12 @@ public class Delay { ...@@ -37,13 +37,12 @@ public class Delay {
* @return Delay value from packet. <code>null</code> if no delay is * @return Delay value from packet. <code>null</code> if no delay is
* specified. * specified.
*/ */
public static Date getDelay(Packet packet) { public static Date getDelay(Stanza packet) {
DelayInformation delay = (DelayInformation) packet.getExtension( DelayInformation delay = packet.getExtension("delay", "urn:xmpp:delay");
"delay", "urn:xmpp:delay");
// If there was no delay based on XEP-0203, then try XEP-0091 for // If there was no delay based on XEP-0203, then try XEP-0091 for
// backward compatibility // backward compatibility
if (delay == null) { if (delay == null) {
delay = (DelayInformation) packet.getExtension("x", delay = packet.getExtension("x",
"jabber:x:delay"); "jabber:x:delay");
} }
if (delay == null) if (delay == null)
...@@ -57,8 +56,8 @@ public class Delay { ...@@ -57,8 +56,8 @@ public class Delay {
* @param packet * @param packet
* @return Whether message was delayed by server. * @return Whether message was delayed by server.
*/ */
public static boolean isOfflineMessage(String server, Packet packet) { public static boolean isOfflineMessage(String server, Stanza packet) {
for (PacketExtension extension : packet.getExtensions()) for (ExtensionElement extension : packet.getExtensions())
if (extension instanceof DelayInformation) { if (extension instanceof DelayInformation) {
String from = ((DelayInformation) extension).getFrom(); String from = ((DelayInformation) extension).getFrom();
if (server.equals(Jid.getStringPrep(from))) if (server.equals(Jid.getStringPrep(from)))
......
...@@ -14,9 +14,9 @@ ...@@ -14,9 +14,9 @@
*/ */
package com.xabber.xmpp.muc; package com.xabber.xmpp.muc;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smackx.muc.packet.MUCUser;
import org.jivesoftware.smackx.packet.MUCUser;
/** /**
* Helper class to get MUC information. * Helper class to get MUC information.
...@@ -37,7 +37,7 @@ public class MUC { ...@@ -37,7 +37,7 @@ public class MUC {
*/ */
public static MUCUser getMUCUserExtension(Packet packet) { public static MUCUser getMUCUserExtension(Packet packet) {
if (packet != null) if (packet != null)
for (PacketExtension extension : packet.getExtensions()) for (ExtensionElement extension : packet.getExtensions())
if (extension instanceof MUCUser) if (extension instanceof MUCUser)
return (MUCUser) extension; return (MUCUser) extension;
return null; return null;
......
...@@ -14,9 +14,10 @@ ...@@ -14,9 +14,10 @@
*/ */
package com.xabber.xmpp.ssn; package com.xabber.xmpp.ssn;
import org.jivesoftware.smackx.xdata.FormField;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import org.jivesoftware.smackx.FormField.Option;
/** /**
* Disclosure parameter values. * Disclosure parameter values.
...@@ -41,8 +42,8 @@ public enum DisclosureValue { ...@@ -41,8 +42,8 @@ public enum DisclosureValue {
this.label = label; this.label = label;
} }
public Option createOption() { public FormField.Option createOption() {
return new Option(label, name()); return new FormField.Option(label, name());
} }
public static DisclosureValue fromString(String value) public static DisclosureValue fromString(String value)
......
...@@ -14,13 +14,13 @@ ...@@ -14,13 +14,13 @@
*/ */
package com.xabber.xmpp.ssn; package com.xabber.xmpp.ssn;
import org.jivesoftware.smack.packet.PacketExtension; import com.xabber.xmpp.AbstractExtensionProvider;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.util.PacketParserUtils; import org.jivesoftware.smack.util.PacketParserUtils;
import org.jivesoftware.smackx.packet.DataForm; import org.jivesoftware.smackx.xdata.packet.DataForm;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import com.xabber.xmpp.AbstractExtensionProvider;
public class FeatureProvider extends AbstractExtensionProvider<Feature> { public class FeatureProvider extends AbstractExtensionProvider<Feature> {
@Override @Override
...@@ -33,11 +33,10 @@ public class FeatureProvider extends AbstractExtensionProvider<Feature> { ...@@ -33,11 +33,10 @@ public class FeatureProvider extends AbstractExtensionProvider<Feature> {
throws Exception { throws Exception {
if (super.parseInner(parser, instance)) if (super.parseInner(parser, instance))
return true; return true;
if (DataForm.ELEMENT_NAME.equals(parser.getName()) if (DataForm.ELEMENT.equals(parser.getName())
&& DataForm.NAMESPACE.equals(parser.getNamespace())) { && DataForm.NAMESPACE.equals(parser.getNamespace())) {
PacketExtension packetExtension = PacketParserUtils ExtensionElement packetExtension = PacketParserUtils.
.parsePacketExtension(DataForm.ELEMENT_NAME, parseExtensionElement(DataForm.ELEMENT, DataForm.NAMESPACE, parser);
DataForm.NAMESPACE, parser);
if (packetExtension instanceof DataForm) if (packetExtension instanceof DataForm)
instance.setDataForm((DataForm) packetExtension); instance.setDataForm((DataForm) packetExtension);
return true; return true;
......
...@@ -14,9 +14,10 @@ ...@@ -14,9 +14,10 @@
*/ */
package com.xabber.xmpp.ssn; package com.xabber.xmpp.ssn;
import org.jivesoftware.smackx.xdata.FormField;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import org.jivesoftware.smackx.FormField.Option;
/** /**
* Logging parameter values. * Logging parameter values.
...@@ -37,8 +38,8 @@ public enum LoggingValue { ...@@ -37,8 +38,8 @@ public enum LoggingValue {
this.label = label; this.label = label;
} }
public Option createOption() { public FormField.Option createOption() {
return new Option(label, name()); return new FormField.Option(label, name());
} }
public static LoggingValue fromString(String value) 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