void RosterManager::handleSubscription( const Subscription& s10n ) { if( !m_rosterListener ) return; switch( s10n.subtype() ) { case Subscription::Subscribe: { bool answer = m_rosterListener->handleSubscriptionRequest( s10n.from(), s10n.status() ); if( m_syncSubscribeReq ) { ackSubscriptionRequest( s10n.from(), answer ); } break; } case Subscription::Subscribed: { // Subscription p( Subscription::Subscribe, s10n.from().bareJID() ); // m_parent->send( p ); m_rosterListener->handleItemSubscribed( s10n.from() ); break; } case Subscription::Unsubscribe: { Subscription p( Subscription::Unsubscribed, s10n.from().bareJID() ); m_parent->send( p ); bool answer = m_rosterListener->handleUnsubscriptionRequest( s10n.from(), s10n.status() ); if( m_syncSubscribeReq && answer ) remove( s10n.from().bare() ); break; } case Subscription::Unsubscribed: { // Subscription p( Subscription::Unsubscribe, s10n.from().bareJID() ); // m_parent->send( p ); m_rosterListener->handleItemUnsubscribed( s10n.from() ); break; } default: break; } }
int main( int /*argc*/, char** /*argv*/ ) { int fail = 0; std::string name; Tag *s10n = new Tag( "presence" ); s10n->addAttribute( "from", "[email protected]/gloox" ); s10n->addAttribute( "to", "[email protected]/gloox" ); new Tag( s10n, "status", "the status" ); Subscription* i = 0; // ------- name = "parse Subscription subscribe"; s10n->addAttribute( "type", "subscribe" ); i = new Subscription( s10n ); if( i->subtype() != Subscription::Subscribe || i->from().full() != "[email protected]/gloox" || i->to().full() != "[email protected]/gloox" || i->status() != "the status" ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete i; i = 0; // ------- name = "parse Subscription subscribed"; s10n->addAttribute( "type", "subscribed" ); i = new Subscription( s10n ); if( i->subtype() != Subscription::Subscribed || i->from().full() != "[email protected]/gloox" || i->to().full() != "[email protected]/gloox" || i->status() != "the status" ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete i; i = 0; // ------- name = "parse Subscription unsubscribe"; s10n->addAttribute( "type", "unsubscribe" ); i = new Subscription( s10n ); if( i->subtype() != Subscription::Unsubscribe || i->from().full() != "[email protected]/gloox" || i->to().full() != "[email protected]/gloox" || i->status() != "the status" ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete i; i = 0; // ------- name = "parse Subscription unsubscribed"; s10n->addAttribute( "type", "unsubscribed" ); i = new Subscription( s10n ); if( i->subtype() != Subscription::Unsubscribed || i->from().full() != "[email protected]/gloox" || i->to().full() != "[email protected]/gloox" || i->status() != "the status" ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete i; i = 0; // ------- { name = "new simple Subscription subscribe"; Subscription s( Subscription::Subscribe, JID( "[email protected]/blah" ), "the status", "the xmllang" ); s.setFrom( JID( "*****@*****.**" ) ); Tag* i = s.tag(); if( i->name() != "presence" || !i->hasAttribute( "type", "subscribe" ) || !i->hasAttribute( "to", "[email protected]/blah" ) || !i->hasAttribute( "from", "*****@*****.**" ) || !i->hasChildWithCData( "status", "the status" ) || !i->hasChild( "status", "xml:lang", "the xmllang" ) ) { ++fail; fprintf( stderr, "test '%s' failed: %s\n", name.c_str(), i->xml().c_str() ); } delete i; } // ------- { name = "new simple Subscription subscribed"; Subscription s( Subscription::Subscribed, JID( "[email protected]/blah" ), "the status", "the xmllang" ); s.setFrom( JID( "*****@*****.**" ) ); Tag* i = s.tag(); if( i->name() != "presence" || !i->hasAttribute( "type", "subscribed" ) || !i->hasAttribute( "to", "[email protected]/blah" ) || !i->hasAttribute( "from", "*****@*****.**" ) || !i->hasChildWithCData( "status", "the status" ) || !i->hasChild( "status", "xml:lang", "the xmllang" ) ) { ++fail; fprintf( stderr, "test '%s' failed: %s\n", name.c_str(), i->xml().c_str() ); } delete i; } // ------- { name = "new simple Subscription unsubscribe"; Subscription s( Subscription::Unsubscribe, JID( "[email protected]/blah" ), "the status", "the xmllang" ); s.setFrom( JID( "*****@*****.**" ) ); Tag* i = s.tag(); if( i->name() != "presence" || !i->hasAttribute( "type", "unsubscribe" ) || !i->hasAttribute( "to", "[email protected]/blah" ) || !i->hasAttribute( "from", "*****@*****.**" ) || !i->hasChildWithCData( "status", "the status" ) || !i->hasChild( "status", "xml:lang", "the xmllang" ) ) { ++fail; fprintf( stderr, "test '%s' failed: %s\n", name.c_str(), i->xml().c_str() ); } delete i; } // ------- { name = "new simple Subscription unsubscribed"; Subscription s( Subscription::Unsubscribed, JID( "[email protected]/blah" ), "the status", "the xmllang" ); s.setFrom( JID( "*****@*****.**" ) ); Tag* i = s.tag(); if( i->name() != "presence" || !i->hasAttribute( "type", "unsubscribed" ) || !i->hasAttribute( "to", "[email protected]/blah" ) || !i->hasAttribute( "from", "*****@*****.**" ) || !i->hasChildWithCData( "status", "the status" ) || !i->hasChild( "status", "xml:lang", "the xmllang" ) ) { ++fail; fprintf( stderr, "test '%s' failed: %s\n", name.c_str(), i->xml().c_str() ); } delete i; } delete s10n; s10n = 0; if( fail == 0 ) { printf( "Subscription: OK\n" ); return 0; } else { fprintf( stderr, "Subscription: %d test(s) failed\n", fail ); return 1; } }