1package eu.siacs.conversations.generator;
2
3import net.java.otr4j.OtrException;
4import net.java.otr4j.session.Session;
5import eu.siacs.conversations.entities.Account;
6import eu.siacs.conversations.entities.Conversation;
7import eu.siacs.conversations.entities.Message;
8import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
9
10public class MessageGenerator {
11 private MessagePacket preparePacket(Message message) {
12 Conversation conversation = message.getConversation();
13 Account account = conversation.getAccount();
14 MessagePacket packet = new MessagePacket();
15 if (conversation.getMode() == Conversation.MODE_SINGLE) {
16 packet.setTo(message.getCounterpart());
17 packet.setType(MessagePacket.TYPE_CHAT);
18 } else {
19 packet.setTo(message.getCounterpart().split("/")[0]);
20 packet.setType(MessagePacket.TYPE_GROUPCHAT);
21 }
22 packet.setFrom(account.getFullJid());
23 packet.setId(message.getUuid());
24 return packet;
25 }
26
27 public MessagePacket generateOtrChat(Message message) throws OtrException {
28 Session otrSession = message.getConversation().getOtrSession();
29 if (otrSession==null) {
30 throw new OtrException(null);
31 }
32 MessagePacket packet = preparePacket(message);
33 packet.addChild("private", "urn:xmpp:carbons:2");
34 packet.addChild("no-copy", "urn:xmpp:hints");
35 packet.setBody(otrSession.transformSending(message
36 .getBody()));
37 return packet;
38 }
39
40 public MessagePacket generateChat(Message message) {
41 MessagePacket packet = preparePacket(message);
42 packet.setBody(message.getBody());
43 return packet;
44 }
45
46 public MessagePacket generatePgpChat(Message message) {
47 MessagePacket packet = preparePacket(message);
48 packet.setBody("This is an XEP-0027 encryted message");
49 if (message.getEncryption() == Message.ENCRYPTION_DECRYPTED) {
50 packet.addChild("x", "jabber:x:encrypted").setContent(
51 message.getEncryptedBody());
52 } else if (message.getEncryption() == Message.ENCRYPTION_PGP) {
53 packet.setBody(message.getBody());
54 }
55 return packet;
56 }
57}