title: Openfire: Add contact subscription status set to 'from' instead of 'both'
body: <p>Hi I'm facing an issue with openfire and smack. I have a jabber bot developed using smack and openfire. 
  When any user adds bot has his/her contact, then in the end of whole process, subscription status of ofRoster(openfire) table is set to 'from'. 
  The desired result of this process is 'both'. </p>
  
  <p>here is my code of handling new adding connection, </p>
  
  <pre><code>xmppConnection.getConnection().getRoster().setSubscriptionMode(Roster.SubscriptionMode.manual);
  xmppConnection.getConnection().addPacketListener(
      new PacketListener() {
          @Override
          public void processPacket(Packet paramPacket) {
              System.out.println("\n\n");
  
              if(paramPacket instanceof Presence){
                  Presence presence = (Presence)paramPacket;
                  String email = getEmailIdFromJabberId(presence.getFrom());
                  System.out.println("chat invite status changed by user: : " + email + " calling listner");
                  //if(presence.getType().equals(Presence.Type.subscribed) || presence.getType().equals(Presence.Type.subscribe) ){
                  System.out.println("presence: " + presence.getFrom() + "; type: " + presence.getType() + "; to: " + presence.getTo() + "; " + presence.toXML());
                  Roster roster = xmppConnection.getConnection().getRoster();
                  for(RosterEntry rosterEntry : roster.getEntries()){
                      System.out.println("jid: " + rosterEntry.getUser() + "; type: " + rosterEntry.getType() + "; status: " + rosterEntry.getStatus());
                  }
                  System.out.println("\n\n\n");
  
                  if( presence.getType().equals(Presence.Type.subscribe) ){
                      //chatInviteAcceptanceListner.onChatInviteAccept(email);
  
                      Presence newp = new Presence(Presence.Type.subscribed);
                      newp.setMode(Presence.Mode.available);
                      newp.setPriority(24);
                      newp.setTo(presence.getFrom());
                      //presence.addExtension(new AvatarBroadcastExtension(imageHash));
                      xmppConnection.getConnection().sendPacket(newp);
                  } else if(presence.getType().equals(Presence.Type.unsubscribe)){
                      //chatInviteAcceptanceListner.onChatInviteReject(email);
                      Presence newp = new Presence(Presence.Type.unsubscribed);
                      newp.setMode(Presence.Mode.available);
                      newp.setPriority(24);
                      newp.setTo(presence.getFrom());
                      //presence.addExtension(new AvatarBroadcastExtension(imageHash));
                      xmppConnection.getConnection().sendPacket(newp);
                  }
              }
  
  
          }
      }, 
      new PacketFilter(){
          public boolean accept(Packet packet) {
  
              if(packet instanceof Presence){
                  Presence presence = (Presence)packet; 
                  if(presence.getType().equals(Presence.Type.subscribed) 
                          || presence.getType().equals(Presence.Type.subscribe)
                          || presence.getType().equals(Presence.Type.unsubscribed) 
                          || presence.getType().equals(Presence.Type.unsubscribe) ){
                      //System.out.println("packet: " + packet);
                      return true;
                  }
              } 
              return false;
          }
      });
  </code></pre>
  
  <p>log of users who is adding the conctact. using pidgin</p>
  
  <pre><code>(18:32:22) jabber: jabber_roster_add_buddy(): Adding testdoctor@answers.exampledomain.com
  (18:32:22) jabber: jabber_roster_update(testdoctor@answers.exampledomain.com): [Source: local blist]: groups: Buddies
  (18:32:22) jabber: Sending (ssl) (testuser2@answers.exampledomain.com/pidgin): &lt;iq type='set' id='purple8dde9bec'&gt;&lt;query xmlns='jabber:iq:roster'&gt;&lt;item jid='testdoctor@answers.exampledomain.com' name=''&gt;&lt;group&gt;Buddies&lt;/group&gt;&lt;/item&gt;&lt;/query&gt;&lt;/iq&gt;
  (18:32:22) jabber: Sending (ssl) (testuser2@answers.exampledomain.com/pidgin): &lt;presence to='testdoctor@answers.exampledomain.com' type='subscribe'/&gt;
  (18:32:22) jabber: Recv (ssl)(231): &lt;iq type="set" id="88-4977" to="testuser2@answers.exampledomain.com/pidgin"&gt;&lt;query xmlns="jabber:iq:roster"&gt;&lt;item jid="testdoctor@answers.exampledomain.com" name="" subscription="none"&gt;&lt;group&gt;Buddies&lt;/group&gt;&lt;/item&gt;&lt;/query&gt;&lt;/iq&gt;
  (18:32:22) jabber: Sending (ssl) (testuser2@answers.exampledomain.com/pidgin): &lt;iq type='result' id='88-4977'/&gt;
  (18:32:22) jabber: Recv (ssl)(89): &lt;iq type="result" id="purple8dde9bec" to="testuser2@answers.exampledomain.com/pidgin"/&gt;
  (18:32:22) jabber: Unhandled IQ with id purple8dde9bec
  (18:32:23) jabber: Recv (ssl)(248): &lt;iq type="set" id="963-4978" to="testuser2@answers.exampledomain.com/pidgin"&gt;&lt;query xmlns="jabber:iq:roster"&gt;&lt;item jid="testdoctor@answers.exampledomain.com" name="" ask="subscribe" subscription="none"&gt;&lt;group&gt;Buddies&lt;/group&gt;&lt;/item&gt;&lt;/query&gt;&lt;/iq&gt;
  (18:32:23) jabber: Sending (ssl) (testuser2@answers.exampledomain.com/pidgin): &lt;iq type='result' id='963-4978'/&gt;
  (18:32:23) jabber: Recv (ssl)(247): &lt;iq type="set" id="445-4981" to="testuser2@answers.exampledomain.com/pidgin"&gt;&lt;query xmlns="jabber:iq:roster"&gt;&lt;item jid="testdoctor@answers.exampledomain.com" name=" Ask a Doctor Now" subscription="to"&gt;&lt;group&gt;Buddies&lt;/group&gt;&lt;/item&gt;&lt;/query&gt;&lt;/iq&gt;
  (18:32:23) jabber: Sending (ssl) (testuser2@answers.exampledomain.com/pidgin): &lt;iq type='result' id='445-4981'/&gt;
  (18:32:23) jabber: Recv (ssl)(164): &lt;presence id="ERM59-6" to="testuser2@answers.exampledomain.com" type="subscribed" from="testdoctor@answers.exampledomain.com"&gt;&lt;priority&gt;24&lt;/priority&gt;&lt;/presence&gt;
  (18:32:23) jabber: Recv (ssl)(283): &lt;presence id="ERM59-5" from="testdoctor@answers.exampledomain.com/smoke" to="testuser2@answers.exampledomain.com/pidgin"&gt;&lt;status&gt;141 Doctors Online! Type your question &amp;amp; get an answer now. To find out more, type "Help" and hit ENTER&lt;/status&gt;&lt;priority&gt;24&lt;/priority&gt;&lt;/presence&gt;
  (18:32:23) blist: Updating buddy status for testdoctor@answers.exampledomain.com (XMPP) 
  </code></pre>
  
  <p>log of bot (smack debug enabled)</p>
  
  <p>sent</p>
  
  <pre><code>    &lt;presence id="ERM59-6" to="testuser2@answers.exampledomain.com" type="subscribed"&gt;&lt;priority&gt;24&lt;/priority&gt;&lt;/presence&gt;
  </code></pre>
  
  <p>received</p>
  
  <pre><code>    &lt;presence to="testdoctor@answers.exampledomain.com" type="subscribe" from="testuser2@answers.exampledomain.com"/&gt;
  &lt;iq type="set" id="612-4980" to="testdoctor@answers.exampledomain.com/smoke"&gt;&lt;query xmlns="jabber:iq:roster"&gt;&lt;item jid="testuser2@answers.exampledomain.com" subscription="from"/&gt;&lt;/query&gt;&lt;/iq&gt;
  </code></pre>
  
  <p>interpreted</p>
  
  <pre><code>    &lt;presence to="testdoctor@answers.exampledomain.com" from="testuser2@answers.exampledomain.com" type="subscribe"&gt;&lt;/presence&gt;
  &lt;iq id="612-4980" to="testdoctor@answers.exampledomain.com/smoke" type="set"&gt;&lt;query xmlns="jabber:iq:roster"&gt;&lt;item jid="testuser2@answers.exampledomain.com" subscription="from"&gt;&lt;/item&gt;&lt;/query&gt;&lt;/iq&gt;
  </code></pre>