1 /**
2 * Whiteboard session manager
3 * Jabber message handling
4 *
5 * Authors:
6 * David Yip <yipdw@rose-hulman.edu>
7 * Steven Montgomery, Jonas Collaros (original C version)
8 *
9 * Copyright (c) 2004-2005 Authors
10 *
11 * Released under GNU GPL, read the file 'COPYING' for more information
12 */
14 #ifndef __WHITEBOARD_MESSAGE_HANDLER_H__
15 #define __WHITEBOARD_MESSAGE_HANDLER_H__
17 extern "C" {
18 #include <loudmouth/loudmouth.h>
19 }
21 #include "jabber_whiteboard/defines.h"
22 #include "jabber_whiteboard/typedefs.h"
23 #include "jabber_whiteboard/message-contexts.h"
25 namespace Inkscape {
27 namespace Whiteboard {
29 struct JabberMessage;
30 class SessionManager;
32 /**
33 * Handles received Jabber messages.
34 */
35 class MessageHandler {
36 public:
37 MessageHandler(SessionManager* sm);
38 ~MessageHandler();
39 LmHandlerResult handle(LmMessage* message, HandlerMode mode);
41 bool _hasValidReceiveContext(LmMessage* message);
43 static char const* ink_type_to_string(gint ink_type);
45 private:
46 static void _initializeContexts();
48 void _initializeProcessors();
49 void _destructProcessors();
51 // Utilities
52 bool _isValidMessage(LmMessage* message);
53 MessageType _getType(LmMessage* message);
54 struct JabberMessage _extractData(LmMessage* message);
57 // Individual message handlers
58 LmHandlerResult _default(LmMessage* message);
59 LmHandlerResult _error(LmMessage* message);
60 LmHandlerResult _presence(LmMessage* message);
62 // Message processors map
63 // MessageContextMap _received_message_contexts;
64 MessageProcessorMap _received_message_processors;
66 SessionManager* _sm;
68 // noncopyable, nonassignable
69 MessageHandler(MessageHandler const&);
70 MessageHandler& operator=(MessageHandler const&);
71 };
73 }
75 }
77 #endif
79 /*
80 Local Variables:
81 mode:c++
82 c-file-style:"stroustrup"
83 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
84 indent-tabs-mode:nil
85 fill-column:99
86 End:
87 */
88 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :