blather 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +2 -0
 - data/README.rdoc +54 -29
 - data/Rakefile +94 -13
 - data/VERSION.yml +4 -0
 - data/examples/drb_client.rb +2 -4
 - data/examples/echo.rb +13 -8
 - data/examples/pubsub/cli.rb +64 -0
 - data/examples/pubsub/ping_pong.rb +18 -0
 - data/examples/pubsub/pubsub_dsl.rb +52 -0
 - data/examples/pubsub_client.rb +39 -0
 - data/examples/rosterprint.rb +14 -0
 - data/examples/xmpp4r/echo.rb +35 -0
 - data/ext/extconf.rb +65 -0
 - data/lib/blather.rb +18 -121
 - data/lib/blather/client.rb +13 -0
 - data/lib/blather/client/client.rb +165 -0
 - data/lib/blather/client/dsl.rb +99 -0
 - data/lib/blather/client/pubsub.rb +53 -0
 - data/lib/blather/client/pubsub/node.rb +27 -0
 - data/lib/blather/core_ext/active_support.rb +1 -0
 - data/lib/blather/core_ext/libxml.rb +7 -1
 - data/lib/blather/errors.rb +39 -18
 - data/lib/blather/errors/sasl_error.rb +87 -0
 - data/lib/blather/errors/stanza_error.rb +262 -0
 - data/lib/blather/errors/stream_error.rb +253 -0
 - data/lib/blather/jid.rb +9 -16
 - data/lib/blather/roster.rb +9 -0
 - data/lib/blather/roster_item.rb +7 -4
 - data/lib/blather/stanza.rb +19 -25
 - data/lib/blather/stanza/disco.rb +9 -0
 - data/lib/blather/stanza/disco/disco_info.rb +84 -0
 - data/lib/blather/stanza/disco/disco_items.rb +59 -0
 - data/lib/blather/stanza/iq.rb +16 -4
 - data/lib/blather/stanza/iq/query.rb +6 -4
 - data/lib/blather/stanza/iq/roster.rb +38 -38
 - data/lib/blather/stanza/pubsub.rb +33 -0
 - data/lib/blather/stanza/pubsub/affiliations.rb +52 -0
 - data/lib/blather/stanza/pubsub/errors.rb +9 -0
 - data/lib/blather/stanza/pubsub/event.rb +21 -0
 - data/lib/blather/stanza/pubsub/items.rb +59 -0
 - data/lib/blather/stanza/pubsub/owner.rb +9 -0
 - data/lib/blather/stanza/pubsub/subscriptions.rb +57 -0
 - data/lib/blather/stream.rb +125 -57
 - data/lib/blather/stream/client.rb +26 -0
 - data/lib/blather/stream/component.rb +34 -0
 - data/lib/blather/stream/parser.rb +17 -27
 - data/lib/blather/stream/resource.rb +21 -24
 - data/lib/blather/stream/sasl.rb +60 -37
 - data/lib/blather/stream/session.rb +12 -19
 - data/lib/blather/stream/stream_handler.rb +39 -0
 - data/lib/blather/stream/tls.rb +22 -18
 - data/lib/blather/xmpp_node.rb +91 -17
 - data/spec/blather/core_ext/libxml_spec.rb +58 -0
 - data/spec/blather/errors/sasl_error_spec.rb +56 -0
 - data/spec/blather/errors/stanza_error_spec.rb +148 -0
 - data/spec/blather/errors/stream_error_spec.rb +114 -0
 - data/spec/blather/errors_spec.rb +40 -0
 - data/spec/blather/jid_spec.rb +0 -7
 - data/spec/blather/roster_item_spec.rb +5 -0
 - data/spec/blather/roster_spec.rb +6 -6
 - data/spec/blather/stanza/discos/disco_info_spec.rb +207 -0
 - data/spec/blather/stanza/discos/disco_items_spec.rb +136 -0
 - data/spec/blather/stanza/iq/query_spec.rb +9 -2
 - data/spec/blather/stanza/iq/roster_spec.rb +117 -1
 - data/spec/blather/stanza/iq_spec.rb +29 -0
 - data/spec/blather/stanza/presence/subscription_spec.rb +12 -1
 - data/spec/blather/stanza/presence_spec.rb +29 -0
 - data/spec/blather/stanza/pubsub/affiliations_spec.rb +46 -0
 - data/spec/blather/stanza/pubsub/items_spec.rb +59 -0
 - data/spec/blather/stanza/pubsub/subscriptions_spec.rb +63 -0
 - data/spec/blather/stanza/pubsub_spec.rb +26 -0
 - data/spec/blather/stanza_spec.rb +13 -1
 - data/spec/blather/stream/client_spec.rb +787 -0
 - data/spec/blather/stream/component_spec.rb +86 -0
 - data/spec/blather/xmpp_node_spec.rb +75 -22
 - data/spec/fixtures/pubsub.rb +157 -0
 - data/spec/spec_helper.rb +6 -14
 - metadata +86 -74
 - data/CHANGELOG +0 -5
 - data/Manifest +0 -47
 - data/blather.gemspec +0 -41
 - data/lib/blather/stanza/error.rb +0 -31
 - data/spec/blather/stream_spec.rb +0 -462
 - data/spec/build_safe.rb +0 -20
 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: blather
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors: 
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Jeff Smick
         
     | 
| 
         @@ -9,7 +9,7 @@ autorequire: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
            date:  
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2009-05-05 00:00:00 -07:00
         
     | 
| 
       13 
13 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -20,7 +20,7 @@ dependencies: 
     | 
|
| 
       20 
20 
     | 
    
         
             
                requirements: 
         
     | 
| 
       21 
21 
     | 
    
         
             
                - - ">="
         
     | 
| 
       22 
22 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       23 
     | 
    
         
            -
                    version:  
     | 
| 
      
 23 
     | 
    
         
            +
                    version: 0.12.6
         
     | 
| 
       24 
24 
     | 
    
         
             
                version: 
         
     | 
| 
       25 
25 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       26 
26 
     | 
    
         
             
              name: libxml-ruby
         
     | 
| 
         @@ -30,89 +30,85 @@ dependencies: 
     | 
|
| 
       30 
30 
     | 
    
         
             
                requirements: 
         
     | 
| 
       31 
31 
     | 
    
         
             
                - - ">="
         
     | 
| 
       32 
32 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       33 
     | 
    
         
            -
                    version:  
     | 
| 
       34 
     | 
    
         
            -
                version: 
         
     | 
| 
       35 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       36 
     | 
    
         
            -
              name: echoe
         
     | 
| 
       37 
     | 
    
         
            -
              type: :development
         
     | 
| 
       38 
     | 
    
         
            -
              version_requirement: 
         
     | 
| 
       39 
     | 
    
         
            -
              version_requirements: !ruby/object:Gem::Requirement 
         
     | 
| 
       40 
     | 
    
         
            -
                requirements: 
         
     | 
| 
       41 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       42 
     | 
    
         
            -
                  - !ruby/object:Gem::Version 
         
     | 
| 
       43 
     | 
    
         
            -
                    version: "0"
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: 1.1.3
         
     | 
| 
       44 
34 
     | 
    
         
             
                version: 
         
     | 
| 
       45 
35 
     | 
    
         
             
            description: An evented XMPP library written on EventMachine and libxml-ruby
         
     | 
| 
       46 
36 
     | 
    
         
             
            email: sprsquish@gmail.com
         
     | 
| 
       47 
37 
     | 
    
         
             
            executables: []
         
     | 
| 
       48 
38 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
            extensions:  
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
      
 39 
     | 
    
         
            +
            extensions: 
         
     | 
| 
      
 40 
     | 
    
         
            +
            - ext/extconf.rb
         
     | 
| 
       51 
41 
     | 
    
         
             
            extra_rdoc_files: 
         
     | 
| 
       52 
     | 
    
         
            -
            - CHANGELOG
         
     | 
| 
       53 
     | 
    
         
            -
            - lib/autotest/discover.rb
         
     | 
| 
       54 
     | 
    
         
            -
            - lib/autotest/spec.rb
         
     | 
| 
       55 
     | 
    
         
            -
            - lib/blather/core_ext/active_support.rb
         
     | 
| 
       56 
     | 
    
         
            -
            - lib/blather/core_ext/libxml.rb
         
     | 
| 
       57 
     | 
    
         
            -
            - lib/blather/errors.rb
         
     | 
| 
       58 
     | 
    
         
            -
            - lib/blather/jid.rb
         
     | 
| 
       59 
     | 
    
         
            -
            - lib/blather/roster.rb
         
     | 
| 
       60 
     | 
    
         
            -
            - lib/blather/roster_item.rb
         
     | 
| 
       61 
     | 
    
         
            -
            - lib/blather/stanza/error.rb
         
     | 
| 
       62 
     | 
    
         
            -
            - lib/blather/stanza/iq/query.rb
         
     | 
| 
       63 
     | 
    
         
            -
            - lib/blather/stanza/iq/roster.rb
         
     | 
| 
       64 
     | 
    
         
            -
            - lib/blather/stanza/iq.rb
         
     | 
| 
       65 
     | 
    
         
            -
            - lib/blather/stanza/message.rb
         
     | 
| 
       66 
     | 
    
         
            -
            - lib/blather/stanza/presence/status.rb
         
     | 
