Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | Related Pages

messagesession.cpp

00001 /*
00002   Copyright (c) 2005-2008 by Jakob Schroeter <js@camaya.net>
00003   This file is part of the gloox library. http://camaya.net/gloox
00004 
00005   This software is distributed under a license. The full license
00006   agreement can be found in the file LICENSE in this distribution.
00007   This software may not be copied, modified, sold or distributed
00008   other than expressed in the named license agreement.
00009 
00010   This software is distributed without any warranty.
00011 */
00012 
00013 #include "messagesession.h"
00014 #include "messagefilter.h"
00015 #include "messagehandler.h"
00016 #include "clientbase.h"
00017 #include "disco.h"
00018 #include "message.h"
00019 #include "util.h"
00020 
00021 namespace gloox
00022 {
00023 
00024   MessageSession::MessageSession( ClientBase* parent, const JID& jid, bool wantUpgrade, int types )
00025     : m_parent( parent ), m_target( jid ), m_messageHandler( 0 ),
00026       m_types( types ), m_wantUpgrade( wantUpgrade ), m_hadMessages( false )
00027   {
00028     if( m_parent )
00029       m_parent->registerMessageSession( this );
00030   }
00031 
00032   MessageSession::~MessageSession()
00033   {
00034 //     util::clearList( m_messageFilterList );
00035     // FIXME
00036     MessageFilterList::iterator it = m_messageFilterList.begin();
00037     MessageFilterList::iterator it2;
00038     while( it != m_messageFilterList.end() )
00039     {
00040       it2 = it++;
00041       delete (*it2);
00042       m_messageFilterList.erase( it2 );
00043     }
00044     // ~
00045   }
00046 
00047   void MessageSession::handleMessage( Message& msg )
00048   {
00049     printf( "MessageSession::handleMessage\n" );
00050     if( m_wantUpgrade && msg.from().bare() == m_target.full() )
00051       setResource( msg.from().resource() );
00052 
00053     if( !m_hadMessages )
00054     {
00055       m_hadMessages = true;
00056       if( msg.thread().empty() )
00057       {
00058         m_thread = "gloox" + m_parent->getID();
00059         msg.setThread( m_thread );
00060       }
00061       else
00062         m_thread = msg.thread();
00063     }
00064 
00065     MessageFilterList::const_iterator it = m_messageFilterList.begin();
00066     for( ; it != m_messageFilterList.end(); ++it )
00067     {
00068       (*it)->filter( msg );
00069     }
00070 printf( "body: %s\n", msg.body().c_str() );
00071 if( !m_messageHandler )
00072   printf( "got no m_messageHandler\n ");
00073     if( m_messageHandler && !msg.body().empty() )
00074     {
00075       printf( "calling messagehandler\n" );
00076       m_messageHandler->handleMessage( msg, this );
00077     }
00078   }
00079 
00080   void MessageSession::send( const std::string& message, const std::string& subject )
00081   {
00082     if( !m_hadMessages )
00083     {
00084       m_thread = "gloox" + m_parent->getID();
00085       m_hadMessages = true;
00086     }
00087 
00088     Message m( Message::Chat, m_target.full(), message, subject, m_thread );
00089     m.setID( m_parent->getID() );
00090     decorate( m );
00091     m_parent->send( m );
00092   }
00093 
00094   void MessageSession::send( const Message& msg )
00095   {
00096     m_parent->send( msg );
00097   }
00098 
00099   void MessageSession::decorate( Message& msg )
00100   {
00101     util::ForEach( m_messageFilterList, &MessageFilter::decorate, msg );
00102   }
00103 
00104   void MessageSession::resetResource()
00105   {
00106     m_wantUpgrade = true;
00107     m_target.setResource( EmptyString );
00108   }
00109 
00110   void MessageSession::setResource( const std::string& resource )
00111   {
00112     m_target.setResource( resource );
00113   }
00114 
00115   void MessageSession::disposeMessageFilter( MessageFilter* mf )
00116   {
00117     removeMessageFilter( mf );
00118     delete mf;
00119   }
00120 
00121 }

Generated on Mon Sep 1 09:25:10 2008 for gloox by  doxygen 1.4.1