<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>Comments for Abhijeet Maharana</title>
	<atom:link href="http://abhijeetmaharana.com/blog/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://abhijeetmaharana.com/blog</link>
	<description></description>
	<lastBuildDate>Thu, 29 Jan 2015 21:12:56 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.4.8</generator>
	<item>
		<title>Comment on Writing a gTalk (Jabber/XMPP) client in Java by Jim Beshada</title>
		<link>http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-251152</link>
		<dc:creator><![CDATA[Jim Beshada]]></dc:creator>
		<pubDate>Thu, 29 Jan 2015 21:12:56 +0000</pubDate>
		<guid isPermaLink="false">http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-251152</guid>
		<description><![CDATA[Using SMACK API to do initial load of Buddy List
This question is Not Answered.(Mark as assumed answered)
 James Beshada James Beshada Jan 29, 2015 3:37 PM
I have been struggling to get user presence information using the SMACK API. I am able to receive presence changes via the RosterListener, but iterating thru the roster entries after my application starts (and checking presence information) doesn&#039;t yield accurate results. For example, if a user was on-line prior to my application starting, using the roster to access the presence information shows the user to be off-line when they are in fact on-line (using Spark client). In addition, I do not receive any Roster Listener updates for users that were already on-line (prior to my application starting up) unless they change their presence information. Therefore, I don&#039;t know how to do the initial load of my buddy list.
 
I have searched IgniteRealtime and StackOverflow for the last two days. It seems that I am not alone in seeking an answer to this issue.
 
Here&#039;s my code for anyone that wants to take a look:
 
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Date;
 
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterListener;
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.filter.MessageTypeFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smackx.delay.packet.DelayInformation;
import org.jivesoftware.smackx.filetransfer.FileTransfer.Status;
import org.jivesoftware.smackx.filetransfer.FileTransferListener;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.FileTransferRequest;
import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer;
import org.jivesoftware.smackx.receipts.DeliveryReceiptManager;
 
 
public class XmppReceiver extends Thread {
  private XMPPTCPConnection connection;
  FileTransferManager manager;
  private static final String USERID = &quot;valariebeshada&quot;;
  private static final String PASSWORD = &quot;becky11&quot;;
  private static final String RESOURCE = &quot;CAD&quot;;
  private Logger log;
 
  public static void main(String[] args) {
       new XmppReceiver();
  }
 
  public XmppReceiver() {
 
       // Set up logging through log4j.
       log = Logger.getLogger(XmppReceiver.class);
       PropertyConfigurator.configure(&quot;log4j.properties&quot;);
 
       this.start();
  }
 
  public void run() {
       this.connectionSetup();
 
       this.admitFriendsRequest();
       this.setPresence();
       this.setPresenceSubscription(&quot;jimbeshada@jamess-macbook-air.local&quot;, true);
       this.startRosterListener();
       this.showRoster();
       this.startFileTransferManager();
       this.listenForChatMessages();
       this.listenForNormalMessages();
 
       this.pause(30000);
 
       log.info(&quot;XmppReceiver has stopped&quot;);
  }
 
 
  public boolean connectionSetup() {
 
       try {
          ConnectionConfiguration config = new ConnectionConfiguration(&quot;localhost&quot;, 5222);
          config.setSecurityMode(SecurityMode.disabled);
          connection = new XMPPTCPConnection(config);
          DeliveryReceiptManager.getInstanceFor(connection).enableAutoReceipts();
          connection.connect();
          log.info(&quot;Connected&quot;);
       } catch (Exception e) {
            log.error(&quot;Error connecting: &quot; + e.toString());
            return false;
       }
 
       try {
            connection.login(USERID, PASSWORD, RESOURCE);
            return true;
       } catch (Exception e) {
            log.error(&quot;Login error: &quot; + e.toString());
            return false;
       }
  }
 
  private boolean setPresence() {
 
       Presence presence = new Presence(Presence.Type.available);
       presence.setStatus(&quot;Ready to chat&quot;);
       presence.setPriority(42);
       presence.setMode(Presence.Mode.available);
 
       try {
            connection.sendPacket(presence);
            log.info(&quot;Presence set&quot;);
            return true;
       } catch (NotConnectedException e) {
            log.error(&quot;Error setting Presence: &quot; + e.toString());
            return false;
       }
 
  }
 
  private boolean setPresenceSubscription(String user, boolean subscriptionEnabled) {
       Presence presence;
       if (subscriptionEnabled) {
            presence = new Presence(Presence.Type.subscribe);
            log.info(&quot;Subscribed to &quot; + user);
       } else {
            presence = new Presence(Presence.Type.unsubscribe);
            log.info(&quot;Unsubscribed from &quot; + user);
       }
 
       presence.setFrom(USERID);
       presence.setTo(user);
 
       try {
            connection.sendPacket(presence);
            return true;
       } catch (NotConnectedException e) {
            log.error(&quot;Error subscribing to user presence: &quot; + e.toString());
            return false;
       }
 
  }
 
  private void startRosterListener() {
 
      connection.getRoster().addRosterListener(new RosterListener() {
      
          public void presenceChanged(Presence presence) {
 
               log.info(&quot;Presence change detected for:&quot; + presence.getFrom()
                    + &quot;\tType: &quot; + presence.getType()
                    + &quot;\tStatus: &quot; + presence.getStatus());
          }
 
          public void entriesUpdated(Collection presence) {
              log.info(&quot;entriesUpdated&quot;);
 
          }
 
          public void entriesDeleted(Collection presence) {
              log.info(&quot;entriesDeleted&quot;);
 
          }
 
          public void entriesAdded(Collection presence) {
              log.info(&quot;entriesAdded&quot;);
          }
      });
    
      log.info(&quot;Listening to roster changes&quot;);
  }
 
 
 
  public void showRoster() {
 
  Roster roster = connection.getRoster();
        Collection entries = roster.getEntries();
       
        for (RosterEntry entry : entries) {
 
        log.info(&quot;RosterEntry &quot; + entry);
            log.info(&quot;User: [&quot; + entry.getUser() + &quot;]&quot;);
            log.info(&quot;Name: &quot; + entry.getName());
             
            Presence presence = roster.getPresence(entry.getUser());
            if (presence == null) {
            log.info(&quot;User is off-line&quot;);
            } else {
            log.info(&quot;User is on-line&quot;);
            }
 
            log.info(&quot;Present Type: &quot; + presence.getType());
           log.info(&quot;Present Status: &quot; + presence.getStatus());
 
        }
  }
 
  public void listenForChatMessages() {
 
      if (connection != null) {
        
          PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
          connection.addPacketListener(new PacketListener() {
        
              @Override
              public void processPacket(Packet packet) {
                  Message message = (Message) packet;
                  if (message.getBody() != null) {
                      log.info(&quot;Received chat message [&quot; + message.getBody() + &quot;] from [&quot; +  message.getFrom() + &quot;]&quot;);
                  }
              }
          }, filter);
      }
 
      log.info(&quot;Listening for Chat Messages&quot;);
  }
 
  public void listenForNormalMessages() {
 
      if (connection != null) {
        
          PacketFilter filter = new MessageTypeFilter(Message.Type.normal);
          connection.addPacketListener(new PacketListener() {
        
              @Override
              public void processPacket(Packet packet) {
                  Message message = (Message) packet;
                  if (message.getBody() != null) {
                      log.info(&quot;Received normal message [&quot; + message.getBody() + &quot;] from [&quot; +  message.getFrom() + &quot;]&quot;);
                      DelayInformation inf = null;
                      try {
                          inf = (DelayInformation)packet.getExtension(&quot;x&quot;,&quot;jabber:x:delay&quot;);
                      } catch (Exception e) {
                          System.out.println(&quot;Error retrieving delay information: &quot; + e.toString());
                      }
                      // get offline message timestamp
                      if(inf!=null){
                          Date date = inf.getStamp();
                          log.info(&quot;Packet Date: &quot; + date);
                      }
                  }
              }
          }, filter);
      }
 
      log.info(&quot;Listening for Normal Messages&quot;);
  }
 
  private void startFileTransferManager() {
 
       manager = new FileTransferManager(connection);
       manager.addFileTransferListener(new FileTransferListener() {
 
            public void fileTransferRequest(final FileTransferRequest request) {
                 log.info(&quot;File transfer request received&quot;);
                 new Thread() {
      
                      @Override
                      public void run() {
                           log.info(&quot;Received request from: &quot; + request.getRequestor() + &quot; to transfer file: &quot; + request.getFileName());
                           //FileTransferNegotiator.IBB_ONLY = true;
                           IncomingFileTransfer transfer = request.accept();
                           log.info(&quot;File transfer request accepted&quot;);
                           String path = getRunDirectory() + File.separator + System.currentTimeMillis() + &quot;.jpg&quot;;
                           File file = new File(path);
                           try {
                                transfer.recieveFile(file);
                                while (!transfer.isDone()) {
                                     pause(1000);
                                     if (transfer.getStatus().equals(Status.error)) {
                                          log.error(&quot;File transfer error: &quot; + transfer.getError());
                                          if (transfer.getException() != null) {
                                               log.error(&quot;Transfer exception: &quot; + transfer.getException().getMessage());
                                          }                        
                                          break;
                                     }
                                }    
                           } catch (Exception e) {
                                log.error(&quot;File transfer exception caught: &quot; + e.getMessage());
                           }
 
                           if (transfer.getStatus().equals(Status.complete)) {
                                log.info(&quot;File transfer complete&quot;);
                           }
                      };         
                  }.start();
          }
       });
 
       log.info(&quot;File Transfer Manager is listening for requests&quot;);
  }
 
  public void admitFriendsRequest() {
 
       connection.getRoster().setSubscriptionMode(Roster.SubscriptionMode.manual);
       connection.addPacketListener(new PacketListener() {
 
           public void processPacket(Packet paramPacket) {
 
               if (paramPacket instanceof Presence) {
                   Presence presence = (Presence) paramPacket;
                   String email = presence.getFrom();
                   log.info(&quot;chat invite status changed by user: : &quot;
                           + email + &quot; calling listner&quot;);
                   log.info(&quot;presence: &quot; + presence.getFrom()
                           + &quot;; type: &quot; + presence.getType() + &quot;; to: &quot;
                           + presence.getTo() + &quot;; &quot; + presence.toXML());
                   Roster roster = connection.getRoster();
                   for (RosterEntry rosterEntry : roster.getEntries()) {
                       log.info(&quot;jid: &quot; + rosterEntry.getUser()
                               + &quot;; type: &quot; + rosterEntry.getType()
                               + &quot;; status: &quot; + rosterEntry.getStatus());
                   }
 
                   if (presence.getType().equals(Presence.Type.subscribe)) {
                  
                       Presence newp = new Presence(Presence.Type.subscribed);
                       newp.setMode(Presence.Mode.available);
                       newp.setPriority(24);
                       newp.setTo(presence.getFrom());
                       try {
                           connection.sendPacket(newp);
                       } catch (Exception e) {
                      
                       }
 
                       Presence subscription = new Presence(
                               Presence.Type.subscribe);
                       subscription.setTo(presence.getFrom());
                      
                      
                       try {
                       connection.sendPacket(subscription);
                       } catch (Exception e) {
                      
                       }
 
                   } else if (presence.getType().equals(Presence.Type.unsubscribe)) {
                  
                       Presence newp = new Presence(Presence.Type.unsubscribed);
                       newp.setMode(Presence.Mode.available);
                       newp.setPriority(24);
                       newp.setTo(presence.getFrom());
                      
                       try {
                       connection.sendPacket(newp);
                       } catch (Exception e) {
                      
                       }
                   } else {
                   log.info(&quot;Other type of presence packet received&quot;);
                   }
               }
 
           }
       }, new PacketFilter() {
           public boolean accept(Packet packet) {
               if (packet instanceof Presence) {
                   Presence presence = (Presence) packet;
                   if (presence.getType().equals(Presence.Type.subscribed)
                           &#124;&#124; presence.getType().equals(
                                   Presence.Type.subscribe)
                           &#124;&#124; presence.getType().equals(
                                   Presence.Type.unsubscribed)
                           &#124;&#124; presence.getType().equals(
                                   Presence.Type.unsubscribe)) {
                       return true;
                   }
               }
               return false;
           }
       });
 
   }
 
  private String getRunDirectory() {
 
       try {
            File cur_dir = new File(&quot;.&quot;);
       return cur_dir.getCanonicalPath();
       } catch (IOException e) {
            return null;
       }
  }
 
  private void pause(int delay){
       try {
            Thread.sleep(delay);
       } catch (Exception e) {
            // ignore
       }
  }
 
}]]></description>
		<content:encoded><![CDATA[<p>Using SMACK API to do initial load of Buddy List<br />
This question is Not Answered.(Mark as assumed answered)<br />
 James Beshada James Beshada Jan 29, 2015 3:37 PM<br />
I have been struggling to get user presence information using the SMACK API. I am able to receive presence changes via the RosterListener, but iterating thru the roster entries after my application starts (and checking presence information) doesn&#8217;t yield accurate results. For example, if a user was on-line prior to my application starting, using the roster to access the presence information shows the user to be off-line when they are in fact on-line (using Spark client). In addition, I do not receive any Roster Listener updates for users that were already on-line (prior to my application starting up) unless they change their presence information. Therefore, I don&#8217;t know how to do the initial load of my buddy list.</p>
<p>I have searched IgniteRealtime and StackOverflow for the last two days. It seems that I am not alone in seeking an answer to this issue.</p>
<p>Here&#8217;s my code for anyone that wants to take a look:</p>
<p>import java.io.File;<br />
import java.io.IOException;<br />
import java.util.Collection;<br />
import java.util.Date;</p>
<p>import org.apache.log4j.Logger;<br />
import org.apache.log4j.PropertyConfigurator;<br />
import org.jivesoftware.smack.ConnectionConfiguration;<br />
import org.jivesoftware.smack.PacketListener;<br />
import org.jivesoftware.smack.Roster;<br />
import org.jivesoftware.smack.RosterEntry;<br />
import org.jivesoftware.smack.RosterListener;<br />
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;<br />
import org.jivesoftware.smack.SmackException.NotConnectedException;<br />
import org.jivesoftware.smack.filter.MessageTypeFilter;<br />
import org.jivesoftware.smack.filter.PacketFilter;<br />
import org.jivesoftware.smack.packet.Message;<br />
import org.jivesoftware.smack.packet.Packet;<br />
import org.jivesoftware.smack.packet.Presence;<br />
import org.jivesoftware.smack.tcp.XMPPTCPConnection;<br />
import org.jivesoftware.smackx.delay.packet.DelayInformation;<br />
import org.jivesoftware.smackx.filetransfer.FileTransfer.Status;<br />
import org.jivesoftware.smackx.filetransfer.FileTransferListener;<br />
import org.jivesoftware.smackx.filetransfer.FileTransferManager;<br />
import org.jivesoftware.smackx.filetransfer.FileTransferRequest;<br />
import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer;<br />
import org.jivesoftware.smackx.receipts.DeliveryReceiptManager;</p>
<p>public class XmppReceiver extends Thread {<br />
  private XMPPTCPConnection connection;<br />
  FileTransferManager manager;<br />
  private static final String USERID = &#8220;valariebeshada&#8221;;<br />
  private static final String PASSWORD = &#8220;becky11&#8221;;<br />
  private static final String RESOURCE = &#8220;CAD&#8221;;<br />
  private Logger log;</p>
<p>  public static void main(String[] args) {<br />
       new XmppReceiver();<br />
  }</p>
<p>  public XmppReceiver() {</p>
<p>       // Set up logging through log4j.<br />
       log = Logger.getLogger(XmppReceiver.class);<br />
       PropertyConfigurator.configure(&#8220;log4j.properties&#8221;);</p>
<p>       this.start();<br />
  }</p>
<p>  public void run() {<br />
       this.connectionSetup();</p>
<p>       this.admitFriendsRequest();<br />
       this.setPresence();<br />
       this.setPresenceSubscription(&#8220;jimbeshada@jamess-macbook-air.local&#8221;, true);<br />
       this.startRosterListener();<br />
       this.showRoster();<br />
       this.startFileTransferManager();<br />
       this.listenForChatMessages();<br />
       this.listenForNormalMessages();</p>
<p>       this.pause(30000);</p>
<p>       log.info(&#8220;XmppReceiver has stopped&#8221;);<br />
  }</p>
<p>  public boolean connectionSetup() {</p>
<p>       try {<br />
          ConnectionConfiguration config = new ConnectionConfiguration(&#8220;localhost&#8221;, 5222);<br />
          config.setSecurityMode(SecurityMode.disabled);<br />
          connection = new XMPPTCPConnection(config);<br />
          DeliveryReceiptManager.getInstanceFor(connection).enableAutoReceipts();<br />
          connection.connect();<br />
          log.info(&#8220;Connected&#8221;);<br />
       } catch (Exception e) {<br />
            log.error(&#8220;Error connecting: &#8221; + e.toString());<br />
            return false;<br />
       }</p>
<p>       try {<br />
            connection.login(USERID, PASSWORD, RESOURCE);<br />
            return true;<br />
       } catch (Exception e) {<br />
            log.error(&#8220;Login error: &#8221; + e.toString());<br />
            return false;<br />
       }<br />
  }</p>
<p>  private boolean setPresence() {</p>
<p>       Presence presence = new Presence(Presence.Type.available);<br />
       presence.setStatus(&#8220;Ready to chat&#8221;);<br />
       presence.setPriority(42);<br />
       presence.setMode(Presence.Mode.available);</p>
<p>       try {<br />
            connection.sendPacket(presence);<br />
            log.info(&#8220;Presence set&#8221;);<br />
            return true;<br />
       } catch (NotConnectedException e) {<br />
            log.error(&#8220;Error setting Presence: &#8221; + e.toString());<br />
            return false;<br />
       }</p>
<p>  }</p>
<p>  private boolean setPresenceSubscription(String user, boolean subscriptionEnabled) {<br />
       Presence presence;<br />
       if (subscriptionEnabled) {<br />
            presence = new Presence(Presence.Type.subscribe);<br />
            log.info(&#8220;Subscribed to &#8221; + user);<br />
       } else {<br />
            presence = new Presence(Presence.Type.unsubscribe);<br />
            log.info(&#8220;Unsubscribed from &#8221; + user);<br />
       }</p>
<p>       presence.setFrom(USERID);<br />
       presence.setTo(user);</p>
<p>       try {<br />
            connection.sendPacket(presence);<br />
            return true;<br />
       } catch (NotConnectedException e) {<br />
            log.error(&#8220;Error subscribing to user presence: &#8221; + e.toString());<br />
            return false;<br />
       }</p>
<p>  }</p>
<p>  private void startRosterListener() {</p>
<p>      connection.getRoster().addRosterListener(new RosterListener() {</p>
<p>          public void presenceChanged(Presence presence) {</p>
<p>               log.info(&#8220;Presence change detected for:&#8221; + presence.getFrom()<br />
                    + &#8220;\tType: &#8221; + presence.getType()<br />
                    + &#8220;\tStatus: &#8221; + presence.getStatus());<br />
          }</p>
<p>          public void entriesUpdated(Collection presence) {<br />
              log.info(&#8220;entriesUpdated&#8221;);</p>
<p>          }</p>
<p>          public void entriesDeleted(Collection presence) {<br />
              log.info(&#8220;entriesDeleted&#8221;);</p>
<p>          }</p>
<p>          public void entriesAdded(Collection presence) {<br />
              log.info(&#8220;entriesAdded&#8221;);<br />
          }<br />
      });</p>
<p>      log.info(&#8220;Listening to roster changes&#8221;);<br />
  }</p>
<p>  public void showRoster() {</p>
<p>  Roster roster = connection.getRoster();<br />
        Collection entries = roster.getEntries();</p>
<p>        for (RosterEntry entry : entries) {</p>
<p>        log.info(&#8220;RosterEntry &#8221; + entry);<br />
            log.info(&#8220;User: [&#8221; + entry.getUser() + &#8220;]&#8221;);<br />
            log.info(&#8220;Name: &#8221; + entry.getName());</p>
<p>            Presence presence = roster.getPresence(entry.getUser());<br />
            if (presence == null) {<br />
            log.info(&#8220;User is off-line&#8221;);<br />
            } else {<br />
            log.info(&#8220;User is on-line&#8221;);<br />
            }</p>
<p>            log.info(&#8220;Present Type: &#8221; + presence.getType());<br />
           log.info(&#8220;Present Status: &#8221; + presence.getStatus());</p>
<p>        }<br />
  }</p>
<p>  public void listenForChatMessages() {</p>
<p>      if (connection != null) {</p>
<p>          PacketFilter filter = new MessageTypeFilter(Message.Type.chat);<br />
          connection.addPacketListener(new PacketListener() {</p>
<p>              @Override<br />
              public void processPacket(Packet packet) {<br />
                  Message message = (Message) packet;<br />
                  if (message.getBody() != null) {<br />
                      log.info(&#8220;Received chat message [&#8221; + message.getBody() + &#8220;] from [&#8221; +  message.getFrom() + &#8220;]&#8221;);<br />
                  }<br />
              }<br />
          }, filter);<br />
      }</p>
<p>      log.info(&#8220;Listening for Chat Messages&#8221;);<br />
  }</p>
<p>  public void listenForNormalMessages() {</p>
<p>      if (connection != null) {</p>
<p>          PacketFilter filter = new MessageTypeFilter(Message.Type.normal);<br />
          connection.addPacketListener(new PacketListener() {</p>
<p>              @Override<br />
              public void processPacket(Packet packet) {<br />
                  Message message = (Message) packet;<br />
                  if (message.getBody() != null) {<br />
                      log.info(&#8220;Received normal message [&#8221; + message.getBody() + &#8220;] from [&#8221; +  message.getFrom() + &#8220;]&#8221;);<br />
                      DelayInformation inf = null;<br />
                      try {<br />
                          inf = (DelayInformation)packet.getExtension(&#8220;x&#8221;,&#8221;jabber:x:delay&#8221;);<br />
                      } catch (Exception e) {<br />
                          System.out.println(&#8220;Error retrieving delay information: &#8221; + e.toString());<br />
                      }<br />
                      // get offline message timestamp<br />
                      if(inf!=null){<br />
                          Date date = inf.getStamp();<br />
                          log.info(&#8220;Packet Date: &#8221; + date);<br />
                      }<br />
                  }<br />
              }<br />
          }, filter);<br />
      }</p>
<p>      log.info(&#8220;Listening for Normal Messages&#8221;);<br />
  }</p>
<p>  private void startFileTransferManager() {</p>
<p>       manager = new FileTransferManager(connection);<br />
       manager.addFileTransferListener(new FileTransferListener() {</p>
<p>            public void fileTransferRequest(final FileTransferRequest request) {<br />
                 log.info(&#8220;File transfer request received&#8221;);<br />
                 new Thread() {</p>
<p>                      @Override<br />
                      public void run() {<br />
                           log.info(&#8220;Received request from: &#8221; + request.getRequestor() + &#8221; to transfer file: &#8221; + request.getFileName());<br />
                           //FileTransferNegotiator.IBB_ONLY = true;<br />
                           IncomingFileTransfer transfer = request.accept();<br />
                           log.info(&#8220;File transfer request accepted&#8221;);<br />
                           String path = getRunDirectory() + File.separator + System.currentTimeMillis() + &#8220;.jpg&#8221;;<br />
                           File file = new File(path);<br />
                           try {<br />
                                transfer.recieveFile(file);<br />
                                while (!transfer.isDone()) {<br />
                                     pause(1000);<br />
                                     if (transfer.getStatus().equals(Status.error)) {<br />
                                          log.error(&#8220;File transfer error: &#8221; + transfer.getError());<br />
                                          if (transfer.getException() != null) {<br />
                                               log.error(&#8220;Transfer exception: &#8221; + transfer.getException().getMessage());<br />
                                          }<br />
                                          break;<br />
                                     }<br />
                                }<br />
                           } catch (Exception e) {<br />
                                log.error(&#8220;File transfer exception caught: &#8221; + e.getMessage());<br />
                           }</p>
<p>                           if (transfer.getStatus().equals(Status.complete)) {<br />
                                log.info(&#8220;File transfer complete&#8221;);<br />
                           }<br />
                      };<br />
                  }.start();<br />
          }<br />
       });</p>
<p>       log.info(&#8220;File Transfer Manager is listening for requests&#8221;);<br />
  }</p>
<p>  public void admitFriendsRequest() {</p>
<p>       connection.getRoster().setSubscriptionMode(Roster.SubscriptionMode.manual);<br />
       connection.addPacketListener(new PacketListener() {</p>
<p>           public void processPacket(Packet paramPacket) {</p>
<p>               if (paramPacket instanceof Presence) {<br />
                   Presence presence = (Presence) paramPacket;<br />
                   String email = presence.getFrom();<br />
                   log.info(&#8220;chat invite status changed by user: : &#8221;<br />
                           + email + &#8221; calling listner&#8221;);<br />
                   log.info(&#8220;presence: &#8221; + presence.getFrom()<br />
                           + &#8220;; type: &#8221; + presence.getType() + &#8220;; to: &#8221;<br />
                           + presence.getTo() + &#8220;; &#8221; + presence.toXML());<br />
                   Roster roster = connection.getRoster();<br />
                   for (RosterEntry rosterEntry : roster.getEntries()) {<br />
                       log.info(&#8220;jid: &#8221; + rosterEntry.getUser()<br />
                               + &#8220;; type: &#8221; + rosterEntry.getType()<br />
                               + &#8220;; status: &#8221; + rosterEntry.getStatus());<br />
                   }</p>
<p>                   if (presence.getType().equals(Presence.Type.subscribe)) {</p>
<p>                       Presence newp = new Presence(Presence.Type.subscribed);<br />
                       newp.setMode(Presence.Mode.available);<br />
                       newp.setPriority(24);<br />
                       newp.setTo(presence.getFrom());<br />
                       try {<br />
                           connection.sendPacket(newp);<br />
                       } catch (Exception e) {</p>
<p>                       }</p>
<p>                       Presence subscription = new Presence(<br />
                               Presence.Type.subscribe);<br />
                       subscription.setTo(presence.getFrom());</p>
<p>                       try {<br />
                       connection.sendPacket(subscription);<br />
                       } catch (Exception e) {</p>
<p>                       }</p>
<p>                   } else if (presence.getType().equals(Presence.Type.unsubscribe)) {</p>
<p>                       Presence newp = new Presence(Presence.Type.unsubscribed);<br />
                       newp.setMode(Presence.Mode.available);<br />
                       newp.setPriority(24);<br />
                       newp.setTo(presence.getFrom());</p>
<p>                       try {<br />
                       connection.sendPacket(newp);<br />
                       } catch (Exception e) {</p>
<p>                       }<br />
                   } else {<br />
                   log.info(&#8220;Other type of presence packet received&#8221;);<br />
                   }<br />
               }</p>
<p>           }<br />
       }, new PacketFilter() {<br />
           public boolean accept(Packet packet) {<br />
               if (packet instanceof Presence) {<br />
                   Presence presence = (Presence) packet;<br />
                   if (presence.getType().equals(Presence.Type.subscribed)<br />
                           || presence.getType().equals(<br />
                                   Presence.Type.subscribe)<br />
                           || presence.getType().equals(<br />
                                   Presence.Type.unsubscribed)<br />
                           || presence.getType().equals(<br />
                                   Presence.Type.unsubscribe)) {<br />
                       return true;<br />
                   }<br />
               }<br />
               return false;<br />
           }<br />
       });</p>
<p>   }</p>
<p>  private String getRunDirectory() {</p>
<p>       try {<br />
            File cur_dir = new File(&#8220;.&#8221;);<br />
       return cur_dir.getCanonicalPath();<br />
       } catch (IOException e) {<br />
            return null;<br />
       }<br />
  }</p>
<p>  private void pause(int delay){<br />
       try {<br />
            Thread.sleep(delay);<br />
       } catch (Exception e) {<br />
            // ignore<br />
       }<br />
  }</p>
<p>}</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Writing a gTalk (Jabber/XMPP) client in Java by sachin das</title>
		<link>http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-245504</link>
		<dc:creator><![CDATA[sachin das]]></dc:creator>
		<pubDate>Tue, 23 Dec 2014 08:27:38 +0000</pubDate>
		<guid isPermaLink="false">http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-245504</guid>
		<description><![CDATA[Hi,
thanks for the code.its working fine.but i need to run my chat program continuously,after a time period its showing ssl timeout exeception.how can i solve it .thanks in advance]]></description>
		<content:encoded><![CDATA[<p>Hi,<br />
thanks for the code.its working fine.but i need to run my chat program continuously,after a time period its showing ssl timeout exeception.how can i solve it .thanks in advance</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Writing a gTalk (Jabber/XMPP) client in Java by Abhijeet Maharana</title>
		<link>http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-240193</link>
		<dc:creator><![CDATA[Abhijeet Maharana]]></dc:creator>
		<pubDate>Thu, 20 Nov 2014 12:15:28 +0000</pubDate>
		<guid isPermaLink="false">http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-240193</guid>
		<description><![CDATA[If you run an XMPP server on the LAN then yes. A good starting point can be http://xmpp.org/xmpp-software/servers/
Not sure if peer to peer over LAN is an option, been very long since I worked on this.]]></description>
		<content:encoded><![CDATA[<p>If you run an XMPP server on the LAN then yes. A good starting point can be <a href="http://xmpp.org/xmpp-software/servers/" rel="nofollow" class="extlink">http://xmpp.org/xmpp-software/servers/</a><br />
Not sure if peer to peer over LAN is an option, been very long since I worked on this.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Writing a gTalk (Jabber/XMPP) client in Java by Arushee</title>
		<link>http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-239873</link>
		<dc:creator><![CDATA[Arushee]]></dc:creator>
		<pubDate>Tue, 18 Nov 2014 12:41:46 +0000</pubDate>
		<guid isPermaLink="false">http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-239873</guid>
		<description><![CDATA[Hi abhijeet,i am very new to java can you please tell me if i can develop a LAN chat application using XMPP/]]></description>
		<content:encoded><![CDATA[<p>Hi abhijeet,i am very new to java can you please tell me if i can develop a LAN chat application using XMPP/</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Writing a gTalk (Jabber/XMPP) client in Java by vimal mishra</title>
		<link>http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-230176</link>
		<dc:creator><![CDATA[vimal mishra]]></dc:creator>
		<pubDate>Fri, 19 Sep 2014 06:41:56 +0000</pubDate>
		<guid isPermaLink="false">http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-230176</guid>
		<description><![CDATA[I want to send a message to my local host client.I installed openfire server and started to run this program in eclipse .U gave 4 screen shot and i am only getting which contains All,Sent,Receive,Interpreted.How i will get other 3.]]></description>
		<content:encoded><![CDATA[<p>I want to send a message to my local host client.I installed openfire server and started to run this program in eclipse .U gave 4 screen shot and i am only getting which contains All,Sent,Receive,Interpreted.How i will get other 3.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Mousekeys on Linux by Clyde</title>
		<link>http://abhijeetmaharana.com/blog/2007/08/31/mousekeys-on-ubuntu/#comment-198321</link>
		<dc:creator><![CDATA[Clyde]]></dc:creator>
		<pubDate>Mon, 17 Mar 2014 08:11:07 +0000</pubDate>
		<guid isPermaLink="false">http://abhijeetmaharana.com/blog/2007/08/31/mousekeys-on-ubuntu/#comment-198321</guid>
		<description><![CDATA[Thank you. After searching and struggling a lot, I found this easy solution. I use Linux Mint and I have mapped the commands to Alt-F11 and Alt-F12 and it works perfectly. This was a great help for me because the touchpad on my notebook has a problem and till now I had to depend on an external mouse to use it.]]></description>
		<content:encoded><![CDATA[<p>Thank you. After searching and struggling a lot, I found this easy solution. I use Linux Mint and I have mapped the commands to Alt-F11 and Alt-F12 and it works perfectly. This was a great help for me because the touchpad on my notebook has a problem and till now I had to depend on an external mouse to use it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Writing a gTalk (Jabber/XMPP) client in Java by Ravi NNN</title>
		<link>http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-190961</link>
		<dc:creator><![CDATA[Ravi NNN]]></dc:creator>
		<pubDate>Tue, 28 Jan 2014 12:10:33 +0000</pubDate>
		<guid isPermaLink="false">http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-190961</guid>
		<description><![CDATA[I want to do chat app with jabber and openfire could you please help out.i got below error



	at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:445)
	at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69)
	at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:212)
	at org.jivesoftware.smack.Connection.login(Connection.java:348)
	at RunJabberSmackAPI.login(RunJabberSmackAPI.java:23)
	at RunJabberSmackAPI.main(RunJabberSmackAPI.java:60)
stream:error (host-unknown)
	at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:260)
	at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)
	at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)
stream:error (host-unknown)
	at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:260)
	at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)
	at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)]]></description>
		<content:encoded><![CDATA[<p>I want to do chat app with jabber and openfire could you please help out.i got below error</p>
<p>	at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:445)<br />
	at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69)<br />
	at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:212)<br />
	at org.jivesoftware.smack.Connection.login(Connection.java:348)<br />
	at RunJabberSmackAPI.login(RunJabberSmackAPI.java:23)<br />
	at RunJabberSmackAPI.main(RunJabberSmackAPI.java:60)<br />
stream:error (host-unknown)<br />
	at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:260)<br />
	at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)<br />
	at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)<br />
stream:error (host-unknown)<br />
	at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:260)<br />
	at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)<br />
	at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Writing a gTalk (Jabber/XMPP) client in Java by user97</title>
		<link>http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-181776</link>
		<dc:creator><![CDATA[user97]]></dc:creator>
		<pubDate>Thu, 28 Nov 2013 09:29:58 +0000</pubDate>
		<guid isPermaLink="false">http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-181776</guid>
		<description><![CDATA[Sorry for the last comment. It is working now. I had made a small mistake in code and hence was getting error.]]></description>
		<content:encoded><![CDATA[<p>Sorry for the last comment. It is working now. I had made a small mistake in code and hence was getting error.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Writing a gTalk (Jabber/XMPP) client in Java by user97</title>
		<link>http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-181754</link>
		<dc:creator><![CDATA[user97]]></dc:creator>
		<pubDate>Thu, 28 Nov 2013 08:26:09 +0000</pubDate>
		<guid isPermaLink="false">http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-181754</guid>
		<description><![CDATA[Even I am getting UnkonwnHostException for talk.google.com. I have internet connection and there are no proxy servers active. Badly stuck!

talk.google.com:5222 Exception: Could not connect to talk.google.com:5222.; : remote-server-timeout(504)
caused by: Could not connect to talk.google.com:5222.: remote-server-timeout(504) Could not connect to talk.google.com:5222.
caused by: java.net.UnknownHostException: talk.google.com]]></description>
		<content:encoded><![CDATA[<p>Even I am getting UnkonwnHostException for talk.google.com. I have internet connection and there are no proxy servers active. Badly stuck!</p>
<p>talk.google.com:5222 Exception: Could not connect to talk.google.com:5222.; : remote-server-timeout(504)<br />
caused by: Could not connect to talk.google.com:5222.: remote-server-timeout(504) Could not connect to talk.google.com:5222.<br />
caused by: java.net.UnknownHostException: talk.google.com</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Writing a gTalk (Jabber/XMPP) client in Java by Abhijeet Maharana</title>
		<link>http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-88150</link>
		<dc:creator><![CDATA[Abhijeet Maharana]]></dc:creator>
		<pubDate>Fri, 24 May 2013 06:40:46 +0000</pubDate>
		<guid isPermaLink="false">http://abhijeetmaharana.com/blog/2007/10/28/writing-a-gtalk-jabberxmpp-client/#comment-88150</guid>
		<description><![CDATA[Hi Amjad, I wish I could help you out here but haven&#039;t been working on this project any more.]]></description>
		<content:encoded><![CDATA[<p>Hi Amjad, I wish I could help you out here but haven&#8217;t been working on this project any more.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