| 
       67 
     | 
    
         
            -
            - lib/blather/stanza/presence/subscription.rb
         
     | 
| 
       68 
     | 
    
         
            -
            - lib/blather/stanza/presence.rb
         
     | 
| 
       69 
     | 
    
         
            -
            - lib/blather/stanza.rb
         
     | 
| 
       70 
     | 
    
         
            -
            - lib/blather/stream/parser.rb
         
     | 
| 
       71 
     | 
    
         
            -
            - lib/blather/stream/resource.rb
         
     | 
| 
       72 
     | 
    
         
            -
            - lib/blather/stream/sasl.rb
         
     | 
| 
       73 
     | 
    
         
            -
            - lib/blather/stream/session.rb
         
     | 
| 
       74 
     | 
    
         
            -
            - lib/blather/stream/tls.rb
         
     | 
| 
       75 
     | 
    
         
            -
            - lib/blather/stream.rb
         
     | 
| 
       76 
     | 
    
         
            -
            - lib/blather/xmpp_node.rb
         
     | 
| 
       77 
     | 
    
         
            -
            - lib/blather.rb
         
     | 
| 
       78 
42 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       79 
43 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       80 
44 
     | 
    
         
             
            files: 
         
     | 
| 
       81 
     | 
    
         
            -
            -  
     | 
| 
      
 45 
     | 
    
         
            +
            - LICENSE
         
     | 
| 
      
 46 
     | 
    
         
            +
            - README.rdoc
         
     | 
| 
      
 47 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 48 
     | 
    
         
            +
            - VERSION.yml
         
     | 
| 
       82 
49 
     | 
    
         
             
            - examples/drb_client.rb
         
     | 
| 
       83 
50 
     | 
    
         
             
            - examples/echo.rb
         
     | 
| 
      
 51 
     | 
    
         
            +
            - examples/pubsub/cli.rb
         
     | 
| 
      
 52 
     | 
    
         
            +
            - examples/pubsub/ping_pong.rb
         
     | 
| 
      
 53 
     | 
    
         
            +
            - examples/pubsub/pubsub_dsl.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
            - examples/pubsub_client.rb
         
     | 
| 
      
 55 
     | 
    
         
            +
            - examples/rosterprint.rb
         
     | 
| 
      
 56 
     | 
    
         
            +
            - examples/xmpp4r/echo.rb
         
     | 
| 
       84 
57 
     | 
    
         
             
            - lib/autotest/discover.rb
         
     | 
| 
       85 
58 
     | 
    
         
             
            - lib/autotest/spec.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - lib/blather.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - lib/blather/client.rb
         
     | 
| 
      
 61 
     | 
    
         
            +
            - lib/blather/client/client.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib/blather/client/dsl.rb
         
     | 
| 
      
 63 
     | 
    
         
            +
            - lib/blather/client/pubsub.rb
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/blather/client/pubsub/node.rb
         
     | 
| 
       86 
65 
     | 
    
         
             
            - lib/blather/core_ext/active_support.rb
         
     | 
| 
       87 
66 
     | 
    
         
             
            - lib/blather/core_ext/libxml.rb
         
     | 
| 
       88 
67 
     | 
    
         
             
            - lib/blather/errors.rb
         
     | 
| 
      
 68 
     | 
    
         
            +
            - lib/blather/errors/sasl_error.rb
         
     | 
| 
      
 69 
     | 
    
         
            +
            - lib/blather/errors/stanza_error.rb
         
     | 
| 
      
 70 
     | 
    
         
            +
            - lib/blather/errors/stream_error.rb
         
     | 
| 
       89 
71 
     | 
    
         
             
            - lib/blather/jid.rb
         
     | 
| 
       90 
72 
     | 
    
         
             
            - lib/blather/roster.rb
         
     | 
| 
       91 
73 
     | 
    
         
             
            - lib/blather/roster_item.rb
         
     | 
| 
       92 
     | 
    
         
            -
            - lib/blather/stanza 
     | 
| 
      
 74 
     | 
    
         
            +
            - lib/blather/stanza.rb
         
     | 
| 
      
 75 
     | 
    
         
            +
            - lib/blather/stanza/disco.rb
         
     | 
| 
      
 76 
     | 
    
         
            +
            - lib/blather/stanza/disco/disco_info.rb
         
     | 
| 
      
 77 
     | 
    
         
            +
            - lib/blather/stanza/disco/disco_items.rb
         
     | 
| 
      
 78 
     | 
    
         
            +
            - lib/blather/stanza/iq.rb
         
     | 
| 
       93 
79 
     | 
    
         
             
            - lib/blather/stanza/iq/query.rb
         
     | 
| 
       94 
80 
     | 
    
         
             
            - lib/blather/stanza/iq/roster.rb
         
     | 
| 
       95 
     | 
    
         
            -
            - lib/blather/stanza/iq.rb
         
     | 
| 
       96 
81 
     | 
    
         
             
            - lib/blather/stanza/message.rb
         
     | 
| 
      
 82 
     | 
    
         
            +
            - lib/blather/stanza/presence.rb
         
     | 
| 
       97 
83 
     | 
    
         
             
            - lib/blather/stanza/presence/status.rb
         
     | 
| 
       98 
84 
     | 
    
         
             
            - lib/blather/stanza/presence/subscription.rb
         
     | 
| 
       99 
     | 
    
         
            -
            - lib/blather/stanza/ 
     | 
| 
       100 
     | 
    
         
            -
            - lib/blather/stanza.rb
         
     | 
| 
      
 85 
     | 
    
         
            +
            - lib/blather/stanza/pubsub.rb
         
     | 
| 
      
 86 
     | 
    
         
            +
            - lib/blather/stanza/pubsub/affiliations.rb
         
     | 
| 
      
 87 
     | 
    
         
            +
            - lib/blather/stanza/pubsub/errors.rb
         
     | 
| 
      
 88 
     | 
    
         
            +
            - lib/blather/stanza/pubsub/event.rb
         
     | 
| 
      
 89 
     | 
    
         
            +
            - lib/blather/stanza/pubsub/items.rb
         
     | 
| 
      
 90 
     | 
    
         
            +
            - lib/blather/stanza/pubsub/owner.rb
         
     | 
| 
      
 91 
     | 
    
         
            +
            - lib/blather/stanza/pubsub/subscriptions.rb
         
     | 
| 
      
 92 
     | 
    
         
            +
            - lib/blather/stream.rb
         
     | 
| 
      
 93 
     | 
    
         
            +
            - lib/blather/stream/client.rb
         
     | 
| 
      
 94 
     | 
    
         
            +
            - lib/blather/stream/component.rb
         
     | 
| 
       101 
95 
     | 
    
         
             
            - lib/blather/stream/parser.rb
         
     | 
| 
       102 
96 
     | 
    
         
             
            - lib/blather/stream/resource.rb
         
     | 
| 
       103 
97 
     | 
    
         
             
            - lib/blather/stream/sasl.rb
         
     | 
| 
       104 
98 
     | 
    
         
             
            - lib/blather/stream/session.rb
         
     | 
| 
      
 99 
     | 
    
         
            +
            - lib/blather/stream/stream_handler.rb
         
     | 
| 
       105 
100 
     | 
    
         
             
            - lib/blather/stream/tls.rb
         
     | 
| 
       106 
     | 
    
         
            -
            - lib/blather/stream.rb
         
     | 
| 
       107 
101 
     | 
    
         
             
            - lib/blather/xmpp_node.rb
         
     | 
| 
       108 
     | 
    
         
            -
            -  
     | 
| 
       109 
     | 
    
         
            -
            -  
     | 
| 
       110 
     | 
    
         
            -
            -  
     | 
| 
       111 
     | 
    
         
            -
            -  
     | 
| 
       112 
     | 
    
         
            -
            -  
     | 
| 
      
 102 
     | 
    
         
            +
            - spec/blather/core_ext/libxml_spec.rb
         
     | 
| 
      
 103 
     | 
    
         
            +
            - spec/blather/errors/sasl_error_spec.rb
         
     | 
| 
      
 104 
     | 
    
         
            +
            - spec/blather/errors/stanza_error_spec.rb
         
     | 
| 
      
 105 
     | 
    
         
            +
            - spec/blather/errors/stream_error_spec.rb
         
     | 
| 
      
 106 
     | 
    
         
            +
            - spec/blather/errors_spec.rb
         
     | 
| 
       113 
107 
     | 
    
         
             
            - spec/blather/jid_spec.rb
         
     | 
| 
       114 
108 
     | 
    
         
             
            - spec/blather/roster_item_spec.rb
         
     | 
| 
       115 
109 
     | 
    
         
             
            - spec/blather/roster_spec.rb
         
     | 
| 
      
 110 
     | 
    
         
            +
            - spec/blather/stanza/discos/disco_info_spec.rb
         
     | 
| 
      
 111 
     | 
    
         
            +
            - spec/blather/stanza/discos/disco_items_spec.rb
         
     | 
| 
       116 
112 
     | 
    
         
             
            - spec/blather/stanza/iq/query_spec.rb
         
     | 
| 
       117 
113 
     | 
    
         
             
            - spec/blather/stanza/iq/roster_spec.rb
         
     | 
| 
       118 
