1 // 2 // This file is part of the aMule Project. 3 // 4 // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) 5 // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) 6 // 7 // Any parts of this program derived from the xMule, lMule or eMule project, 8 // or contributed by third-party developers are copyrighted by their 9 // respective authors. 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 // This program is distributed in the hope that it will be useful, 17 // but WITHOUT ANY WARRANTY; without even the implied warranty of 18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 // GNU General Public License for more details. 20 // 21 // You should have received a copy of the GNU General Public License 22 // along with this program; if not, write to the Free Software 23 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 24 // 25 26 #ifndef ED2KLINK_H 27 #define ED2KLINK_H 28 29 30 #include "MD4Hash.h" // Needed for CMD4Hash 31 #include "SHAHashSet.h" // Needed for CAICHHash 32 33 34 35 class CMemFile; 36 37 38 class CED2KLink 39 { 40 public: 41 typedef enum { kServerList, kServer , kFile , kInvalid } LinkType; 42 43 static CED2KLink* CreateLinkFromUrl(const wxString& link); 44 45 LinkType GetKind() const; 46 virtual wxString GetLink() const = 0; 47 48 virtual ~CED2KLink(); 49 50 protected: 51 CED2KLink( LinkType type ); 52 53 private: 54 LinkType m_type; 55 }; 56 57 58 class CED2KFileLink : public CED2KLink 59 { 60 friend class CED2KLink; 61 CED2KFileLink(const wxString& link); 62 63 public: 64 virtual ~CED2KFileLink(); 65 66 virtual wxString GetLink() const; 67 68 wxString GetName() const; 69 uint64 GetSize() const; 70 const CMD4Hash& GetHashKey() const; 71 72 // AICH data 73 bool HasValidAICHHash() const; 74 const CAICHHash& GetAICHHash() const; 75 76 CMemFile* m_hashset; 77 78 /** 79 * Structure used to store sources found in file links. 80 */ 81 struct SED2KLinkSource 82 { 83 //! Hostname or dot-address. 84 wxString addr; 85 //! The source's TCP-port. 86 uint16 port; 87 //! Client hash for encryption 88 wxString hash; 89 //! Client cryptoptions 90 uint8 cryptoptions; 91 }; 92 93 typedef std::deque<SED2KLinkSource> CED2KLinkSourceList; 94 CED2KLinkSourceList m_sources; 95 96 private: 97 CED2KFileLink(); // Not defined 98 CED2KFileLink(const CED2KFileLink&); // Not defined 99 CED2KFileLink& operator=(const CED2KFileLink&); // Not defined 100 101 wxString m_name; 102 uint64 m_size; 103 CMD4Hash m_hash; 104 bool m_bAICHHashValid; 105 CAICHHash m_AICHHash; 106 }; 107 108 109 class CED2KServerLink : public CED2KLink 110 { 111 friend class CED2KLink; 112 CED2KServerLink(const wxString& link); 113 114 public: 115 virtual wxString GetLink() const; 116 117 uint32 GetIP() const; 118 uint16 GetPort() const; 119 120 private: 121 CED2KServerLink(); // Not defined 122 CED2KServerLink(const CED2KServerLink&); // Not defined 123 CED2KServerLink& operator=(const CED2KServerLink&); // Not defined 124 125 uint32 m_ip; 126 uint16 m_port; 127 }; 128 129 130 class CED2KServerListLink : public CED2KLink 131 { 132 friend class CED2KLink; 133 CED2KServerListLink(const wxString& link); 134 135 public: 136 virtual wxString GetLink() const; 137 138 const wxString& GetAddress() const; 139 140 private: 141 CED2KServerListLink(); // Not defined 142 CED2KServerListLink(const CED2KFileLink&); // Not defined 143 CED2KServerListLink& operator=(const CED2KFileLink&); // Not defined 144 145 wxString m_address; 146 }; 147 148 149 #endif 150 // File_checked_for_headers 151