mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-12-22 18:48:00 +01:00
Merged the 3.2 branch back into trunk.
git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@12588 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
commit
3f89df061d
16 changed files with 383 additions and 240 deletions
|
@ -26,9 +26,9 @@
|
||||||
|
|
||||||
<!-- Smack Version -->
|
<!-- Smack Version -->
|
||||||
<property name="version.major" value="3" />
|
<property name="version.major" value="3" />
|
||||||
<property name="version.minor" value="2" />
|
<property name="version.minor" value="3" />
|
||||||
<property name="version.revision" value="0" />
|
<property name="version.revision" value="0" />
|
||||||
<property name="version.extra" value="" />
|
<property name="version.extra" value="SNAPSHOT" />
|
||||||
|
|
||||||
<if>
|
<if>
|
||||||
<equals arg1="${version.extra}" arg2=""/>
|
<equals arg1="${version.extra}" arg2=""/>
|
||||||
|
|
|
@ -28,4 +28,7 @@
|
||||||
<!-- Port of the local Socks5 proxy -->
|
<!-- Port of the local Socks5 proxy -->
|
||||||
<localSocks5ProxyPort>7777</localSocks5ProxyPort>
|
<localSocks5ProxyPort>7777</localSocks5ProxyPort>
|
||||||
|
|
||||||
|
<!-- Port of the local Socks5 proxy -->
|
||||||
|
<packetCollectorSize>10000</packetCollectorSize>
|
||||||
|
|
||||||
</smack>
|
</smack>
|
||||||
|
|
|
@ -141,6 +141,17 @@ hr {
|
||||||
|
|
||||||
<div id="pageBody">
|
<div id="pageBody">
|
||||||
|
|
||||||
|
<h2>3.2.1 -- <span style="font-weight: normal;">July 4, 2011</span></h2>
|
||||||
|
<h3>Bug</h3>
|
||||||
|
<ul>
|
||||||
|
<li>[<a href='http://issues.igniterealtime.org/browse/SMACK-129'>SMACK-129</a>] - MultiUserChat will Store Messages in its PacketCollector irregardless of whether or not they are being read</li>
|
||||||
|
<li>[<a href='http://issues.igniterealtime.org/browse/SMACK-230'>SMACK-230</a>] - Disconnect Can Cause Null Pointer Exception</li>
|
||||||
|
<li>[<a href='http://issues.igniterealtime.org/browse/SMACK-273'>SMACK-273</a>] - Bug in RoomListenerMultiplexor.java</li>
|
||||||
|
<li>[<a href='http://issues.igniterealtime.org/browse/SMACK-329'>SMACK-329</a>] - XHTMLText uses improper format for br tag</li>
|
||||||
|
<li>[<a href='http://issues.igniterealtime.org/browse/SMACK-338'>SMACK-338</a>] - IBB filetransfer doesn't work as expected</li>
|
||||||
|
<li>[<a href='http://issues.igniterealtime.org/browse/SMACK-324'>SMACK-324</a>] - Investigate SASL issue with jabberd2 servers</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<h2>3.2.0 -- <span style="font-weight: normal;">May 3, 2011</span></h2>
|
<h2>3.2.0 -- <span style="font-weight: normal;">May 3, 2011</span></h2>
|
||||||
<h3>New Feature</h3>
|
<h3>New Feature</h3>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -32,8 +32,9 @@ import java.util.LinkedList;
|
||||||
* use than a {@link PacketListener} when you need to wait for a specific
|
* use than a {@link PacketListener} when you need to wait for a specific
|
||||||
* result.<p>
|
* result.<p>
|
||||||
*
|
*
|
||||||
* Each packet collector will queue up to 2^16 packets for processing before
|
* Each packet collector will queue up a configured number of packets for processing before
|
||||||
* older packets are automatically dropped.
|
* older packets are automatically dropped. The default number is retrieved by
|
||||||
|
* {@link SmackConfiguration#getPacketCollectorSize()}.
|
||||||
*
|
*
|
||||||
* @see Connection#createPacketCollector(PacketFilter)
|
* @see Connection#createPacketCollector(PacketFilter)
|
||||||
* @author Matt Tucker
|
* @author Matt Tucker
|
||||||
|
@ -45,7 +46,7 @@ public class PacketCollector {
|
||||||
* reached, older packets will be automatically dropped from the queue as
|
* reached, older packets will be automatically dropped from the queue as
|
||||||
* new packets are added.
|
* new packets are added.
|
||||||
*/
|
*/
|
||||||
private static final int MAX_PACKETS = 65536;
|
private int maxPackets = SmackConfiguration.getPacketCollectorSize();
|
||||||
|
|
||||||
private PacketFilter packetFilter;
|
private PacketFilter packetFilter;
|
||||||
private LinkedList<Packet> resultQueue;
|
private LinkedList<Packet> resultQueue;
|
||||||
|
@ -65,6 +66,19 @@ public class PacketCollector {
|
||||||
this.resultQueue = new LinkedList<Packet>();
|
this.resultQueue = new LinkedList<Packet>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new packet collector. If the packet filter is <tt>null</tt>, then
|
||||||
|
* all packets will match this collector.
|
||||||
|
*
|
||||||
|
* @param conection the connection the collector is tied to.
|
||||||
|
* @param packetFilter determines which packets will be returned by this collector.
|
||||||
|
* @param maxSize the maximum number of packets that will be stored in the collector.
|
||||||
|
*/
|
||||||
|
protected PacketCollector(Connection conection, PacketFilter packetFilter, int maxSize) {
|
||||||
|
this(conection, packetFilter);
|
||||||
|
maxPackets = maxSize;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Explicitly cancels the packet collector so that no more results are
|
* Explicitly cancels the packet collector so that no more results are
|
||||||
* queued up. Once a packet collector has been cancelled, it cannot be
|
* queued up. Once a packet collector has been cancelled, it cannot be
|
||||||
|
@ -180,7 +194,7 @@ public class PacketCollector {
|
||||||
}
|
}
|
||||||
if (packetFilter == null || packetFilter.accept(packet)) {
|
if (packetFilter == null || packetFilter.accept(packet)) {
|
||||||
// If the max number of packets has been reached, remove the oldest one.
|
// If the max number of packets has been reached, remove the oldest one.
|
||||||
if (resultQueue.size() == MAX_PACKETS) {
|
if (resultQueue.size() == maxPackets) {
|
||||||
resultQueue.removeLast();
|
resultQueue.removeLast();
|
||||||
}
|
}
|
||||||
// Add the new packet.
|
// Add the new packet.
|
||||||
|
|
|
@ -44,14 +44,15 @@ import java.util.*;
|
||||||
*/
|
*/
|
||||||
public final class SmackConfiguration {
|
public final class SmackConfiguration {
|
||||||
|
|
||||||
private static final String SMACK_VERSION = "3.2.0";
|
private static final String SMACK_VERSION = "3.2.1";
|
||||||
|
|
||||||
private static int packetReplyTimeout = 5000;
|
private static int packetReplyTimeout = 5000;
|
||||||
private static int keepAliveInterval = 30000;
|
private static int keepAliveInterval = 30000;
|
||||||
private static Vector<String> defaultMechs = new Vector<String>();
|
private static Vector<String> defaultMechs = new Vector<String>();
|
||||||
|
|
||||||
private static boolean localSocks5ProxyEnabled = true;
|
private static boolean localSocks5ProxyEnabled = true;
|
||||||
private static int localSocks5ProxyPort = 7777;
|
private static int localSocks5ProxyPort = 7778;
|
||||||
|
private static int packetCollectorSize = 5000;
|
||||||
|
|
||||||
private SmackConfiguration() {
|
private SmackConfiguration() {
|
||||||
}
|
}
|
||||||
|
@ -85,20 +86,22 @@ public final class SmackConfiguration {
|
||||||
parseClassToLoad(parser);
|
parseClassToLoad(parser);
|
||||||
}
|
}
|
||||||
else if (parser.getName().equals("packetReplyTimeout")) {
|
else if (parser.getName().equals("packetReplyTimeout")) {
|
||||||
packetReplyTimeout =
|
packetReplyTimeout = parseIntProperty(parser, packetReplyTimeout);
|
||||||
parseIntProperty(parser, packetReplyTimeout);
|
|
||||||
}
|
}
|
||||||
else if (parser.getName().equals("keepAliveInterval")) {
|
else if (parser.getName().equals("keepAliveInterval")) {
|
||||||
keepAliveInterval = parseIntProperty(parser, keepAliveInterval);
|
keepAliveInterval = parseIntProperty(parser, keepAliveInterval);
|
||||||
}
|
}
|
||||||
else if (parser.getName().equals("mechName")) {
|
else if (parser.getName().equals("mechName")) {
|
||||||
defaultMechs.add(parser.nextText());
|
defaultMechs.add(parser.nextText());
|
||||||
} else if (parser.getName().equals("localSocks5ProxyEnabled")) {
|
}
|
||||||
localSocks5ProxyEnabled = Boolean.parseBoolean(parser
|
else if (parser.getName().equals("localSocks5ProxyEnabled")) {
|
||||||
.nextText());
|
localSocks5ProxyEnabled = Boolean.parseBoolean(parser.nextText());
|
||||||
} else if (parser.getName().equals("localSocks5ProxyPort")) {
|
}
|
||||||
localSocks5ProxyPort = parseIntProperty(parser,
|
else if (parser.getName().equals("localSocks5ProxyPort")) {
|
||||||
localSocks5ProxyPort);
|
localSocks5ProxyPort = parseIntProperty(parser, localSocks5ProxyPort);
|
||||||
|
}
|
||||||
|
else if (parser.getName().equals("packetCollectorSize")) {
|
||||||
|
packetCollectorSize = parseIntProperty(parser, packetCollectorSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
eventType = parser.next();
|
eventType = parser.next();
|
||||||
|
@ -184,6 +187,26 @@ public final class SmackConfiguration {
|
||||||
keepAliveInterval = interval;
|
keepAliveInterval = interval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the default max size of a packet collector before it will delete
|
||||||
|
* the older packets.
|
||||||
|
*
|
||||||
|
* @return The number of packets to queue before deleting older packets.
|
||||||
|
*/
|
||||||
|
public static int getPacketCollectorSize() {
|
||||||
|
return packetCollectorSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the default max size of a packet collector before it will delete
|
||||||
|
* the older packets.
|
||||||
|
*
|
||||||
|
* @param The number of packets to queue before deleting older packets.
|
||||||
|
*/
|
||||||
|
public static void setPacketCollectorSize(int collectorSize) {
|
||||||
|
packetCollectorSize = collectorSize;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a SASL mechanism to the list to be used.
|
* Add a SASL mechanism to the list to be used.
|
||||||
*
|
*
|
||||||
|
|
|
@ -419,7 +419,7 @@ public class XMPPConnection extends Connection {
|
||||||
saslAuthentication.init();
|
saslAuthentication.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void disconnect(Presence unavailablePresence) {
|
public synchronized void disconnect(Presence unavailablePresence) {
|
||||||
// If not connected, ignore this request.
|
// If not connected, ignore this request.
|
||||||
if (packetReader == null || packetWriter == null) {
|
if (packetReader == null || packetWriter == null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -115,7 +115,7 @@ public class ServiceDiscoveryManager {
|
||||||
/**
|
/**
|
||||||
* Returns the type of client that will be returned when asked for the client identity in a
|
* Returns the type of client that will be returned when asked for the client identity in a
|
||||||
* disco request. The valid types are defined by the category client. Follow this link to learn
|
* disco request. The valid types are defined by the category client. Follow this link to learn
|
||||||
* the possible types: <a href="http://www.jabber.org/registrar/disco-categories.html#client">Jabber::Registrar</a>.
|
* the possible types: <a href="http://xmpp.org/registrar/disco-categories.html#client">Jabber::Registrar</a>.
|
||||||
*
|
*
|
||||||
* @return the type of client that will be returned when asked for the client identity in a
|
* @return the type of client that will be returned when asked for the client identity in a
|
||||||
* disco request.
|
* disco request.
|
||||||
|
@ -127,7 +127,7 @@ public class ServiceDiscoveryManager {
|
||||||
/**
|
/**
|
||||||
* Sets the type of client that will be returned when asked for the client identity in a
|
* Sets the type of client that will be returned when asked for the client identity in a
|
||||||
* disco request. The valid types are defined by the category client. Follow this link to learn
|
* disco request. The valid types are defined by the category client. Follow this link to learn
|
||||||
* the possible types: <a href="http://www.jabber.org/registrar/disco-categories.html#client">Jabber::Registrar</a>.
|
* the possible types: <a href="http://xmpp.org/registrar/disco-categories.html#client">Jabber::Registrar</a>.
|
||||||
*
|
*
|
||||||
* @param type the type of client that will be returned when asked for the client identity in a
|
* @param type the type of client that will be returned when asked for the client identity in a
|
||||||
* disco request.
|
* disco request.
|
||||||
|
|
|
@ -131,7 +131,7 @@ public class XHTMLText {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void appendBrTag() {
|
public void appendBrTag() {
|
||||||
text.append("<br>");
|
text.append("<br/>");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -326,10 +326,7 @@ public class EnhancedDebugger implements SmackDebugger {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
for(int i=0; i< messagesTable.getRowCount();i++)
|
messagesTable.setRowCount(0);
|
||||||
{
|
|
||||||
messagesTable.removeRow(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -324,7 +324,8 @@ public class FileTransferNegotiator {
|
||||||
throw new XMPPException(error.getMessage(), error);
|
throw new XMPPException(error.getMessage(), error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isByteStream && isIBB && field.getType().equals(FormField.TYPE_LIST_MULTI)) {
|
//if (isByteStream && isIBB && field.getType().equals(FormField.TYPE_LIST_MULTI)) {
|
||||||
|
if (isByteStream && isIBB) {
|
||||||
return new FaultTolerantNegotiator(connection,
|
return new FaultTolerantNegotiator(connection,
|
||||||
byteStreamTransferManager,
|
byteStreamTransferManager,
|
||||||
inbandTransferManager);
|
inbandTransferManager);
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
package org.jivesoftware.smackx.muc;
|
package org.jivesoftware.smackx.muc;
|
||||||
|
|
||||||
|
import org.jivesoftware.smack.SmackConfiguration;
|
||||||
import org.jivesoftware.smack.packet.Packet;
|
import org.jivesoftware.smack.packet.Packet;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
@ -38,7 +39,7 @@ class ConnectionDetachedPacketCollector {
|
||||||
* reached, older packets will be automatically dropped from the queue as
|
* reached, older packets will be automatically dropped from the queue as
|
||||||
* new packets are added.
|
* new packets are added.
|
||||||
*/
|
*/
|
||||||
private static final int MAX_PACKETS = 65536;
|
private int maxPackets = SmackConfiguration.getPacketCollectorSize();
|
||||||
|
|
||||||
private LinkedList<Packet> resultQueue;
|
private LinkedList<Packet> resultQueue;
|
||||||
|
|
||||||
|
@ -50,6 +51,15 @@ class ConnectionDetachedPacketCollector {
|
||||||
this.resultQueue = new LinkedList<Packet>();
|
this.resultQueue = new LinkedList<Packet>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new packet collector. If the packet filter is <tt>null</tt>, then
|
||||||
|
* all packets will match this collector.
|
||||||
|
*/
|
||||||
|
public ConnectionDetachedPacketCollector(int maxSize) {
|
||||||
|
this.resultQueue = new LinkedList<Packet>();
|
||||||
|
maxPackets = maxSize;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Polls to see if a packet is currently available and returns it, or
|
* Polls to see if a packet is currently available and returns it, or
|
||||||
* immediately returns <tt>null</tt> if no packets are currently in the
|
* immediately returns <tt>null</tt> if no packets are currently in the
|
||||||
|
@ -124,7 +134,7 @@ class ConnectionDetachedPacketCollector {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// If the max number of packets has been reached, remove the oldest one.
|
// If the max number of packets has been reached, remove the oldest one.
|
||||||
if (resultQueue.size() == MAX_PACKETS) {
|
if (resultQueue.size() == maxPackets) {
|
||||||
resultQueue.removeLast();
|
resultQueue.removeLast();
|
||||||
}
|
}
|
||||||
// Add the new packet.
|
// Add the new packet.
|
||||||
|
|
|
@ -60,7 +60,7 @@ class RoomListenerMultiplexor implements ConnectionListener {
|
||||||
*/
|
*/
|
||||||
public static RoomListenerMultiplexor getRoomMultiplexor(Connection conn) {
|
public static RoomListenerMultiplexor getRoomMultiplexor(Connection conn) {
|
||||||
synchronized (monitors) {
|
synchronized (monitors) {
|
||||||
if (!monitors.containsKey(conn)) {
|
if (!monitors.containsKey(conn) || monitors.get(conn).get() == null) {
|
||||||
RoomListenerMultiplexor rm = new RoomListenerMultiplexor(conn, new RoomMultiplexFilter(),
|
RoomListenerMultiplexor rm = new RoomListenerMultiplexor(conn, new RoomMultiplexFilter(),
|
||||||
new RoomMultiplexListener());
|
new RoomMultiplexListener());
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,10 @@
|
||||||
*/
|
*/
|
||||||
package org.jivesoftware.smackx.pubsub;
|
package org.jivesoftware.smackx.pubsub;
|
||||||
|
|
||||||
|
import org.jivesoftware.smack.packet.Message;
|
||||||
import org.jivesoftware.smack.packet.PacketExtension;
|
import org.jivesoftware.smack.packet.PacketExtension;
|
||||||
import org.jivesoftware.smackx.pubsub.provider.ItemProvider;
|
import org.jivesoftware.smackx.pubsub.provider.ItemProvider;
|
||||||
|
|
||||||
import com.sun.corba.se.impl.protocol.giopmsgheaders.Message;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class represents an item that has been, or will be published to a
|
* This class represents an item that has been, or will be published to a
|
||||||
* pubsub node. An <tt>Item</tt> has several properties that are dependent
|
* pubsub node. An <tt>Item</tt> has several properties that are dependent
|
||||||
|
|
|
@ -40,252 +40,249 @@ import org.junit.Test;
|
||||||
* @see <a href="http://xmpp.org/rfcs/rfc3921.html#roster">Roster Management</a>
|
* @see <a href="http://xmpp.org/rfcs/rfc3921.html#roster">Roster Management</a>
|
||||||
* @author Guenther Niess
|
* @author Guenther Niess
|
||||||
*/
|
*/
|
||||||
public class ChatConnectionTest
|
public class ChatConnectionTest {
|
||||||
{
|
|
||||||
|
|
||||||
private DummyConnection connection;
|
private DummyConnection connection;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception {
|
||||||
{
|
// Uncomment this to enable debug output
|
||||||
// Uncomment this to enable debug output
|
//Connection.DEBUG_ENABLED = true;
|
||||||
// Connection.DEBUG_ENABLED = true;
|
|
||||||
|
|
||||||
connection = new DummyConnection();
|
connection = new DummyConnection();
|
||||||
connection.connect();
|
connection.connect();
|
||||||
connection.login("me", "secret");
|
connection.login("me", "secret");
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
public void tearDown() throws Exception
|
public void tearDown() throws Exception {
|
||||||
{
|
if (connection != null)
|
||||||
if (connection != null)
|
connection.disconnect();
|
||||||
connection.disconnect();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm that a new chat is created when a chat message is received but
|
* Confirm that a new chat is created when a chat message is received but
|
||||||
* there is no thread id for a user with only a base jid.
|
* there is no thread id for a user with only a base jid.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void chatCreatedWithIncomingChatNoThreadBaseJid()
|
public void chatCreatedWithIncomingChatNoThreadBaseJid()
|
||||||
{
|
{
|
||||||
TestChatManagerListener listener = new TestChatManagerListener();
|
TestChatManagerListener listener = new TestChatManagerListener();
|
||||||
connection.getChatManager().addChatListener(listener);
|
connection.getChatManager().addChatListener(listener);
|
||||||
|
|
||||||
Packet incomingChat = createChatPacket(null, false);
|
Packet incomingChat = createChatPacket(null, false);
|
||||||
processServerMessage(incomingChat);
|
processServerMessage(incomingChat);
|
||||||
|
|
||||||
Chat newChat = listener.getNewChat();
|
Chat newChat = listener.getNewChat();
|
||||||
assertNotNull(newChat);
|
assertNotNull(newChat);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm that a new chat is created when a chat message is received but
|
* Confirm that a new chat is created when a chat message is received but
|
||||||
* there is no thread id for a user with a full jid.
|
* there is no thread id for a user with a full jid.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void chatCreatedWhenIncomingChatNoThreadFullJid()
|
public void chatCreatedWhenIncomingChatNoThreadFullJid()
|
||||||
{
|
{
|
||||||
TestChatManagerListener listener = new TestChatManagerListener();
|
TestChatManagerListener listener = new TestChatManagerListener();
|
||||||
connection.getChatManager().addChatListener(listener);
|
connection.getChatManager().addChatListener(listener);
|
||||||
|
|
||||||
Packet incomingChat = createChatPacket(null, true);
|
Packet incomingChat = createChatPacket(null, true);
|
||||||
processServerMessage(incomingChat);
|
processServerMessage(incomingChat);
|
||||||
|
|
||||||
Chat newChat = listener.getNewChat();
|
Chat newChat = listener.getNewChat();
|
||||||
assertNotNull(newChat);
|
assertNotNull(newChat);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm that an existing chat created with a base jid is matched to an
|
* Confirm that an existing chat created with a base jid is matched to an
|
||||||
* incoming chat message that has no thread id and the user is a full jid.
|
* incoming chat message that has no thread id and the user is a full jid.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void chatFoundWhenNoThreadFullJid()
|
public void chatFoundWhenNoThreadFullJid()
|
||||||
{
|
{
|
||||||
TestChatManagerListener listener = new TestChatManagerListener();
|
TestChatManagerListener listener = new TestChatManagerListener();
|
||||||
connection.getChatManager().addChatListener(listener);
|
connection.getChatManager().addChatListener(listener);
|
||||||
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
||||||
|
|
||||||
Packet incomingChat = createChatPacket(null, true);
|
Packet incomingChat = createChatPacket(null, true);
|
||||||
processServerMessage(incomingChat);
|
processServerMessage(incomingChat);
|
||||||
|
|
||||||
Chat newChat = listener.getNewChat();
|
Chat newChat = listener.getNewChat();
|
||||||
assertNotNull(newChat);
|
assertNotNull(newChat);
|
||||||
assertTrue(newChat == outgoing);
|
assertTrue(newChat == outgoing);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm that an existing chat created with a base jid is matched to an
|
* Confirm that an existing chat created with a base jid is matched to an
|
||||||
* incoming chat message that has no thread id and the user is a base jid.
|
* incoming chat message that has no thread id and the user is a base jid.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void chatFoundWhenNoThreadBaseJid()
|
public void chatFoundWhenNoThreadBaseJid()
|
||||||
{
|
{
|
||||||
TestChatManagerListener listener = new TestChatManagerListener();
|
TestChatManagerListener listener = new TestChatManagerListener();
|
||||||
connection.getChatManager().addChatListener(listener);
|
connection.getChatManager().addChatListener(listener);
|
||||||
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
||||||
|
|
||||||
Packet incomingChat = createChatPacket(null, false);
|
Packet incomingChat = createChatPacket(null, false);
|
||||||
processServerMessage(incomingChat);
|
processServerMessage(incomingChat);
|
||||||
|
|
||||||
Chat newChat = listener.getNewChat();
|
Chat newChat = listener.getNewChat();
|
||||||
assertNotNull(newChat);
|
assertNotNull(newChat);
|
||||||
assertTrue(newChat == outgoing);
|
assertTrue(newChat == outgoing);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm that an existing chat created with a base jid is matched to an
|
* Confirm that an existing chat created with a base jid is matched to an
|
||||||
* incoming chat message that has the same id and the user is a full jid.
|
* incoming chat message that has the same id and the user is a full jid.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void chatFoundWithSameThreadFullJid()
|
public void chatFoundWithSameThreadFullJid()
|
||||||
{
|
{
|
||||||
TestChatManagerListener listener = new TestChatManagerListener();
|
TestChatManagerListener listener = new TestChatManagerListener();
|
||||||
connection.getChatManager().addChatListener(listener);
|
connection.getChatManager().addChatListener(listener);
|
||||||
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
||||||
|
|
||||||
Packet incomingChat = createChatPacket(outgoing.getThreadID(), true);
|
Packet incomingChat = createChatPacket(outgoing.getThreadID(), true);
|
||||||
processServerMessage(incomingChat);
|
processServerMessage(incomingChat);
|
||||||
|
|
||||||
Chat newChat = listener.getNewChat();
|
Chat newChat = listener.getNewChat();
|
||||||
assertNotNull(newChat);
|
assertNotNull(newChat);
|
||||||
assertTrue(newChat == outgoing);
|
assertTrue(newChat == outgoing);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm that an existing chat created with a base jid is matched to an
|
* Confirm that an existing chat created with a base jid is matched to an
|
||||||
* incoming chat message that has the same id and the user is a base jid.
|
* incoming chat message that has the same id and the user is a base jid.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void chatFoundWithSameThreadBaseJid()
|
public void chatFoundWithSameThreadBaseJid()
|
||||||
{
|
{
|
||||||
TestChatManagerListener listener = new TestChatManagerListener();
|
TestChatManagerListener listener = new TestChatManagerListener();
|
||||||
connection.getChatManager().addChatListener(listener);
|
connection.getChatManager().addChatListener(listener);
|
||||||
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
||||||
|
|
||||||
Packet incomingChat = createChatPacket(outgoing.getThreadID(), false);
|
Packet incomingChat = createChatPacket(outgoing.getThreadID(), false);
|
||||||
processServerMessage(incomingChat);
|
processServerMessage(incomingChat);
|
||||||
|
|
||||||
Chat newChat = listener.getNewChat();
|
Chat newChat = listener.getNewChat();
|
||||||
assertNotNull(newChat);
|
assertNotNull(newChat);
|
||||||
assertTrue(newChat == outgoing);
|
assertTrue(newChat == outgoing);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm that an existing chat created with a base jid is not matched to
|
* Confirm that an existing chat created with a base jid is not matched to
|
||||||
* an incoming chat message that has a different id and the same user as a
|
* an incoming chat message that has a different id and the same user as a
|
||||||
* base jid.
|
* base jid.
|
||||||
*/
|
*/
|
||||||
@Ignore
|
@Ignore
|
||||||
@Test
|
@Test
|
||||||
public void chatNotFoundWithDiffThreadBaseJid()
|
public void chatNotFoundWithDiffThreadBaseJid()
|
||||||
{
|
{
|
||||||
TestChatManagerListener listener = new TestChatManagerListener();
|
TestChatManagerListener listener = new TestChatManagerListener();
|
||||||
connection.getChatManager().addChatListener(listener);
|
connection.getChatManager().addChatListener(listener);
|
||||||
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
||||||
|
|
||||||
Packet incomingChat = createChatPacket(outgoing.getThreadID() + "ff", false);
|
Packet incomingChat = createChatPacket(outgoing.getThreadID() + "ff", false);
|
||||||
processServerMessage(incomingChat);
|
processServerMessage(incomingChat);
|
||||||
|
|
||||||
Chat newChat = listener.getNewChat();
|
Chat newChat = listener.getNewChat();
|
||||||
assertNotNull(newChat);
|
assertNotNull(newChat);
|
||||||
assertFalse(newChat == outgoing);
|
assertFalse(newChat == outgoing);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm that an existing chat created with a base jid is not matched to
|
* Confirm that an existing chat created with a base jid is not matched to
|
||||||
* an incoming chat message that has a different id and the same base jid.
|
* an incoming chat message that has a different id and the same base jid.
|
||||||
*/
|
*/
|
||||||
@Ignore
|
@Ignore
|
||||||
@Test
|
@Test
|
||||||
public void chatNotFoundWithDiffThreadFullJid()
|
public void chatNotFoundWithDiffThreadFullJid()
|
||||||
{
|
{
|
||||||
TestChatManagerListener listener = new TestChatManagerListener();
|
TestChatManagerListener listener = new TestChatManagerListener();
|
||||||
connection.getChatManager().addChatListener(listener);
|
connection.getChatManager().addChatListener(listener);
|
||||||
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
Chat outgoing = connection.getChatManager().createChat("you@testserver", null);
|
||||||
|
|
||||||
Packet incomingChat = createChatPacket(outgoing.getThreadID() + "ff", true);
|
Packet incomingChat = createChatPacket(outgoing.getThreadID() + "ff", true);
|
||||||
processServerMessage(incomingChat);
|
processServerMessage(incomingChat);
|
||||||
|
|
||||||
Chat newChat = listener.getNewChat();
|
Chat newChat = listener.getNewChat();
|
||||||
assertNotNull(newChat);
|
assertNotNull(newChat);
|
||||||
assertFalse(newChat == outgoing);
|
assertFalse(newChat == outgoing);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Packet createChatPacket(final String threadId, final boolean isFullJid)
|
private Packet createChatPacket(final String threadId, final boolean isFullJid)
|
||||||
{
|
{
|
||||||
Message chatMsg = new Message("me@testserver", Message.Type.chat);
|
Message chatMsg = new Message("me@testserver", Message.Type.chat);
|
||||||
chatMsg.setBody("the body message");
|
chatMsg.setBody("the body message");
|
||||||
chatMsg.setFrom("you@testserver" + (isFullJid ? "/resource" : ""));
|
chatMsg.setFrom("you@testserver" + (isFullJid ? "/resource" : ""));
|
||||||
|
|
||||||
if (threadId != null)
|
|
||||||
chatMsg.addExtension(new PacketExtension()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public String toXML()
|
|
||||||
{
|
|
||||||
return "<thread>" + threadId + "</thread>";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getNamespace()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getElementName()
|
|
||||||
{
|
|
||||||
return "thread";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return chatMsg;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processServerMessage(Packet incomingChat)
|
|
||||||
{
|
|
||||||
TestChatServer chatServer = new TestChatServer(incomingChat);
|
|
||||||
chatServer.start();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
chatServer.join();
|
|
||||||
} catch (InterruptedException e)
|
|
||||||
{
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class TestChatManagerListener implements ChatManagerListener
|
|
||||||
{
|
|
||||||
private Chat newChat;
|
|
||||||
|
|
||||||
|
if (threadId != null)
|
||||||
|
chatMsg.addExtension(new PacketExtension()
|
||||||
|
{
|
||||||
@Override
|
@Override
|
||||||
public void chatCreated(Chat chat, boolean createdLocally)
|
public String toXML()
|
||||||
{
|
{
|
||||||
newChat = chat;
|
return "<thread>" + threadId + "</thread>";
|
||||||
}
|
|
||||||
|
|
||||||
public Chat getNewChat()
|
|
||||||
{
|
|
||||||
return newChat;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class TestChatServer extends Thread
|
|
||||||
{
|
|
||||||
private Packet chatPacket;
|
|
||||||
|
|
||||||
TestChatServer(Packet chatMsg)
|
|
||||||
{
|
|
||||||
chatPacket = chatMsg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public String getNamespace()
|
||||||
{
|
{
|
||||||
connection.processPacket(chatPacket);
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getElementName()
|
||||||
|
{
|
||||||
|
return "thread";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return chatMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processServerMessage(Packet incomingChat)
|
||||||
|
{
|
||||||
|
TestChatServer chatServer = new TestChatServer(incomingChat);
|
||||||
|
chatServer.start();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
chatServer.join();
|
||||||
|
} catch (InterruptedException e)
|
||||||
|
{
|
||||||
|
fail();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestChatManagerListener implements ChatManagerListener
|
||||||
|
{
|
||||||
|
private Chat newChat;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void chatCreated(Chat chat, boolean createdLocally)
|
||||||
|
{
|
||||||
|
newChat = chat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Chat getNewChat()
|
||||||
|
{
|
||||||
|
return newChat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TestChatServer extends Thread
|
||||||
|
{
|
||||||
|
private Packet chatPacket;
|
||||||
|
|
||||||
|
TestChatServer(Packet chatMsg)
|
||||||
|
{
|
||||||
|
chatPacket = chatMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
connection.processPacket(chatPacket);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
32
test-unit/org/jivesoftware/smack/SmackConfigTest.java
Normal file
32
test-unit/org/jivesoftware/smack/SmackConfigTest.java
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
package org.jivesoftware.smack;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
public class SmackConfigTest
|
||||||
|
{
|
||||||
|
@Test
|
||||||
|
public void validatePacketCollectorSize()
|
||||||
|
{
|
||||||
|
assertEquals(10000, SmackConfiguration.getPacketCollectorSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void validateKeepAliveInterval()
|
||||||
|
{
|
||||||
|
assertEquals(30000, SmackConfiguration.getKeepAliveInterval());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void validateLocalSocks5ProxyPort()
|
||||||
|
{
|
||||||
|
assertEquals(7777, SmackConfiguration.getLocalSocks5ProxyPort());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void validateIsLocalSocks5Proxy()
|
||||||
|
{
|
||||||
|
assertTrue(SmackConfiguration.isLocalSocks5ProxyEnabled());
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,17 @@ package org.jivesoftware.smackx.pubsub;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.jivesoftware.smack.SmackConfiguration;
|
||||||
|
import org.jivesoftware.smack.ThreadedDummyConnection;
|
||||||
|
import org.jivesoftware.smack.XMPPException;
|
||||||
|
import org.jivesoftware.smack.packet.IQ;
|
||||||
|
import org.jivesoftware.smack.packet.PacketExtension;
|
||||||
|
import org.jivesoftware.smack.packet.XMPPError;
|
||||||
|
import org.jivesoftware.smack.packet.XMPPError.Condition;
|
||||||
|
import org.jivesoftware.smackx.packet.DiscoverInfo;
|
||||||
|
import org.jivesoftware.smackx.packet.DiscoverInfo.Identity;
|
||||||
|
import org.jivesoftware.smackx.pubsub.packet.PubSub;
|
||||||
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class ConfigureFormTest
|
public class ConfigureFormTest
|
||||||
|
@ -13,4 +24,49 @@ public class ConfigureFormTest
|
||||||
form.setChildrenAssociationPolicy(ChildrenAssociationPolicy.owners);
|
form.setChildrenAssociationPolicy(ChildrenAssociationPolicy.owners);
|
||||||
assertEquals(ChildrenAssociationPolicy.owners, form.getChildrenAssociationPolicy());
|
assertEquals(ChildrenAssociationPolicy.owners, form.getChildrenAssociationPolicy());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getConfigFormWithInsufficientPriviliges() throws XMPPException
|
||||||
|
{
|
||||||
|
ThreadedDummyConnection con = new ThreadedDummyConnection();
|
||||||
|
PubSubManager mgr = new PubSubManager(con);
|
||||||
|
DiscoverInfo info = new DiscoverInfo();
|
||||||
|
Identity ident = new Identity("pubsub", null);
|
||||||
|
ident.setType("leaf");
|
||||||
|
info.addIdentity(ident);
|
||||||
|
con.addIQReply(info);
|
||||||
|
|
||||||
|
Node node = mgr.getNode("princely_musings");
|
||||||
|
|
||||||
|
PubSub errorIq = new PubSub();
|
||||||
|
XMPPError error = new XMPPError(Condition.forbidden);
|
||||||
|
errorIq.setError(error);
|
||||||
|
con.addIQReply(errorIq);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
node.getNodeConfiguration();
|
||||||
|
}
|
||||||
|
catch (XMPPException e)
|
||||||
|
{
|
||||||
|
Assert.assertEquals(XMPPError.Type.AUTH, e.getXMPPError().getType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test (expected=XMPPException.class)
|
||||||
|
public void getConfigFormWithTimeout() throws XMPPException
|
||||||
|
{
|
||||||
|
ThreadedDummyConnection con = new ThreadedDummyConnection();
|
||||||
|
PubSubManager mgr = new PubSubManager(con);
|
||||||
|
DiscoverInfo info = new DiscoverInfo();
|
||||||
|
Identity ident = new Identity("pubsub", null);
|
||||||
|
ident.setType("leaf");
|
||||||
|
info.addIdentity(ident);
|
||||||
|
con.addIQReply(info);
|
||||||
|
|
||||||
|
Node node = mgr.getNode("princely_musings");
|
||||||
|
|
||||||
|
SmackConfiguration.setPacketReplyTimeout(100);
|
||||||
|
node.getNodeConfiguration();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue