View Javadoc

1   /*
2    * $Id: XmppConnector.java 7976 2007-08-21 14:26:13Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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   * <code>XmppConnector</code> TODO
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          // template method, nothing to do
39      }
40  
41      protected void doDispose()
42      {
43          // template method
44      }
45  
46      protected void doConnect() throws Exception
47      {
48          // template method
49      }
50  
51      protected void doDisconnect() throws Exception
52      {
53          // template method
54      }
55  
56      protected void doStart() throws UMOException
57      {
58          // template method
59      }
60  
61      protected void doStop() throws UMOException
62      {
63          // template method
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          XMPPConnection xmppConnection = null;
75  
76          String username = endpointURI.getUsername();
77          String hostname = endpointURI.getHost();
78          String password = endpointURI.getPassword();
79          String resource = (String)endpointURI.getParams().get("resource");
80  
81          if (endpointURI.getPort() != -1)
82          {
83              xmppConnection = new XMPPConnection(endpointURI.getHost(), endpointURI.getPort());
84          }
85          else
86          {
87              xmppConnection = new XMPPConnection(endpointURI.getHost());
88          }
89  
90          if (!xmppConnection.isAuthenticated())
91          {
92              // Make sure we have an account. If we don't, make one.
93              try
94              {
95                  AccountManager accManager = new AccountManager(xmppConnection);
96                  accManager.createAccount(username, password);
97              }
98              catch (XMPPException ex)
99              {
100                 // User probably already exists, throw away...
101                 logger.info("*** account (" + username + ") already exists ***");
102             }
103 
104             if (logger.isDebugEnabled())
105             {
106                 logger.debug("Logging in as: " + username);
107                 logger.debug("pw is        : " + password);
108                 logger.debug("server       : " + hostname);
109                 logger.debug("resource     : " + resource);
110             }
111 
112             if (resource == null)
113             {
114                 xmppConnection.login(username, password);
115             }
116             else
117             {
118                 xmppConnection.login(username, password, resource);
119             }
120         }
121         else
122         {
123             if (logger.isDebugEnabled())
124                 logger.debug("Already authenticated on this connection, no need to log in again.");
125         }
126         return xmppConnection;
127     }
128 
129     public boolean isRemoteSyncEnabled()
130     {
131         return true;
132     }
133 }