blob: cd7a4cd46ea6f53d408da37202026609f5a5e647 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/*
* Copyright (c) 2010-2011, Isode Limited, London, England.
* All rights reserved.
*/
/*
* Copyright (c) 2010, Remko Tronçon.
* All rights reserved.
*/
package com.isode.stroke.serializer;
import com.isode.stroke.elements.Element;
import com.isode.stroke.elements.ProtocolHeader;
import com.isode.stroke.elements.StreamType;
import java.util.Vector;
import com.isode.stroke.base.SafeByteArray;
public class XMPPSerializer {
private final Vector<ElementSerializer> serializers_ = new Vector<ElementSerializer>();
private final StreamType type_;
public XMPPSerializer(PayloadSerializerCollection payloadSerializers, StreamType type, boolean setExplictNSonTopLevelElements) {
type_ = type;
serializers_.add(new PresenceSerializer(payloadSerializers, setExplictNSonTopLevelElements ? getDefaultNamespace() : null));
serializers_.add(new IQSerializer(payloadSerializers, setExplictNSonTopLevelElements ? getDefaultNamespace() : null));
serializers_.add(new MessageSerializer(payloadSerializers, setExplictNSonTopLevelElements ? getDefaultNamespace() : null));
serializers_.add(new CompressRequestSerializer());
serializers_.add(new CompressFailureSerializer());
serializers_.add(new AuthRequestSerializer());
serializers_.add(new AuthFailureSerializer());
serializers_.add(new AuthSuccessSerializer());
serializers_.add(new AuthChallengeSerializer());
serializers_.add(new AuthResponseSerializer());
serializers_.add(new StartTLSRequestSerializer());
serializers_.add(new StartTLSFailureSerializer());
serializers_.add(new TLSProceedSerializer());
serializers_.add(new StreamFeaturesSerializer());
serializers_.add(new StreamErrorSerializer());
serializers_.add(new EnableStreamManagementSerializer());
serializers_.add(new StreamManagementEnabledSerializer());
serializers_.add(new StreamManagementFailedSerializer());
serializers_.add(new StreamResumeSerializer());
serializers_.add(new StreamResumedSerializer());
serializers_.add(new StanzaAckSerializer());
serializers_.add(new StanzaAckRequestSerializer());
serializers_.add(new ComponentHandshakeSerializer());
}
public String serializeHeader(ProtocolHeader header) {
String result = "<?xml version=\"1.0\"?><stream:stream xmlns=\"" + getDefaultNamespace() + "\" xmlns:stream=\"http://etherx.jabber.org/streams\"";
if (header.getFrom().length() != 0) {
result += " from=\"" + header.getFrom() + "\"";
}
if (header.getTo().length() != 0) {
result += " to=\"" + header.getTo() + "\"";
}
if (header.getID().length() != 0) {
result += " id=\"" + header.getID() + "\"";
}
if (header.getVersion().length() != 0) {
result += " version=\"" + header.getVersion() + "\"";
}
result += ">";
return result;
}
public String serializeFooter() {
return "</stream:stream>";
}
public String getDefaultNamespace() {
switch (type_) {
case ClientStreamType:
return "jabber:client";
case ServerStreamType:
return "jabber:server";
case ComponentStreamType:
return "jabber:component:accept";
}
assert false;
return "";
}
public SafeByteArray serializeElement(Element element) {
for (ElementSerializer serializer : serializers_) {
if (serializer.canSerialize(element)) {
return serializer.serialize(element);
}
}
throw new IllegalStateException("Trying to send an unknown element");
//assert false; /* UNKNOWN ELEMENT */
//return "";
}
}
|