docs: function(callback) {
          /**
           * This callback Return contact list.
           * @callback getRosterCallback
           * @param {Object} roster - Object of subscribed users.
           * */
  
          var self = this,
              items, userId, contacts = {},
              iqParams = {
                  'type': 'get',
                  'from': self.helpers.getUserCurrentJid(),
                  'id': chatUtils.getUniqueId('getRoster')
              },
              builder = Utils.getEnv().browser ? $iq : XMPP.Stanza;
  
          var iq = chatUtils.createStanza(builder, iqParams, 'iq');
  
          function _getItems(stanza) {
              if(Utils.getEnv().browser) {
                  return stanza.getElementsByTagName('item');
              } else {
                  return stanza.getChild('query').children;
              }
          }
  
          function _callbackWrap(stanza) {
              var items = _getItems(stanza);
              /** TODO */
              for (var i = 0, len = items.length; i < len; i++) {
                  var userId = self.helpers.getIdFromNode( chatUtils.getAttr(items[i], 'jid') ),
                      ask = chatUtils.getAttr(items[i], 'ask'),
                      subscription = chatUtils.getAttr(items[i], 'subscription');
  
                  contacts[userId] = {
                      subscription: subscription,
                      ask: ask || null
                  };
              }
  
              callback(contacts);
          }
  
          iq.c('query', {
              xmlns: chatUtils.MARKERS.ROSTER
          });
  
          if(Utils.getEnv().browser) {
              self.connection.sendIQ(iq, _callbackWrap);
          } else {
              self.nodeStanzasCallbacks[iqParams.id] = _callbackWrap;
              self.Client.send(iq);
          }
      }