();
static {
XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() {
@@ -62,7 +61,6 @@ public class DeliveryReceiptManager extends Manager implements PacketListener {
super(connection);
ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
sdm.addFeature(DeliveryReceipt.NAMESPACE);
- instances.put(connection, this);
// register listener for delivery receipts and requests
connection.addPacketListener(this, new PacketExtensionFilter(DeliveryReceipt.NAMESPACE));
@@ -80,6 +78,7 @@ public class DeliveryReceiptManager extends Manager implements PacketListener {
if (receiptManager == null) {
receiptManager = new DeliveryReceiptManager(connection);
+ instances.put(connection, receiptManager);
}
return receiptManager;
@@ -101,20 +100,17 @@ public class DeliveryReceiptManager extends Manager implements PacketListener {
// handle incoming receipts and receipt requests
@Override
public void processPacket(Packet packet) throws NotConnectedException {
- DeliveryReceipt dr = (DeliveryReceipt)packet.getExtension(
- DeliveryReceipt.ELEMENT, DeliveryReceipt.NAMESPACE);
+ DeliveryReceipt dr = DeliveryReceipt.getFrom(packet);
if (dr != null) {
// notify listeners of incoming receipt
for (ReceiptReceivedListener l : receiptReceivedListeners) {
l.onReceiptReceived(packet.getFrom(), packet.getTo(), dr.getId());
}
-
}
// if enabled, automatically send a receipt
if (auto_receipts_enabled) {
- DeliveryReceiptRequest drr = (DeliveryReceiptRequest)packet.getExtension(
- DeliveryReceiptRequest.ELEMENT, DeliveryReceipt.NAMESPACE);
+ DeliveryReceiptRequest drr = DeliveryReceiptRequest.getFrom(packet);
if (drr != null) {
XMPPConnection connection = connection();
Message ack = new Message(packet.getFrom(), Message.Type.normal);
@@ -182,8 +178,7 @@ public class DeliveryReceiptManager extends Manager implements PacketListener {
* @return true if a delivery receipt was requested
*/
public static boolean hasDeliveryReceiptRequest(Packet p) {
- return (p.getExtension(DeliveryReceiptRequest.ELEMENT,
- DeliveryReceipt.NAMESPACE) != null);
+ return (DeliveryReceiptRequest.getFrom(p) != null);
}
/**
@@ -193,8 +188,10 @@ public class DeliveryReceiptManager extends Manager implements PacketListener {
* therefore only allow Message as the parameter type.
*
* @param m Message object to add a request to
+ * @return the Message ID which will be used as receipt ID
*/
- public static void addDeliveryReceiptRequest(Message m) {
+ public static String addDeliveryReceiptRequest(Message m) {
m.addExtension(new DeliveryReceiptRequest());
+ return m.getPacketID();
}
}
diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/receipts/DeliveryReceiptRequest.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/receipts/DeliveryReceiptRequest.java
index e1c432b5a..2831ccd2f 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/receipts/DeliveryReceiptRequest.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/receipts/DeliveryReceiptRequest.java
@@ -1,6 +1,6 @@
/**
*
- * Copyright the original author or authors
+ * Copyright 2013-2014 the original author or authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*/
package org.jivesoftware.smackx.receipts;
+import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.xmlpull.v1.XmlPullParser;
@@ -45,6 +46,16 @@ public class DeliveryReceiptRequest implements PacketExtension
return "";
}
+ /**
+ * Get the {@link DeliveryReceiptRequest} extension of the packet, if any.
+ *
+ * @param p the packet
+ * @return the {@link DeliveryReceiptRequest} extension or {@code null}
+ */
+ public static DeliveryReceiptRequest getFrom(Packet p) {
+ return p.getExtension(ELEMENT, DeliveryReceipt.NAMESPACE);
+ }
+
/**
* This Provider parses and returns DeliveryReceiptRequest packets.
*/
diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/receipts/ReceiptReceivedListener.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/receipts/ReceiptReceivedListener.java
index 3b3f81dbb..dcaf23a66 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/receipts/ReceiptReceivedListener.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/receipts/ReceiptReceivedListener.java
@@ -1,6 +1,6 @@
/**
*
- * Copyright 2013 Georg Lukas
+ * Copyright 2013-2014 Georg Lukas
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,5 +22,16 @@ package org.jivesoftware.smackx.receipts;
* Implement this and add a listener to get notified.
*/
public interface ReceiptReceivedListener {
+ /**
+ * Callback invoked when a new receipt got received.
+ *
+ * {@code receiptId} correspondents to the message ID, which can be obtained with
+ * {@link org.jivesoftware.smack.packet.Packet#getPacketID()}.
+ *
+ *
+ * @param fromJid the jid that send this receipt
+ * @param toJid the jid which received this receipt
+ * @param receiptId the message ID of the packet which has been received and this receipt is for
+ */
void onReceiptReceived(String fromJid, String toJid, String receiptId);
}