[vysper] presence handling

View: New views
4 Messages — Rating Filter:   Alert me  

[vysper] presence handling

by Gerolf Seitz :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

heya,

i just committed my first take on handling subscription
requests/approvals/cancellations
and unsubscriptions.
there are a lot of TODOs in there regarding persistance and determining the
correct
set of resources a stanza needs to be relayed to.

until now, i used the RFC3921bis-04 version as a reference, as it's nicer to
read...

i plan to revise it to reflect the conformance to the original RFC3921.

except of the TODOs, the basic handling described in RFC3921bis-04#3
should be finished.

cheers,
  Gerolf

Re: [vysper] presence handling

by Bernd Fondermann :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Gerolf Seitz wrote:

> heya,
>
> i just committed my first take on handling subscription
> requests/approvals/cancellations
> and unsubscriptions.
> there are a lot of TODOs in there regarding persistance and determining the
> correct
> set of resources a stanza needs to be relayed to.
>
> until now, i used the RFC3921bis-04 version as a reference, as it's nicer to
> read...
>
> i plan to revise it to reflect the conformance to the original RFC3921.
>
> except of the TODOs, the basic handling described in RFC3921bis-04#3
> should be finished.

I cannot await further presence commits! :-)

A quick test reveiled that some clients send 'id' attributes on presence
stanzas and some do send inner elements (which is allowed as far as I
understand it).

   Bernd

---------------------------------------------------------------------
To unsubscribe, e-mail: labs-unsubscribe@...
For additional commands, e-mail: labs-help@...


Re: [vysper] presence handling

by Bernd Fondermann :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Bernd Fondermann wrote:

> Gerolf Seitz wrote:
>> heya,
>>
>> i just committed my first take on handling subscription
>> requests/approvals/cancellations
>> and unsubscriptions.
>> there are a lot of TODOs in there regarding persistance and
>> determining the
>> correct
>> set of resources a stanza needs to be relayed to.
>>
>> until now, i used the RFC3921bis-04 version as a reference, as it's
>> nicer to
>> read...
>>
>> i plan to revise it to reflect the conformance to the original RFC3921.
>>
>> except of the TODOs, the basic handling described in RFC3921bis-04#3
>> should be finished.
>
> I cannot await further presence commits! :-)
>
> A quick test reveiled that some clients send 'id' attributes on presence
> stanzas and some do send inner elements (which is allowed as far as I
> understand it).

Hi Gerolf,

I had to put my hands on this. Now it is working better for the clients
I use (Smack & Coccinella).

Since you are probably working on this or already fixed it locally, here
is my patch per email:

Index:
src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java
===================================================================
---
src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java
(revision 652621)
+++
src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java
Fri May 02 20:56:31 CEST 2008
@@ -34,6 +34,7 @@
  import org.apache.vysper.xmpp.stanza.Stanza;
  import org.apache.vysper.xmpp.stanza.StanzaBuilder;
  import org.apache.vysper.xmpp.stanza.XMPPCoreStanza;
