Background:
I have been able to implement one to one chatting through XMPP
in android using asmack
library. I am able to send presence to the server as well. I am using OpenFire
server for my Chat based application.
Problem:
I am using connection.addPacketListener(new PacketListener()
to receive message and IQ packets, for message packets I have classified it like this
PacketFilter Chatfilter = new MessageTypeFilter(Message.Type.chat);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null) {
String fromName = StringUtils.parseBareAddress(message.getFrom());
Log.i("XMPPClient", "Got text [" + message.getBody() + "] from [" + fromName + "]");
messages.add(fromName + ":");
m1=message.getBody();
messages.add(message.getBody());
// Add the incoming message to the list view
/* mHandler.post(new Runnable() {
public void run() {
setListAdapter();
recieve.setText(m1);
}
});*/
}
}
}, Chatfilter);
And it is working all fine, but problem arises when I use something similar to receive IQ packets
Here is the code which I am using to receive IQ PACKETS
PacketFilter Iqfilter = new IQTypeFilter(IQ.Type.RESULT);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
IQ iq = (IQ) packet;
String fromName = StringUtils.parseBareAddress(iq.getFrom());
Log.i("XMPPClient", "Got text [" + iq.toString() + "] from [" + fromName + "]");
m1=iq.getFrom();
mHandler.post(new Runnable() {
public void run() {
setListAdapter();
recieve.setText(m1);
}
});
}
}, Iqfilter);
I am sending a simple disco#items
query and it does not respond, even it does not enter into the function, I have tried to debug it as well, I have also tried to send simple PING
command but it does not respond to it either. what am I missing here?
Secondly I am facing problems in sending IQ packets to the server as well or to some other client as well. I read somewhere that I should do it like this. but it does not work.
final IQ iq = new IQ() {
public String getChildElementXML() {
return "<query xmlns='http://jabber.org/protocol/disco#info'/>"; // here is your query
//this returns "<iq type='get' from='User@YourServer/Resource' id='info1'> <query xmlns='http://jabber.org/protocol/disco#info'/></iq>";
}};
// set the type
iq.setType(IQ.Type.GET);
// send the request
connection.sendPacket(iq);
The confusing thing is when I read the documentation of XMPP and asmack for android it was written that to send an IQ you need to have receiver's address as well. but in this code we are not setting up any receiver.
There is much less information available on internet for XMPP asmack and Android.