# File lib/jabber4r/session.rb, line 385
385:     def register_presence_filter
386:       @connection.add_filter("presenceAvailableFilter") do |element|
387:         if element.element_tag=="presence"
388:           type = element.attr_type
389:           type = nil if type.nil?
390:           case type
391:           when nil, "available"
392:             element.consume_element
393:             from = JID.new(element.attr_from)
394:             rItem = @roster[from]
395:             show = element.show.element_data
396:             show = "chat" unless show
397:             status = element.status.element_data
398:             status = "" unless status
399:             if rItem
400:               resource = rItem[from.resource]
401:               if resource
402:                 resource.update(show, status)
403:               else
404:                 rItem.add(from.resource, show, status)
405:               end
406:             end
407:           when "unavailable"
408:             element.consume_element
409:             from = JID.new(element.attr_from)
410:             rItem = @roster[from]
411:             resource = rItem.delete(from.resource) if rItem
412:           when "subscribe", "unsubscribe", "subscribed", "unsubscribed"
413:             element.consume_element
414:             from = JID.new(element.attr_from)
415:             break unless @subscriptionHandler
416:             if @subscriptionHandler.kind_of? Proc
417:               @subscriptionHandler.call(Subscription.new(self, type.intern, from, id))
418:             else
419:               @subscriptionHandler.send(Subscription.new(self, type.intern, from, id))
420:             end
421:           end
422:         end #if presence 
423:       end #do
424:     end