Adium sending initial presence after getroster

Brad Fitzpatrick brad at danga.com
Tue Jun 27 22:47:24 UTC 2006


This is now fixed in svn.


On Wed, 21 Jun 2006, Brad Fitzpatrick wrote:

> Simple:  make the getroster (not setroster) IQ code detect that $conn
> isn't available (simply $conn->is_available) and instead push the packets
> onto a new field array on the DJabberd::Connection::ClientIn object, say,
> 'pending_sub_requests' instead of delivering them.  Then, on initial
> presence (in Presence.pm, _process_outbound_available), at this:
>
>     if ($conn->is_initial_presence) {
>         $conn->send_presence_probes;
>     }
>
> Change it to:
>
>     if ($conn->is_initial_presence) {
>         $conn->send_presence_probes;
>         $conn->send_pending_sub_requests;   # <---- new, have to implement
>     }
>
>
>
> On Tue, 20 Jun 2006, Artur Bergman wrote:
>
> > So,
> >
> > Adium is currently sending a setroster first, then an initial
> > presence request
> >
> > However, we have code in there that does this
> >
> >          foreach my $jid (map  { $_->jid }
> >                           grep { $_->subscription->is_none_pending_in }
> >                           $roster->items) {
> >              my $subpkt = DJabberd::Presence->make_subscribe(to   =>
> > $conn->bound_jid,
> >                                                              from =>
> > $jid);
> >              # already in roster as pendin, we've already processed
> > it, so just
> >              # deliver it so user can reply with subscribed/
> > unsubscribed:
> >              $logger->fatal("(fooo");
> >              $subpkt->deliver($conn->vhost);
> >          }
> >      };
> >
> >
> > however, that later gets caught in
> >
> > delivery Local.pm
> >
> >      my $find_bares = sub {
> >          @dconns = grep { $_->is_available } $vhost-
> >  >find_conns_of_bare($to)
> >      };
> >
> >
> > which sees that the connection is not available...
> >
> > any suggestions?
> >
> >
>
>


More information about the Djabberd mailing list