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