1
1
package org .jivesoftware .openfire .carbons ;
2
2
3
+ import org .dom4j .Element ;
3
4
import org .jivesoftware .openfire .forward .Forwarded ;
4
- import org .xmpp .packet .PacketExtension ;
5
+ import org .xmpp .packet .*;
6
+
7
+ import javax .annotation .Nonnull ;
5
8
6
9
/**
7
10
* The implementation of the {@code <received xmlns="urn:xmpp:carbons:2"/>} extension.
@@ -14,8 +17,28 @@ public final class Received extends PacketExtension {
14
17
public static final String NAME = "received" ;
15
18
public static final String NAMESPACE = "urn:xmpp:carbons:2" ;
16
19
17
- public Received (Forwarded forwarded ) {
20
+ public Received (@ Nonnull final Forwarded forwarded ) {
18
21
super (NAME , NAMESPACE );
19
22
element .add (forwarded .getElement ());
20
23
}
24
+
25
+ public Packet getForwardedStanza () {
26
+ if (element .element ("forwarded" ) == null ) {
27
+ return null ;
28
+ }
29
+ if (element .element ("forwarded" ).elements () == null ) {
30
+ return null ;
31
+ }
32
+ final Element originalStanza = element .element ("forwarded" ).elements ().get (0 );
33
+ switch (originalStanza .getName ()) {
34
+ case "message" :
35
+ return new Message (originalStanza , true );
36
+ case "iq" :
37
+ return new IQ (originalStanza , true );
38
+ case "presence" :
39
+ return new Presence (originalStanza , true );
40
+ default :
41
+ throw new IllegalArgumentException ("A 'forwarded' stanza must by of type 'message', 'iq' or 'presence', not: " + originalStanza .getName ());
42
+ }
43
+ }
21
44
}
0 commit comments