mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-26 08:12:05 +01:00
Fixed Data IQ packet receiving
Data packets where not received by the InBandByteStream due to a missing IQRequestHandler Conflicts: smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/ibb/DataListener.java smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/ibb/InBandBytestreamManager.java smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/ibb/InBandBytestreamSession.java
This commit is contained in:
parent
96bb37f924
commit
63fabf78ed
3 changed files with 35 additions and 2 deletions
|
@ -21,8 +21,12 @@ import org.jivesoftware.smack.SmackException.NotConnectedException;
|
||||||
import org.jivesoftware.smack.filter.AndFilter;
|
import org.jivesoftware.smack.filter.AndFilter;
|
||||||
import org.jivesoftware.smack.filter.StanzaFilter;
|
import org.jivesoftware.smack.filter.StanzaFilter;
|
||||||
import org.jivesoftware.smack.filter.StanzaTypeFilter;
|
import org.jivesoftware.smack.filter.StanzaTypeFilter;
|
||||||
|
import org.jivesoftware.smack.iqrequest.AbstractIqRequestHandler;
|
||||||
|
import org.jivesoftware.smack.iqrequest.IQRequestHandler;
|
||||||
|
import org.jivesoftware.smack.packet.IQ;
|
||||||
import org.jivesoftware.smack.packet.Stanza;
|
import org.jivesoftware.smack.packet.Stanza;
|
||||||
import org.jivesoftware.smackx.bytestreams.ibb.packet.Data;
|
import org.jivesoftware.smackx.bytestreams.ibb.packet.Data;
|
||||||
|
import org.jivesoftware.smackx.bytestreams.ibb.packet.DataPacketExtension;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DataListener handles all In-Band Bytestream IQ stanzas containing a data
|
* DataListener handles all In-Band Bytestream IQ stanzas containing a data
|
||||||
|
@ -38,7 +42,7 @@ import org.jivesoftware.smackx.bytestreams.ibb.packet.Data;
|
||||||
*
|
*
|
||||||
* @author Henning Staib
|
* @author Henning Staib
|
||||||
*/
|
*/
|
||||||
class DataListener implements StanzaListener {
|
class DataListener extends AbstractIqRequestHandler implements StanzaListener, IQRequestHandler {
|
||||||
|
|
||||||
/* manager containing the listeners and the XMPP connection */
|
/* manager containing the listeners and the XMPP connection */
|
||||||
private final InBandBytestreamManager manager;
|
private final InBandBytestreamManager manager;
|
||||||
|
@ -53,6 +57,7 @@ class DataListener implements StanzaListener {
|
||||||
* @param manager the In-Band Bytestream manager
|
* @param manager the In-Band Bytestream manager
|
||||||
*/
|
*/
|
||||||
public DataListener(InBandBytestreamManager manager) {
|
public DataListener(InBandBytestreamManager manager) {
|
||||||
|
super(DataPacketExtension.ELEMENT, DataPacketExtension.NAMESPACE, IQ.Type.set, Mode.async);
|
||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,4 +79,23 @@ class DataListener implements StanzaListener {
|
||||||
return this.dataFilter;
|
return this.dataFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IQ handleIQRequest(IQ iqRequest) {
|
||||||
|
Data data = (Data) iqRequest;
|
||||||
|
InBandBytestreamSession ibbSession = this.manager.getSessions().get(
|
||||||
|
data.getDataPacketExtension().getSessionID());
|
||||||
|
try {
|
||||||
|
if (ibbSession == null) {
|
||||||
|
this.manager.replyItemNotFoundPacket(data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ibbSession.processIQPacket(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (NotConnectedException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,11 +25,11 @@ import java.util.Random;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
import org.jivesoftware.smack.AbstractConnectionClosedListener;
|
import org.jivesoftware.smack.AbstractConnectionClosedListener;
|
||||||
|
import org.jivesoftware.smack.ConnectionCreationListener;
|
||||||
import org.jivesoftware.smack.SmackException;
|
import org.jivesoftware.smack.SmackException;
|
||||||
import org.jivesoftware.smack.SmackException.NoResponseException;
|
import org.jivesoftware.smack.SmackException.NoResponseException;
|
||||||
import org.jivesoftware.smack.SmackException.NotConnectedException;
|
import org.jivesoftware.smack.SmackException.NotConnectedException;
|
||||||
import org.jivesoftware.smack.XMPPConnection;
|
import org.jivesoftware.smack.XMPPConnection;
|
||||||
import org.jivesoftware.smack.ConnectionCreationListener;
|
|
||||||
import org.jivesoftware.smack.XMPPConnectionRegistry;
|
import org.jivesoftware.smack.XMPPConnectionRegistry;
|
||||||
import org.jivesoftware.smack.XMPPException;
|
import org.jivesoftware.smack.XMPPException;
|
||||||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||||
|
@ -215,6 +215,7 @@ public class InBandBytestreamManager implements BytestreamManager {
|
||||||
// register bytestream data packet listener
|
// register bytestream data packet listener
|
||||||
this.dataListener = new DataListener(this);
|
this.dataListener = new DataListener(this);
|
||||||
this.connection.addSyncStanzaListener(this.dataListener, this.dataListener.getFilter());
|
this.connection.addSyncStanzaListener(this.dataListener, this.dataListener.getFilter());
|
||||||
|
connection.registerIQRequestHandler(dataListener);
|
||||||
|
|
||||||
// register bytestream close packet listener
|
// register bytestream close packet listener
|
||||||
this.closeListener = new CloseListener(this);
|
this.closeListener = new CloseListener(this);
|
||||||
|
|
|
@ -814,4 +814,12 @@ public class InBandBytestreamSession implements BytestreamSession {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param data
|
||||||
|
* @throws NotConnectedException
|
||||||
|
*/
|
||||||
|
public void processIQPacket(Data data) throws NotConnectedException {
|
||||||
|
inputStream.dataPacketListener.processPacket(data);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue