diff --git a/build/build.xml b/build/build.xml
index cb12e905b..1737c4b54 100644
--- a/build/build.xml
+++ b/build/build.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/build/eclipse/settings/org.eclipse.jdt.ui.prefs b/build/eclipse/settings/org.eclipse.jdt.ui.prefs
index 5da3ae153..fcdbc532c 100644
--- a/build/eclipse/settings/org.eclipse.jdt.ui.prefs
+++ b/build/eclipse/settings/org.eclipse.jdt.ui.prefs
@@ -4,7 +4,7 @@ editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
formatter_profile=_ignite
formatter_settings_version=12
org.eclipse.jdt.ui.javadoc=false
-org.eclipse.jdt.ui.text.custom_code_templates=/**\n * @return the ${bare_field_name}\n *//**\n * @param ${param} the ${bare_field_name} to set\n *//**\n * ${tags}\n *//**\n * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http\://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *//**\n * @author Florian Schmaus\n *\n * ${tags}\n *//**\n * \n *//**\n * ${tags}\n *//* (non-Javadoc)\n * ${see_to_overridden}\n *//**\n * ${tags}\n * ${see_to_target}\n */${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}\n\n\n\n// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();// ${todo} Auto-generated method stub\n${body_statement}${body_statement}\n// ${todo} Auto-generated constructor stubreturn ${field};${field} \= ${param};
+org.eclipse.jdt.ui.text.custom_code_templates=/**\n * @return the ${bare_field_name}\n *//**\n * @param ${param} the ${bare_field_name} to set\n *//**\n * ${tags}\n *//**\n * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http\://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *//**\n * @author ${user}\n *\n * ${tags}\n *//**\n * \n *//**\n * ${tags}\n *//* (non-Javadoc)\n * ${see_to_overridden}\n *//**\n * ${tags}\n * ${see_to_target}\n */${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}\n\n\n\n// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();// ${todo} Auto-generated method stub\n${body_statement}${body_statement}\n// ${todo} Auto-generated constructor stubreturn ${field};${field} \= ${param};
sp_cleanup.add_default_serial_version_id=true
sp_cleanup.add_generated_serial_version_id=false
sp_cleanup.add_missing_annotations=true
diff --git a/build/resources/META-INF/smack-config.xml b/build/resources/META-INF/smack-config.xml
index 1c763e0c2..a4df4764c 100644
--- a/build/resources/META-INF/smack-config.xml
+++ b/build/resources/META-INF/smack-config.xml
@@ -2,21 +2,6 @@
-
-
- org.jivesoftware.smackx.ServiceDiscoveryManager
- org.jivesoftware.smack.PrivacyListManager
- org.jivesoftware.smackx.XHTMLManager
- org.jivesoftware.smackx.muc.MultiUserChat
- org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamManager
- org.jivesoftware.smackx.bytestreams.socks5.Socks5BytestreamManager
- org.jivesoftware.smackx.filetransfer.FileTransferManager
- org.jivesoftware.smackx.LastActivityManager
- org.jivesoftware.smack.ReconnectionManager
- org.jivesoftware.smackx.commands.AdHocCommandManager
- org.jivesoftware.smack.util.dns.JavaxResolver
-
-
5000
@@ -31,11 +16,25 @@
10000
-
-
- 1800
-
+
false
+
+
+
+ org.jivesoftware.smackx.ServiceDiscoveryManager
+ org.jivesoftware.smack.PrivacyListManager
+ org.jivesoftware.smack.keepalive.KeepAliveManager
+ org.jivesoftware.smackx.XHTMLManager
+ org.jivesoftware.smackx.muc.MultiUserChat
+ org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamManager
+ org.jivesoftware.smackx.bytestreams.socks5.Socks5BytestreamManager
+ org.jivesoftware.smackx.filetransfer.FileTransferManager
+ org.jivesoftware.smackx.LastActivityManager
+ org.jivesoftware.smack.ReconnectionManager
+ org.jivesoftware.smackx.commands.AdHocCommandManager
+ org.jivesoftware.smack.util.dns.JavaxResolver
+ org.jivesoftware.smackx.ping.PingManager
+
diff --git a/build/resources/META-INF/smack.providers b/build/resources/META-INF/smack.providers
index f1a7c1f91..b1ce64057 100644
--- a/build/resources/META-INF/smack.providers
+++ b/build/resources/META-INF/smack.providers
@@ -241,7 +241,7 @@
pingurn:xmpp:ping
- org.jivesoftware.smackx.ping.provider.PingProvider
+ org.jivesoftware.smack.ping.provider.PingProvider
@@ -641,32 +641,6 @@
org.jivesoftware.smackx.packet.AttentionExtension$Provider
-
-
- forwarded
- urn:xmpp:forward:0
- org.jivesoftware.smackx.forward.Forwarded$Provider
-
-
-
-
- sent
- urn:xmpp:carbons:2
- org.jivesoftware.smackx.carbons.Carbon$Provider
-
-
- received
- urn:xmpp:carbons:2
- org.jivesoftware.smackx.carbons.Carbon$Provider
-
-
-
-
- ping
- urn:xmpp:ping
- org.jivesoftware.smackx.ping.provider.PingProvider
-
-
received
diff --git a/build/resources/releasedocs/README.html b/build/resources/releasedocs/README.html
index de92dbc8f..f935622c9 100644
--- a/build/resources/releasedocs/README.html
+++ b/build/resources/releasedocs/README.html
@@ -203,6 +203,36 @@ last release.
to use these icons outside of Smack.
Third-party source code is licensed as noted in their source files.
+
Third-party binary code is licensed as follows.
+
+ dnsjava(http://dnsjava.org)
+
+ Copyright (c) 1999-2005, Brian Wellington
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the dnsjava project nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/ContentNegotiator.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/ContentNegotiator.java
index 72431d5f2..9b68c0095 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/ContentNegotiator.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/ContentNegotiator.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleActionEnum.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleActionEnum.java
index d0ca2b73c..99d13c147 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleActionEnum.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleActionEnum.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleException.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleException.java
index 965369bc8..db53911a1 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleException.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleException.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleNegotiatorState.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleNegotiatorState.java
index caa803419..e00ceb7f2 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleNegotiatorState.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleNegotiatorState.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java
index d1f7bd27d..9b53c9b55 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionState.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionState.java
index 830ec5c7c..ec12c861e 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionState.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionState.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateActive.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateActive.java
index f698f4a93..e2244a3e7 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateActive.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateActive.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateEnded.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateEnded.java
index a3cefe059..c0b4db229 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateEnded.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateEnded.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStatePending.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStatePending.java
index 3221da679..a0bf0f255 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStatePending.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStatePending.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateUnknown.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateUnknown.java
index 17fa61d1b..80c2e4b6c 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateUnknown.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateUnknown.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/JMFInit.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/JMFInit.java
index e4fdd73ff..d67ce3b79 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/JMFInit.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/JMFInit.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/DefaultDecoder.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/DefaultDecoder.java
index 6fdb17f48..74262eef5 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/DefaultDecoder.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/DefaultDecoder.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/DefaultEncoder.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/DefaultEncoder.java
index cd77ee888..435695a5c 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/DefaultEncoder.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/DefaultEncoder.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageDecoder.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageDecoder.java
index 2716f90d8..0e4e702c3 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageDecoder.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageDecoder.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageEncoder.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageEncoder.java
index 8d01d210c..fb0ba47e2 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageEncoder.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageEncoder.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageReceiver.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageReceiver.java
index 169c7ff3e..64a46c4f4 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageReceiver.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageReceiver.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageTransmitter.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageTransmitter.java
index f346f757a..31ef5330a 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageTransmitter.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageTransmitter.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/HttpServer.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/HttpServer.java
index 5b056b481..4c55893a9 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/HttpServer.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/HttpServer.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICECandidate.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICECandidate.java
index cf793da07..c9d30a09e 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICECandidate.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICECandidate.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeClient.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeClient.java
index 4a92a091e..ab6055012 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeClient.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeClient.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeServer.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeServer.java
index 5a127afd3..61f10e979 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeServer.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeServer.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TestResult.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TestResult.java
index 04bf118e3..c0040505d 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TestResult.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TestResult.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportCandidate.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportCandidate.java
index 843344b3d..bce1737b2 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportCandidate.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportCandidate.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportResolver.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportResolver.java
index 67f32107b..db9f19830 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportResolver.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportResolver.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleManagerTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleManagerTest.java
index c3d18d707..9a7ac2354 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleManagerTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleManagerTest.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleSessionTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleSessionTest.java
index 0cb7f6ef0..77b40def0 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleSessionTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleSessionTest.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleSupportTests.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleSupportTests.java
index c5ef51746..71f2b6071 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleSupportTests.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleSupportTests.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/PayloadTypeTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/PayloadTypeTest.java
index a4576bf93..95c44ef29 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/PayloadTypeTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/PayloadTypeTest.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/BasicResolverTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/BasicResolverTest.java
index 7cac5d964..bb1b33819 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/BasicResolverTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/BasicResolverTest.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/BridgedResolverTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/BridgedResolverTest.java
index 5ba2e0a91..6a034b5f7 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/BridgedResolverTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/BridgedResolverTest.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/LocalhostTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/LocalhostTest.java
index 89640dece..81c271da4 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/LocalhostTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/LocalhostTest.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/STUNResolverTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/STUNResolverTest.java
index dcf735bf1..bcd81d503 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/STUNResolverTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/STUNResolverTest.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/TransportCandidateTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/TransportCandidateTest.java
index ee353e735..e1170f969 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/TransportCandidateTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/TransportCandidateTest.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/TransportResolverTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/TransportResolverTest.java
index aefc42a4b..1ae0f5c1f 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/TransportResolverTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/TransportResolverTest.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/jingle/extension/test/org/jivesoftware/smackx/provider/JingleProviderTest.java b/jingle/extension/test/org/jivesoftware/smackx/provider/JingleProviderTest.java
index a4172b758..b02de02cb 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/provider/JingleProviderTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/provider/JingleProviderTest.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smack/Connection.java b/source/org/jivesoftware/smack/Connection.java
index 9a213dbc8..ced103f22 100644
--- a/source/org/jivesoftware/smack/Connection.java
+++ b/source/org/jivesoftware/smack/Connection.java
@@ -178,12 +178,12 @@ public abstract class Connection {
protected SmackDebugger debugger = null;
/**
- * The Reader which is used for the {@see debugger}.
+ * The Reader which is used for the debugger.
*/
protected Reader reader;
/**
- * The Writer which is used for the {@see debugger}.
+ * The Writer which is used for the debugger.
*/
protected Writer writer;
diff --git a/source/org/jivesoftware/smack/PacketWriter.java b/source/org/jivesoftware/smack/PacketWriter.java
index f8b5c359f..3fe4db09f 100644
--- a/source/org/jivesoftware/smack/PacketWriter.java
+++ b/source/org/jivesoftware/smack/PacketWriter.java
@@ -40,18 +40,11 @@ import java.util.concurrent.BlockingQueue;
class PacketWriter {
private Thread writerThread;
- private Thread keepAliveThread;
private Writer writer;
private XMPPConnection connection;
private final BlockingQueue queue;
volatile boolean done;
- /**
- * Timestamp when the last stanza was sent to the server. This information is used
- * by the keep alive process to only send heartbeats when the connection has been idle.
- */
- private long lastActive = System.currentTimeMillis();
-
/**
* Creates a new packet writer with the specified connection.
*
@@ -117,25 +110,6 @@ class PacketWriter {
writerThread.start();
}
- /**
- * Starts the keep alive process. A white space (aka heartbeat) is going to be
- * sent to the server every 30 seconds (by default) since the last stanza was sent
- * to the server.
- */
- void startKeepAliveProcess() {
- // Schedule a keep-alive task to run if the feature is enabled. will write
- // out a space character each time it runs to keep the TCP/IP connection open.
- int keepAliveInterval = SmackConfiguration.getKeepAliveInterval();
- if (keepAliveInterval > 0) {
- KeepAliveTask task = new KeepAliveTask(keepAliveInterval);
- keepAliveThread = new Thread(task);
- task.setThread(keepAliveThread);
- keepAliveThread.setDaemon(true);
- keepAliveThread.setName("Smack Keep Alive (" + connection.connectionCounterValue + ")");
- keepAliveThread.start();
- }
- }
-
void setWriter(Writer writer) {
this.writer = writer;
}
@@ -149,9 +123,6 @@ class PacketWriter {
synchronized (queue) {
queue.notifyAll();
}
- // Interrupt the keep alive thread if one was created
- if (keepAliveThread != null)
- keepAliveThread.interrupt();
}
/**
@@ -191,13 +162,10 @@ class PacketWriter {
while (!done && (writerThread == thisThread)) {
Packet packet = nextPacket();
if (packet != null) {
- synchronized (writer) {
- writer.write(packet.toXML());
- if (queue.isEmpty()) {
- writer.flush();
- // Keep track of the last time a stanza was sent to the server
- lastActive = System.currentTimeMillis();
- }
+ writer.write(packet.toXML());
+
+ if (queue.isEmpty()) {
+ writer.flush();
}
}
}
@@ -205,13 +173,11 @@ class PacketWriter {
// we won't have time to entirely flush it before the socket is forced closed
// by the shutdown process.
try {
- synchronized (writer) {
- while (!queue.isEmpty()) {
- Packet packet = queue.remove();
- writer.write(packet.toXML());
- }
- writer.flush();
+ while (!queue.isEmpty()) {
+ Packet packet = queue.remove();
+ writer.write(packet.toXML());
}
+ writer.flush();
}
catch (Exception e) {
e.printStackTrace();
@@ -268,54 +234,4 @@ class PacketWriter {
writer.write(stream.toString());
writer.flush();
}
-
- /**
- * A TimerTask that keeps connections to the server alive by sending a space
- * character on an interval.
- */
- private class KeepAliveTask implements Runnable {
-
- private int delay;
- private Thread thread;
-
- public KeepAliveTask(int delay) {
- this.delay = delay;
- }
-
- protected void setThread(Thread thread) {
- this.thread = thread;
- }
-
- public void run() {
- try {
- // Sleep a minimum of 15 seconds plus delay before sending first heartbeat. This will give time to
- // properly finish TLS negotiation and then start sending heartbeats.
- Thread.sleep(15000 + delay);
- }
- catch (InterruptedException ie) {
- // Do nothing
- }
- while (!done && keepAliveThread == thread) {
- synchronized (writer) {
- // Send heartbeat if no packet has been sent to the server for a given time
- if (System.currentTimeMillis() - lastActive >= delay) {
- try {
- writer.write(" ");
- writer.flush();
- }
- catch (Exception e) {
- // Do nothing
- }
- }
- }
- try {
- // Sleep until we should write the next keep-alive.
- Thread.sleep(delay);
- }
- catch (InterruptedException ie) {
- // Do nothing
- }
- }
- }
- }
}
diff --git a/source/org/jivesoftware/smack/PrivacyList.java b/source/org/jivesoftware/smack/PrivacyList.java
index abb99b742..67d731db7 100644
--- a/source/org/jivesoftware/smack/PrivacyList.java
+++ b/source/org/jivesoftware/smack/PrivacyList.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smack/ReconnectionManager.java b/source/org/jivesoftware/smack/ReconnectionManager.java
index 46274520d..cc3e3af19 100644
--- a/source/org/jivesoftware/smack/ReconnectionManager.java
+++ b/source/org/jivesoftware/smack/ReconnectionManager.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smack/SASLAuthentication.java b/source/org/jivesoftware/smack/SASLAuthentication.java
index a7e1dcbba..6f8b5bf1e 100644
--- a/source/org/jivesoftware/smack/SASLAuthentication.java
+++ b/source/org/jivesoftware/smack/SASLAuthentication.java
@@ -315,8 +315,13 @@ public class SASLAuthentication implements UserAuthentication {
currentMechanism = constructor.newInstance(this);
// Trigger SASL authentication with the selected mechanism. We use
// connection.getHost() since GSAPI requires the FQDN of the server, which
- // may not match the XMPP domain.
- currentMechanism.authenticate(username, connection.getServiceName(), password);
+ // may not match the XMPP domain.
+
+ //The serviceName is basically the value that XMPP server sends to the client as being the location
+ //of the XMPP service we are trying to connect to. This should have the format: host [ "/" serv-name ]
+ //as per RFC-2831 guidelines
+ String serviceName = connection.getServiceName();
+ currentMechanism.authenticate(username, connection.getHost(), serviceName, password);
// Wait until SASL negotiation finishes
synchronized (this) {
@@ -383,7 +388,7 @@ public class SASLAuthentication implements UserAuthentication {
public String authenticateAnonymously() throws XMPPException {
try {
currentMechanism = new SASLAnonymous(this);
- currentMechanism.authenticate(null,null,"");
+ currentMechanism.authenticate(null,null,null,"");
// Wait until SASL negotiation finishes
synchronized (this) {
diff --git a/source/org/jivesoftware/smack/SmackConfiguration.java b/source/org/jivesoftware/smack/SmackConfiguration.java
index 80f1906af..3ff84a0ab 100644
--- a/source/org/jivesoftware/smack/SmackConfiguration.java
+++ b/source/org/jivesoftware/smack/SmackConfiguration.java
@@ -48,7 +48,7 @@ import org.xmlpull.v1.XmlPullParser;
*/
public final class SmackConfiguration {
- private static final String SMACK_VERSION = "3.2.2";
+ private static final String SMACK_VERSION = "3.3.0";
private static int packetReplyTimeout = 5000;
private static int keepAliveInterval = 30000;
@@ -58,11 +58,6 @@ public final class SmackConfiguration {
private static int localSocks5ProxyPort = 7777;
private static int packetCollectorSize = 5000;
- /**
- * defaultPingInterval (in seconds)
- */
- private static int defaultPingInterval = 1800; // 30 min (30*60)
-
/**
* This automatically enables EntityCaps for new connections if it is set to true
*/
@@ -117,8 +112,8 @@ public final class SmackConfiguration {
else if (parser.getName().equals("packetCollectorSize")) {
packetCollectorSize = parseIntProperty(parser, packetCollectorSize);
}
- else if (parser.getName().equals("defaultPingInterval")) {
- defaultPingInterval = parseIntProperty(parser, defaultPingInterval);
+ else if (parser.getName().equals("autoEnableEntityCaps")) {
+ autoEnableEntityCaps = Boolean.parseBoolean(parser.nextText());
}
else if (parser.getName().equals("autoEnableEntityCaps")) {
autoEnableEntityCaps = Boolean.parseBoolean(parser.nextText());
@@ -320,21 +315,12 @@ public final class SmackConfiguration {
}
/**
- * Returns the default ping interval (seconds)
+ * Set if Entity Caps are enabled or disabled for every new connection
*
- * @return
+ * @param true if Entity Caps should be auto enabled, false if not
*/
- public static int getDefaultPingInterval() {
- return defaultPingInterval;
- }
-
- /**
- * Sets the default ping interval (seconds). Set it to '-1' to disable the periodic ping
- *
- * @param defaultPingInterval
- */
- public static void setDefaultPingInterval(int defaultPingInterval) {
- SmackConfiguration.defaultPingInterval = defaultPingInterval;
+ public static void setAutoEnableEntityCaps(boolean b) {
+ autoEnableEntityCaps = b;
}
/**
@@ -345,15 +331,6 @@ public final class SmackConfiguration {
return autoEnableEntityCaps;
}
- /**
- * Set if Entity Caps are enabled or disabled for every new connection
- *
- * @param true if Entity Caps should be auto enabled, false if not
- */
- public static void setAutoEnableEntityCaps(boolean b) {
- autoEnableEntityCaps = b;
- }
-
private static void parseClassToLoad(XmlPullParser parser) throws Exception {
String className = parser.nextText();
// Attempt to load the class so that the class can get initialized
diff --git a/source/org/jivesoftware/smack/SmackError.java b/source/org/jivesoftware/smack/SmackError.java
new file mode 100644
index 000000000..af22e7c0e
--- /dev/null
+++ b/source/org/jivesoftware/smack/SmackError.java
@@ -0,0 +1,24 @@
+package org.jivesoftware.smack;
+
+public enum SmackError {
+ NO_RESPONSE_FROM_SERVER("No response from server.");
+
+ private String message;
+
+ private SmackError(String errMessage) {
+ message = errMessage;
+ }
+
+ public String getErrorMessage() {
+ return message;
+ }
+
+ public static SmackError getErrorCode(String message) {
+ for (SmackError code : values()) {
+ if (code.message.equals(message)) {
+ return code;
+ }
+ }
+ return null;
+ }
+}
diff --git a/source/org/jivesoftware/smack/XMPPConnection.java b/source/org/jivesoftware/smack/XMPPConnection.java
index 6512aa981..2c75e208a 100644
--- a/source/org/jivesoftware/smack/XMPPConnection.java
+++ b/source/org/jivesoftware/smack/XMPPConnection.java
@@ -650,10 +650,6 @@ public class XMPPConnection extends Connection {
// Make note of the fact that we're now connected.
connected = true;
- // Start keep alive process (after TLS was negotiated - if available)
- packetWriter.startKeepAliveProcess();
-
-
if (isFirstInitialization) {
// Notify listeners that a new connection has been established
for (ConnectionCreationListener listener : getConnectionCreationListeners()) {
diff --git a/source/org/jivesoftware/smack/XMPPException.java b/source/org/jivesoftware/smack/XMPPException.java
index 6da24c2b7..e6da0168c 100644
--- a/source/org/jivesoftware/smack/XMPPException.java
+++ b/source/org/jivesoftware/smack/XMPPException.java
@@ -41,10 +41,12 @@ import java.io.PrintWriter;
* @author Matt Tucker
*/
public class XMPPException extends Exception {
-
+ private static final long serialVersionUID = 6881651633890968625L;
+
private StreamError streamError = null;
private XMPPError error = null;
private Throwable wrappedThrowable = null;
+ private SmackError smackError = null;
/**
* Creates a new XMPPException.
@@ -62,6 +64,16 @@ public class XMPPException extends Exception {
super(message);
}
+ /**
+ * Creates a new XMPPException with a Smack specific error code.
+ *
+ * @param code the root cause of the exception.
+ */
+ public XMPPException(SmackError code) {
+ super(code.getErrorMessage());
+ smackError = code;
+ }
+
/**
* Creates a new XMPPException with the Throwable that was the root cause of the
* exception.
@@ -74,7 +86,7 @@ public class XMPPException extends Exception {
}
/**
- * Cretaes a new XMPPException with the stream error that was the root case of the
+ * Creates a new XMPPException with the stream error that was the root case of the
* exception. When a stream error is received from the server then the underlying
* TCP connection will be closed by the server.
*
@@ -144,6 +156,16 @@ public class XMPPException extends Exception {
return error;
}
+ /**
+ * Returns the SmackError asscociated with this exception, or null if there
+ * isn't one.
+ *
+ * @return the SmackError asscociated with this exception.
+ */
+ public SmackError getSmackError() {
+ return smackError;
+ }
+
/**
* Returns the StreamError asscociated with this exception, or null if there
* isn't one. The underlying TCP connection is closed by the server after sending the
diff --git a/source/org/jivesoftware/smack/debugger/ConsoleDebugger.java b/source/org/jivesoftware/smack/debugger/ConsoleDebugger.java
index 6ca5d81e8..7e078b407 100644
--- a/source/org/jivesoftware/smack/debugger/ConsoleDebugger.java
+++ b/source/org/jivesoftware/smack/debugger/ConsoleDebugger.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smack/filter/FromContainsFilter.java b/source/org/jivesoftware/smack/filter/FromContainsFilter.java
index bc372f927..f8e9e977b 100644
--- a/source/org/jivesoftware/smack/filter/FromContainsFilter.java
+++ b/source/org/jivesoftware/smack/filter/FromContainsFilter.java
@@ -3,7 +3,7 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
+ * Copyright 2003 Jive Software.
*
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/source/org/jivesoftware/smack/keepalive/KeepAliveManager.java b/source/org/jivesoftware/smack/keepalive/KeepAliveManager.java
new file mode 100644
index 000000000..99e1acfba
--- /dev/null
+++ b/source/org/jivesoftware/smack/keepalive/KeepAliveManager.java
@@ -0,0 +1,312 @@
+/**
+ * Copyright 2012-2013 Florian Schmaus
+ *
+ * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jivesoftware.smack.keepalive;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+
+import org.jivesoftware.smack.Connection;
+import org.jivesoftware.smack.ConnectionCreationListener;
+import org.jivesoftware.smack.ConnectionListener;
+import org.jivesoftware.smack.PacketCollector;
+import org.jivesoftware.smack.PacketListener;
+import org.jivesoftware.smack.SmackConfiguration;
+import org.jivesoftware.smack.filter.PacketFilter;
+import org.jivesoftware.smack.filter.PacketIDFilter;
+import org.jivesoftware.smack.packet.Packet;
+import org.jivesoftware.smack.ping.PingFailedListener;
+import org.jivesoftware.smack.ping.packet.Ping;
+
+/**
+ * Using an implementation of XMPP Ping (XEP-0199). This
+ * class provides keepalive functionality with the server that will periodically "ping" the server to maintain and/or
+ * verify that the connection still exists.
+ *
+ * The ping is done at the application level and is therefore protocol agnostic. It will thus work for both standard TCP
+ * connections as well as BOSH or any other transport protocol. It will also work regardless of whether the server
+ * supports the Ping extension, since an error response to the ping serves the same purpose as a pong.
+ *
+ * @author Florian Schmaus
+ */
+public class KeepAliveManager {
+ private static Map instances = new HashMap();
+ private static volatile ScheduledExecutorService periodicPingExecutorService;
+
+ static {
+ if (SmackConfiguration.getKeepAliveInterval() > 0) {
+ Connection.addConnectionCreationListener(new ConnectionCreationListener() {
+ public void connectionCreated(Connection connection) {
+ new KeepAliveManager(connection);
+ }
+ });
+ }
+ }
+
+ private Connection connection;
+ private long pingInterval = SmackConfiguration.getKeepAliveInterval();
+ private Set pingFailedListeners = Collections.synchronizedSet(new HashSet());
+ private volatile ScheduledFuture> periodicPingTask;
+ private volatile long lastSuccessfulContact = -1;
+
+ /**
+ * Retrieves a {@link KeepAliveManager} for the specified {@link Connection}, creating one if it doesn't already
+ * exist.
+ *
+ * @param connection
+ * The connection the manager is attached to.
+ * @return The new or existing manager.
+ */
+ public synchronized static KeepAliveManager getInstanceFor(Connection connection) {
+ KeepAliveManager pingManager = instances.get(connection);
+
+ if (pingManager == null) {
+ pingManager = new KeepAliveManager(connection);
+ instances.put(connection, pingManager);
+ }
+ return pingManager;
+ }
+
+ /*
+ * Start the executor service if it hasn't been started yet.
+ */
+ private synchronized static void enableExecutorService() {
+ if (periodicPingExecutorService == null) {
+ periodicPingExecutorService = new ScheduledThreadPoolExecutor(1, new ThreadFactory() {
+ @Override
+ public Thread newThread(Runnable runnable) {
+ Thread pingThread = new Thread(runnable, "Smack Keepalive");
+ pingThread.setDaemon(true);
+ return pingThread;
+ }
+ });
+ }
+ }
+
+ /*
+ * Stop the executor service if all monitored connections are disconnected.
+ */
+ private synchronized static void handleDisconnect(Connection con) {
+ if (periodicPingExecutorService != null) {
+ instances.remove(con);
+
+ if (instances.isEmpty()) {
+ periodicPingExecutorService.shutdownNow();
+ periodicPingExecutorService = null;
+ }
+ }
+ }
+
+ private KeepAliveManager(Connection connection) {
+ this.connection = connection;
+ init();
+ handleConnect();
+ }
+
+ /*
+ * Call after every connection to add the packet listener.
+ */
+ private void handleConnect() {
+ // Listen for all incoming packets and reset the scheduled ping whenever
+ // one arrives.
+ connection.addPacketListener(new PacketListener() {
+
+ @Override
+ public void processPacket(Packet packet) {
+ // reschedule the ping based on this last server contact
+ lastSuccessfulContact = System.currentTimeMillis();
+ schedulePingServerTask();
+ }
+ }, null);
+ }
+
+ private void init() {
+ connection.addConnectionListener(new ConnectionListener() {
+
+ @Override
+ public void connectionClosed() {
+ stopPingServerTask();
+ handleDisconnect(connection);
+ }
+
+ @Override
+ public void connectionClosedOnError(Exception arg0) {
+ stopPingServerTask();
+ handleDisconnect(connection);
+ }
+
+ @Override
+ public void reconnectionSuccessful() {
+ handleConnect();
+ schedulePingServerTask();
+ }
+
+ @Override
+ public void reconnectingIn(int seconds) {
+ }
+
+ @Override
+ public void reconnectionFailed(Exception e) {
+ }
+ });
+
+ instances.put(connection, this);
+ schedulePingServerTask();
+ }
+
+ /**
+ * Sets the ping interval.
+ *
+ * @param pingInterval
+ * The new ping time interval in milliseconds.
+ */
+ public void setPingInterval(long newPingInterval) {
+ if (pingInterval == newPingInterval)
+ return;
+
+ // Enable the executor service
+ if (newPingInterval > 0)
+ enableExecutorService();
+
+ pingInterval = newPingInterval;
+
+ if (pingInterval < 0) {
+ stopPinging();
+ }
+ else {
+ schedulePingServerTask();
+ }
+ }
+
+ /**
+ * Stops pinging the server. This cannot stop a ping that has already started, but will prevent another from being triggered.
+ *
+ * To restart, call {@link #setPingInterval(long)}.
+ */
+ public void stopPinging() {
+ pingInterval = -1;
+ stopPingServerTask();
+ }
+
+ /**
+ * Gets the ping interval.
+ *
+ * @return The ping interval in milliseconds.
+ */
+ public long getPingInterval() {
+ return pingInterval;
+ }
+
+ /**
+ * Add listener for notification when a server ping fails.
+ *
+ *
+ * Please note that this doesn't necessarily mean that the connection is lost, a slow to respond server could also
+ * cause a failure due to taking too long to respond and thus causing a reply timeout.
+ *
+ * @param listener
+ * The listener to be called
+ */
+ public void addPingFailedListener(PingFailedListener listener) {
+ pingFailedListeners.add(listener);
+ }
+
+ /**
+ * Remove the listener.
+ *
+ * @param listener
+ * The listener to be removed.
+ */
+ public void removePingFailedListener(PingFailedListener listener) {
+ pingFailedListeners.remove(listener);
+ }
+
+ /**
+ * Returns the elapsed time (in milliseconds) since the last successful contact with the server
+ * (i.e. the last time any message was received).
+ *
+ * Note: Result is -1 if no message has been received since manager was created and
+ * 0 if the elapsed time is negative due to a clock reset.
+ *
+ * @return Elapsed time since last message was received.
+ */
+ public long getTimeSinceLastContact() {
+ if (lastSuccessfulContact == -1)
+ return lastSuccessfulContact;
+ long delta = System.currentTimeMillis() - lastSuccessfulContact;
+
+ return (delta < 0) ? 0 : delta;
+ }
+
+ /**
+ * Cancels any existing periodic ping task if there is one and schedules a new ping task if pingInterval is greater
+ * then zero.
+ *
+ * This is designed so only one executor is used for scheduling all pings on all connections. This results in only 1 thread used for pinging.
+ */
+ private synchronized void schedulePingServerTask() {
+ enableExecutorService();
+ stopPingServerTask();
+
+ if (pingInterval > 0) {
+ periodicPingTask = periodicPingExecutorService.schedule(new Runnable() {
+ @Override
+ public void run() {
+ Ping ping = new Ping();
+ PacketFilter responseFilter = new PacketIDFilter(ping.getPacketID());
+ final PacketCollector response = connection.createPacketCollector(responseFilter);
+ connection.sendPacket(ping);
+
+ if (!pingFailedListeners.isEmpty()) {
+ // Schedule a collector for the ping reply, notify listeners if none is received.
+ periodicPingExecutorService.schedule(new Runnable() {
+ @Override
+ public void run() {
+ Packet result = response.nextResult(1);
+
+ // Stop queuing results
+ response.cancel();
+
+ // The actual result of the reply can be ignored since we only care if we actually got one.
+ if (result == null) {
+ for (PingFailedListener listener : pingFailedListeners) {
+ listener.pingFailed();
+ }
+ }
+ }
+ }, SmackConfiguration.getPacketReplyTimeout(), TimeUnit.MILLISECONDS);
+ }
+ }
+ }, getPingInterval(), TimeUnit.MILLISECONDS);
+ }
+ }
+
+ private void stopPingServerTask() {
+ if (periodicPingTask != null) {
+ periodicPingTask.cancel(true);
+ periodicPingTask = null;
+ }
+ }
+}
diff --git a/source/org/jivesoftware/smack/packet/PrivacyItem.java b/source/org/jivesoftware/smack/packet/PrivacyItem.java
index de7f8fe22..2e144eec6 100644
--- a/source/org/jivesoftware/smack/packet/PrivacyItem.java
+++ b/source/org/jivesoftware/smack/packet/PrivacyItem.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smackx/ping/PingFailedListener.java b/source/org/jivesoftware/smack/ping/PingFailedListener.java
similarity index 80%
rename from source/org/jivesoftware/smackx/ping/PingFailedListener.java
rename to source/org/jivesoftware/smack/ping/PingFailedListener.java
index 4cda33b0c..450345773 100644
--- a/source/org/jivesoftware/smackx/ping/PingFailedListener.java
+++ b/source/org/jivesoftware/smack/ping/PingFailedListener.java
@@ -14,8 +14,14 @@
* limitations under the License.
*/
-package org.jivesoftware.smackx.ping;
+package org.jivesoftware.smack.ping;
+/**
+ * Defines the callback used whenever the server ping fails.
+ */
public interface PingFailedListener {
+ /**
+ * Called when the server ping fails.
+ */
void pingFailed();
}
\ No newline at end of file
diff --git a/source/org/jivesoftware/smackx/ping/packet/Ping.java b/source/org/jivesoftware/smack/ping/packet/Ping.java
similarity index 77%
rename from source/org/jivesoftware/smackx/ping/packet/Ping.java
rename to source/org/jivesoftware/smack/ping/packet/Ping.java
index fc5bbdfdc..e2db68153 100644
--- a/source/org/jivesoftware/smackx/ping/packet/Ping.java
+++ b/source/org/jivesoftware/smack/ping/packet/Ping.java
@@ -14,25 +14,26 @@
* limitations under the License.
*/
-package org.jivesoftware.smackx.ping.packet;
+package org.jivesoftware.smack.ping.packet;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smackx.ping.PingManager;
public class Ping extends IQ {
+
+ public static final String NAMESPACE = "urn:xmpp:ping";
+ public static final String ELEMENT = "ping";
public Ping() {
}
- public Ping(String from, String to) {
+ public Ping(String to) {
setTo(to);
- setFrom(from);
setType(IQ.Type.GET);
- setPacketID(getPacketID());
}
+ @Override
public String getChildElementXML() {
- return "<" + PingManager.ELEMENT + " xmlns=\'" + PingManager.NAMESPACE + "\' />";
+ return "<" + ELEMENT + " xmlns=\'" + NAMESPACE + "\' />";
}
-
}
diff --git a/source/org/jivesoftware/smackx/ping/provider/PingProvider.java b/source/org/jivesoftware/smack/ping/provider/PingProvider.java
similarity index 91%
rename from source/org/jivesoftware/smackx/ping/provider/PingProvider.java
rename to source/org/jivesoftware/smack/ping/provider/PingProvider.java
index ebe766953..a55f1cc04 100644
--- a/source/org/jivesoftware/smackx/ping/provider/PingProvider.java
+++ b/source/org/jivesoftware/smack/ping/provider/PingProvider.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package org.jivesoftware.smackx.ping.provider;
+package org.jivesoftware.smack.ping.provider;
import org.jivesoftware.smack.packet.IQ;
+import org.jivesoftware.smack.ping.packet.Ping;
import org.jivesoftware.smack.provider.IQProvider;
-import org.jivesoftware.smackx.ping.packet.Ping;
import org.xmlpull.v1.XmlPullParser;
public class PingProvider implements IQProvider {
diff --git a/source/org/jivesoftware/smack/provider/PrivacyProvider.java b/source/org/jivesoftware/smack/provider/PrivacyProvider.java
index 0e0c78a16..62b31205d 100644
--- a/source/org/jivesoftware/smack/provider/PrivacyProvider.java
+++ b/source/org/jivesoftware/smack/provider/PrivacyProvider.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smack/proxy/DirectSocketFactory.java b/source/org/jivesoftware/smack/proxy/DirectSocketFactory.java
index ef3da408f..3c5bb3999 100644
--- a/source/org/jivesoftware/smack/proxy/DirectSocketFactory.java
+++ b/source/org/jivesoftware/smack/proxy/DirectSocketFactory.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smack/proxy/HTTPProxySocketFactory.java b/source/org/jivesoftware/smack/proxy/HTTPProxySocketFactory.java
index ba1cb1f69..4ee5dd622 100644
--- a/source/org/jivesoftware/smack/proxy/HTTPProxySocketFactory.java
+++ b/source/org/jivesoftware/smack/proxy/HTTPProxySocketFactory.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -92,8 +90,7 @@ class HTTPProxySocketFactory
else
{
String password = proxy.getProxyPassword();
- proxyLine = "\r\nProxy-Authorization: Basic "
- + new String(StringUtils.encodeBase64(username + ":" + password));
+ proxyLine = "\r\nProxy-Authorization: Basic " + StringUtils.encodeBase64(username + ":" + password);
}
socket.getOutputStream().write((hostport + " HTTP/1.1\r\nHost: "
+ hostport + proxyLine + "\r\n\r\n").getBytes("UTF-8"));
diff --git a/source/org/jivesoftware/smack/proxy/ProxyException.java b/source/org/jivesoftware/smack/proxy/ProxyException.java
index 80d8d52ae..b37910c0c 100644
--- a/source/org/jivesoftware/smack/proxy/ProxyException.java
+++ b/source/org/jivesoftware/smack/proxy/ProxyException.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smack/proxy/ProxyInfo.java b/source/org/jivesoftware/smack/proxy/ProxyInfo.java
index 4a00d73bb..5a7d3541e 100644
--- a/source/org/jivesoftware/smack/proxy/ProxyInfo.java
+++ b/source/org/jivesoftware/smack/proxy/ProxyInfo.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smack/proxy/Socks4ProxySocketFactory.java b/source/org/jivesoftware/smack/proxy/Socks4ProxySocketFactory.java
index e0cc7c878..6a32c11e9 100644
--- a/source/org/jivesoftware/smack/proxy/Socks4ProxySocketFactory.java
+++ b/source/org/jivesoftware/smack/proxy/Socks4ProxySocketFactory.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smack/proxy/Socks5ProxySocketFactory.java b/source/org/jivesoftware/smack/proxy/Socks5ProxySocketFactory.java
index 6746ad1a2..23ef62328 100644
--- a/source/org/jivesoftware/smack/proxy/Socks5ProxySocketFactory.java
+++ b/source/org/jivesoftware/smack/proxy/Socks5ProxySocketFactory.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smack/sasl/SASLMechanism.java b/source/org/jivesoftware/smack/sasl/SASLMechanism.java
index 4fc139cbd..0d096f2a2 100644
--- a/source/org/jivesoftware/smack/sasl/SASLMechanism.java
+++ b/source/org/jivesoftware/smack/sasl/SASLMechanism.java
@@ -51,6 +51,30 @@ import javax.security.sasl.SaslException;
* using the CallbackHandler method.
*
{@link #challengeReceived(String)} -- Handle a challenge from the server.
*
+ *
+ * Basic XMPP SASL authentication steps:
+ * 1. Client authentication initialization, stanza sent to the server (Base64 encoded):
+ *
+ * 2. Server sends back to the client the challenge response (Base64 encoded)
+ * sample:
+ * realm=,nonce="OA6MG9tEQGm2hh",qop="auth",charset=utf-8,algorithm=md5-sess
+ * 3. The client responds back to the server (Base 64 encoded):
+ * sample:
+ * username=,realm=,nonce="OA6MG9tEQGm2hh",
+ * cnonce="OA6MHXh6VqTrRk",nc=00000001,qop=auth,
+ * digest-uri=,
+ * response=d388dad90d4bbd760a152321f2143af7,
+ * charset=utf-8,
+ * authzid=
+ * 4. The server evaluates if the user is present and contained in the REALM
+ * if successful it sends: (Base64 encoded)
+ * if not successful it sends:
+ * sample:
+ *
+ * cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZA==
+ *
+ *
+
*
* @author Jay Kline
*/
@@ -62,37 +86,88 @@ public abstract class SASLMechanism implements CallbackHandler {
protected String password;
protected String hostname;
-
public SASLMechanism(SASLAuthentication saslAuthentication) {
this.saslAuthentication = saslAuthentication;
}
/**
* Builds and sends the auth stanza to the server. Note that this method of
- * authentication is not recommended, since it is very inflexable. Use
+ * authentication is not recommended, since it is very inflexable. Use
* {@link #authenticate(String, String, CallbackHandler)} whenever possible.
- *
+ *
+ * Explanation of auth stanza:
+ *
+ * The client authentication stanza needs to include the digest-uri of the form: xmpp/serverName
+ * From RFC-2831:
+ * digest-uri = "digest-uri" "=" digest-uri-value
+ * digest-uri-value = serv-type "/" host [ "/" serv-name ]
+ *
+ * digest-uri:
+ * Indicates the principal name of the service with which the client
+ * wishes to connect, formed from the serv-type, host, and serv-name.
+ * For example, the FTP service
+ * on "ftp.example.com" would have a "digest-uri" value of "ftp/ftp.example.com"; the SMTP
+ * server from the example above would have a "digest-uri" value of
+ * "smtp/mail3.example.com/example.com".
+ *
+ * host:
+ * The DNS host name or IP address for the service requested. The DNS host name
+ * must be the fully-qualified canonical name of the host. The DNS host name is the
+ * preferred form; see notes on server processing of the digest-uri.
+ *
+ * serv-name:
+ * Indicates the name of the service if it is replicated. The service is
+ * considered to be replicated if the client's service-location process involves resolution
+ * using standard DNS lookup operations, and if these operations involve DNS records (such
+ * as SRV, or MX) which resolve one DNS name into a set of other DNS names. In this case,
+ * the initial name used by the client is the "serv-name", and the final name is the "host"
+ * component. For example, the incoming mail service for "example.com" may be replicated
+ * through the use of MX records stored in the DNS, one of which points at an SMTP server
+ * called "mail3.example.com"; it's "serv-name" would be "example.com", it's "host" would be
+ * "mail3.example.com". If the service is not replicated, or the serv-name is identical to
+ * the host, then the serv-name component MUST be omitted
+ *
+ * digest-uri verification is needed for ejabberd 2.0.3 and higher
+ *
* @param username the username of the user being authenticated.
- * @param host the hostname where the user account resides.
+ * @param host the hostname where the user account resides.
+ * @param serviceName the xmpp service location - used by the SASL client in digest-uri creation
+ * serviceName format is: host [ "/" serv-name ] as per RFC-2831
* @param password the password for this account.
* @throws IOException If a network error occurs while authenticating.
* @throws XMPPException If a protocol error occurs or the user is not authenticated.
*/
- public void authenticate(String username, String host, String password) throws IOException, XMPPException {
+ public void authenticate(String username, String host, String serviceName, String password) throws IOException, XMPPException {
//Since we were not provided with a CallbackHandler, we will use our own with the given
//information
//Set the authenticationID as the username, since they must be the same in this case.
this.authenticationId = username;
this.password = password;
- this.hostname = host;
+ this.hostname = host;
String[] mechanisms = { getName() };
- Map props = new HashMap();
- sc = Sasl.createSaslClient(mechanisms, username, "xmpp", host, props, this);
+ Map props = new HashMap();
+ sc = Sasl.createSaslClient(mechanisms, username, "xmpp", serviceName, props, this);
authenticate();
}
+ /**
+ * Same as {@link #authenticate(String, String, String, String)}, but with the hostname used as the serviceName.
+ *
+ * Kept for backward compatibility only.
+ *
+ * @param username the username of the user being authenticated.
+ * @param host the hostname where the user account resides.
+ * @param password the password for this account.
+ * @throws IOException If a network error occurs while authenticating.
+ * @throws XMPPException If a protocol error occurs or the user is not authenticated.
+ * @deprecated Please use {@link #authenticate(String, String, String, String)} instead.
+ */
+ public void authenticate(String username, String host, String password) throws IOException, XMPPException {
+ authenticate(username, host, host, password);
+ }
+
/**
* Builds and sends the auth stanza to the server. The callback handler will handle
* any additional information, such as the authentication ID or realm, if it is needed.
@@ -178,7 +253,13 @@ public abstract class SASLMechanism implements CallbackHandler {
pcb.setPassword(password.toCharArray());
} else if(callbacks[i] instanceof RealmCallback) {
RealmCallback rcb = (RealmCallback)callbacks[i];
- rcb.setText(hostname);
+ //Retrieve the REALM from the challenge response that the server returned when the client initiated the authentication
+ //exchange. If this value is not null or empty, *this value* has to be sent back to the server in the client's response
+ //to the server's challenge
+ String text = rcb.getDefaultText();
+ //The SASL client (sc) created in smack uses rcb.getText when creating the negotiatedRealm to send it back to the server
+ //Make sure that this value matches the server's realm
+ rcb.setText(text);
} else if(callbacks[i] instanceof RealmChoiceCallback){
//unused
//RealmChoiceCallback rccb = (RealmChoiceCallback)callbacks[i];
@@ -319,5 +400,5 @@ public abstract class SASLMechanism implements CallbackHandler {
stanza.append("");
return stanza.toString();
}
- }
+ }
}
diff --git a/source/org/jivesoftware/smack/util/Base32Encoder.java b/source/org/jivesoftware/smack/util/Base32Encoder.java
index c7cc1d028..0a4ea21e7 100644
--- a/source/org/jivesoftware/smack/util/Base32Encoder.java
+++ b/source/org/jivesoftware/smack/util/Base32Encoder.java
@@ -29,7 +29,7 @@ import java.io.IOException;
*/
public class Base32Encoder implements StringEncoder {
- private static Base32Encoder instance;
+ private static Base32Encoder instance = new Base32Encoder();
private static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ2345678";
private Base32Encoder() {
@@ -37,9 +37,6 @@ public class Base32Encoder implements StringEncoder {
}
public static Base32Encoder getInstance() {
- if (instance == null) {
- instance = new Base32Encoder();
- }
return instance;
}
diff --git a/source/org/jivesoftware/smack/util/Base64.java b/source/org/jivesoftware/smack/util/Base64.java
index 940c55118..ba6eb371f 100644
--- a/source/org/jivesoftware/smack/util/Base64.java
+++ b/source/org/jivesoftware/smack/util/Base64.java
@@ -7,66 +7,9 @@
package org.jivesoftware.smack.util;
/**
- *
v2.2.1 - Fixed bug using URL_SAFE and ORDERED encodings. Fixed bug
- * when using very small files (~< 40 bytes).
- *
v2.2 - Added some helper methods for encoding/decoding directly from
- * one file to the next. Also added a main() method to support command line
- * encoding/decoding from one file to the next. Also added these Base64 dialects:
- *
- *
The default is RFC3548 format.
- *
Calling Base64.setFormat(Base64.BASE64_FORMAT.URLSAFE_FORMAT) generates
- * URL and file name friendly format as described in Section 4 of RFC3548.
- * http://www.faqs.org/rfcs/rfc3548.html
- *
Calling Base64.setFormat(Base64.BASE64_FORMAT.ORDERED_FORMAT) generates
- * URL and file name friendly format that preserves lexical ordering as described
- * in http://www.faqs.org/qa/rfcc-1940.html
- *
- * Special thanks to Jim Kellerman at http://www.powerset.com/
- * for contributing the new Base64 dialects.
- *
- *
- *
v2.1 - Cleaned up javadoc comments and unused variables and methods. Added
- * some convenience methods for reading and writing to and from files.
- *
v2.0.2 - Now specifies UTF-8 encoding in places where the code fails on systems
- * with other encodings (like EBCDIC).
- *
v2.0.1 - Fixed an error when decoding a single byte, that is, when the
- * encoded data was a single byte.
- *
v2.0 - I got rid of methods that used booleans to set options.
- * Now everything is more consolidated and cleaner. The code now detects
- * when data that's being decoded is gzip-compressed and will decompress it
- * automatically. Generally things are cleaner. You'll probably have to
- * change some method calls that you were making to support the new
- * options format (ints that you "OR" together).
- *
v1.5.1 - Fixed bug when decompressing and decoding to a
- * byte[] using decode( String s, boolean gzipCompressed ).
- * Added the ability to "suspend" encoding in the Output Stream so
- * you can turn on and off the encoding if you need to embed base64
- * data in an otherwise "normal" stream (like an XML file).
- *
v1.5 - Output stream pases on flush() command but doesn't do anything itself.
- * This helps when using GZIP streams.
- * Added the ability to GZip-compress objects before encoding them.
- *
v1.4 - Added helper methods to read/write files.
- *
v1.3.6 - Fixed OutputStream.flush() so that 'position' is reset.
- *
v1.3.5 - Added flag to turn on and off line breaks. Fixed bug in input stream
- * where last buffer being read, if not completely full, was not returned.
- *
v1.3.4 - Fixed when "improperly padded stream" error was thrown at the wrong time.
- *
v1.3.3 - Fixed I/O streams which were totally messed up.
- *
- *
- *
- * I am placing this code in the Public Domain. Do with it as you will.
- * This software comes with no guarantees or warranties but with
- * plenty of well-wishing instead!
- * Please visit http://iharder.net/base64
- * periodically to check for updates or to contribute improvements.
- *
*
* @author Robert Harder
* @author rob@iharder.net
@@ -368,33 +311,6 @@ public class Base64
/** Defeats instantiation. */
private Base64(){}
-
- /**
- * Encodes or decodes two files from the command line;
- * feel free to delete this method (in fact you probably should)
- * if you're embedding this code into a larger program.
- */
- public final static void main( String[] args )
- {
- if( args.length < 3 ){
- usage("Not enough arguments.");
- } // end if: args.length < 3
- else {
- String flag = args[0];
- String infile = args[1];
- String outfile = args[2];
- if( flag.equals( "-e" ) ){
- Base64.encodeFileToFile( infile, outfile );
- } // end if: encode
- else if( flag.equals( "-d" ) ) {
- Base64.decodeFileToFile( infile, outfile );
- } // end else if: decode
- else {
- usage( "Unknown flag: " + flag );
- } // end else
- } // end else
- } // end main
-
/**
* Prints command line usage.
*
diff --git a/source/org/jivesoftware/smack/util/Base64Encoder.java b/source/org/jivesoftware/smack/util/Base64Encoder.java
index 78399b463..d53c0ed08 100644
--- a/source/org/jivesoftware/smack/util/Base64Encoder.java
+++ b/source/org/jivesoftware/smack/util/Base64Encoder.java
@@ -16,20 +16,18 @@ package org.jivesoftware.smack.util;
/**
+ * A Base 64 encoding implementation.
* @author Florian Schmaus
*/
public class Base64Encoder implements StringEncoder {
- private static Base64Encoder instance;
+ private static Base64Encoder instance = new Base64Encoder();
private Base64Encoder() {
// Use getInstance()
}
public static Base64Encoder getInstance() {
- if (instance == null) {
- instance = new Base64Encoder();
- }
return instance;
}
diff --git a/source/org/jivesoftware/smack/util/Base64FileUrlEncoder.java b/source/org/jivesoftware/smack/util/Base64FileUrlEncoder.java
new file mode 100644
index 000000000..190b37439
--- /dev/null
+++ b/source/org/jivesoftware/smack/util/Base64FileUrlEncoder.java
@@ -0,0 +1,48 @@
+/**
+ * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jivesoftware.smack.util;
+
+
+/**
+ * A Base 64 encoding implementation that generates filename and Url safe encodings.
+ *
+ *
+ * Note: This does NOT produce standard Base 64 encodings, but a variant as defined in
+ * Section 4 of RFC3548:
+ * http://www.faqs.org/rfcs/rfc3548.html.
+ *
+ * @author Robin Collier
+ */
+public class Base64FileUrlEncoder implements StringEncoder {
+
+ private static Base64FileUrlEncoder instance = new Base64FileUrlEncoder();
+
+ private Base64FileUrlEncoder() {
+ // Use getInstance()
+ }
+
+ public static Base64FileUrlEncoder getInstance() {
+ return instance;
+ }
+
+ public String encode(String s) {
+ return Base64.encodeBytes(s.getBytes(), Base64.URL_SAFE);
+ }
+
+ public String decode(String s) {
+ return new String(Base64.decode(s, Base64.URL_SAFE));
+ }
+
+}
diff --git a/source/org/jivesoftware/smack/util/DNSUtil.java b/source/org/jivesoftware/smack/util/DNSUtil.java
index 628d8e8f3..20a143faf 100644
--- a/source/org/jivesoftware/smack/util/DNSUtil.java
+++ b/source/org/jivesoftware/smack/util/DNSUtil.java
@@ -81,7 +81,12 @@ public class DNSUtil {
* @return List of HostAddress, which encompasses the hostname and port that the
* XMPP server can be reached at for the specified domain.
*/
- public static List resolveXMPPDomain(String domain) {
+ public static List resolveXMPPDomain(final String domain) {
+ if (dnsResolver == null) {
+ List addresses = new ArrayList(1);
+ addresses.add(new HostAddress(domain, 5222));
+ return addresses;
+ }
return resolveDomain(domain, 'c');
}
@@ -102,7 +107,12 @@ public class DNSUtil {
* @return List of HostAddress, which encompasses the hostname and port that the
* XMPP server can be reached at for the specified domain.
*/
- public static List resolveXMPPServerDomain(String domain) {
+ public static List resolveXMPPServerDomain(final String domain) {
+ if (dnsResolver == null) {
+ List addresses = new ArrayList(1);
+ addresses.add(new HostAddress(domain, 5269));
+ return addresses;
+ }
return resolveDomain(domain, 's');
}
@@ -117,9 +127,6 @@ public class DNSUtil {
}
}
- if (dnsResolver == null)
- throw new IllegalStateException("No DNS resolver active.");
-
List addresses = new ArrayList();
// Step one: Do SRV lookups
diff --git a/source/org/jivesoftware/smack/util/DateFormatType.java b/source/org/jivesoftware/smack/util/DateFormatType.java
index a9d563da9..9253038d7 100644
--- a/source/org/jivesoftware/smack/util/DateFormatType.java
+++ b/source/org/jivesoftware/smack/util/DateFormatType.java
@@ -3,7 +3,7 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
+ * Copyright 2013 Robin Collier.
*
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,48 +17,49 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jivesoftware.smack.util;
-
-import java.text.SimpleDateFormat;
-
-/**
- * Defines the various date and time profiles used in XMPP along with their associated formats.
- * @author Robin Collier
- *
- */
-public enum DateFormatType
-{
- XEP_0082_DATE_PROFILE("yyyy-MM-dd"),
- XEP_0082_DATETIME_PROFILE("yyyy-MM-dd'T'HH:mm:ssZ"),
- XEP_0082_DATETIME_MILLIS_PROFILE("yyyy-MM-dd'T'HH:mm:ss.SSSZ"),
- XEP_0082_TIME_PROFILE("hh:mm:ss"),
- XEP_0082_TIME_ZONE_PROFILE("hh:mm:ssZ"),
- XEP_0082_TIME_MILLIS_PROFILE("hh:mm:ss.SSS"),
- XEP_0082_TIME_MILLIS_ZONE_PROFILE("hh:mm:ss.SSSZ"),
- XEP_0091_DATETIME("yyyyMMdd'T'HH:mm:ss");
-
- private String formatString;
-
- private DateFormatType(String dateFormat)
- {
- formatString = dateFormat;
- }
-
- /**
- * Get the format string as defined in either XEP-0082 or XEP-0091.
- * @return The defined string format for the date.
- */
- public String getFormatString()
- {
- return formatString;
- }
-
- /**
- * Create a {@link SimpleDateFormat} object with the format defined by {@link #getFormatString()}.
- * @return A new date formatter.
- */
- public SimpleDateFormat createFormatter()
- {
- return new SimpleDateFormat(getFormatString());
- }
-}
+package org.jivesoftware.smack.util;
+
+import java.text.SimpleDateFormat;
+
+/**
+ * Defines the various date and time profiles used in XMPP along with their associated formats.
+ *
+ * @author Robin Collier
+ *
+ */
+public enum DateFormatType {
+ // @formatter:off
+ XEP_0082_DATE_PROFILE("yyyy-MM-dd"),
+ XEP_0082_DATETIME_PROFILE("yyyy-MM-dd'T'HH:mm:ssZ"),
+ XEP_0082_DATETIME_MILLIS_PROFILE("yyyy-MM-dd'T'HH:mm:ss.SSSZ"),
+ XEP_0082_TIME_PROFILE("hh:mm:ss"),
+ XEP_0082_TIME_ZONE_PROFILE("hh:mm:ssZ"),
+ XEP_0082_TIME_MILLIS_PROFILE("hh:mm:ss.SSS"),
+ XEP_0082_TIME_MILLIS_ZONE_PROFILE("hh:mm:ss.SSSZ"),
+ XEP_0091_DATETIME("yyyyMMdd'T'HH:mm:ss");
+ // @formatter:on
+
+ private String formatString;
+
+ private DateFormatType(String dateFormat) {
+ formatString = dateFormat;
+ }
+
+ /**
+ * Get the format string as defined in either XEP-0082 or XEP-0091.
+ *
+ * @return The defined string format for the date.
+ */
+ public String getFormatString() {
+ return formatString;
+ }
+
+ /**
+ * Create a {@link SimpleDateFormat} object with the format defined by {@link #getFormatString()}.
+ *
+ * @return A new date formatter.
+ */
+ public SimpleDateFormat createFormatter() {
+ return new SimpleDateFormat(getFormatString());
+ }
+}
diff --git a/source/org/jivesoftware/smack/util/StringEncoder.java b/source/org/jivesoftware/smack/util/StringEncoder.java
index 5a15c9548..4c3d373f3 100644
--- a/source/org/jivesoftware/smack/util/StringEncoder.java
+++ b/source/org/jivesoftware/smack/util/StringEncoder.java
@@ -17,8 +17,6 @@
*/
package org.jivesoftware.smack.util;
-// TODO move StringEncoder, Base64Encoder and Base32Encoder to smack.util
-
public interface StringEncoder {
/**
* Encodes an string to another representation
@@ -26,7 +24,7 @@ public interface StringEncoder {
* @param string
* @return
*/
- public String encode(String string);
+ String encode(String string);
/**
* Decodes an string back to it's initial representation
@@ -34,5 +32,5 @@ public interface StringEncoder {
* @param string
* @return
*/
- public String decode(String string);
+ String decode(String string);
}
diff --git a/source/org/jivesoftware/smack/util/SyncPacketSend.java b/source/org/jivesoftware/smack/util/SyncPacketSend.java
index a1c238aeb..6506cbd88 100644
--- a/source/org/jivesoftware/smack/util/SyncPacketSend.java
+++ b/source/org/jivesoftware/smack/util/SyncPacketSend.java
@@ -16,6 +16,7 @@ package org.jivesoftware.smack.util;
import org.jivesoftware.smack.PacketCollector;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.Connection;
+import org.jivesoftware.smack.SmackError;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketIDFilter;
@@ -47,7 +48,7 @@ final public class SyncPacketSend
response.cancel();
if (result == null) {
- throw new XMPPException("No response from server.");
+ throw new XMPPException(SmackError.NO_RESPONSE_FROM_SERVER);
}
else if (result.getError() != null) {
throw new XMPPException(result.getError());
diff --git a/source/org/jivesoftware/smack/util/dns/DNSJavaResolver.java b/source/org/jivesoftware/smack/util/dns/DNSJavaResolver.java
index 91db73b1a..dd93fd3ae 100644
--- a/source/org/jivesoftware/smack/util/dns/DNSJavaResolver.java
+++ b/source/org/jivesoftware/smack/util/dns/DNSJavaResolver.java
@@ -22,18 +22,19 @@ import org.xbill.DNS.Lookup;
import org.xbill.DNS.Record;
import org.xbill.DNS.Type;
-public class DNSJavaResolver extends DNSResolver {
+/**
+ * This implementation uses the dnsjava implementation for resolving DNS addresses.
+ *
+ */
+public class DNSJavaResolver implements DNSResolver {
- private static DNSJavaResolver instance;
+ private static DNSJavaResolver instance = new DNSJavaResolver();
private DNSJavaResolver() {
}
public static DNSResolver getInstance() {
- if (instance == null) {
- instance = new DNSJavaResolver();
- }
return instance;
}
diff --git a/source/org/jivesoftware/smack/util/dns/DNSResolver.java b/source/org/jivesoftware/smack/util/dns/DNSResolver.java
index 2c5dd296c..86f037b6f 100644
--- a/source/org/jivesoftware/smack/util/dns/DNSResolver.java
+++ b/source/org/jivesoftware/smack/util/dns/DNSResolver.java
@@ -17,8 +17,17 @@ package org.jivesoftware.smack.util.dns;
import java.util.List;
-public abstract class DNSResolver {
+/**
+ * Implementations of this interface define a class that is capable of resolving DNS addresses.
+ *
+ */
+public interface DNSResolver {
- public abstract List lookupSRVRecords(String name);
+ /**
+ * Gets a list of service records for the specified service.
+ * @param name The symbolic name of the service.
+ * @return The list of SRV records mapped to the service name.
+ */
+ List lookupSRVRecords(String name);
}
diff --git a/source/org/jivesoftware/smack/util/dns/HostAddress.java b/source/org/jivesoftware/smack/util/dns/HostAddress.java
index 978a6de69..eb8b07ad7 100644
--- a/source/org/jivesoftware/smack/util/dns/HostAddress.java
+++ b/source/org/jivesoftware/smack/util/dns/HostAddress.java
@@ -23,10 +23,10 @@ public class HostAddress {
/**
* Creates a new HostAddress with the given FQDN. The port will be set to the default XMPP client port: 5222
*
- * @param fqdn
- * @throws IllegalArgumentException
+ * @param fqdn Fully qualified domain name.
+ * @throws IllegalArgumentException If the fqdn is null.
*/
- public HostAddress(String fqdn) throws IllegalArgumentException {
+ public HostAddress(String fqdn) {
if (fqdn == null)
throw new IllegalArgumentException("FQDN is null");
if (fqdn.charAt(fqdn.length() - 1) == '.') {
@@ -39,7 +39,14 @@ public class HostAddress {
this.port = 5222;
}
- public HostAddress(String fqdn, int port) throws IllegalArgumentException {
+ /**
+ * Creates a new HostAddress with the given FQDN. The port will be set to the default XMPP client port: 5222
+ *
+ * @param fqdn Fully qualified domain name.
+ * @param port The port to connect on.
+ * @throws IllegalArgumentException If the fqdn is null or port is out of valid range (0 - 65535).
+ */
+ public HostAddress(String fqdn, int port) {
this(fqdn);
if (port < 0 || port > 65535)
throw new IllegalArgumentException(
@@ -60,10 +67,12 @@ public class HostAddress {
this.exception = e;
}
+ @Override
public String toString() {
return fqdn + ":" + port;
}
+ @Override
public boolean equals(Object o) {
if (this == o) {
return true;
@@ -80,6 +89,13 @@ public class HostAddress {
return port == address.port;
}
+ @Override
+ public int hashCode() {
+ int result = 1;
+ result = 37 * result + fqdn.hashCode();
+ return result * 37 + port;
+ }
+
public String getErrorMessage() {
String error;
if (exception == null) {
diff --git a/source/org/jivesoftware/smack/util/dns/JavaxResolver.java b/source/org/jivesoftware/smack/util/dns/JavaxResolver.java
index 4ea361fdf..ae3dbf6f6 100644
--- a/source/org/jivesoftware/smack/util/dns/JavaxResolver.java
+++ b/source/org/jivesoftware/smack/util/dns/JavaxResolver.java
@@ -28,12 +28,12 @@ import javax.naming.directory.InitialDirContext;
import org.jivesoftware.smack.util.DNSUtil;
/**
- * A DNS resolver (mostly for SRV records), which makes use of the API provided in the javax.* namepsace.
+ * A DNS resolver (mostly for SRV records), which makes use of the API provided in the javax.* namespace.
*
* @author Florian Schmaus
*
*/
-public class JavaxResolver extends DNSResolver {
+public class JavaxResolver implements DNSResolver {
private static JavaxResolver instance;
private static DirContext dirContext;
@@ -48,14 +48,14 @@ public class JavaxResolver extends DNSResolver {
}
// Try to set this DNS resolver as primary one
- DNSUtil.setDNSResolver(maybeGetInstance());
+ DNSUtil.setDNSResolver(getInstance());
}
private JavaxResolver() {
}
- public static DNSResolver maybeGetInstance() {
+ public static DNSResolver getInstance() {
if (instance == null && isSupported()) {
instance = new JavaxResolver();
}
diff --git a/source/org/jivesoftware/smack/util/dns/SRVRecord.java b/source/org/jivesoftware/smack/util/dns/SRVRecord.java
index 87c6e54fc..457e40eca 100644
--- a/source/org/jivesoftware/smack/util/dns/SRVRecord.java
+++ b/source/org/jivesoftware/smack/util/dns/SRVRecord.java
@@ -29,13 +29,13 @@ public class SRVRecord extends HostAddress implements Comparable {
/**
* Create a new SRVRecord
*
- * @param fqdn
- * @param port
- * @param priority
- * @param weight
- * @throws IllegalArgumentException
+ * @param fqdn Fully qualified domain name
+ * @param port The connection port
+ * @param priority Priority of the target host
+ * @param weight Relative weight for records with same priority
+ * @throws IllegalArgumentException fqdn is null or any other field is not in valid range (0-65535).
*/
- public SRVRecord(String fqdn, int port, int priority, int weight) throws IllegalArgumentException {
+ public SRVRecord(String fqdn, int port, int priority, int weight) {
super(fqdn, port);
if (weight < 0 || weight > 65535)
throw new IllegalArgumentException(
@@ -60,6 +60,7 @@ public class SRVRecord extends HostAddress implements Comparable {
return weight;
}
+ @Override
public int compareTo(SRVRecord other) {
// According to RFC2782,
// "[a] client MUST attempt to contact the target host with the lowest-numbered priority it can reach".
@@ -71,6 +72,7 @@ public class SRVRecord extends HostAddress implements Comparable {
return res;
}
+ @Override
public String toString() {
return super.toString() + " prio:" + priority + ":w:" + weight;
}
diff --git a/source/org/jivesoftware/smackx/FormField.java b/source/org/jivesoftware/smackx/FormField.java
index 44dfa8cec..3d15e921a 100644
--- a/source/org/jivesoftware/smackx/FormField.java
+++ b/source/org/jivesoftware/smackx/FormField.java
@@ -299,24 +299,23 @@ public class FormField {
return buf.toString();
}
+ @Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj == this)
return true;
- if (obj.getClass() != getClass())
+ if (!(obj instanceof FormField))
return false;
FormField other = (FormField) obj;
- String thisXml = toXML();
- String otherXml = other.toXML();
+ return toXML().equals(other.toXML());
+ }
- if (thisXml.equals(otherXml)) {
- return true;
- } else {
- return false;
- }
+ @Override
+ public int hashCode() {
+ return toXML().hashCode();
}
/**
@@ -356,6 +355,7 @@ public class FormField {
return value;
}
+ @Override
public String toString() {
return getLabel();
}
@@ -375,6 +375,7 @@ public class FormField {
return buf.toString();
}
+ @Override
public boolean equals(Object obj) {
if (obj == null)
return false;
@@ -396,5 +397,13 @@ public class FormField {
return true;
}
+
+ @Override
+ public int hashCode() {
+ int result = 1;
+ result = 37 * result + value.hashCode();
+ result = 37 * result + (label == null ? 0 : label.hashCode());
+ return result;
+ }
}
}
diff --git a/source/org/jivesoftware/smackx/NodeInformationProvider.java b/source/org/jivesoftware/smackx/NodeInformationProvider.java
index 68bb613d3..27ee53a01 100644
--- a/source/org/jivesoftware/smackx/NodeInformationProvider.java
+++ b/source/org/jivesoftware/smackx/NodeInformationProvider.java
@@ -45,7 +45,7 @@ public interface NodeInformationProvider {
*
* @return a list of the Items defined in the node.
*/
- public abstract List getNodeItems();
+ List getNodeItems();
/**
* Returns a list of the features defined in the node. For
@@ -55,7 +55,7 @@ public interface NodeInformationProvider {
*
* @return a list of the feature strings defined in the node.
*/
- public abstract List getNodeFeatures();
+ List getNodeFeatures();
/**
* Returns a list of the indentites defined in the node. For
@@ -64,12 +64,12 @@ public interface NodeInformationProvider {
*
* @return a list of the Identities defined in the node.
*/
- public abstract List getNodeIdentities();
+ List getNodeIdentities();
/**
* Returns a list of the packet extensions defined in the node.
*
* @return a list of the packet extensions defined in the node.
*/
- public abstract List getNodePacketExtensions();
+ List getNodePacketExtensions();
}
diff --git a/source/org/jivesoftware/smackx/ServiceDiscoveryManager.java b/source/org/jivesoftware/smackx/ServiceDiscoveryManager.java
index f0e7912aa..9e31f6777 100644
--- a/source/org/jivesoftware/smackx/ServiceDiscoveryManager.java
+++ b/source/org/jivesoftware/smackx/ServiceDiscoveryManager.java
@@ -513,7 +513,7 @@ public class ServiceDiscoveryManager {
// If the node version is known, store the new entry.
if (nvh != null) {
- if (EntityCapsManager.verifyDiscvoerInfoVersion(nvh.getVer(), nvh.getHash(), info))
+ if (EntityCapsManager.verifyDiscoverInfoVersion(nvh.getVer(), nvh.getHash(), info))
EntityCapsManager.addDiscoverInfoByNode(nvh.getNodeVer(), info);
}
diff --git a/source/org/jivesoftware/smackx/SharedGroupManager.java b/source/org/jivesoftware/smackx/SharedGroupManager.java
index 8bc39f156..76cd527c5 100644
--- a/source/org/jivesoftware/smackx/SharedGroupManager.java
+++ b/source/org/jivesoftware/smackx/SharedGroupManager.java
@@ -3,7 +3,7 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
+ * Copyright 2005 Jive Software.
*
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/source/org/jivesoftware/smackx/bytestreams/socks5/Socks5BytestreamSession.java b/source/org/jivesoftware/smackx/bytestreams/socks5/Socks5BytestreamSession.java
index 47cf92abb..41ab142db 100644
--- a/source/org/jivesoftware/smackx/bytestreams/socks5/Socks5BytestreamSession.java
+++ b/source/org/jivesoftware/smackx/bytestreams/socks5/Socks5BytestreamSession.java
@@ -3,8 +3,6 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
- *
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/source/org/jivesoftware/smackx/carbons/Carbon.java b/source/org/jivesoftware/smackx/carbons/Carbon.java
deleted file mode 100644
index 588688aa1..000000000
--- a/source/org/jivesoftware/smackx/carbons/Carbon.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * Copyright 2013 Georg Lukas
- *
- * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.jivesoftware.smackx.carbons;
-
-import org.jivesoftware.smack.packet.Packet;
-import org.jivesoftware.smack.packet.PacketExtension;
-import org.jivesoftware.smack.provider.PacketExtensionProvider;
-import org.jivesoftware.smack.util.PacketParserUtils;
-import org.jivesoftware.smackx.forward.Forwarded;
-import org.jivesoftware.smackx.packet.DelayInfo;
-import org.jivesoftware.smackx.provider.DelayInfoProvider;
-import org.xmlpull.v1.XmlPullParser;
-
-/**
- * Packet extension for XEP-0280: Message Carbons. This class implements
- * the packet extension and a {@link PacketExtensionProvider} to parse
- * message carbon copies from a packet. The extension
- * XEP-0280 is
- * meant to synchronize a message flow to multiple presences of a user.
- *
- *
The {@link Carbon.Provider} must be registered in the
- * smack.properties file for the elements sent and
- * received with namespace urn:xmpp:carbons:2
to be used.
- *
- * @author Georg Lukas
- */
-public class Carbon implements PacketExtension {
- public static final String NAMESPACE = "urn:xmpp:carbons:2";
-
- private Direction dir;
- private Forwarded fwd;
-
- public Carbon(Direction dir, Forwarded fwd) {
- this.dir = dir;
- this.fwd = fwd;
- }
-
- /**
- * get the direction (sent or received) of the carbon.
- *
- * @return the {@link Direction} of the carbon.
- */
- public Direction getDirection() {
- return dir;
- }
-
- /**
- * get the forwarded packet.
- *
- * @return the {@link Forwarded} message contained in this Carbon.
- */
- public Forwarded getForwarded() {
- return fwd;
- }
-
- @Override
- public String getElementName() {
- return dir.toString();
- }
-
- @Override
- public String getNamespace() {
- return NAMESPACE;
- }
-
- @Override
- public String toXML() {
- StringBuilder buf = new StringBuilder();
- buf.append("<").append(getElementName()).append(" xmlns=\"")
- .append(getNamespace()).append("\">");
-
- buf.append(fwd.toXML());
-
- buf.append("").append(getElementName()).append(">");
- return buf.toString();
- }
-
- /**
- * An enum to display the direction of a {@link Carbon} message.
- */
- public static enum Direction {
- received,
- sent
- }
-
- public static class Provider implements PacketExtensionProvider {
-
- public PacketExtension parseExtension(XmlPullParser parser) throws Exception {
- Direction dir = Direction.valueOf(parser.getName());
- Forwarded fwd = null;
-
- boolean done = false;
- while (!done) {
- int eventType = parser.next();
- if (eventType == XmlPullParser.START_TAG && parser.getName().equals("forwarded")) {
- fwd = (Forwarded)new Forwarded.Provider().parseExtension(parser);
- }
- else if (eventType == XmlPullParser.END_TAG && dir == Direction.valueOf(parser.getName()))
- done = true;
- }
- if (fwd == null)
- throw new Exception("sent/received must contain exactly one tag");
- return new Carbon(dir, fwd);
- }
- }
-
- /**
- * Packet extension indicating that a message may not be carbon-copied.
- */
- public static class Private implements PacketExtension {
- public static final String ELEMENT = "private";
-
- public String getElementName() {
- return ELEMENT;
- }
-
- public String getNamespace() {
- return Carbon.NAMESPACE;
- }
-
- public String toXML() {
- return "<" + ELEMENT + " xmlns=\"" + Carbon.NAMESPACE + "\"/>";
- }
- }
-}
diff --git a/source/org/jivesoftware/smackx/carbons/CarbonManager.java b/source/org/jivesoftware/smackx/carbons/CarbonManager.java
deleted file mode 100644
index f44701afd..000000000
--- a/source/org/jivesoftware/smackx/carbons/CarbonManager.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/**
- * Copyright 2013 Georg Lukas
- *
- * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.jivesoftware.smackx.carbons;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import org.jivesoftware.smack.Connection;
-import org.jivesoftware.smack.ConnectionCreationListener;
-import org.jivesoftware.smack.PacketCollector;
-import org.jivesoftware.smack.PacketListener;
-import org.jivesoftware.smack.SmackConfiguration;
-import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smack.filter.PacketIDFilter;
-import org.jivesoftware.smack.packet.IQ;
-import org.jivesoftware.smack.packet.Message;
-import org.jivesoftware.smack.packet.Packet;
-import org.jivesoftware.smackx.ServiceDiscoveryManager;
-import org.jivesoftware.smackx.packet.DiscoverInfo;
-
-/**
- * Packet extension for XEP-0280: Message Carbons. This class implements
- * the manager for registering {@link Carbon} support, enabling and disabling
- * message carbons.
- *
- * You should call enableCarbons() before sending your first undirected
- * presence.
- *
- * @author Georg Lukas
- */
-public class CarbonManager {
-
- private static Map instances =
- Collections.synchronizedMap(new WeakHashMap());
-
- static {
- Connection.addConnectionCreationListener(new ConnectionCreationListener() {
- public void connectionCreated(Connection connection) {
- new CarbonManager(connection);
- }
- });
- }
-
- private Connection connection;
- private volatile boolean enabled_state = false;
-
- private CarbonManager(Connection connection) {
- ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
- sdm.addFeature(Carbon.NAMESPACE);
- this.connection = connection;
- instances.put(connection, this);
- }
-
- /**
- * Obtain the CarbonManager responsible for a connection.
- *
- * @param connection the connection object.
- *
- * @return a CarbonManager instance
- */
- public static CarbonManager getInstanceFor(Connection connection) {
- CarbonManager carbonManager = instances.get(connection);
-
- if (carbonManager == null) {
- carbonManager = new CarbonManager(connection);
- }
-
- return carbonManager;
- }
-
- private IQ carbonsEnabledIQ(final boolean new_state) {
- IQ setIQ = new IQ() {
- public String getChildElementXML() {
- return "<" + (new_state? "enable" : "disable") + " xmlns='" + Carbon.NAMESPACE + "'/>";
- }
- };
- setIQ.setType(IQ.Type.SET);
- return setIQ;
- }
-
- /**
- * Returns true if XMPP Carbons are supported by the server.
- *
- * @return true if supported
- */
- public boolean isSupportedByServer() {
- try {
- DiscoverInfo result = ServiceDiscoveryManager
- .getInstanceFor(connection).discoverInfo(connection.getServiceName());
- return result.containsFeature(Carbon.NAMESPACE);
- }
- catch (XMPPException e) {
- return false;
- }
- }
-
- /**
- * Notify server to change the carbons state. This method returns
- * immediately and changes the variable when the reply arrives.
- *
- * You should first check for support using isSupportedByServer().
- *
- * @param new_state whether carbons should be enabled or disabled
- */
- public void sendCarbonsEnabled(final boolean new_state) {
- IQ setIQ = carbonsEnabledIQ(new_state);
-
- connection.addPacketListener(new PacketListener() {
- public void processPacket(Packet packet) {
- IQ result = (IQ)packet;
- if (result.getType() == IQ.Type.RESULT) {
- enabled_state = new_state;
- }
- connection.removePacketListener(this);
- }
- }, new PacketIDFilter(setIQ.getPacketID()));
-
- connection.sendPacket(setIQ);
- }
-
- /**
- * Notify server to change the carbons state. This method blocks
- * some time until the server replies to the IQ and returns true on
- * success.
- *
- * You should first check for support using isSupportedByServer().
- *
- * @param new_state whether carbons should be enabled or disabled
- *
- * @return true if the operation was successful
- */
- public boolean setCarbonsEnabled(final boolean new_state) {
- if (enabled_state == new_state)
- return true;
-
- IQ setIQ = carbonsEnabledIQ(new_state);
-
- PacketCollector collector =
- connection.createPacketCollector(new PacketIDFilter(setIQ.getPacketID()));
- connection.sendPacket(setIQ);
- IQ result = (IQ) collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
- collector.cancel();
-
- if (result != null && result.getType() == IQ.Type.RESULT) {
- enabled_state = new_state;
- return true;
- }
- return false;
- }
-
- /**
- * Helper method to enable carbons.
- *
- * @return true if the operation was successful
- */
- public boolean enableCarbons() {
- return setCarbonsEnabled(true);
- }
-
- /**
- * Helper method to disable carbons.
- *
- * @return true if the operation was successful
- */
- public boolean disableCarbons() {
- return setCarbonsEnabled(false);
- }
-
- /**
- * Check if carbons are enabled on this connection.
- */
- public boolean getCarbonsEnabled() {
- return this.enabled_state;
- }
-
- /**
- * Obtain a Carbon from a message, if available.
- *
- * @param msg Message object to check for carbons
- *
- * @return a Carbon if available, null otherwise.
- */
- public static Carbon getCarbon(Message msg) {
- Carbon cc = (Carbon)msg.getExtension("received", Carbon.NAMESPACE);
- if (cc == null)
- cc = (Carbon)msg.getExtension("sent", Carbon.NAMESPACE);
- return cc;
- }
-
- /**
- * Mark a message as "private", so it will not be carbon-copied.
- *
- * @param msg Message object to mark private
- */
- public static void disableCarbons(Message msg) {
- msg.addExtension(new Carbon.Private());
- }
-}
diff --git a/source/org/jivesoftware/smackx/commands/LocalCommandFactory.java b/source/org/jivesoftware/smackx/commands/LocalCommandFactory.java
index 8ada9662d..83fc4553a 100644
--- a/source/org/jivesoftware/smackx/commands/LocalCommandFactory.java
+++ b/source/org/jivesoftware/smackx/commands/LocalCommandFactory.java
@@ -3,7 +3,7 @@
* $Revision$
* $Date$
*
- * Copyright 2003-2007 Jive Software.
+ * Copyright 2008 Jive Software.
*
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/source/org/jivesoftware/smackx/entitycaps/EntityCapsManager.java b/source/org/jivesoftware/smackx/entitycaps/EntityCapsManager.java
index d5d6402d2..1da222efd 100644
--- a/source/org/jivesoftware/smackx/entitycaps/EntityCapsManager.java
+++ b/source/org/jivesoftware/smackx/entitycaps/EntityCapsManager.java
@@ -506,7 +506,7 @@ public class EntityCapsManager {
* @param info
* @return true if it's valid and should be cache, false if not
*/
- public static boolean verifyDiscvoerInfoVersion(String ver, String hash, DiscoverInfo info) {
+ public static boolean verifyDiscoverInfoVersion(String ver, String hash, DiscoverInfo info) {
// step 3.3 check for duplicate identities
if (info.containsDuplicateIdentities())
return false;
@@ -583,7 +583,7 @@ public class EntityCapsManager {
// NAME is not included (in accordance with XEP-0030, the category and
// type MUST be included.
SortedSet sortedIdentities = new TreeSet();
- ;
+
for (Iterator it = discoverInfo.getIdentities(); it.hasNext();)
sortedIdentities.add(it.next());
@@ -616,7 +616,7 @@ public class EntityCapsManager {
// only use the data form for calculation is it has a hidden FORM_TYPE
// field
// see XEP-0115 5.4 step 3.6
- if (extendedInfo != null && extendedInfo.hasHiddenFromTypeField()) {
+ if (extendedInfo != null && extendedInfo.hasHiddenFormTypeField()) {
synchronized (extendedInfo) {
// 6. If the service discovery information response includes
// XEP-0128 data forms, sort the forms by the FORM_TYPE (i.e.,
diff --git a/source/org/jivesoftware/smackx/entitycaps/cache/EntityCapsPersistentCache.java b/source/org/jivesoftware/smackx/entitycaps/cache/EntityCapsPersistentCache.java
index 4247e7b1b..044104351 100644
--- a/source/org/jivesoftware/smackx/entitycaps/cache/EntityCapsPersistentCache.java
+++ b/source/org/jivesoftware/smackx/entitycaps/cache/EntityCapsPersistentCache.java
@@ -24,15 +24,15 @@ public interface EntityCapsPersistentCache {
* @param node
* @param info
*/
- abstract void addDiscoverInfoByNodePersistent(String node, DiscoverInfo info);
+ void addDiscoverInfoByNodePersistent(String node, DiscoverInfo info);
/**
* Replay the Caches data into EntityCapsManager
*/
- abstract void replay() throws IOException;
+ void replay() throws IOException;
/**
* Empty the Cache
*/
- abstract void emptyCache();
+ void emptyCache();
}
diff --git a/source/org/jivesoftware/smackx/entitycaps/cache/SimpleDirectoryPersistentCache.java b/source/org/jivesoftware/smackx/entitycaps/cache/SimpleDirectoryPersistentCache.java
index 329e4dce6..5d2365463 100644
--- a/source/org/jivesoftware/smackx/entitycaps/cache/SimpleDirectoryPersistentCache.java
+++ b/source/org/jivesoftware/smackx/entitycaps/cache/SimpleDirectoryPersistentCache.java
@@ -27,7 +27,7 @@ import java.io.StringReader;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.provider.IQProvider;
-import org.jivesoftware.smack.util.Base64Encoder;
+import org.jivesoftware.smack.util.Base32Encoder;
import org.jivesoftware.smack.util.StringEncoder;
import org.jivesoftware.smackx.entitycaps.EntityCapsManager;
import org.jivesoftware.smackx.packet.DiscoverInfo;
@@ -47,19 +47,20 @@ import org.xmlpull.v1.XmlPullParserException;
public class SimpleDirectoryPersistentCache implements EntityCapsPersistentCache {
private File cacheDir;
- private StringEncoder stringEncoder;
+ private StringEncoder filenameEncoder;
/**
* Creates a new SimpleDirectoryPersistentCache Object. Make sure that the
* cacheDir exists and that it's an directory.
- *
- * If your cacheDir is case insensitive then make sure to set the
- * StringEncoder to Base32.
+ *
+ * Default filename encoder {@link Base32Encoder}, as this will work on all
+ * filesystems, both case sensitive and case insensitive. It does however
+ * produce longer filenames.
*
* @param cacheDir
*/
public SimpleDirectoryPersistentCache(File cacheDir) {
- this(cacheDir, Base64Encoder.getInstance());
+ this(cacheDir, Base32Encoder.getInstance());
}
/**
@@ -67,26 +68,25 @@ public class SimpleDirectoryPersistentCache implements EntityCapsPersistentCache
* cacheDir exists and that it's an directory.
*
* If your cacheDir is case insensitive then make sure to set the
- * StringEncoder to Base32.
+ * StringEncoder to {@link Base32Encoder} (which is the default).
*
- * @param cacheDir
- * @param stringEncoder
+ * @param cacheDir The directory where the cache will be stored.
+ * @param filenameEncoder Encodes the node string into a filename.
*/
- public SimpleDirectoryPersistentCache(File cacheDir, StringEncoder stringEncoder) {
+ public SimpleDirectoryPersistentCache(File cacheDir, StringEncoder filenameEncoder) {
if (!cacheDir.exists())
throw new IllegalStateException("Cache directory \"" + cacheDir + "\" does not exist");
if (!cacheDir.isDirectory())
throw new IllegalStateException("Cache directory \"" + cacheDir + "\" is not a directory");
this.cacheDir = cacheDir;
- this.stringEncoder = stringEncoder;
+ this.filenameEncoder = filenameEncoder;
}
@Override
public void addDiscoverInfoByNodePersistent(String node, DiscoverInfo info) {
- String filename = stringEncoder.encode(node);
+ String filename = filenameEncoder.encode(node);
File nodeFile = new File(cacheDir, filename);
-
try {
if (nodeFile.createNewFile())
writeInfoToFile(nodeFile, info);
@@ -99,7 +99,7 @@ public class SimpleDirectoryPersistentCache implements EntityCapsPersistentCache
public void replay() throws IOException {
File[] files = cacheDir.listFiles();
for (File f : files) {
- String node = stringEncoder.decode(f.getName());
+ String node = filenameEncoder.decode(f.getName());
DiscoverInfo info = restoreInfoFromFile(f);
if (info == null)
continue;
diff --git a/source/org/jivesoftware/smackx/entitycaps/provider/CapsExtensionProvider.java b/source/org/jivesoftware/smackx/entitycaps/provider/CapsExtensionProvider.java
index 4328d21b3..a112cd52b 100644
--- a/source/org/jivesoftware/smackx/entitycaps/provider/CapsExtensionProvider.java
+++ b/source/org/jivesoftware/smackx/entitycaps/provider/CapsExtensionProvider.java
@@ -1,4 +1,4 @@
-/*
+/**
* Copyright 2009 Jonas Ã…dahl.
* Copyright 2011-2013 Florian Schmaus
*
diff --git a/source/org/jivesoftware/smackx/forward/Forwarded.java b/source/org/jivesoftware/smackx/forward/Forwarded.java
deleted file mode 100644
index 817ee27db..000000000
--- a/source/org/jivesoftware/smackx/forward/Forwarded.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * Copyright 2013 Georg Lukas
- *
- * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.jivesoftware.smackx.forward;
-
-import org.jivesoftware.smack.packet.Packet;
-import org.jivesoftware.smack.packet.PacketExtension;
-import org.jivesoftware.smack.provider.PacketExtensionProvider;
-import org.jivesoftware.smack.util.PacketParserUtils;
-import org.jivesoftware.smackx.packet.DelayInfo;
-import org.jivesoftware.smackx.provider.DelayInfoProvider;
-import org.xmlpull.v1.XmlPullParser;
-
-/**
- * Packet extension for XEP-0297: Stanza Forwarding. This class implements
- * the packet extension and a {@link PacketExtensionProvider} to parse
- * forwarded messages from a packet. The extension
- * XEP-0297 is
- * a prerequisite for XEP-0280 (Message Carbons).
- *
- *
The {@link Forwarded.Provider} must be registered in the
- * smack.properties file for the element forwarded with
- * namespace urn:xmpp:forwarded:0
to be used.
- *
- * @author Georg Lukas
- */
-public class Forwarded implements PacketExtension {
- public static final String NAMESPACE = "urn:xmpp:forward:0";
- public static final String ELEMENT_NAME = "forwarded";
-
- private DelayInfo delay;
- private Packet forwardedPacket;
-
- /**
- * Creates a new Forwarded packet extension.
- *
- * @param delay an optional {@link DelayInfo} timestamp of the packet.
- * @param fwdPacket the packet that is forwarded (required).
- */
- public Forwarded(DelayInfo delay, Packet fwdPacket) {
- this.delay = delay;
- this.forwardedPacket = fwdPacket;
- }
-
- @Override
- public String getElementName() {
- return ELEMENT_NAME;
- }
-
- @Override
- public String getNamespace() {
- return NAMESPACE;
- }
-
- @Override
- public String toXML() {
- StringBuilder buf = new StringBuilder();
- buf.append("<").append(getElementName()).append(" xmlns=\"")
- .append(getNamespace()).append("\">");
-
- if (delay != null)
- buf.append(delay.toXML());
- buf.append(forwardedPacket.toXML());
-
- buf.append("").append(getElementName()).append(">");
- return buf.toString();
- }
-
- /**
- * get the packet forwarded by this stanza.
- *
- * @return the {@link Packet} instance (typically a message) that was forwarded.
- */
- public Packet getForwardedPacket() {
- return forwardedPacket;
- }
-
- /**
- * get the timestamp of the forwarded packet.
- *
- * @return the {@link DelayInfo} representing the time when the original packet was sent. May be null.
- */
- public DelayInfo getDelayInfo() {
- return delay;
- }
-
- public static class Provider implements PacketExtensionProvider {
- DelayInfoProvider dip = new DelayInfoProvider();
-
- public PacketExtension parseExtension(XmlPullParser parser) throws Exception {
- DelayInfo di = null;
- Packet packet = null;
-
- boolean done = false;
- while (!done) {
- int eventType = parser.next();
- if (eventType == XmlPullParser.START_TAG) {
- if (parser.getName().equals("delay"))
- di = (DelayInfo)dip.parseExtension(parser);
- else if (parser.getName().equals("message"))
- packet = PacketParserUtils.parseMessage(parser);
- else throw new Exception("Unsupported forwarded packet type: " + parser.getName());
- }
- else if (eventType == XmlPullParser.END_TAG && parser.getName().equals(ELEMENT_NAME))
- done = true;
- }
- if (packet == null)
- throw new Exception("forwarded extension must contain a packet");
- return new Forwarded(di, packet);
- }
- }
-}
diff --git a/source/org/jivesoftware/smackx/packet/DataForm.java b/source/org/jivesoftware/smackx/packet/DataForm.java
index 4bc1f6994..4d12892b5 100644
--- a/source/org/jivesoftware/smackx/packet/DataForm.java
+++ b/source/org/jivesoftware/smackx/packet/DataForm.java
@@ -202,7 +202,7 @@ public class DataForm implements PacketExtension {
*
* @return
*/
- public boolean hasHiddenFromTypeField() {
+ public boolean hasHiddenFormTypeField() {
boolean found = false;
for (FormField f : fields) {
if (f.getVariable().equals("FORM_TYPE") && f.getType() != null && f.getType().equals("hidden"))
diff --git a/source/org/jivesoftware/smackx/packet/DiscoverInfo.java b/source/org/jivesoftware/smackx/packet/DiscoverInfo.java
index e2219032d..ba873a96d 100644
--- a/source/org/jivesoftware/smackx/packet/DiscoverInfo.java
+++ b/source/org/jivesoftware/smackx/packet/DiscoverInfo.java
@@ -257,13 +257,25 @@ public class DiscoverInfo extends IQ {
* attributes.
*
*/
- public static class Identity implements Comparable