messagesession.cpp

00001 /*
00002   Copyright (c) 2005-2006 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 
00014 #include "messagesession.h"
00015 
00016 #include "messagefilter.h"
00017 #include "clientbase.h"
00018 #include "client.h"
00019 #include "disco.h"
00020 #include "stanza.h"
00021 #include "tag.h"
00022 
00023 namespace gloox
00024 {
00025 
00026   MessageSession::MessageSession( ClientBase *parent, const JID& jid )
00027     : m_parent( parent ), m_target( jid ), m_messageHandler( 0 )
00028   {
00029     if( m_parent )
00030       m_parent->registerMessageHandler( m_target.full(), this );
00031 
00032     m_thread = "gloox" + m_parent->getID();
00033   }
00034 
00035   MessageSession::~MessageSession()
00036   {
00037     if( m_parent )
00038       m_parent->removeMessageHandler( m_target.full() );
00039   }
00040 
00041   void MessageSession::handleMessage( Stanza *stanza )
00042   {
00043     MessageFilterList::const_iterator it = m_messageFilterList.begin();
00044     for( ; it != m_messageFilterList.end(); ++it )
00045     {
00046       (*it)->filter( stanza );
00047     }
00048 
00049     if( !m_messageHandler || stanza->body().empty() )
00050       return;
00051     else
00052       m_messageHandler->handleMessage( stanza );
00053   }
00054 
00055   void MessageSession::send( const std::string& message, const std::string& subject )
00056   {
00057     Tag *m = new Tag( "message" );
00058     m->addAttribute( "type", "chat" );
00059     new Tag( m, "body", message );
00060     if( !subject.empty() )
00061       new Tag( m, "subject", subject );
00062 
00063     m->addAttribute( "from", m_parent->jid().full() );
00064     m->addAttribute( "to", m_target.full() );
00065     new Tag( m, "thread", m_thread );
00066 
00067     MessageFilterList::const_iterator it = m_messageFilterList.begin();
00068     for( ; it != m_messageFilterList.end(); ++it )
00069     {
00070       (*it)->decorate( m );
00071     }
00072 
00073     m_parent->send( m );
00074   }
00075 
00076   void MessageSession::send( Tag *tag )
00077   {
00078     m_parent->send( tag );
00079   }
00080 
00081   void MessageSession::registerMessageHandler( MessageHandler *mh )
00082   {
00083     m_messageHandler = mh;
00084   }
00085 
00086   void MessageSession::removeMessageHandler()
00087   {
00088     m_messageHandler = 0;
00089   }
00090 
00091   void MessageSession::registerMessageFilter( MessageFilter *mf )
00092   {
00093     m_messageFilterList.push_back( mf );
00094   }
00095 
00096   void MessageSession::removeMessageFilter( MessageFilter *mf )
00097   {
00098     m_messageFilterList.remove( mf );
00099   }
00100 
00101 }

Generated on Sun Sep 24 21:57:32 2006 for gloox by  doxygen 1.4.7