Add support for XEP-0352: Client State Indication

SMACK-607
This commit is contained in:
Florian Schmaus 2014-09-19 23:52:14 +02:00
parent a2ffaeca1f
commit b78a711ebd
5 changed files with 191 additions and 0 deletions

View File

@ -67,6 +67,7 @@ Experimental Smack Extensions and currently supported XEPs by Smack (smack-exper
|---------------------------------------------|----------------------------------------------------------|----------------------------------------------------------------------------------------------------------|
| Message Carbons | [XEP-0280](http://xmpp.org/extensions/xep-0280.html) | Keep all IM clients for a user engaged in a conversation, by carbon-copy outbound messages to all interested resources.
| [HTTP over XMPP transport](hoxt.html) | [XEP-0332](http://xmpp.org/extensions/xep-0332.html) | Allows to transport HTTP communication over XMPP peer-to-peer networks. |
| Client State Indication | [XEP-0352](http://xmpp.org/extensions/xep-0352.html) | A way for the client to indicate its active/inactive state. |
Legacy Smack Extensions and currently supported XEPs by Smack (smack-legacy)

View File

@ -0,0 +1,49 @@
/**
*
* Copyright © 2014 Florian Schmaus
*
* 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.csi;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smackx.csi.packet.ClientStateIndication;
/**
*
* @see <a href="http://xmpp.org/extensions/xep-0352.html">XEP-0352: Client State Indication</a>
*
*/
public class ClientStateIndicationManager {
public static void active(XMPPConnection connection) throws NotConnectedException {
throwIaeIfNotSupported(connection);
connection.send(ClientStateIndication.Active.INSTANCE);
}
public static void inactive(XMPPConnection connection) throws NotConnectedException {
throwIaeIfNotSupported(connection);
connection.send(ClientStateIndication.Inactive.INSTANCE);
}
public static boolean isSupported(XMPPConnection connection) {
return connection.hasFeature(ClientStateIndication.Feature.ELEMENT, ClientStateIndication.NAMESPACE);
}
private static void throwIaeIfNotSupported(XMPPConnection connection) {
if (!isSupported(connection)) {
throw new IllegalArgumentException("Client State Indication not supported by server");
}
}
}

View File

@ -0,0 +1,98 @@
/**
*
* Copyright © 2014 Florian Schmaus
*
* 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.csi.packet;
import org.jivesoftware.smack.packet.FullStreamElement;
import org.jivesoftware.smack.packet.PacketExtension;
/**
*
* @see <a href="http://xmpp.org/extensions/xep-0352.html">XEP-0352: Client State Indication</a>
*
*/
public class ClientStateIndication {
public static final String NAMESPACE = "urn:xmpp:csi:0";
public static class Active extends FullStreamElement {
public static final Active INSTANCE = new Active();
public static final String ELEMENT = "active";
private Active() {
}
@Override
public String getNamespace() {
return NAMESPACE;
}
@Override
public String getElementName() {
return ELEMENT;
}
@Override
public String toXML() {
return '<' + ELEMENT + " xmlns='" + NAMESPACE + "'/>";
}
}
public static class Inactive extends FullStreamElement {
public static final Inactive INSTANCE = new Inactive();
public static final String ELEMENT = "inactive";
private Inactive() {
}
@Override
public String getNamespace() {
return NAMESPACE;
}
@Override
public String getElementName() {
return ELEMENT;
}
@Override
public String toXML() {
return '<' + ELEMENT + " xmlns='" + NAMESPACE + "'/>";
}
}
public static class Feature implements PacketExtension {
public static final Feature INSTANCE = new Feature();
public static final String ELEMENT = "csi";
private Feature() {
}
@Override
public String getElementName() {
return ELEMENT;
}
@Override
public String toXML() {
return '<' + ELEMENT + " xmlns='" + NAMESPACE + "'/>";
}
@Override
public String getNamespace() {
return NAMESPACE;
}
}
}

View File

@ -0,0 +1,36 @@
/**
*
* Copyright © 2014 Florian Schmaus
*
* 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.csi.provider;
import java.io.IOException;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.provider.StreamFeatureProvider;
import org.jivesoftware.smackx.csi.packet.ClientStateIndication;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
public class ClientStateIndicationFeatureProvider implements StreamFeatureProvider {
@Override
public PacketExtension parseStreamFeature(XmlPullParser parser)
throws XmlPullParserException, IOException, SmackException {
return ClientStateIndication.Feature.INSTANCE;
}
}

View File

@ -31,4 +31,11 @@
<className>org.jivesoftware.smackx.carbons.provider.CarbonManagerProvider</className>
</extensionProvider>
<!-- XEP-0352 Client State Indication -->
<streamFeatureProvider>
<elementName>csi</elementName>
<namespace>urn:xmpp:csi:0</namespace>
<className>org.jivesoftware.smackx.csi.provider.ClientStateIndicationFeatureProvider</className>
</streamFeatureProvider>
</smackProviders>