114 
     | 
    
         
             
            - spec/blather/stanza/iq_spec.rb
         
     | 
| 
         @@ -120,29 +116,23 @@ files: 
     | 
|
| 
       120 
116 
     | 
    
         
             
            - spec/blather/stanza/presence/status_spec.rb
         
     | 
| 
       121 
117 
     | 
    
         
             
            - spec/blather/stanza/presence/subscription_spec.rb
         
     | 
| 
       122 
118 
     | 
    
         
             
            - spec/blather/stanza/presence_spec.rb
         
     | 
| 
      
 119 
     | 
    
         
            +
            - spec/blather/stanza/pubsub/affiliations_spec.rb
         
     | 
| 
      
 120 
     | 
    
         
            +
            - spec/blather/stanza/pubsub/items_spec.rb
         
     | 
| 
      
 121 
     | 
    
         
            +
            - spec/blather/stanza/pubsub/subscriptions_spec.rb
         
     | 
| 
      
 122 
     | 
    
         
            +
            - spec/blather/stanza/pubsub_spec.rb
         
     | 
| 
       123 
123 
     | 
    
         
             
            - spec/blather/stanza_spec.rb
         
     | 
| 
       124 
     | 
    
         
            -
            - spec/blather/ 
     | 
| 
      
 124 
     | 
    
         
            +
            - spec/blather/stream/client_spec.rb
         
     | 
| 
      
 125 
     | 
    
         
            +
            - spec/blather/stream/component_spec.rb
         
     | 
| 
       125 
126 
     | 
    
         
             
            - spec/blather/xmpp_node_spec.rb
         
     | 
| 
       126 
     | 
    
         
            -
            - spec/ 
     | 
| 
      
 127 
     | 
    
         
            +
            - spec/fixtures/pubsub.rb
         
     | 
| 
       127 
128 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       128 
     | 
    
         
            -
            - blather.gemspec
         
     | 
| 
       129 
129 
     | 
    
         
             
            has_rdoc: true
         
     | 
| 
       130 
     | 
    
         
            -
            homepage: http://github.com/sprsquish/blather 
     | 
| 
      
 130 
     | 
    
         
            +
            homepage: http://github.com/sprsquish/blather
         
     | 
| 
      
 131 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
       131 
133 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
       132 
134 
     | 
    
         
             
            rdoc_options: 
         
     | 
| 
       133 
     | 
    
         
            -
            - -- 
     | 
| 
       134 
     | 
    
         
            -
            - --inline-source
         
     | 
| 
       135 
     | 
    
         
            -
            - --title
         
     | 
| 
       136 
     | 
    
         
            -
            - Blather
         
     | 
| 
       137 
     | 
    
         
            -
            - --main
         
     | 
| 
       138 
     | 
    
         
            -
            - README.rdoc
         
     | 
| 
       139 
     | 
    
         
            -
            - -S
         
     | 
| 
       140 
     | 
    
         
            -
            - -T
         
     | 
| 
       141 
     | 
    
         
            -
            - hanna
         
     | 
| 
       142 
     | 
    
         
            -
            - --main
         
     | 
| 
       143 
     | 
    
         
            -
            - README.rdoc
         
     | 
| 
       144 
     | 
    
         
            -
            - --exclude
         
     | 
| 
       145 
     | 
    
         
            -
            - autotest
         
     | 
| 
      
 135 
     | 
    
         
            +
            - --charset=UTF-8
         
     | 
| 
       146 
136 
     | 
    
         
             
            require_paths: 
         
     | 
| 
       147 
137 
     | 
    
         
             
            - lib
         
     | 
| 
       148 
138 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
         @@ -155,19 +145,26 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       155 
145 
     | 
    
         
             
              requirements: 
         
     | 
| 
       156 
146 
     | 
    
         
             
              - - ">="
         
     | 
| 
       157 
147 
     | 
    
         
             
                - !ruby/object:Gem::Version 
         
     | 
| 
       158 
     | 
    
         
            -
                  version: " 
     | 
| 
      
 148 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
       159 
149 
     | 
    
         
             
              version: 
         
     | 
| 
       160 
150 
     | 
    
         
             
            requirements: []
         
     | 
| 
       161 
151 
     | 
    
         | 
| 
       162 
152 
     | 
    
         
             
            rubyforge_project: squishtech
         
     | 
| 
       163 
     | 
    
         
            -
            rubygems_version: 1.3. 
     | 
| 
      
 153 
     | 
    
         
            +
            rubygems_version: 1.3.2
         
     | 
| 
       164 
154 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       165 
     | 
    
         
            -
            specification_version:  
     | 
| 
      
 155 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
       166 
156 
     | 
    
         
             
            summary: An evented XMPP library written on EventMachine and libxml-ruby
         
     | 
| 
       167 
157 
     | 
    
         
             
            test_files: 
         
     | 
| 
      
 158 
     | 
    
         
            +
            - spec/blather/core_ext/libxml_spec.rb
         
     | 
| 
      
 159 
     | 
    
         
            +
            - spec/blather/errors/sasl_error_spec.rb
         
     | 
| 
      
 160 
     | 
    
         
            +
            - spec/blather/errors/stanza_error_spec.rb
         
     | 
| 
      
 161 
     | 
    
         
            +
            - spec/blather/errors/stream_error_spec.rb
         
     | 
| 
      
 162 
     | 
    
         
            +
            - spec/blather/errors_spec.rb
         
     | 
| 
       168 
163 
     | 
    
         
             
            - spec/blather/jid_spec.rb
         
     | 
| 
       169 
164 
     | 
    
         
             
            - spec/blather/roster_item_spec.rb
         
     | 
| 
       170 
165 
     | 
    
         
             
            - spec/blather/roster_spec.rb
         
     | 
| 
      
 166 
     | 
    
         
            +
            - spec/blather/stanza/discos/disco_info_spec.rb
         
     | 
| 
      
 167 
     | 
    
         
            +
            - spec/blather/stanza/discos/disco_items_spec.rb
         
     | 
| 
       171 
168 
     | 
    
         
             
            - spec/blather/stanza/iq/query_spec.rb
         
     | 
| 
       172 
169 
     | 
    
         
             
            - spec/blather/stanza/iq/roster_spec.rb
         
     | 
| 
       173 
170 
     | 
    
         
             
            - spec/blather/stanza/iq_spec.rb
         
     | 
| 
         @@ -175,6 +172,21 @@ test_files: 
     | 
|
| 
       175 
172 
     | 
    
         
             
            - spec/blather/stanza/presence/status_spec.rb
         
     | 
| 
       176 
173 
     | 
    
         
             
            - spec/blather/stanza/presence/subscription_spec.rb
         
     | 
| 
       177 
174 
     | 
    
         
             
            - spec/blather/stanza/presence_spec.rb
         
     | 
| 
      
 175 
     | 
    
         
            +
            - spec/blather/stanza/pubsub/affiliations_spec.rb
         
     | 
| 
      
 176 
     | 
    
         
            +
            - spec/blather/stanza/pubsub/items_spec.rb
         
     | 
| 
      
 177 
     | 
    
         
            +
            - spec/blather/stanza/pubsub/subscriptions_spec.rb
         
     | 
| 
      
 178 
     | 
    
         
            +
            - spec/blather/stanza/pubsub_spec.rb
         
     | 
| 
       178 
179 
     | 
    
         
             
            - spec/blather/stanza_spec.rb
         
     | 
| 
       179 
     | 
    
         
            -
            - spec/blather/ 
     | 
| 
      
 180 
     | 
    
         
            +
            - spec/blather/stream/client_spec.rb
         
     | 
| 
      
 181 
     | 
    
         
            +
            - spec/blather/stream/component_spec.rb
         
     | 
| 
       180 
182 
     | 
    
         
             
            - spec/blather/xmpp_node_spec.rb
         
     | 
| 
      
 183 
     | 
    
         
            +
            - spec/fixtures/pubsub.rb
         
     | 
| 
      
 184 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
      
 185 
     | 
    
         
            +
            - examples/drb_client.rb
         
     | 
| 
      
 186 
     | 
    
         
            +
            - examples/echo.rb
         
     | 
| 
      
 187 
     | 
    
         
            +
            - examples/pubsub/cli.rb
         
     | 
| 
      
 188 
     | 
    
         
            +
            - examples/pubsub/ping_pong.rb
         
     | 
| 
      
 189 
     | 
    
         
            +
            - examples/pubsub/pubsub_dsl.rb
         
     | 
| 
      
 190 
     | 
    
         
            +
            - examples/pubsub_client.rb
         
     | 
| 
      
 191 
     | 
    
         
            +
            - examples/rosterprint.rb
         
     | 
| 
      
 192 
     | 
    
         
            +
            - examples/xmpp4r/echo.rb
         
     | 
    
        data/CHANGELOG
    DELETED
    
    
    
        data/Manifest
    DELETED
    
    | 
         @@ -1,47 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            CHANGELOG
         
     | 
| 
       2 
     | 
    
         
            -
            examples/drb_client.rb
         
     | 
| 
       3 
     | 
    
         
            -
            examples/echo.rb
         
     | 
| 
       4 
     | 
    
         
            -
            lib/autotest/discover.rb
         
     | 
