/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* 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 net.java.sip.communicator.impl.protocol.jabber.extensions.caps;
import org.jivesoftware.smack.packet.*;
/**
* A {@link PacketExtension} implementation for Entity Capabilities packets.
*
* This work is based on Jonas Adahl's smack fork.
*
* @author Emil Ivov
*/
public class CapsPacketExtension implements PacketExtension
{
/**
* The hash method we use for generating the ver string.
*/
public static final String HASH_METHOD = "sha-1";
/**
* The name space that the Entity Capabilities elements belong to.
*/
public static final String NAMESPACE = "http://jabber.org/protocol/caps";
/**
* The name of the "content" element.
*/
public static final String ELEMENT_NAME = "c";
/**
* A set of name tokens specifying additional feature bundles; this
* attribute is deprecated.
*/
private String ext;
/**
* A URI that uniquely identifies a software application, typically a URL
* at the web site of the project or company that produces the software.
*/
private String node;
/**
* The hashing algorithm used to generate the verification string.
*/
private String hash;
/**
* A string that is used to verify the identity and supported features of
* the entity.
*/
private String ver;
/**
* An empty constructor for the <tt>CapsPacketExtension</tt>.
*/
public CapsPacketExtension()
{
}
/**
* Creates a new <tt>CapsPacketExtension</tt> using the specified
* parameters.
*
* @param ext a set of name tokens specifying additional info, that is
* deprecated and that we keep for backward compatibility.
* @param node a URI that uniquely identifies a software application
* @param ver a version String.representing the identity of the supported
* features.
* @param hash The hashing algorithm used to generate the verification
* <tt>String</tt>.
*/
public CapsPacketExtension(String ext,
String node,
String hash,
String ver)
{
this.ext = ext;
this.node = node;
this.ver = ver;
this.hash = hash;
}
/**
* Returns the name of the caps element.
*
* @return the name of the caps element..
*/
public String getElementName()
{
return ELEMENT_NAME;
}
/**
* Returns the Entity Capabilities namespace.
*
* @return the Entity Capabilities namespace.
*/
public String getNamespace()
{
return NAMESPACE;
}
/**
* Returns the <tt>node</tt> URI. The node URI uniquely identifies a
* software application, typically a URL at the web site of the project or
* company that produces the software.
*
* @return the value of the <tt>node</tt> URI
*/
public String getNode()
{
return node;
}
/**
* Specifies the value of the <tt>node</tt> URI. The node URI uniquely
* identifies a software application, typically a URL at the web site of
* the project or company that produces the software.
*
* @param node a URI uniquely identifying the application.
*/
public void setNode(String node)
{
this.node = node;
}
/**
* Returns the version associated with this packet. A version is a
* string that is used to verify the identity and supported features of the
* entity
*
* @return the value of the <tt>ver</tt> parameter.
*/
public String getVersion()
{
return ver;
}
/**
* Sets the value of the <tt>ver</tt> parameter. A version is a string that
* is used to verify the identity and supported features of the entity.
*
* @param version the value of the <tt>ver</tt> parameter.
*/
public void setVersion(String version)
{
this.ver = version;
}
/**
* Returns the value of the <tt>hash</tt> parameter indicating the hashing
* algorithm used to generate the verification string.
*
* @return the value of the <tt>hash</tt> parameter indicating the hashing
* algorithm used to generate the verification string.
*/
public String getHash()
{
return hash;
}
/**
* Sets the value of the <tt>hash</tt> parameter indicating the hashing
* algorithm used to generate the verification string.
*
* @param hash the hashing algorithm used to generate the verification
* string.
*/
public void setHash(String hash)
{
this.hash = hash;
}
/**
* Returns the value of the <tt>ext</tt> parameter as a string set of
* name tokens specifying additional feature bundles. This attribute is
* deprecated indicating the hashing algorithm used to generate the
* verification string.
*
* @return the value of the <tt>ext</tt> parameter or <tt>null</tt> if it
* hasn't been specified.
*/
public String getExtensions()
{
return ext;
}
/**
* Sets the value of the <tt>ext</tt> parameter as a string set of
* name tokens specifying additional feature bundles. This attribute is
* deprecated indicating the hashing algorithm used to generate the
* verification string.
*
* @param extensions the value of the <tt>ext</tt> parameter.
*/
public void setExtensions(String extensions)
{
this.ext = extensions;
}
/**
* Returns the XML representation of the caps packet extension.
*
* @return this packet extension as an XML <tt>String</tt>.
*/
public String toXML()
{
/* this is the kind of string that we will be generating here:
*
* <presence from='bard@shakespeare.lit/globe'>
* <c xmlns='http://jabber.org/protocol/caps'
* hash='sha-1'
* node='http://jitsi.org'
* ver='zHyEOgxTrkpSdGcQKH8EFPLsriY='/>
* </presence>
*/
StringBuilder bldr
= new StringBuilder("<c xmlns='" + getNamespace() + "' ");
if(getExtensions() != null)
bldr.append("ext='" + getExtensions() + "' ");
bldr.append("hash='" + getHash() + "' ");
bldr.append("node='" + getNode() + "' ");
bldr.append("ver='" + getVersion() + "'/>");
return bldr.toString();
}
}