# File session.rb, line 385
    def register_presence_filter
      @connection.add_filter("presenceAvailableFilter") do |element|
        if element.element_tag=="presence"
          type = element.attr_type
          type = nil if type.nil?
          case type
          when nil, "available"
            element.consume_element
            from = JID.new(element.attr_from)
            rItem = @roster[from]
            show = element.show.element_data
            show = "chat" unless show
            status = element.status.element_data
            status = "" unless status
            if rItem
              resource = rItem[from.resource]
              if resource
                resource.update(show, status)
              else
                rItem.add(from.resource, show, status)
              end
            end
          when "unavailable"
            element.consume_element
            from = JID.new(element.attr_from)
            rItem = @roster[from]
            resource = rItem.delete(from.resource) if rItem
          when "subscribe", "unsubscribe", "subscribed", "unsubscribed"
            element.consume_element
            from = JID.new(element.attr_from)
            break unless @subscriptionHandler
            if @subscriptionHandler.kind_of? Proc
              @subscriptionHandler.call(Subscription.new(self, type.intern, from, id))
            else
              @subscriptionHandler.send(Subscription.new(self, type.intern, from, id))
            end
          end
        end #if presence 
      end #do
    end