| 
       5 
     | 
    
         
            -
            lib/autotest/spec.rb
         
     | 
| 
       6 
     | 
    
         
            -
            lib/blather/core_ext/active_support.rb
         
     | 
| 
       7 
     | 
    
         
            -
            lib/blather/core_ext/libxml.rb
         
     | 
| 
       8 
     | 
    
         
            -
            lib/blather/errors.rb
         
     | 
| 
       9 
     | 
    
         
            -
            lib/blather/jid.rb
         
     | 
| 
       10 
     | 
    
         
            -
            lib/blather/roster.rb
         
     | 
| 
       11 
     | 
    
         
            -
            lib/blather/roster_item.rb
         
     | 
| 
       12 
     | 
    
         
            -
            lib/blather/stanza/error.rb
         
     | 
| 
       13 
     | 
    
         
            -
            lib/blather/stanza/iq/query.rb
         
     | 
| 
       14 
     | 
    
         
            -
            lib/blather/stanza/iq/roster.rb
         
     | 
| 
       15 
     | 
    
         
            -
            lib/blather/stanza/iq.rb
         
     | 
| 
       16 
     | 
    
         
            -
            lib/blather/stanza/message.rb
         
     | 
| 
       17 
     | 
    
         
            -
            lib/blather/stanza/presence/status.rb
         
     | 
| 
       18 
     | 
    
         
            -
            lib/blather/stanza/presence/subscription.rb
         
     | 
| 
       19 
     | 
    
         
            -
            lib/blather/stanza/presence.rb
         
     | 
| 
       20 
     | 
    
         
            -
            lib/blather/stanza.rb
         
     | 
| 
       21 
     | 
    
         
            -
            lib/blather/stream/parser.rb
         
     | 
| 
       22 
     | 
    
         
            -
            lib/blather/stream/resource.rb
         
     | 
| 
       23 
     | 
    
         
            -
            lib/blather/stream/sasl.rb
         
     | 
| 
       24 
     | 
    
         
            -
            lib/blather/stream/session.rb
         
     | 
| 
       25 
     | 
    
         
            -
            lib/blather/stream/tls.rb
         
     | 
| 
       26 
     | 
    
         
            -
            lib/blather/stream.rb
         
     | 
| 
       27 
     | 
    
         
            -
            lib/blather/xmpp_node.rb
         
     | 
| 
       28 
     | 
    
         
            -
            lib/blather.rb
         
     | 
| 
       29 
     | 
    
         
            -
            LICENSE
         
     | 
| 
       30 
     | 
    
         
            -
            Manifest
         
     | 
| 
       31 
     | 
    
         
            -
            Rakefile
         
     | 
| 
       32 
     | 
    
         
            -
            README.rdoc
         
     | 
| 
       33 
     | 
    
         
            -
            spec/blather/jid_spec.rb
         
     | 
| 
       34 
     | 
    
         
            -
            spec/blather/roster_item_spec.rb
         
     | 
| 
       35 
     | 
    
         
            -
            spec/blather/roster_spec.rb
         
     | 
| 
       36 
     | 
    
         
            -
            spec/blather/stanza/iq/query_spec.rb
         
     | 
| 
       37 
     | 
    
         
            -
            spec/blather/stanza/iq/roster_spec.rb
         
     | 
| 
       38 
     | 
    
         
            -
            spec/blather/stanza/iq_spec.rb
         
     | 
| 
       39 
     | 
    
         
            -
            spec/blather/stanza/message_spec.rb
         
     | 
| 
       40 
     | 
    
         
            -
            spec/blather/stanza/presence/status_spec.rb
         
     | 
| 
       41 
     | 
    
         
            -
            spec/blather/stanza/presence/subscription_spec.rb
         
     | 
| 
       42 
     | 
    
         
            -
            spec/blather/stanza/presence_spec.rb
         
     | 
| 
       43 
     | 
    
         
            -
            spec/blather/stanza_spec.rb
         
     | 
| 
       44 
     | 
    
         
            -
            spec/blather/stream_spec.rb
         
     | 
| 
       45 
     | 
    
         
            -
            spec/blather/xmpp_node_spec.rb
         
     | 
| 
       46 
     | 
    
         
            -
            spec/build_safe.rb
         
     | 
| 
       47 
     | 
    
         
            -
            spec/spec_helper.rb
         
     | 
    
        data/blather.gemspec
    DELETED
    
    | 
         @@ -1,41 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # -*- encoding: utf-8 -*-
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            Gem::Specification.new do |s|
         
     | 
| 
       4 
     | 
    
         
            -
              s.name = %q{blather}
         
     | 
| 
       5 
     | 
    
         
            -
              s.version = "0.2.1"
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       8 
     | 
    
         
            -
              s.authors = ["Jeff Smick"]
         
     | 
| 
       9 
     | 
    
         
            -
              s.date = %q{2008-12-21}
         
     | 
| 
       10 
     | 
    
         
            -
              s.description = %q{An evented XMPP library written on EventMachine and libxml-ruby}
         
     | 
| 
       11 
     | 
    
         
            -
              s.email = %q{sprsquish@gmail.com}
         
     | 
| 
       12 
     | 
    
         
            -
              s.extra_rdoc_files = ["CHANGELOG", "lib/autotest/discover.rb", "lib/autotest/spec.rb", "lib/blather/core_ext/active_support.rb", "lib/blather/core_ext/libxml.rb", "lib/blather/errors.rb", "lib/blather/jid.rb", "lib/blather/roster.rb", "lib/blather/roster_item.rb", "lib/blather/stanza/error.rb", "lib/blather/stanza/iq/query.rb", "lib/blather/stanza/iq/roster.rb", "lib/blather/stanza/iq.rb", "lib/blather/stanza/message.rb", "lib/blather/stanza/presence/status.rb", "lib/blather/stanza/presence/subscription.rb", "lib/blather/stanza/presence.rb", "lib/blather/stanza.rb", "lib/blather/stream/parser.rb", "lib/blather/stream/resource.rb", "lib/blather/stream/sasl.rb", "lib/blather/stream/session.rb", "lib/blather/stream/tls.rb", "lib/blather/stream.rb", "lib/blather/xmpp_node.rb", "lib/blather.rb", "LICENSE", "README.rdoc"]
         
     | 
| 
       13 
     | 
    
         
            -
              s.files = ["CHANGELOG", "examples/drb_client.rb", "examples/echo.rb", "lib/autotest/discover.rb", "lib/autotest/spec.rb", "lib/blather/core_ext/active_support.rb", "lib/blather/core_ext/libxml.rb", "lib/blather/errors.rb", "lib/blather/jid.rb", "lib/blather/roster.rb", "lib/blather/roster_item.rb", "lib/blather/stanza/error.rb", "lib/blather/stanza/iq/query.rb", "lib/blather/stanza/iq/roster.rb", "lib/blather/stanza/iq.rb", "lib/blather/stanza/message.rb", "lib/blather/stanza/presence/status.rb", "lib/blather/stanza/presence/subscription.rb", "lib/blather/stanza/presence.rb", "lib/blather/stanza.rb", "lib/blather/stream/parser.rb", "lib/blather/stream/resource.rb", "lib/blather/stream/sasl.rb", "lib/blather/stream/session.rb", "lib/blather/stream/tls.rb", "lib/blather/stream.rb", "lib/blather/xmpp_node.rb", "lib/blather.rb", "LICENSE", "Manifest", "Rakefile", "README.rdoc", "spec/blather/jid_spec.rb", "spec/blather/roster_item_spec.rb", "spec/blather/roster_spec.rb", "spec/blather/stanza/iq/query_spec.rb", "spec/blather/stanza/iq/roster_spec.rb", "spec/blather/stanza/iq_spec.rb", "spec/blather/stanza/message_spec.rb", "spec/blather/stanza/presence/status_spec.rb", "spec/blather/stanza/presence/subscription_spec.rb", "spec/blather/stanza/presence_spec.rb", "spec/blather/stanza_spec.rb", "spec/blather/stream_spec.rb", "spec/blather/xmpp_node_spec.rb", "spec/build_safe.rb", "spec/spec_helper.rb", "blather.gemspec"]
         
     | 
| 
       14 
     | 
    
         
            -
              s.has_rdoc = true
         
     | 
