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