+import org.apache.vysper.xmpp.stanza.XMPPCoreStanzaVerifier;
  import org.apache.vysper.xmpp.xmlfragment.XMLElementVerifier;

  /**
@@ -55,16 +56,17 @@
  // or in case of multiple resources, use the from attribute or return an
  // error if the from attribute is not present.
  Entity initiatingEntity = sessionContext.getInitiatingEntity();
- XMLElementVerifier verifier = stanza.getVerifier();
+        XMPPCoreStanzaVerifier verifier = stanza.getCoreVerifier();

- int nrOfAttributes = stanza.getAttributes().size();
- if ((nrOfAttributes == 0 || verifier.onlyAttributesPresent("from"))
- && verifier.subElementsPresentExact(0)) {
+        boolean hasFrom = verifier.attributePresent("from");
+        boolean hasTo = verifier.attributePresent("to");
+        boolean hasType = verifier.attributePresent("type");
+
+ if (!hasTo && !hasType) {
  // RFC3921bis-04#4.2.2 Initial Presence
  handleOutboundInitialPresence(stanza, sessionContext,
  initiatingEntity);
- } else if (verifier.onlyAttributesPresent("type", "to")
- && sessionContext.isServerToServer() == false) {
+ } else if (hasType && hasTo && !hasFrom &&
!sessionContext.isServerToServer()) {
  // this is an outbound subscription
  // request/approval/cancellation/unsubscription
  // stamp it with the bare JID of the user
@@ -88,10 +90,10 @@
  handleOutboundSubscriptionCancellation(stampedStanza,
  sessionContext);
  }
- } else if (verifier.onlyAttributesPresent("from", "to")) {
+ } else if (hasFrom && hasTo && !hasType) {
  // RFC3921bis-04#4.2.3
  handleInboundInitialPresence(stanza, sessionContext);
- } else if (verifier.onlyAttributesPresent("type", "to", "from")) {
+ } else if (hasFrom && hasTo && hasType) {
  String type = stanza.getType();
  if ("subscribe".equals(type)) {
  // RFC3921bis-04#3.1.3
@@ -109,7 +111,7 @@

  }

- } else if (verifier.allAttributesPresent("from", "to")) {
+ } else if (hasFrom && hasTo) {

  }




---------------------------------------------------------------------
To unsubscribe, e-mail: labs-unsubscribe@...
For additional commands, e-mail: labs-help@...


Re: [vysper] presence handling

by Gerolf Seitz :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Bernd,

don't hesitate to commit directly.
anyways, thx for the patch ;)

  Gerolf

On Fri, May 2, 2008 at 9:11 PM, Bernd Fondermann <bf_jak@...>
wrote:

> Bernd Fondermann wrote:
>
> > Gerolf Seitz wrote:
> >
> > > heya,
> > >
> > > i just committed my first take on handling subscription
> > > requests/approvals/cancellations
> > > and unsubscriptions.
> > > there are a lot of TODOs in there regarding persistance and
> > > determining the
> > > correct
> > > set of resources a stanza needs to be relayed to.
> > >
> > > until now, i used the RFC3921bis-04 version as a reference, as it's
> > > nicer to
> > > read...
> > >
> > > i plan to revise it to reflect the conformance to the original
> > > RFC3921.
> > >
> > > except of the TODOs, the basic handling described in RFC3921bis-04#3
> > > should be finished.
> > >
> >
> > I cannot await further presence commits! :-)
> >
> > A quick test reveiled that some clients send 'id' attributes on presence
> > stanzas and some do send inner elements (which is allowed as far as I
> > understand it).
> >
>
> Hi Gerolf,
>
> I had to put my hands on this. Now it is working better for the clients I
> use (Smack & Coccinella).
>
> Since you are probably working on this or already fixed it locally, here
> is my patch per email:
>
> Index:
> src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java
> ===================================================================
> ---
> src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java
> (revision 652621)
> +++
> src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java
> Fri May 02 20:56:31 CEST 2008
> @@ -34,6 +34,7 @@
>  import org.apache.vysper.xmpp.stanza.Stanza;
>  import org.apache.vysper.xmpp.stanza.StanzaBuilder;
>  import org.apache.vysper.xmpp.stanza.XMPPCoreStanza;
> +import org.apache.vysper.xmpp.stanza.XMPPCoreStanzaVerifier;
>  import org.apache.vysper.xmpp.xmlfragment.XMLElementVerifier;
>
>  /**
> @@ -55,16 +56,17 @@
>                // or in case of multiple resources, use the from attribute
> or return an
>                // error if the from attribute is not present.
>                Entity initiatingEntity =
> sessionContext.getInitiatingEntity();
> -               XMLElementVerifier verifier = stanza.getVerifier();
> +        XMPPCoreStanzaVerifier verifier = stanza.getCoreVerifier();
>
> -               int nrOfAttributes = stanza.getAttributes().size();
> -               if ((nrOfAttributes == 0 ||
> verifier.onlyAttributesPresent("from"))
> -                               && verifier.subElementsPresentExact(0)) {
> +        boolean hasFrom = verifier.attributePresent("from");
> +        boolean hasTo = verifier.attributePresent("to");
> +        boolean hasType = verifier.attributePresent("type");
> +
> +               if (!hasTo && !hasType) {
>                        // RFC3921bis-04#4.2.2 Initial Presence
>                        handleOutboundInitialPresence(stanza,
> sessionContext,
>                                        initiatingEntity);
> -               } else if (verifier.onlyAttributesPresent("type", "to")
> -                               && sessionContext.isServerToServer() ==
> false) {
> +               } else if (hasType && hasTo && !hasFrom &&
> !sessionContext.isServerToServer()) {
>                        // this is an outbound subscription
>                        // request/approval/cancellation/unsubscription
>                        // stamp it with the bare JID of the user
> @@ -88,10 +90,10 @@
>
>  handleOutboundSubscriptionCancellation(stampedStanza,
>                                                sessionContext);
>                        }
> -               } else if (verifier.onlyAttributesPresent("from", "to")) {
> +               } else if (hasFrom && hasTo && !hasType) {
>                        // RFC3921bis-04#4.2.3
>                        handleInboundInitialPresence(stanza,
> sessionContext);
> -               } else if (verifier.onlyAttributesPresent("type", "to",
> "from")) {
> +               } else if (hasFrom && hasTo && hasType) {
>                        String type = stanza.getType();
>                        if ("subscribe".equals(type)) {
>                                // RFC3921bis-04#3.1.3
> @@ -109,7 +111,7 @@
>
>                        }
>
> -               } else if (verifier.allAttributesPresent("from", "to")) {
> +               } else if (hasFrom && hasTo) {
>
>
>                }
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: labs-unsubscribe@...
> For additional commands, e-mail: labs-help@...
>
>
LightInTheBox - Buy quality products at wholesale price