Package org.xmpp.packet

Examples of org.xmpp.packet.IQ


   * server and discover its available disco items.
   *
   * This should only be called by a method holding the PENDING state.
   */
  private void startDisco() {
    final IQ request = manager.createRequestIQ(remoteDomain);
    request.setChildElement("query", XmppNamespace.NAMESPACE_DISCO_ITEMS);

    final Runnable requester = new Runnable() {
      int attempt = 0;

      final PacketCallback callback = new PacketCallback() {
        @Override
        public void run(Packet result) {
          Preconditions.checkArgument(result instanceof IQ, "Manager must provide response IQ");
          processDiscoItemsResult((IQ) result);
        }

        @Override
        public void error(FederationError error) {
          if (error.getErrorCode().equals(FederationError.Code.REMOTE_SERVER_TIMEOUT)) {
            retry();
          } else {
            LOG.info("Remote server " + remoteDomain + " failed on disco items: "
                + error.getErrorCode());
            processDiscoItemsResult(null);
          }
        }
      };

      void retry() {
        attempt += 1;
        if (attempt > MAXIMUM_DISCO_ATTEMPTS) {
          finish(null, FederationErrors
              .newFederationError(FederationError.Code.REMOTE_SERVER_TIMEOUT));
        } else {
          // TODO(thorogood): fix ms/seconds!
          int timeout = nextDiscoRetransmitTimeout(attempt) / 1000;
          request.setID(XmppUtil.generateUniqueId());
          LOG.info("Sending disco items request for: " + remoteDomain + ", timeout " + timeout
              + " seconds");
          manager.send(request, callback, timeout);
        }
      }
View Full Code Here


   *
   * @param target the target JID
   * @param sharedLatch a shared latch
   */
  private void requestDiscoInfo(String target, final AtomicInteger sharedLatch) {
    final IQ request = manager.createRequestIQ(target);
    request.setChildElement("query", XmppNamespace.NAMESPACE_DISCO_INFO);

    PacketCallback callback = new PacketCallback() {
      @Override
      public void error(FederationError error) {
        int currentCount = sharedLatch.decrementAndGet();
        Preconditions.checkState(currentCount >= 0,
            "Info latch should not count down past zero for domain: %s", remoteDomain);
        if (currentCount == 0) {
          finish(null, error);
        }
      }

      @Override
      public void run(Packet packet) {
        Preconditions.checkArgument(packet instanceof IQ);
        IQ result = (IQ) packet;

        List<Element> features =
            XmppUtil.toSafeElementList(result.getChildElement().elements("feature"));
        for (Element feature : features) {
          Attribute var = feature.attribute("var");
          if (var != null && var.getValue().equals(XmppNamespace.NAMESPACE_WAVE_SERVER)) {
            String targetJID = packet.getFrom().toString();
            finish(targetJID, null);
View Full Code Here

          }

          @Override
          public void onSuccess(List<ByteString> appliedDeltaSet,
              ProtocolHashedVersion lastCommittedVersion, long versionTruncatedAt) {
            IQ response = IQ.createResultIQ(request);

            Element pubsub = response.setChildElement("pubsub", XmppNamespace.NAMESPACE_PUBSUB);
            Element items = pubsub.addElement("items");

            // Add each delta to the outgoing response.
            for (ByteString appliedDelta : appliedDeltaSet) {
              items.addElement("item").addElement("applied-delta",
View Full Code Here

            responseCallback.error(error);
          }

          @Override
          public void onSuccess(int operations, ProtocolHashedVersion version, long timestamp) {
            IQ response = IQ.createResultIQ(request);

            Element pubsub = response.setChildElement("pubsub", XmppNamespace.NAMESPACE_PUBSUB);
            Element submitResponse = pubsub.addElement("publish").addElement("item")
                .addElement("submit-response", XmppNamespace.NAMESPACE_WAVE_SERVER);

            submitResponse.addAttribute("application-timestamp", String.valueOf(timestamp));
            submitResponse.addAttribute("operations-applied", String.valueOf(operations));
View Full Code Here

            responseCallback.error(error);
          }

          @Override
          public void onSuccess(ProtocolSignerInfo signerInfo) {
            IQ response = IQ.createResultIQ(request);

            Element pubsub = response.setChildElement("pubsub", XmppNamespace.NAMESPACE_PUBSUB);
            Element items = pubsub.addElement("items");
            XmppUtil.protocolSignerInfoToXml(signerInfo, items);

            responseCallback.run(response);
          }
View Full Code Here

            responseCallback.error(error);
          }

          @Override
          public void onSuccess() {
            IQ response = IQ.createResultIQ(request);

            Element pubsub = response.setChildElement("pubsub", XmppNamespace.NAMESPACE_PUBSUB);
            Element item = pubsub.addElement("publish").addElement("item");

            item.addAttribute("node", "signer");
            item.addElement("signature-response", XmppNamespace.NAMESPACE_WAVE_SERVER);
View Full Code Here

  @Override
  public void submitRequest(final WaveletName waveletName,
                            final ProtocolSignedDelta signedDelta,
                            final SubmitResultListener listener) {

    final IQ submitIq = new IQ(IQ.Type.set);
    submitIq.setID(XmppUtil.generateUniqueId());

    LOG.info("Submitting delta to remote server, wavelet " + waveletName);
    submitIq.setFrom(jid);

    Element pubsub = submitIq.setChildElement("pubsub", XmppNamespace.NAMESPACE_PUBSUB);
    Element publish = pubsub.addElement("publish");
    publish.addAttribute("node", "wavelet");
    Element submitRequest = publish.addElement("item").addElement("submit-request",
        XmppNamespace.NAMESPACE_WAVE_SERVER);
    Element deltaElement = submitRequest.addElement("delta");

    deltaElement.addCDATA(Base64Util.encode(signedDelta.toByteArray()));
    try {
      deltaElement.addAttribute("wavelet-name",
          XmppUtil.waveletNameCodec.waveletNameToURI(waveletName));
    } catch (EncodingException e) {
      listener.onFailure(FederationErrors.badRequest(
          "Couldn't encode wavelet name " + waveletName));
      return;
    }

    final PacketCallback callback = new PacketCallback() {
      @Override
      public void error(FederationError error) {
        listener.onFailure(error);
      }

      @Override
      public void run(Packet packet) {
        processSubmitResponse(packet, listener);
      }
    };

    disco.discoverRemoteJid(waveletName.waveletId.getDomain(),
        new SuccessFailCallback<String, String>() {
          @Override
          public void onSuccess(String remoteJid) {
            Preconditions.checkNotNull(remoteJid);
            submitIq.setTo(remoteJid);
            manager.send(submitIq, callback, XMPP_PROVIDER_TIMEOUT);
          }

          @Override
          public void onFailure(String errorMessage) {
View Full Code Here

                             final String domain,
                             ProtocolHashedVersion startVersion,
                             ProtocolHashedVersion endVersion,
                             long lengthLimit,
                             final WaveletFederationProvider.HistoryResponseListener listener) {
    final IQ submitIq = new IQ(IQ.Type.get);
    submitIq.setID(XmppUtil.generateUniqueId());

    LOG.info("Getting history from remote server, wavelet " + waveletName
                + " version " + startVersion + " (inc) through " + endVersion
                + " (ex)");
    submitIq.setFrom(jid);

    Element pubsub =
        submitIq.setChildElement("pubsub",
                                 XmppNamespace.NAMESPACE_PUBSUB);
    Element items = pubsub.addElement("items");
    items.addAttribute("node", "wavelet");
    Element historyDelta =
        items.addElement("delta-history",
                         XmppNamespace.NAMESPACE_WAVE_SERVER);

    historyDelta.addAttribute("start-version", Long.toString(startVersion
        .getVersion()));
    historyDelta.addAttribute("start-version-hash", Base64Util
        .encode(startVersion.getHistoryHash()));
    historyDelta.addAttribute("end-version", Long.toString(endVersion
        .getVersion()));
    historyDelta.addAttribute("end-version-hash", Base64Util.encode(endVersion
        .getHistoryHash()));
    if (lengthLimit > 0) {
      historyDelta.addAttribute("response-length-limit", Long
          .toString(lengthLimit));
    }
    try {
      historyDelta.addAttribute("wavelet-name",
          XmppUtil.waveletNameCodec.waveletNameToURI(waveletName));
    } catch (EncodingException e) {
      listener.onFailure(
          FederationErrors.badRequest("Couldn't encode wavelet name " + waveletName));
      return;
    }

    final PacketCallback callback = new PacketCallback() {
      public void error(FederationError error) {
        listener.onFailure(error);
      }

      @Override
      public void run(Packet packet) {
        processHistoryResponse(packet, listener);
      }
    };

    disco.discoverRemoteJid(domain, new SuccessFailCallback<String, String>() {
      @Override
      public void onSuccess(String remoteJid) {
        Preconditions.checkNotNull(remoteJid);
        submitIq.setTo(remoteJid);
        manager.send(submitIq, callback, XMPP_PROVIDER_TIMEOUT);
      }

      @Override
      public void onFailure(String errorMessage) {
View Full Code Here

  @Override
  public void getDeltaSignerInfo(ByteString signerId, WaveletName waveletName,
                                 ProtocolHashedVersion deltaEndVersion,
                                 final DeltaSignerInfoResponseListener listener) {
    final IQ getSignerIq = new IQ(IQ.Type.get);
    getSignerIq.setID(XmppUtil.generateUniqueId());

    getSignerIq.setFrom(jid);
    // Extract domain from waveletId
    final String remoteDomain = waveletName.waveletId.getDomain();
    Element pubsub =
        getSignerIq.setChildElement("pubsub",
                                    XmppNamespace.NAMESPACE_PUBSUB);
    Element items = pubsub.addElement("items");
    items.addAttribute("node", "signer");
    // TODO: should allow multiple requests in the same packet
    Element signerRequest =
        items.addElement("signer-request",
                         XmppNamespace.NAMESPACE_WAVE_SERVER);
    signerRequest.addAttribute("signer-id", Base64Util.encode(signerId));
    signerRequest.addAttribute("history-hash", Base64Util
        .encode(deltaEndVersion.getHistoryHash()));
    signerRequest.addAttribute("version", String.valueOf(deltaEndVersion
        .getVersion()));
    try {
      signerRequest.addAttribute("wavelet-name",
          XmppUtil.waveletNameCodec.waveletNameToURI(waveletName));
    } catch (EncodingException e) {
      listener.onFailure(FederationErrors.badRequest(
          "Couldn't encode wavelet name " + waveletName));
      return;
    }

    final PacketCallback callback = new PacketCallback() {
      @Override
      public void error(FederationError error) {
        listener.onFailure(error);
      }

      @Override
      public void run(Packet packet) {
        processGetSignerResponse(packet, listener);
      }
    };

    disco.discoverRemoteJid(
        remoteDomain, new SuccessFailCallback<String, String>() {
          @Override
          public void onSuccess(String remoteJid) {
            Preconditions.checkNotNull(remoteJid);
            getSignerIq.setTo(remoteJid);
            manager.send(getSignerIq, callback, XMPP_PROVIDER_TIMEOUT);
          }

          @Override
          public void onFailure(String errorMessage) {
View Full Code Here

  @Override
  public void postSignerInfo(
      final String remoteDomain,
      ProtocolSignerInfo signerInfo,
      final WaveletFederationProvider.PostSignerInfoResponseListener listener) {
    final IQ request = new IQ(IQ.Type.set);
    request.setID(XmppUtil.generateUniqueId());

    request.setFrom(jid);
    Element pubsub = request.setChildElement("pubsub", XmppNamespace.NAMESPACE_PUBSUB);
    Element publish = pubsub.addElement("publish");
    publish.addAttribute("node", "signer");
    XmppUtil.protocolSignerInfoToXml(signerInfo, publish.addElement("item"));

    final PacketCallback callback = new PacketCallback() {
      @Override
      public void error(FederationError error) {
        listener.onFailure(error);
      }

      @Override
      public void run(Packet packet) {
        processPostSignerResponse(packet, listener);
      }
    };

    disco.discoverRemoteJid(
        remoteDomain, new SuccessFailCallback<String, String>() {
          @Override
          public void onSuccess(String remoteJid) {
            Preconditions.checkNotNull(remoteJid);
            request.setTo(remoteJid);
            manager.send(request, callback, XMPP_PROVIDER_TIMEOUT);
          }

          @Override
          public void onFailure(String errorMessage) {
View Full Code Here

TOP

Related Classes of org.xmpp.packet.IQ

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.