PresenceGenerator.java

 1package eu.siacs.conversations.generator;
 2
 3import eu.siacs.conversations.entities.Account;
 4import eu.siacs.conversations.entities.Contact;
 5import eu.siacs.conversations.xml.Element;
 6import eu.siacs.conversations.xmpp.stanzas.PresencePacket;
 7
 8public class PresenceGenerator extends AbstractGenerator {
 9
10	private PresencePacket subscription(String type, Contact contact) {
11		PresencePacket packet = new PresencePacket();
12		packet.setAttribute("type", type);
13		packet.setAttribute("to", contact.getJid());
14		packet.setAttribute("from", contact.getAccount().getJid());
15		return packet;
16	}
17
18	public PresencePacket requestPresenceUpdatesFrom(Contact contact) {
19		return subscription("subscribe", contact);
20	}
21
22	public PresencePacket stopPresenceUpdatesFrom(Contact contact) {
23		return subscription("unsubscribe", contact);
24	}
25
26	public PresencePacket stopPresenceUpdatesTo(Contact contact) {
27		return subscription("unsubscribed", contact);
28	}
29
30	public PresencePacket sendPresenceUpdatesTo(Contact contact) {
31		return subscription("subscribed", contact);
32	}
33
34	public PresencePacket sendPresence(Account account) {
35		PresencePacket packet = new PresencePacket();
36		packet.setAttribute("from", account.getFullJid());
37		String sig = account.getPgpSignature();
38		if (sig != null) {
39			packet.addChild("status").setContent("online");
40			packet.addChild("x", "jabber:x:signed").setContent(sig);
41		}
42		String capHash = getCapHash();
43		if (capHash != null) {
44			Element cap = packet.addChild("c",
45					"http://jabber.org/protocol/caps");
46			cap.setAttribute("hash", "sha-1");
47			cap.setAttribute("node", "http://conversions.siacs.eu");
48			cap.setAttribute("ver", capHash);
49		}
50		return packet;
51	}
52}