| 
       15 
     | 
    
         
            -
              s.homepage = %q{http://github.com/sprsquish/blather/tree/master}
         
     | 
| 
       16 
     | 
    
         
            -
              s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Blather", "--main", "README.rdoc", "-S", "-T", "hanna", "--main", "README.rdoc", "--exclude", "autotest"]
         
     | 
| 
       17 
     | 
    
         
            -
              s.require_paths = ["lib"]
         
     | 
| 
       18 
     | 
    
         
            -
              s.rubyforge_project = %q{squishtech}
         
     | 
| 
       19 
     | 
    
         
            -
              s.rubygems_version = %q{1.3.1}
         
     | 
| 
       20 
     | 
    
         
            -
              s.summary = %q{An evented XMPP library written on EventMachine and libxml-ruby}
         
     | 
| 
       21 
     | 
    
         
            -
              s.test_files = ["spec/blather/jid_spec.rb", "spec/blather/roster_item_spec.rb", "spec/blather/roster_spec.rb", "spec/blather/stanza/iq/query_spec.rb", "spec/blather/stanza/iq/roster_spec.rb", "spec/blather/stanza/iq_spec.rb", "spec/blather/stanza/message_spec.rb", "spec/blather/stanza/presence/status_spec.rb", "spec/blather/stanza/presence/subscription_spec.rb", "spec/blather/stanza/presence_spec.rb", "spec/blather/stanza_spec.rb", "spec/blather/stream_spec.rb", "spec/blather/xmpp_node_spec.rb"]
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
              if s.respond_to? :specification_version then
         
     | 
| 
       24 
     | 
    
         
            -
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         
     | 
| 
       25 
     | 
    
         
            -
                s.specification_version = 2
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
         
     | 
| 
       28 
     | 
    
         
            -
                  s.add_runtime_dependency(%q<eventmachine>, [">= 0"])
         
     | 
| 
       29 
     | 
    
         
            -
                  s.add_runtime_dependency(%q<libxml-ruby>, [">= 0.9.7"])
         
     | 
| 
       30 
     | 
    
         
            -
                  s.add_development_dependency(%q<echoe>, [">= 0"])
         
     | 
| 
       31 
     | 
    
         
            -
                else
         
     | 
| 
       32 
     | 
    
         
            -
                  s.add_dependency(%q<eventmachine>, [">= 0"])
         
     | 
| 
       33 
     | 
    
         
            -
                  s.add_dependency(%q<libxml-ruby>, [">= 0.9.7"])
         
     | 
| 
       34 
     | 
    
         
            -
                  s.add_dependency(%q<echoe>, [">= 0"])
         
     | 
| 
       35 
     | 
    
         
            -
                end
         
     | 
| 
       36 
     | 
    
         
            -
              else
         
     | 
| 
       37 
     | 
    
         
            -
                s.add_dependency(%q<eventmachine>, [">= 0"])
         
     | 
| 
       38 
     | 
    
         
            -
                s.add_dependency(%q<libxml-ruby>, [">= 0.9.7"])
         
     | 
| 
       39 
     | 
    
         
            -
                s.add_dependency(%q<echoe>, [">= 0"])
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/blather/stanza/error.rb
    DELETED
    
    | 
         @@ -1,31 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Blather
         
     | 
| 
       2 
     | 
    
         
            -
            class Stanza
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
              ##
         
     | 
| 
       5 
     | 
    
         
            -
              # Base Error stanza
         
     | 
| 
       6 
     | 
    
         
            -
              class Error < Stanza
         
     | 
| 
       7 
     | 
    
         
            -
                def self.new_from(stanza, defined_condition, type, text = nil)
         
     | 
| 
       8 
     | 
    
         
            -
                  err = XMPPNode.new(defined_condition)
         
     | 
| 
       9 
     | 
    
         
            -
                  err['type'] = type
         
     | 
| 
       10 
     | 
    
         
            -
                  err.xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas'
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                  if text
         
     | 
| 
       13 
     | 
    
         
            -
                    text = XMPPNode.new('text', text)
         
     | 
| 
       14 
     | 
    
         
            -
                    text.xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas'
         
     | 
| 
       15 
     | 
    
         
            -
                    err << text
         
     | 
| 
       16 
     | 
    
         
            -
                  end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                  elem = stanza.copy(true)
         
     | 
| 
       19 
     | 
    
         
            -
                  elem.type = 'error'
         
     | 
| 
       20 
     | 
    
         
            -
                  elem << err
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                  elem
         
     | 
| 
       23 
     | 
    
         
            -
                end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                def error?
         
     | 
| 
       26 
     | 
    
         
            -
                  true
         
     | 
| 
       27 
     | 
    
         
            -
                end
         
     | 
| 
       28 
     | 
    
         
            -
              end #ErrorStanza
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
            end #Stanza
         
     | 
| 
       31 
     | 
    
         
            -
            end
         
     | 
    
        data/spec/blather/stream_spec.rb
    DELETED
    
    | 
         @@ -1,462 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require File.join(File.dirname(__FILE__), *%w[.. spec_helper])
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            describe 'Blather::Stream' do
         
     | 
| 
       4 
     | 
    
         
            -
              class MockStream; include Stream; end
         
     | 
| 
       5 
     | 
    
         
            -
              def mock_stream(&block)
         
     | 
| 
       6 
     | 
    
         
            -
                @client = mock()
         
     | 
| 
       7 
     | 
    
         
            -
                @client.stubs(:jid=)
         
     | 
| 
       8 
     | 
    
         
            -
                stream = MockStream.new @client, JID.new('n@d/r'), 'pass'
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                stream.expects(:send_data).at_least(1).with &block
         
     | 
| 
       11 
     | 
    
         
            -
                stream
         
     | 
| 
       12 
     | 
    
         
            -
              end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
              it 'can be started' do
         
     | 
| 
       15 
     | 
    
         
            -
                client = mock()
         
     | 
| 
       16 
     | 
    
         
            -
                params = [client, 'n@d/r', 'pass', 'host', 1234]
         
     | 
| 
       17 
     | 
    
         
            -
                EM.expects(:connect).with do |*parms|
         
     | 
| 
       18 
     | 
    
         
            -
                  parms[0] == 'host'  &&
         
     | 
| 
       19 
     | 
    
         
            -
                  parms[1] == 1234    &&
         
     | 
| 
       20 
     | 
    
         
            -
                  parms[3] == client  &&
         
     | 
| 
       21 
     | 
    
         
            -
                  parms[5] == 'pass'  &&
         
     | 
| 
       22 
     | 
    
         
            -
                  parms[4] == JID.new('n@d/r')
         
     | 
| 
       23 
     | 
    
         
            -
                end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                Stream.start *(params)
         
     | 
| 
       26 
     | 
    
         
            -
              end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
              it 'can figure out the host to use based on the jid' do
         
     | 
| 
       29 
     | 
    
         
            -
                client = mock()
         
     | 
| 
       30 
     | 
    
         
            -
                params = [client, 'n@d/r', 'pass', 'd', 5222]
         
     | 
| 
       31 
     | 
    
         
            -
                EM.expects(:connect).with do |*parms|
         
     | 
| 
       32 
     | 
    
         
            -
                  parms[0] == 'd'     &&
         
     | 
| 
       33 
     | 
    
         
            -
                  parms[1] == 5222    &&
         
     | 
| 
       34 
     | 
    
         
            -
                  parms[3] == client  &&
         
     | 
| 
       35 
     | 
    
         
            -
                  parms[5] == 'pass'  &&
         
     | 
| 
       36 
     | 
    
         
            -
                  parms[4] == JID.new('n@d/r')
         
     | 
| 
       37 
     | 
    
         
            -
                end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                Stream.start client, 'n@d/r', 'pass'
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
              it 'starts the stream once the connection is complete' do
         
     | 
| 
       43 
     | 
    
         
            -
                s = mock_stream { |d| d =~ /stream:stream/ }
         
     | 
| 
       44 
     | 
    
         
            -
                s.connection_completed
         
     | 
| 
       45 
     | 
    
         
            -
              end
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
              it 'sends stanzas to the client when the stream is ready' do
         
     | 
| 
       48 
     | 
    
         
            -
                client = mock()
         
     | 
| 
       49 
     | 
    
         
            -
                client.stubs(:jid=)
         
     | 
| 
       50 
     | 
    
         
            -
                client.expects(:call)
         
     | 
| 
       51 
     | 
    
         
            -
                stream = MockStream.new client, JID.new('n@d/r'), 'pass'
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                stream.expects(:send_data).with do |val|
         
     | 
| 
       54 
     | 
    
         
            -
                  val.must_match(/stream:stream/)
         
     | 
| 
       55 
     | 
    
         
            -
                  stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><message to='a@b/c' from='d@e/f' type='chat' xml:lang='en'><body>Message!</body></message>"
         
     | 
| 
       56 
     | 
    
         
            -
                end
         
     | 
| 
       57 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       58 
     | 
    
         
            -
              end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
              it 'puts itself in the stopped state when unbound' do
         
     | 
| 
       61 
     | 
    
         
            -
                stream = mock_stream do |val|
         
     | 
| 
       62 
     | 
    
         
            -
                  val.must_match(/stream:stream/)
         
     | 
| 
       63 
     | 
    
         
            -
                  stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>"
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                  stream.stopped?.wont_equal true
         
     | 
| 
       66 
     | 
    
         
            -
                  stream.unbind
         
     | 
| 
       67 
     | 
    
         
            -
                  stream.stopped?.must_equal true
         
     | 
| 
       68 
     | 
    
         
            -
                end
         
     | 
| 
       69 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       70 
     | 
    
         
            -
              end
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
              it 'stops when sent </stream:stream>' do
         
     | 
| 
       73 
     | 
    
         
            -
                state = nil
         
     | 
| 
       74 
     | 
    
         
            -
                stream = mock_stream do |val|
         
     | 
| 
       75 
     | 
    
         
            -
                  case state
         
     | 
| 
       76 
     | 
    
         
            -
                  when nil
         
     | 
| 
       77 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       78 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                  when :started
         
     | 
| 
       81 
     | 
    
         
            -
                    stream.stopped?.wont_equal true
         
     | 
| 
       82 
     | 
    
         
            -
                    state = :stopped
         
     | 
| 
       83 
     | 
    
         
            -
                    stream.receive_data "</stream:stream>"
         
     | 
| 
       84 
     | 
    
         
            -
                    true
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
                  when :stopped
         
     | 
| 
       87 
     | 
    
         
            -
                    stream.stopped?.must_equal true
         
     | 
| 
       88 
     | 
    
         
            -
                    val.must_equal "</stream:stream>"
         
     | 
| 
       89 
     | 
    
         
            -
                    true
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                  else
         
     | 
| 
       92 
     | 
    
         
            -
                    false
         
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
                  end
         
     | 
| 
       95 
     | 
    
         
            -
                end
         
     | 
| 
       96 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       97 
     | 
    
         
            -
                stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls' /></stream:features>"
         
     | 
| 
       98 
     | 
    
         
            -
              end
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
              it 'raises an error when it receives stream:error' do
         
     | 
| 
       101 
     | 
    
         
            -
                lambda do
         
     | 
| 
       102 
     | 
    
         
            -
                   state = nil
         
     | 
| 
       103 
     | 
    
         
            -
                   stream = mock_stream do |val|
         
     | 
| 
       104 
     | 
    
         
            -
                     case state
         
     | 
| 
       105 
     | 
    
         
            -
                     when nil
         
     | 
| 
       106 
     | 
    
         
            -
                       val.must_match(/stream:stream/)
         
     | 
| 
       107 
     | 
    
         
            -
                       state = :started
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                     when :started
         
     | 
| 
       110 
     | 
    
         
            -
                       stream.stopped?.wont_equal true
         
     | 
| 
       111 
     | 
    
         
            -
                       state = :stopped
         
     | 
| 
       112 
     | 
    
         
            -
                       stream.receive_data "<stream:error><conflict xmlns='urn:ietf:params:xml:ns:xmpp-streams'/></stream:error>"
         
     | 
| 
       113 
     | 
    
         
            -
                       true
         
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
                     when :stopped
         
     | 
| 
       116 
     | 
    
         
            -
                       stream.stopped?.must_equal true
         
     | 
| 
       117 
     | 
    
         
            -
                       val.must_equal "</stream:stream>"
         
     | 
| 
       118 
     | 
    
         
            -
                       true
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                     else
         
     | 
| 
       121 
     | 
    
         
            -
                       false
         
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
                     end
         
     | 
| 
       124 
     | 
    
         
            -
                   end
         
     | 
| 
       125 
     | 
    
         
            -
                   stream.connection_completed
         
     | 
| 
       126 
     | 
    
         
            -
                   stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls' /></stream:features>"
         
     | 
| 
       127 
     | 
    
         
            -
                 end.must_raise(StreamError)
         
     | 
| 
       128 
     | 
    
         
            -
               end
         
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
              it 'starts TLS when asked' do
         
     | 
| 
       131 
     | 
    
         
            -
                state = nil
         
     | 
| 
       132 
     | 
    
         
            -
                stream = mock_stream do |val|
         
     | 
| 
       133 
     | 
    
         
            -
                  case state
         
     | 
| 
       134 
     | 
    
         
            -
                  when nil
         
     | 
| 
       135 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       136 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
                  when :started
         
     | 
| 
       139 
     | 
    
         
            -
                    val.must_match(/starttls/)
         
     | 
| 
       140 
     | 
    
         
            -
                    true
         
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
                  else
         
     | 
| 
       143 
     | 
    
         
            -
                    false
         
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
                  end
         
     | 
| 
       146 
     | 
    
         
            -
                end
         
     | 
| 
       147 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       148 
     | 
    
         
            -
                stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls' /></stream:features>"
         
     | 
| 
       149 
     | 
    
         
            -
              end
         
     | 
| 
       150 
     | 
    
         
            -
             
     | 
| 
       151 
     | 
    
         
            -
              it 'connects via SASL MD5 when asked' do
         
     | 
| 
       152 
     | 
    
         
            -
                Time.any_instance.stubs(:to_f).returns(1.1)
         
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
                state = nil
         
     | 
| 
       155 
     | 
    
         
            -
                client = mock()
         
     | 
| 
       156 
     | 
    
         
            -
                client.stubs(:jid=)
         
     | 
| 
       157 
     | 
    
         
            -
                stream = MockStream.new client, JID.new('n@d/r'), 'pass'
         
     | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
       159 
     | 
    
         
            -
                stream.expects(:send_data).times(5).with do |val|
         
     | 
| 
       160 
     | 
    
         
            -
                  case state
         
     | 
| 
       161 
     | 
    
         
            -
                  when nil
         
     | 
| 
       162 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       163 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       164 
     | 
    
         
            -
                    stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features>"
         
     | 
| 
       165 
     | 
    
         
            -
                    true
         
     | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
       167 
     | 
    
         
            -
                  when :started
         
     | 
| 
       168 
     | 
    
         
            -
                    val.must_match(/auth.*DIGEST\-MD5/)
         
     | 
| 
       169 
     | 
    
         
            -
                    state = :auth_sent
         
     | 
| 
       170 
     | 
    
         
            -
                    stream.receive_data "<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixxb3A9ImF1dGgiLGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNzCg==</challenge>"
         
     | 
| 
       171 
     | 
    
         
            -
                    true
         
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
                  when :auth_sent
         
     | 
| 
       174 
     | 
    
         
            -
                    val.must_equal('<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">bm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixjaGFyc2V0PXV0Zi04LHVzZXJuYW1lPSJuIixyZWFsbT0ic29tZXJlYWxtIixjbm9uY2U9Ijc3N2Q0NWJiYmNkZjUwZDQ5YzQyYzcwYWQ3YWNmNWZlIixuYz0wMDAwMDAwMSxxb3A9YXV0aCxkaWdlc3QtdXJpPSJ4bXBwL2QiLHJlc3BvbnNlPTZiNTlhY2Q1ZWJmZjhjZTA0NTYzMGFiMDU2Zjg3MTdm</response>')
         
     | 
| 
       175 
     | 
    
         
            -
                    state = :response1_sent
         
     | 
| 
       176 
     | 
    
         
            -
                    stream.receive_data "<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=</challenge>"
         
     | 
| 
       177 
     | 
    
         
            -
                    true
         
     | 
| 
       178 
     | 
    
         
            -
             
     | 
| 
       179 
     | 
    
         
            -
                  when :response1_sent
         
     | 
| 
       180 
     | 
    
         
            -
                    val.must_equal('<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>')
         
     | 
| 
       181 
     | 
    
         
            -
                    state = :response2_sent
         
     | 
| 
       182 
     | 
    
         
            -
                    stream.receive_data "<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>"
         
     | 
| 
       183 
     | 
    
         
            -
                    true
         
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
       185 
     | 
    
         
            -
                  when :response2_sent
         
     | 
| 
       186 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       187 
     | 
    
         
            -
                    state = :complete
         
     | 
| 
       188 
     | 
    
         
            -
                    true
         
     | 
| 
       189 
     | 
    
         
            -
             
     | 
| 
       190 
     | 
    
         
            -
                  else
         
     | 
| 
       191 
     | 
    
         
            -
                    false
         
     | 
| 
       192 
     | 
    
         
            -
             
     | 
| 
       193 
     | 
    
         
            -
                  end
         
     | 
| 
       194 
     | 
    
         
            -
                end
         
     | 
| 
       195 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       196 
     | 
    
         
            -
              end
         
     | 
| 
       197 
     | 
    
         
            -
             
     | 
| 
       198 
     | 
    
         
            -
              it 'will connect via SSL PLAIN when asked' do
         
     | 
| 
       199 
     | 
    
         
            -
                state = nil
         
     | 
| 
       200 
     | 
    
         
            -
                client = mock()
         
     | 
| 
       201 
     | 
    
         
            -
                client.stubs(:jid=)
         
     | 
| 
       202 
     | 
    
         
            -
                stream = MockStream.new client, JID.new('n@d/r'), 'pass'
         
     | 
| 
       203 
     | 
    
         
            -
             
     | 
| 
       204 
     | 
    
         
            -
                stream.expects(:send_data).times(3).with do |val|
         
     | 
| 
       205 
     | 
    
         
            -
                  case state
         
     | 
| 
       206 
     | 
    
         
            -
                  when nil
         
     | 
| 
       207 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       208 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       209 
     | 
    
         
            -
                    stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>PLAIN</mechanism></mechanisms></stream:features>"
         
     | 
| 
       210 
     | 
    
         
            -
                    true
         
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
                  when :started
         
     | 
| 
       213 
     | 
    
         
            -
                    val.must_equal('<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="PLAIN">bkBkAG4AcGFzcw==</auth>')
         
     | 
| 
       214 
     | 
    
         
            -
                    state = :auth_sent
         
     | 
| 
       215 
     | 
    
         
            -
                    stream.receive_data "<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>"
         
     | 
| 
       216 
     | 
    
         
            -
                    true
         
     | 
| 
       217 
     | 
    
         
            -
             
     | 
| 
       218 
     | 
    
         
            -
                  when :auth_sent
         
     | 
| 
       219 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       220 
     | 
    
         
            -
                    state = :complete
         
     | 
| 
       221 
     | 
    
         
            -
                    true
         
     | 
| 
       222 
     | 
    
         
            -
             
     | 
| 
       223 
     | 
    
         
            -
                  else
         
     | 
| 
       224 
     | 
    
         
            -
                    false
         
     | 
| 
       225 
     | 
    
         
            -
             
     | 
| 
       226 
     | 
    
         
            -
                  end
         
     | 
| 
       227 
     | 
    
         
            -
                end
         
     | 
| 
       228 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       229 
     | 
    
         
            -
              end
         
     | 
| 
       230 
     | 
    
         
            -
             
     | 
| 
       231 
     | 
    
         
            -
              it 'will connect via SSL ANONYMOUS when asked' do
         
     | 
| 
       232 
     | 
    
         
            -
                state = nil
         
     | 
| 
       233 
     | 
    
         
            -
                client = mock()
         
     | 
| 
       234 
     | 
    
         
            -
                client.stubs(:jid=)
         
     | 
| 
       235 
     | 
    
         
            -
                stream = MockStream.new client, JID.new('n@d/r'), 'pass'
         
     | 
| 
       236 
     | 
    
         
            -
             
     | 
| 
       237 
     | 
    
         
            -
                stream.expects(:send_data).times(3).with do |val|
         
     | 
| 
       238 
     | 
    
         
            -
                  case state
         
     | 
| 
       239 
     | 
    
         
            -
                  when nil
         
     | 
| 
       240 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       241 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       242 
     | 
    
         
            -
                    stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>ANONYMOUS</mechanism></mechanisms></stream:features>"
         
     | 
| 
       243 
     | 
    
         
            -
                    true
         
     | 
| 
       244 
     | 
    
         
            -
             
     | 
| 
       245 
     | 
    
         
            -
                  when :started
         
     | 
| 
       246 
     | 
    
         
            -
                    val.must_equal('<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="ANONYMOUS">bg==</auth>')
         
     | 
| 
       247 
     | 
    
         
            -
                    state = :auth_sent
         
     | 
| 
       248 
     | 
    
         
            -
                    stream.receive_data "<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>"
         
     | 
| 
       249 
     | 
    
         
            -
                    true
         
     | 
| 
       250 
     | 
    
         
            -
             
     | 
| 
       251 
     | 
    
         
            -
                  when :auth_sent
         
     | 
| 
       252 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       253 
     | 
    
         
            -
                    state = :complete
         
     | 
| 
       254 
     | 
    
         
            -
                    true
         
     | 
| 
       255 
     | 
    
         
            -
             
     | 
| 
       256 
     | 
    
         
            -
                  else
         
     | 
| 
       257 
     | 
    
         
            -
                    false
         
     | 
| 
       258 
     | 
    
         
            -
             
     | 
| 
       259 
     | 
    
         
            -
                  end
         
     | 
| 
       260 
     | 
    
         
            -
                end
         
     | 
| 
       261 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       262 
     | 
    
         
            -
              end
         
     | 
| 
       263 
     | 
    
         
            -
             
     | 
| 
       264 
     | 
    
         
            -
              it 'tried each possible mechanism until it fails completely' do
         
     | 
| 
       265 
     | 
    
         
            -
                state = nil
         
     | 
| 
       266 
     | 
    
         
            -
                client = mock()
         
     | 
| 
       267 
     | 
    
         
            -
                client.stubs(:jid=)
         
     | 
| 
       268 
     | 
    
         
            -
                stream = MockStream.new client, JID.new('n@d/r'), 'pass'
         
     | 
| 
       269 
     | 
    
         
            -
             
     | 
| 
       270 
     | 
    
         
            -
                stream.expects(:send_data).times(5).with do |val|
         
     | 
| 
       271 
     | 
    
         
            -
                  case state
         
     | 
| 
       272 
     | 
    
         
            -
                  when nil
         
     | 
| 
       273 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       274 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       275 
     | 
    
         
            -
                    stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism></mechanisms></stream:features>"
         
     | 
| 
       276 
     | 
    
         
            -
                    true
         
     | 
| 
       277 
     | 
    
         
            -
             
     | 
| 
       278 
     | 
    
         
            -
                  when :started
         
     | 
| 
       279 
     | 
    
         
            -
                    val.must_match(/mechanism="DIGEST-MD5"/)
         
     | 
| 
       280 
     | 
    
         
            -
                    state = :failed_md5
         
     | 
| 
       281 
     | 
    
         
            -
                    stream.receive_data "<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><not-authorized/></failure>"
         
     | 
| 
       282 
     | 
    
         
            -
                    true
         
     | 
| 
       283 
     | 
    
         
            -
             
     | 
| 
       284 
     | 
    
         
            -
                  when :failed_md5
         
     | 
| 
       285 
     | 
    
         
            -
                    val.must_match(/mechanism="PLAIN"/)
         
     | 
| 
       286 
     | 
    
         
            -
                    state = :failed_plain
         
     | 
| 
       287 
     | 
    
         
            -
                    stream.receive_data "<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><not-authorized/></failure>"
         
     | 
| 
       288 
     | 
    
         
            -
                    true
         
     | 
| 
       289 
     | 
    
         
            -
             
     | 
| 
       290 
     | 
    
         
            -
                  when :failed_plain
         
     | 
| 
       291 
     | 
    
         
            -
                    val.must_match(/mechanism="ANONYMOUS"/)
         
     | 
| 
       292 
     | 
    
         
            -
                    state = :failed_anon
         
     | 
| 
       293 
     | 
    
         
            -
                    stream.receive_data "<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><not-authorized/></failure>"
         
     | 
| 
       294 
     | 
    
         
            -
                    true
         
     | 
| 
       295 
     | 
    
         
            -
             
     | 
| 
       296 
     | 
    
         
            -
                  when :failed_anon
         
     | 
| 
       297 
     | 
    
         
            -
                    val.must_match(/\/stream:stream/)
         
     | 
| 
       298 
     | 
    
         
            -
                    state = :complete
         
     | 
| 
       299 
     | 
    
         
            -
                    true
         
     | 
| 
       300 
     | 
    
         
            -
             
     | 
| 
       301 
     | 
    
         
            -
                  else
         
     | 
| 
       302 
     | 
    
         
            -
                    false
         
     | 
| 
       303 
     | 
    
         
            -
             
     | 
| 
       304 
     | 
    
         
            -
                  end
         
     | 
| 
       305 
     | 
    
         
            -
                end
         
     | 
| 
       306 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       307 
     | 
    
         
            -
              end
         
     | 
| 
       308 
     | 
    
         
            -
             
     | 
| 
       309 
     | 
    
         
            -
              it 'tries each mechanism until it succeeds' do
         
     | 
| 
       310 
     | 
    
         
            -
                state = nil
         
     | 
| 
       311 
     | 
    
         
            -
                client = mock()
         
     | 
| 
       312 
     | 
    
         
            -
                client.stubs(:jid=)
         
     | 
| 
       313 
     | 
    
         
            -
                stream = MockStream.new client, JID.new('n@d/r'), 'pass'
         
     | 
| 
       314 
     | 
    
         
            -
             
     | 
| 
       315 
     | 
    
         
            -
                stream.expects(:send_data).times(4).with do |val|
         
     | 
| 
       316 
     | 
    
         
            -
                  case state
         
     | 
| 
       317 
     | 
    
         
            -
                  when nil
         
     | 
| 
       318 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       319 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       320 
     | 
    
         
            -
                    stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism></mechanisms></stream:features>"
         
     | 
| 
       321 
     | 
    
         
            -
                    true
         
     | 
| 
       322 
     | 
    
         
            -
             
     | 
| 
       323 
     | 
    
         
            -
                  when :started
         
     | 
| 
       324 
     | 
    
         
            -
                    val.must_match(/mechanism="DIGEST-MD5"/)
         
     | 
| 
       325 
     | 
    
         
            -
                    state = :failed_md5
         
     | 
| 
       326 
     | 
    
         
            -
                    stream.receive_data "<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><not-authorized/></failure>"
         
     | 
| 
       327 
     | 
    
         
            -
                    true
         
     | 
| 
       328 
     | 
    
         
            -
             
     | 
| 
       329 
     | 
    
         
            -
                  when :failed_md5
         
     | 
| 
       330 
     | 
    
         
            -
                    val.must_match(/mechanism="PLAIN"/)
         
     | 
| 
       331 
     | 
    
         
            -
                    state = :plain_sent
         
     | 
| 
       332 
     | 
    
         
            -
                    stream.receive_data "<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>"
         
     | 
| 
       333 
     | 
    
         
            -
                    true
         
     | 
| 
       334 
     | 
    
         
            -
             
     | 
| 
       335 
     | 
    
         
            -
                  when :plain_sent
         
     | 
| 
       336 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       337 
     | 
    
         
            -
                    state = :complete
         
     | 
| 
       338 
     | 
    
         
            -
                    true
         
     | 
| 
       339 
     | 
    
         
            -
             
     | 
| 
       340 
     | 
    
         
            -
                  else
         
     | 
| 
       341 
     | 
    
         
            -
                    false
         
     | 
| 
       342 
     | 
    
         
            -
             
     | 
| 
       343 
     | 
    
         
            -
                  end
         
     | 
| 
       344 
     | 
    
         
            -
                end
         
     | 
| 
       345 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       346 
     | 
    
         
            -
              end
         
     | 
| 
       347 
     | 
    
         
            -
             
     | 
| 
       348 
     | 
    
         
            -
              it 'raises an exception when an unknown mechanism is sent' do
         
     | 
| 
       349 
     | 
    
         
            -
                state = nil
         
     | 
| 
       350 
     | 
    
         
            -
                client = mock()
         
     | 
| 
       351 
     | 
    
         
            -
                client.stubs(:jid=)
         
     | 
| 
       352 
     | 
    
         
            -
                stream = MockStream.new client, JID.new('n@d/r'), 'pass'
         
     | 
| 
       353 
     | 
    
         
            -
             
     | 
| 
       354 
     | 
    
         
            -
                stream.expects(:send_data).times(2).with do |val|
         
     | 
| 
       355 
     | 
    
         
            -
                  if !state
         
     | 
| 
       356 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       357 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       358 
     | 
    
         
            -
                    lambda do
         
     | 
| 
       359 
     | 
    
         
            -
                      stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>UNKNOWN</mechanism></mechanisms></stream:features>"
         
     | 
| 
       360 
     | 
    
         
            -
                    end.must_raise(Stream::SASL::UnknownMechanism)
         
     | 
| 
       361 
     | 
    
         
            -
             
     | 
| 
       362 
     | 
    
         
            -
                  else
         
     | 
| 
       363 
     | 
    
         
            -
                    val.must_match(/failure(.*)invalid\-mechanism/)
         
     | 
| 
       364 
     | 
    
         
            -
             
     | 
| 
       365 
     | 
    
         
            -
                  end
         
     | 
| 
       366 
     | 
    
         
            -
                end
         
     | 
| 
       367 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       368 
     | 
    
         
            -
              end
         
     | 
| 
       369 
     | 
    
         
            -
             
     | 
| 
       370 
     | 
    
         
            -
              it 'will bind to a resource set by the server' do
         
     | 
| 
       371 
     | 
    
         
            -
                state = nil
         
     | 
| 
       372 
     | 
    
         
            -
                class Client; attr_accessor :jid; end
         
     | 
| 
       373 
     | 
    
         
            -
                client = Client.new
         
     | 
| 
       374 
     | 
    
         
            -
             
     | 
| 
       375 
     | 
    
         
            -
                jid = JID.new('n@d')
         
     | 
| 
       376 
     | 
    
         
            -
                stream = MockStream.new client, jid, 'pass'
         
     | 
| 
       377 
     | 
    
         
            -
             
     | 
| 
       378 
     | 
    
         
            -
                stream.expects(:send_data).times(2).with do |val|
         
     | 
| 
       379 
     | 
    
         
            -
                  case state
         
     | 
| 
       380 
     | 
    
         
            -
                  when nil
         
     | 
| 
       381 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       382 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       383 
     | 
    
         
            -
                    stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/></stream:features>"
         
     | 
| 
       384 
     | 
    
         
            -
                    true
         
     | 
| 
       385 
     | 
    
         
            -
             
     | 
| 
       386 
     | 
    
         
            -
                  when :started
         
     | 
| 
       387 
     | 
    
         
            -
                    val.must_match(%r{<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/>})
         
     | 
| 
       388 
     | 
    
         
            -
                    val =~ %r{<iq[^>]+id="([^"]+)"}
         
     | 
