1 /***************************************************************************
2                           cmessagehandler.h  -  description
3                              -------------------
4     begin                : Sun Sep 30 2001
5     copyright            : (C) 2001-2003 by Mathias Küster
6     email                : mathen@users.berlios.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  ***************************************************************************/
17 
18 #ifndef CMESSAGEHANDLER_H
19 #define CMESSAGEHANDLER_H
20 
21 /**
22   *@author Mathias Küster
23   *
24   * This parses protocol strings and returns dclib objects.
25   *
26   * This always handles all protocol commands, although
27   * some commands may only make sense for peer or hub connections,
28   * or when those connections are in certain states.
29   *
30   * Also there may be some coding by copy and paste, since
31   * some commands have the same content e.g. $ADCGET / $ADCSND.
32   *
33   * There are various legacy commands parsed, plus the protocol is
34   * somewhat undefined, mostly anything unknown from the hub must be
35   * shown as chat, what strings hubs are supposed to return in their
36   * Supports response was apparently left open to interpretation,
37   * some of the parameters for UserCommand may be optional although
38   * they shouldn't be e.g. spacers without names.
39   *
40   * DC++ does not use LogedIn, so it should not be used.
41   */
42 
43 #include <dclib/dcos.h>
44 #include <dclib/dcobject.h>
45 #include <dclib/core/cstring.h>
46 
47 class CIconv;
48 
49 class CMessageHandler {
50 public:
51 	/** */
52 	CMessageHandler( CString remoteEncoding = CString() );
53 	/** */
54 	virtual ~CMessageHandler();
55 
56 	/** */
57 	eDCMessage Parse( const CString * sMessage, int & pointer, CDCMessage ** DCMessage );
58 
59 private:
60 	/** */
61 	bool GetContent( const CString sMessage, const CString * sData, CString & sContent );
62 
63 	/** */
64 	CDCMessage * ParseLock( const CString & sContent );
65 	/** */
66 	CDCMessage * ParseHello( const CString & sContent );
67 	/** */
68 	CDCMessage * ParseMyNick( const CString & sContent );
69 	/** */
70 	CDCMessage * ParseChat( const CString & sContent );
71 	/** */
72 	CDCMessage * ParseMyInfo( const CString & sContent );
73 	/** */
74 	CDCMessage * ParseNickList( const CString & sContent );
75 	/** */
76 	CDCMessage * ParseOpList( const CString & sContent );
77 	/** */
78 	CDCMessage * ParseConnectToMe( const CString & sContent );
79 	/** */
80 	CDCMessage * ParseRevConnectToMe( const CString & sContent );
81 	/** */
82 	CDCMessage * ParseQuit( const CString & sContent );
83 	/** */
84 	CDCMessage * ParseSearch( const CString & sContent );
85 	/** */
86 	CDCMessage * ParseSearchResult( const CString & sContent );
87 	/** */
88 	CDCMessage * ParseSearchResultFile( const CString & sContent );
89 	/** */
90 	CDCMessage * ParseSearchResultFolder( const CString & sContent );
91 	/** */
92 	CDCMessage * ParsePrivateChat( const CString & sContent );
93 	/** */
94 	CDCMessage * ParseForceMove( const CString & sContent );
95 	/** */
96 	CDCMessage * ParseDirection( const CString & sContent );
97 	/** */
98 	CDCMessage * ParseFileLength( const CString & sContent );
99 	/** */
100 	CDCMessage * ParseGet( const CString & sContent );
101 	/** */
102 	CDCMessage * ParseUGetBlock( const CString & sContent );
103 	/** */
104 	CDCMessage * ParseUGetZBlock( const CString & sContent );
105 	/** */
106 	CDCMessage * ParseError( const CString & sContent );
107 	/** */
108 	CDCMessage * ParseGetInfo( const CString & sContent );
109 	/** */
110 	CDCMessage * ParseHubName( const CString & sContent );
111 	/** */
112 	CDCMessage * ParseLogedIn( CString sContent );
113 	/** */
114 	CDCMessage * ParseSupports( CString sContent );
115 	/** */
116 	CDCMessage * ParseHubTopic( const CString & sContent );
117 	/** */
118 	CDCMessage * ParseUserCommand( const CString & sContent );
119 	/** */
120 	CDCMessage * ParseGetZBlock( const CString & sContent );
121 	/** */
122 	CDCMessage * ParseSending( const CString & sContent );
123 	/** */
124 	CDCMessage * ParseADCGet( const CString & sContent );
125 	/** */
126 	CDCMessage * ParseADCSnd( const CString & sContent );
127 	/** Parse UserIP message */
128 	CDCMessage * ParseUserIP( CString sContent );
129 
130 	/** CIconv object for doing text encoding remote to local */
131 	CIconv * m_pRemoteToLocal;
132 	/** CIconv object for doing UTF-8 to local for certain commands */
133 	CIconv * m_pUTF8ToLocal;
134 };
135 
136 #endif
137