I would like to be able to recieve the confirmation when my message is delivered to the reciever. Is there a way to do it?
The url=http://www.jabber.org/jeps/inbox/ack.htmlfollowing JEP[/url] was proposed to the XMPP council but got rejected. I think that that JEP is what you are looking for. The main reason why it was rejected is that since XMPP relies on TCP, packets cannot be lost. I personally don’'t quite agree with this since when doing s2s or when users are offline or due to network problems packets may potentially get lost.
However this problem probes to not be something common. When using XMPP to chat with othere human beings the chat may recover if a packet gets lost. On the other hand, if your client are software solutions then you can try to implement an ACK solution on top of XMPP.
Maybe url=http://www.jabber.org/jeps/jep-0079.htmlJEP-79[/url] could also be of help but unfortunatelly we don’'t currently support it. If you want to implement it let us know so we can help you in the process.
I have the problem of "is packet received ? " when i use TCP instant messaging with gprs connection. I try to develop an Application to Application program on a windows ce pda over gprs (Qtek, operator = bouygues, france). with the very good library of alexander gnauck from ag software.
here is my problem : The Pda is behind some kind of tcp proxy, internal ip address is 10.X.X.X and from the outside it is seen as 118.X.X.X. When the gprs link is broken without explicitly closing the socket, the connection remain established for many hours from the server point of vue (netstat) and the jabber server of course leave the session openned.
I think it’‘s a design of gprs protocol to avoid frequent tcp deconection. For http protocol in does’‘nt matter but for this kind of protocol it’‘s a real problem. So it would be great to implement an optionnal packet level ack. these kind of connections (gprs, 3g, wifi) where you can’'t rely on perpetual good link are to be more and more frequent. Using wireless pda also.
Do you have any experience of theses situation. What is the best to do to handles them ?
I think that the best options are:
Implement url=http://www.jabber.org/jeps/jep-0079.htmlAdvanced Message Processing[/url]. FYI, in order to detect possible “black hole effects” we added a monitor thread on threads that are writing data. If the thread never returns control when writing then we assume that the connection is dead and the message is stored offline. So implementing JEP-79 is a good bet.
Implement an ACK logic in your application. This will require to send an ACK message back to the sender with some timeout and retry logic. This option is best if you are dealing with s2s or external components.