| 
       389 
     | 
    
         
            -
                    state = :complete
         
     | 
| 
       390 
     | 
    
         
            -
                    stream.receive_data "<iq type='result' id='#{$1}'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><jid>#{jid}/server_resource</jid></bind></iq>"
         
     | 
| 
       391 
     | 
    
         
            -
                    client.jid.must_equal JID.new('n@d/server_resource')
         
     | 
| 
       392 
     | 
    
         
            -
                    true
         
     | 
| 
       393 
     | 
    
         
            -
             
     | 
| 
       394 
     | 
    
         
            -
                  else
         
     | 
| 
       395 
     | 
    
         
            -
                    false
         
     | 
| 
       396 
     | 
    
         
            -
             
     | 
| 
       397 
     | 
    
         
            -
                  end
         
     | 
| 
       398 
     | 
    
         
            -
                end
         
     | 
| 
       399 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       400 
     | 
    
         
            -
              end
         
     | 
| 
       401 
     | 
    
         
            -
             
     | 
| 
       402 
     | 
    
         
            -
              it 'will bind to a resource set by the client' do
         
     | 
| 
       403 
     | 
    
         
            -
                state = nil
         
     | 
| 
       404 
     | 
    
         
            -
                class Client; attr_accessor :jid; end
         
     | 
