Listing 1

package org.indent.wildfire.auth;

public class SOWAuthProvider implements AuthProvider {
 // Change these select to point to your table rather than using jiveUser of wildfire.
 	private static final String AUTHORIZE =
        "SELECT username FROM jiveUser WHERE username=? AND password=?";
 	private static final String SELECT_PASSWORD =
        "SELECT password FROM jiveUser WHERE username=?";

	public void authenticate(String username, String password) throws UnauthorizedException {
	// Encrypt the password (optional)
			String ePassword = encryptPassword(password);
  }

  public void authenticate(String username, String token, String digest) throws UnauthorizedException { ....     }
	public boolean isPlainSupported() {       return true;    }

	public boolean isDigestSupported() {       return true;    }

// This is optional, used if you have encryption algorithm for authentication
	public String encryptPassword(String password) {        .....  return ePassword;    }
}

Listing 2

public class ClientID extends IQ {
public static String token;
public static String namespace = "jabber:iq:token";
public static String elementname = "query";
public ClientID() {
	setType(IQ.Type.GET);
}
 	public String getChildElementXML() {
        StringBuffer buf = new StringBuffer();
        buf.append("<query xmlns=\"jabber:iq:random\">");
        buf.append("</query>");
        return buf.toString();
  }
public void setToken(String token)
	{
		this.token = token;
	}
public String getToken()
{
		return this.token;
}
public static class Provider implements IQProvider {
  /*Creates a new Provider. ProviderManager requires that every PacketExtensionProvider has a public,no-argument
   constructor    */
		public Provider() {
   }
   /** * Parses an incoming packet (extension sub-packet).        */
   public IQ parseIQ(XmlPullParser parser) throws Exception {
   		ClientID c = new ClientID();
     boolean done = false;
     while (!done) {
     	int eventType = parser.next();
       if (eventType == XmlPullParser.START_TAG) {
         if (parser.getName().equals("token"))
         {
       			c.setToken(parser.nextText());
             done = true;
         }
       }
     }
     return c;
   ]

Listing 3

package org.jivesoftware.smackx.packet;

import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.xmlpull.v1.XmlPullParser;

public class SOWExtension implements PacketExtension {
	private String Url;
	public static String namespace = "http://www.indent.org";
	public static String elementname = "xsow";
	
	public SOWExtension() {
		super();
		// TODO Auto-generated constructor stub
	}

	public void setUrl(String Url) 	{ this.Url = Url;	}
	public String getUrl() {	return Url; }
	public String getNamespace() {	return "http://www.indent.org";	}
	public String getElementName() { return "xsow";	}
	public String toXML()
	{
StringBuffer buf = new StringBuffer(); 
buf.append("<").append(getElementName()).append("xmlns=\"").append(getNamespace()).
	append("\">");
    if (getUrl() != null)
      buf.append("<conf Url=\"").append(getUrl()).append("\"/>");
    buf.append("</").append(getElementName()).append(">");
    return buf.toString();
	}

  public static class Provider implements PacketExtensionProvider {
  	public Provider() {        }
   	public PacketExtension parseExtension(XmlPullParser parser)  throws Exception {
   		SOWExtension sowExtn = new SOWExtension();
     boolean done = false;
     while (!done) {
     	int eventType = parser.next();
       if (eventType == XmlPullParser.START_TAG) {
         if (parser.getName().equals("conf")) {
           	sowExtn.setUrl(parser.getAttributeValue("", "Url"));
           	done = true;
         }
       }
     }
     return sowExtn;
   ]