/
ApnsIQHandler.java
68 lines (54 loc) · 2.32 KB
/
ApnsIQHandler.java
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
package com.wecapslabs.openfire.plugin.apns;
import org.jivesoftware.openfire.IQHandlerInfo;
import org.jivesoftware.openfire.auth.UnauthorizedException;
import org.jivesoftware.openfire.handler.IQHandler;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.QName;
import org.xmpp.packet.IQ;
import org.xmpp.packet.JID;
import org.xmpp.packet.PacketError;
public class ApnsIQHandler extends IQHandler {
private IQHandlerInfo info;
private ApnsDBHandler dbManager;
public ApnsIQHandler() {
super("Apns IQ Handler");
info = new IQHandlerInfo("query","urn:xmpp:apns");
dbManager = new ApnsDBHandler();
}
@Override
public IQHandlerInfo getInfo() {
return info;
}
@Override
public IQ handleIQ(IQ packet) throws UnauthorizedException {
IQ result = IQ.createResultIQ(packet);
JID from = packet.getFrom();
IQ.Type type = packet.getType();
if (type.equals(IQ.Type.get)) {
Element responseElement = DocumentHelper.createElement(QName.get("query", "urn:xmpp:apns"));
responseElement.addElement("token").setText(dbManager.getDeviceToken(from));
result.setChildElement(responseElement);
} else if (type.equals(IQ.Type.set)) {
Element receivedPacket = packet.getElement();
String token = receivedPacket.element("query").elementText("token");
if (token.length() == 64) {
if (dbManager.insertDeviceToken(from, token)) {
Element responseElement = DocumentHelper.createElement(QName.get("query", "urn:xmpp:apns"));
responseElement.addElement("token").setText(token);
result.setChildElement(responseElement);
} else {
result.setChildElement(packet.getChildElement().createCopy());
result.setError(PacketError.Condition.internal_server_error);
}
} else {
result.setChildElement(packet.getChildElement().createCopy());
result.setError(PacketError.Condition.not_acceptable);
}
} else {
result.setChildElement(packet.getChildElement().createCopy());
result.setError(PacketError.Condition.not_acceptable);
}
return result;
}
}