| 
       405 
     | 
    
         
            -
                client = Client.new
         
     | 
| 
       406 
     | 
    
         
            -
             
     | 
| 
       407 
     | 
    
         
            -
                jid = JID.new('n@d/r')
         
     | 
| 
       408 
     | 
    
         
            -
                stream = MockStream.new client, jid, 'pass'
         
     | 
| 
       409 
     | 
    
         
            -
             
     | 
| 
       410 
     | 
    
         
            -
                stream.expects(:send_data).times(2).with do |val|
         
     | 
| 
       411 
     | 
    
         
            -
                  case state
         
     | 
| 
       412 
     | 
    
         
            -
                  when nil
         
     | 
| 
       413 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       414 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       415 
     | 
    
         
            -
                    stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/></stream:features>"
         
     | 
| 
       416 
     | 
    
         
            -
                    true
         
     | 
| 
       417 
     | 
    
         
            -
             
     | 
| 
       418 
     | 
    
         
            -
                  when :started
         
     | 
| 
       419 
     | 
    
         
            -
                    val.must_match(%r{<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>r</resource></bind>})
         
     | 
| 
       420 
     | 
    
         
            -
                    val =~ %r{<iq[^>]+id="([^"]+)"}
         
     | 
| 
       421 
     | 
    
         
            -
                    state = :complete
         
     | 
