Package tigase.xml

Examples of tigase.xml.Element


                    nick, "Anonymous peers", null,
                    JabberIqRoster.ANON));
              results.offer(rost_update);
              log.finest("Sending roster update: " + rost_update.toString());
            }
            Element result = packet.getElement().clone();
            results.offer(new Packet(result));
            // If this is unavailable presence, remove jid from Set
            // otherwise add it to the Set
            if (packet.getType() != null &&
              packet.getType() == StanzaType.unavailable) {
              removeDirectPresenceJID(packet.getElemTo(), session);
            } else {
              addDirectPresenceJID(packet.getElemTo(), session);
            }
          } else {
            boolean first = false;
            if (session.getSessionData(PRESENCE_KEY) == null) {
              first = true;
            }

            // Store user presence for later time...
            // To send response to presence probes for example.
            session.putSessionData(PRESENCE_KEY, packet.getElement());

            // Parse resource priority:
            String priority = packet.getElemCData("/presence/priority");
            if (priority != null) {
              int pr = 1;
              try {
                pr = Integer.decode(priority);
              } catch (NumberFormatException e) {
                log.finer("Incorrect priority value: " + priority
                  + ", setting 1 as default.");
                pr = 1;
              }
              session.setPriority(pr);
            }

            // Special actions on the first availability presence
            if (first && type == StanzaType.available) {
              // Send presence probes to 'to' or 'both' contacts
              sendPresenceBroadcast(StanzaType.probe, session, TO_SUBSCRIBED,
                results, null, settings);
              // Resend pending in subscription requests
              resendPendingInRequests(session, results);
            } // end of if (type == StanzaType.available)

            // Broadcast initial presence to 'from' or 'both' contacts
            sendPresenceBroadcast(type, session, FROM_SUBSCRIBED,
              results, packet.getElement(), settings);

            // Broadcast initial presence to other available user resources
            //        Element presence = packet.getElement().clone();
            // Already done above, don't need to set it again here
            // presence.setAttribute("from", session.getJID());
            updateUserResources(packet.getElement(), session, results);
          }
          break;
        case out_subscribe:
        case out_unsubscribe:
          if (pres_type == PresenceType.out_subscribe) {
            SubscriptionType current_subscription =
              roster_util.getBuddySubscription(session, packet.getElemTo());
            if (current_subscription == null) {
              roster_util.addBuddy(session, packet.getElemTo(), null, null);
            } // end of if (current_subscription == null)
          }
          subscr_changed = roster_util.updateBuddySubscription(session, pres_type,
            packet.getElemTo());
          if (subscr_changed) {
            roster_util.updateBuddyChange(session, results,
              roster_util.getBuddyItem(session, packet.getElemTo()));
          } // end of if (subscr_changed)
          // According to RFC-3921 I must forward all these kind presence
          // requests, it allows to resynchronize
          // subscriptions in case of synchronization loss
          forwardPresence(results, packet, session.getUserId());
          break;
        case out_subscribed:
        case out_unsubscribed:
          forwardPresence(results, packet, session.getUserId());
          subscr_changed = roster_util.updateBuddySubscription(session, pres_type,
            packet.getElemTo());
          if (subscr_changed) {
            roster_util.updateBuddyChange(session, results,
              roster_util.getBuddyItem(session, packet.getElemTo()));
            if (pres_type == PresenceType.out_subscribed) {
              Element presence = (Element)session.getSessionData(PRESENCE_KEY);
              if (presence != null) {
                sendPresence(null, packet.getElemTo(), session.getJID(),
                  results, presence);
              } else {
                sendPresence(StanzaType.available, packet.getElemTo(),
                  session.getJID(), results, null);
              }
            } else {
              sendPresence(StanzaType.unavailable, packet.getElemTo(),
                session.getJID(), results, null);
            }
          } // end of if (subscr_changed)
          break;
        case in_initial:
          if (packet.getElemFrom() == null) {
            // That really happened already. It looks like a bug in tigase
            // let's try to catch it here....
            log.warning("Initial presence without from attribute set: "
              + packet.toString());
            return;
          }
          // If other users are in 'to' or 'both' contacts, broadcast
          // their preseces to all active resources
          if (roster_util.isSubscribedTo(session, packet.getElemFrom())
            || (DynamicRoster.getBuddyItem(session, settings,
                packet.getElemFrom()) != null)) {
            updatePresenceChange(packet.getElement(), session, results);
          } else {
            // The code below looks like a bug to me.
            // If the buddy is nt subscribed I should ignore all presences
            // states from him. Commenting this out for now....
            // Well, it is not a bug and it is intentional.
            // All presences received from MUC come from not subscribed buddies
            // therefore it seems presences from unknown buddy should be passed out
            Element elem = packet.getElement().clone();
            Packet result = new Packet(elem);
            result.setTo(session.getConnectionId());
            result.setFrom(packet.getTo());
            results.offer(result);
          }
          break;
        case in_subscribe:
          // If the buddy is already subscribed then auto-reply with sybscribed
          // presence stanza.
          if (roster_util.isSubscribedFrom(session, packet.getElemFrom())) {
            sendPresence(StanzaType.subscribed, packet.getElemFrom(),
              session.getJID(), results, null);
          } else {
            SubscriptionType curr_sub =
              roster_util.getBuddySubscription(session, packet.getElemFrom());
            if (curr_sub == null) {
              curr_sub = SubscriptionType.none;
              roster_util.addBuddy(session, packet.getElemFrom(), null, null);
            } // end of if (curr_sub == null)
            roster_util.updateBuddySubscription(session, pres_type,
              packet.getElemFrom());
            updatePresenceChange(packet.getElement(), session, results);
          } // end of else
          break;
        case in_unsubscribe:
          subscr_changed = roster_util.updateBuddySubscription(session, pres_type,
            packet.getElemFrom());
          if (subscr_changed) {
            // No longer needed according to RFC-3921-bis5
            //sendPresence(StanzaType.unsubscribed, packet.getElemFrom(),
            //  session.getJID(), results, null);
            //updatePresenceChange(packet.getElement(), session, results);
            roster_util.updateBuddyChange(session, results,
              roster_util.getBuddyItem(session, packet.getElemFrom()));
          }
          break;
        case in_subscribed: {
          SubscriptionType curr_sub =
            roster_util.getBuddySubscription(session, packet.getElemFrom());
          if (curr_sub == null) {
            curr_sub = SubscriptionType.none;
            roster_util.addBuddy(session, packet.getElemFrom(), null, null);
          } // end of if (curr_sub == null)
          subscr_changed = roster_util.updateBuddySubscription(session, pres_type,
            packet.getElemFrom());
          if (subscr_changed) {
            //updatePresenceChange(packet.getElement(), session, results);
            roster_util.updateBuddyChange(session, results,
              roster_util.getBuddyItem(session, packet.getElemFrom()));
          }
        }
          break;
        case in_unsubscribed: {
          SubscriptionType curr_sub =
            roster_util.getBuddySubscription(session, packet.getElemFrom());
          if (curr_sub != null) {
            subscr_changed = roster_util.updateBuddySubscription(session, pres_type,
              packet.getElemFrom());
            if (subscr_changed) {
              // No longer needed according to RFC-3921-bis5
              //updatePresenceChange(packet.getElement(), session, results);
              roster_util.updateBuddyChange(session, results,
                roster_util.getBuddyItem(session, packet.getElemFrom()));
            }
          }
        }
          break;
        case in_probe:
          SubscriptionType buddy_subscr = null;
          if (DynamicRoster.getBuddyItem(session, settings,
              packet.getElemFrom()) != null) {
            buddy_subscr = SubscriptionType.both;
          } else {
            buddy_subscr =
              roster_util.getBuddySubscription(session, packet.getElemFrom());
          }
          if (buddy_subscr == null) {
            buddy_subscr = SubscriptionType.none;
          } // end of if (buddy_subscr == null)
          switch (buddy_subscr) {
          case none:
          case none_pending_out:
          case to:
            results.offer(Authorization.FORBIDDEN.getResponseMessage(packet,
                "Presence information is forbidden.", false));
            break;
          case none_pending_in:
          case none_pending_out_in:
          case to_pending_in:
            results.offer(Authorization.NOT_AUTHORIZED.getResponseMessage(packet,
                "You are not authorized to get presence information.", false));
            break;
          default:
            break;
          } // end of switch (buddy_subscr)
          if (roster_util.isSubscribedFrom(buddy_subscr)) {
            for (XMPPResourceConnection conn: session.getActiveSessions()) {
              Element pres = (Element)conn.getSessionData(PRESENCE_KEY);
              sendPresence(null, packet.getElemFrom(), conn.getJID(),
                results, pres);
            }
          } // end of if (roster_util.isSubscribedFrom(session, packet.getElemFrom()))
          break;
        case error: {
          // This is message to 'this' client probably
          // Only error responses to DIRECT presence should be sent back
          // to the client, all other should be ignored for now.
          // Later on the Tigase should remember who responded with
          // an error and don't send presence updates to this entity
          Set<String> direct_presences =
                  (Set<String>) session.getSessionData(DIRECT_PRESENCE);
          if (direct_presences != null &&
                  direct_presences.contains(packet.getElemFrom())) {
            Element elem = packet.getElement().clone();
            Packet result = new Packet(elem);
            result.setTo(session.getConnectionId());
            result.setFrom(packet.getTo());
            results.offer(result);
          } else {
View Full Code Here


      if (packet.isCommand()) {
        if (packet.getCommand() == Command.GETDISCO
          && packet.getType() == StanzaType.result) {
          // Send it back to user.
          Element query = Command.getData(packet, "query", null);
          Element iq =
            ElementUtils.createIqQuery(session.getDomain(), session.getJID(),
              StanzaType.result, packet.getElemId(), query);
          Packet result = new Packet(iq);
          result.setTo(session.getConnectionId());
          result.getElement().setAttribute("from",
            Command.getFieldValue(packet,  "jid"));
          results.offer(result);
          return;
        } else {
          return;
        }
      }

      // If ID part of user account contains only host name
      // and this is local domain it is message to admin
      if (nodeId == null || nodeId.equals("")
        || (nodeNick == null && nodeId.endsWith(session.getDomain()))) {
        Element query = packet.getElement().getChild("query");
        Packet discoCommand = Command.GETDISCO.getPacket(session.getJID(),
          session.getDomain(), StanzaType.get, packet.getElemId(), "submit");
        Command.addFieldValue(discoCommand, "xmlns", query.getXMLNS());
        Command.addFieldValue(discoCommand, "jid", packet.getElemTo());
        if (query.getAttribute("node") != null) {
          Command.addFieldValue(discoCommand, "node", query.getAttribute("node"));
        } // end of if (query.getAttribute("node") != null)
        results.offer(discoCommand);
        return;
      }

      if (nodeId.equals(session.getUserId())) {
        // Yes this is message to 'this' client
        Element elem = packet.getElement().clone();
        Packet result = new Packet(elem);
        result.setTo(session.getConnectionId(packet.getElemTo()));
        result.setFrom(packet.getTo());
        results.offer(result);
      } else {
        // This is message to some other client so I need to
        // set proper 'from' attribute whatever it is set to now.
        // Actually processor should not modify request but in this
        // case it is absolutely safe and recommended to set 'from'
        // attribute
        Element result = packet.getElement().clone();
        // Not needed anymore. Packet filter does it for all stanzas.
//         // According to spec we must set proper FROM attribute
//         result.setAttribute("from", session.getJID());
        results.offer(new Packet(result));
      } // end of else
View Full Code Here

    if (session == null || !session.isAuthorized()) {
      return false;
    } // end of if (session == null)

    try {
      Element list = Privacy.getActiveList(session);
      if (list == null && session.getSessionData("privacy-init") == null) {
        String lName = Privacy.getDefaultList(session);
        if (lName != null) {
          Privacy.setActiveList(session, lName);
          list = Privacy.getActiveList(session);
        } // end of if (lName != null)
        session.putSessionData("privacy-init", "");
      } // end of if (lName == null)
      if (list != null) {
        List<Element> items = list.getChildren();
        Collections.sort(items, compar);
        for (Element item: items) {
          boolean type_matched = false;
          boolean elem_matched = false;
          ITEM_TYPE type = ITEM_TYPE.all;
View Full Code Here

  private void processSetRequest(final Packet packet,
    final XMPPResourceConnection session,  final Queue<Packet> results)
    throws NotAuthorizedException, XMPPException, TigaseDBException {
    List<Element> children = packet.getElemChildren("/iq/query");
    if (children != null && children.size() == 1) {
      Element child = children.get(0);
      if (child.getName().equals("list")) {
        // Broken privacy implementation sends list without name set
        // instead of sending BAD_REQUEST error I can just assign
        // 'default' name here.
        String name = child.getAttribute(NAME);
        if (name == null || name.length() == 0) {
          child.setAttribute(NAME, "default");
        } // end of if (name == null || name.length() == 0)
        Privacy.addList(session, child);
        results.offer(packet.okResult((String)null, 0));
      } // end of if (child.getName().equals("list))
      if (child.getName().equals("default")) {
        Privacy.setDefaultList(session, child);
        results.offer(packet.okResult((String)null, 0));
      } // end of if (child.getName().equals("list))
      if (child.getName().equals("active")) {
        Privacy.setActiveList(session, child.getAttribute(NAME));
        results.offer(packet.okResult((String)null, 0));
      } // end of if (child.getName().equals("list))
    } else {
      results.offer(Authorization.BAD_REQUEST.getResponseMessage(packet,
          "Only 1 element is allowed in privacy set request.", true));
View Full Code Here

    } else {
      if (children.size() > 1) {
        results.offer(Authorization.BAD_REQUEST.getResponseMessage(packet,
          "You can retrieve only one list at a time.", true));
      } else {
        Element eList = Privacy.getList(session,
          children.get(0).getAttribute("name"));
        if (eList != null) {
          results.offer(packet.okResult(eList, 1));
        } else {
          results.offer(Authorization.ITEM_NOT_FOUND.getResponseMessage(packet,
View Full Code Here

            results.offer(Authorization.NOT_AUTHORIZED.getResponseMessage(packet,
                "You are not authorized to set vcard data.", true));
          } // end of else
          break;
        case result:
          Element elem = packet.getElement().clone();
          Packet result = new Packet(elem);
          result.setTo(session.getConnectionId());
          result.setFrom(packet.getTo());
          results.offer(result);
          break;
        default:
          results.offer(Authorization.BAD_REQUEST.getResponseMessage(packet,
              "Request type is incorrect", false));
          break;
        } // end of switch (type)
      } else {
        Element result = packet.getElement().clone();
        results.offer(new Packet(result));
      } // end of else
    } catch (NotAuthorizedException e) {
      log.warning(
        "Received privacy request but user session is not authorized yet: " +
View Full Code Here

  private Packet getResponsePacket(Packet packet, String iq_level) {
    if (iq_level == null) {
      iq_level = "100";
    }
    Element query = new Element("query",
      new Element[] {
        new Element("num", iq_level),
        new Element("desc", calculateIQ(iq_level))
      },
      new String[] {"xmlns"},
      new String[] {XMLNS});
    return packet.okResult(query, 0);
  }
View Full Code Here

      try {
        String loc_digest = Algorithms.hexDigest(id, secret, "SHA");
        log.finest("Calculating digest: id="+id+", secret="+secret
          +", digest="+loc_digest);
        if (digest != null && digest.equals(loc_digest)) {
          Packet resp = new Packet(new Element("handshake"));
          writePacketToSocket(serv, resp);
          String[] routings =
            (String[])serv.getSessionData().get(PORT_ROUTING_TABLE_PROP_KEY);
          updateRoutings(routings, true);
          String addr =
View Full Code Here

    XMPPIOService serv = getXMPPIOService(packet);
    switch (packet.getCommand()) {
    case GETFEATURES:
      if (packet.getType() == StanzaType.result) {
        List<Element> features = getFeatures(getXMPPSession(packet));
        Element elem_features = new Element("stream:features");
        elem_features.addChildren(features);
        elem_features.addChildren(Command.getData(packet));
        Packet result = new Packet(elem_features);
        result.setTo(packet.getTo());
        writePacketToSocket(result);
      } // end of if (packet.getType() == StanzaType.get)
      break;
    case STARTTLS:
      if (serv != null) {
        log.finer("Starting TLS for connection: " + serv.getUniqueId());
        try {
          // Note:
          // If you send <proceed> packet to client you must expect
          // instant response from the client with TLS handshaking data
          // before you will call startTLS() on server side.
          // So the initial handshaking data might be lost as they will
          // be processed in another thread reading data from the socket.
          // That's why below code first removes service from reading
          // threads pool and then sends <proceed> packet and starts TLS.
          Element proceed = Command.getData(packet, "proceed", null);
          Packet p_proceed = new Packet(proceed);
           SocketReadThread readThread = SocketReadThread.getInstance();
           readThread.removeSocketService(serv);
          //          writePacketToSocket(serv, p_proceed);
           serv.addPacketToSend(p_proceed);
View Full Code Here

  private void processDiscoQuery(final Packet packet,
    final Queue<Packet> results) {
      String jid = packet.getElemTo();
      String nick = JIDUtils.getNodeNick(jid);
      String node = packet.getAttribute("/iq/query", "node");
      Element query = packet.getElement().getChild("query").clone();

      if (packet.isXMLNS("/iq/query", INFO_XMLNS)) {
        if (isLocalDomain(jid)) {
          query = getDiscoInfo(node, jid);
          for (XMPPService comp: xmppServices.values()) {
            List<Element> features = comp.getDiscoFeatures();
            if (features != null) {
              query.addChildren(features);
            }
          } // end of for ()
        } else {
          for (XMPPService comp: xmppServices.values()) {
            //            if (jid.startsWith(comp.getName() + ".")) {
              Element resp = comp.getDiscoInfo(node, jid);
              if (resp != null) {
                query = resp;
                break;
              }
              //            }
View Full Code Here

TOP

Related Classes of tigase.xml.Element

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.