1
2
3
4
5
6
7
8
9
10
11 package org.mule.providers.xmpp;
12
13 import org.mule.providers.AbstractConnector;
14 import org.mule.umo.UMOException;
15 import org.mule.umo.endpoint.UMOEndpointURI;
16 import org.mule.umo.lifecycle.InitialisationException;
17
18 import org.jivesoftware.smack.AccountManager;
19 import org.jivesoftware.smack.XMPPConnection;
20 import org.jivesoftware.smack.XMPPException;
21
22
23
24
25 public class XmppConnector extends AbstractConnector
26 {
27 public static final String XMPP_PROPERTY_PREFIX = "";
28 public static final String XMPP_SUBJECT = XMPP_PROPERTY_PREFIX + "subject";
29 public static final String XMPP_THREAD = XMPP_PROPERTY_PREFIX + "thread";
30 public static final String XMPP_TO = XMPP_PROPERTY_PREFIX + "to";
31 public static final String XMPP_FROM = XMPP_PROPERTY_PREFIX + "from";
32 public static final String XMPP_GROUP_CHAT = XMPP_PROPERTY_PREFIX + "groupChat";
33 public static final String XMPP_NICKNAME = XMPP_PROPERTY_PREFIX + "nickname";
34
35
36 protected void doInitialise() throws InitialisationException
37 {
38
39 }
40
41 protected void doDispose()
42 {
43
44 }
45
46 protected void doConnect() throws Exception
47 {
48
49 }
50
51 protected void doDisconnect() throws Exception
52 {
53
54 }
55
56 protected void doStart() throws UMOException
57 {
58
59 }
60
61 protected void doStop() throws UMOException
62 {
63
64 }
65
66 public String getProtocol()
67 {
68 return "xmpp";
69 }
70
71 public XMPPConnection createXmppConnection(UMOEndpointURI endpointURI) throws XMPPException
72 {
73 logger.info("Trying to find XMPP connection for uri: " + endpointURI);
74
75 String username = endpointURI.getUsername();
76 String hostname = endpointURI.getHost();
77 String password = endpointURI.getPassword();
78 String resource = (String)endpointURI.getParams().get("resource");
79
80 XMPPConnection xmppConnection = this.doCreateXmppConnection(endpointURI);
81
82 if (!xmppConnection.isAuthenticated())
83 {
84
85 try
86 {
87 AccountManager accManager = new AccountManager(xmppConnection);
88 accManager.createAccount(username, password);
89 }
90 catch (XMPPException ex)
91 {
92
93 logger.info("*** account (" + username + ") already exists ***");
94 }
95
96 if (logger.isDebugEnabled())
97 {
98 logger.debug("Logging in as: " + username);
99 logger.debug("pw is : " + password);
100 logger.debug("server : " + hostname);
101 logger.debug("resource : " + resource);
102 }
103
104 if (resource == null)
105 {
106 xmppConnection.login(username, password);
107 }
108 else
109 {
110 xmppConnection.login(username, password, resource);
111 }
112 }
113 else
114 {
115 if (logger.isDebugEnabled())
116 {
117 logger.debug("Already authenticated on this connection, no need to log in again.");
118 }
119 }
120 return xmppConnection;
121 }
122
123
124
125
126
127
128
129
130
131
132
133 protected XMPPConnection doCreateXmppConnection(UMOEndpointURI endpointURI) throws XMPPException
134 {
135 XMPPConnection xmppConnection = null;
136
137 if (endpointURI.getPort() != -1)
138 {
139 xmppConnection = new XMPPConnection(endpointURI.getHost(), endpointURI.getPort());
140 }
141 else
142 {
143 xmppConnection = new XMPPConnection(endpointURI.getHost());
144 }
145
146 return xmppConnection;
147 }
148
149 public boolean isRemoteSyncEnabled()
150 {
151 return true;
152 }
153 }