I'll take a look. Routing stanzas is delicate and heavily spec'ed.

Might take me some time to reload and unzip the part of my memory which
dealt with that stuff.

  Bernd

Niklas Gustavsson wrote:
> On Thu, Aug 26, 2010 at 10:38 PM, Niklas Gustavsson
> <[email protected]> wrote:
>> I ran into a problem while integration testing MUC. Turns out that IQ
>> stanzas does not get correctly routed to components in the case where
>> the stanza is targeted at a JID containing a node. This is common in
>> MUC, where clients will send IQ admin stanzas to rooms (e.g.
>> [email protected]). I'm not familiar with the background to the
>> current relaying logic. The code is found in:
>> org.apache.vysper.xmpp.modules.core.base.handler.RelayingIQHandler.executeIQLogic()
> 
> Here's a patch that solves my problem, might cause other...
> 
> Index: 
> src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandler.java
> ===================================================================
> --- 
> src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandler.java
>      (revision
> 958281)
> +++ 
> src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandler.java
>      (working
> copy)
> @@ -61,7 +61,7 @@
> 
>          if (outboundStanza) {
>              try {
> -                boolean toComponent = !to.isNodeSet() && !to.isResourceSet();
> +                boolean toComponent = isComponent(to,
> serverRuntimeContext.getServerEnitity());
> 
>                  Entity from = stanza.getFrom();
>                  if (from == null || !from.isResourceSet()) {
> @@ -94,7 +94,7 @@
>              // write inbound stanza to the user
> 
>              Entity from = stanza.getFrom();
> -            boolean fromComponent = (from != null) &&
> (!from.isNodeSet()) && (!from.isResourceSet());
> +            boolean fromComponent = (from != null) &&
> isComponent(from, serverRuntimeContext.getServerEnitity());;
> 
>              // determine if 'from' is a component or a matching 
> subscription...
>              boolean isToContact = false;
> @@ -116,4 +116,8 @@
> 
>          return null;
>      }
> +
> +    private boolean isComponent(Entity toVerify, Entity server) {
> +        return toVerify.getDomain().endsWith("." + server.getDomain());
> +    }
>  }
> 
> /niklas
> 

Reply via email to