| 
       422 
     | 
    
         
            -
                    stream.receive_data "<iq type='result' id='#{$1}'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><jid>#{jid}</jid></bind></iq>"
         
     | 
| 
       423 
     | 
    
         
            -
                    client.jid.must_equal JID.new('n@d/r')
         
     | 
| 
       424 
     | 
    
         
            -
                    true
         
     | 
| 
       425 
     | 
    
         
            -
             
     | 
| 
       426 
     | 
    
         
            -
                  else
         
     | 
| 
       427 
     | 
    
         
            -
                    false
         
     | 
| 
       428 
     | 
    
         
            -
             
     | 
| 
       429 
     | 
    
         
            -
                  end
         
     | 
| 
       430 
     | 
    
         
            -
                end
         
     | 
| 
       431 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       432 
     | 
    
         
            -
              end
         
     | 
| 
       433 
     | 
    
         
            -
             
     | 
| 
       434 
     | 
    
         
            -
              it 'will establish a session if requested' do
         
     | 
| 
       435 
     | 
    
         
            -
                state = nil
         
     | 
| 
       436 
     | 
    
         
            -
                client = mock()
         
     | 
| 
       437 
     | 
    
         
            -
                client.stubs(:jid=)
         
     | 
| 
       438 
     | 
    
         
            -
                stream = MockStream.new client, JID.new('n@d/r'), 'pass'
         
     | 
| 
       439 
     | 
    
         
            -
             
     | 
| 
       440 
     | 
    
         
            -
                client.expects(:stream_started)
         
     | 
| 
       441 
     | 
    
         
            -
                stream.expects(:send_data).times(2).with do |val|
         
     | 
| 
       442 
     | 
    
         
            -
                  case state
         
     | 
| 
       443 
     | 
    
         
            -
                  when nil
         
     | 
| 
       444 
     | 
    
         
            -
                    val.must_match(/stream:stream/)
         
     | 
| 
       445 
     | 
    
         
            -
                    state = :started
         
     | 
| 
       446 
     | 
    
         
            -
                    stream.receive_data "<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'><stream:features><session xmlns='urn:ietf:params:xml:ns:xmpp-session'/></stream:features>"
         
     | 
| 
       447 
     | 
    
         
            -
                    true
         
     | 
| 
       448 
     | 
    
         
            -
             
     | 
| 
       449 
     | 
    
         
            -
                  when :started
         
     | 
| 
       450 
     | 
    
         
            -
                    val.must_match('<iq id="[^"]+" type="set" to="d"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq>')
         
     | 
| 
       451 
     | 
    
         
            -
                    state = :completed
         
     | 
| 
       452 
     | 
    
         
            -
                    stream.receive_data "<iq from='d' type='result' id='#{val[/id="([^"]+)"/,1]}'/>"
         
     | 
| 
       453 
     | 
    
         
            -
                    true
         
     | 
| 
       454 
     | 
    
         
            -
             
     | 
| 
       455 
     | 
    
         
            -
                  else
         
     | 
| 
       456 
     | 
    
         
            -
                    false
         
     | 
| 
       457 
     | 
    
         
            -
             
     | 
| 
       458 
     | 
    
         
            -
                  end
         
     | 
| 
       459 
     | 
    
         
            -
                end
         
     | 
| 
       460 
     | 
    
         
            -
                stream.connection_completed
         
     | 
| 
       461 
     | 
    
         
            -
              end
         
     | 
| 
       462 
     | 
    
         
            -
            end
         
     |