Index: HashDescriptors.cpp =================================================================== --- HashDescriptors.cpp (revision 5537) +++ HashDescriptors.cpp (working copy) @@ -33,40 +33,43 @@ { const UrnString Sha1Descriptor::urns[ Sha1Descriptor::numUrns ] = { - { 32 + 9, 9, 9, L"urn:sha1:" }, - { 32 + 5, 5, 5, L"sha1:" }, - { 85, 13,13, L"urn:bitprint:" }, - { 81, 9, 9, L"bitprint:" } + { 40 + 9, 9, 9, L"urn:sha1:", base16Encoding }, + { 40 + 5, 5, 5, L"sha1:", base16Encoding }, + + { 32 + 9, 9, 9, L"urn:sha1:", base32Encoding }, + { 32 + 5, 5, 5, L"sha1:", base32Encoding }, + { 85, 13,13, L"urn:bitprint:", base32Encoding }, + { 81, 9, 9, L"bitprint:", base32Encoding } }; const UrnString TigerDescriptor::urns[ TigerDescriptor::numUrns ] = { - { 39 + 16, 16, 16, L"urn:tree:tiger/:" }, - { 39 + 12, 12, 12, L"tree:tiger/:" }, - { 85, 46, 13, L"urn:bitprint:" }, - { 81, 42, 9, L"bitprint:" }, - { 39 + 15, 15, 15, L"urn:tree:tiger:" }, - { 39 + 11, 11, 11, L"tree:tiger:" } + { 39 + 16, 16, 16, L"urn:tree:tiger/:", base32Encoding }, + { 39 + 12, 12, 12, L"tree:tiger/:", base32Encoding }, + { 85, 46, 13, L"urn:bitprint:", base32Encoding }, + { 81, 42, 9, L"bitprint:", base32Encoding }, + { 39 + 15, 15, 15, L"urn:tree:tiger:", base32Encoding }, + { 39 + 11, 11, 11, L"tree:tiger:", base32Encoding } }; const UrnString Ed2kDescriptor::urns[ Ed2kDescriptor::numUrns ] = { - { 32 + 13, 13, 13, L"urn:ed2khash:" }, - { 32 + 5, 5, 5, L"ed2k:" }, - { 32 + 9, 9, 9, L"urn:ed2k:" }, - { 32 + 9, 9, 9, L"ed2khash:" } + { 32 + 13, 13, 13, L"urn:ed2khash:", base16Encoding }, + { 32 + 5, 5, 5, L"ed2k:", base16Encoding }, + { 32 + 9, 9, 9, L"urn:ed2k:", base16Encoding }, + { 32 + 9, 9, 9, L"ed2khash:", base16Encoding } }; const UrnString Md5Descriptor::urns[ Md5Descriptor::numUrns ] = { - { 32 + 8, 8, 8, L"urn:md5:" }, - { 32 + 4, 4, 4, L"md5:" } + { 32 + 8, 8, 8, L"urn:md5:", base16Encoding }, + { 32 + 4, 4, 4, L"md5:", base16Encoding } }; const UrnString BthDescriptor::urns[ BthDescriptor::numUrns ] = { - { 32 + 9, 9, 9, L"urn:btih:" }, - { 32 + 5, 5, 5, L"btih:" } + { 32 + 9, 9, 9, L"urn:btih:", base32Encoding }, + { 32 + 5, 5, 5, L"btih:", base32Encoding } }; } // namespace Policies Index: Hash.hpp =================================================================== --- Hash.hpp (revision 5537) +++ Hash.hpp (working copy) @@ -192,7 +192,14 @@ && _tcsnicmp( input, urns[ i ].signature, urns[ i ].signatureLength ) == 0 ) { - return fromString( input + urns[ i ].hashOffset ); + if ( urns[ i ].encoding == base32Encoding ) + { + return fromString< base32Encoding >( input + urns[ i ].hashOffset ); + } + else if ( urns[ i ].encoding == base16Encoding ) + { + return fromString< base16Encoding >( input + urns[ i ].hashOffset ); + } } } return false; Index: HashDescriptors.hpp =================================================================== --- HashDescriptors.hpp (revision 5537) +++ HashDescriptors.hpp (working copy) @@ -74,6 +74,8 @@ //! A pointer to the urn prefix (should be a string literal). //! const wchar* signature; + + Encoding encoding; }; //! \brief A model of \ref hashdescriptorpage "Hash Descriptor" for //! SHA1 hashes. @@ -86,7 +88,7 @@ typedef uint32 WordType; static const size_t wordCount = 5; static const size_t byteCount = wordCount * sizeof( WordType ); - static const size_t numUrns = 4; + static const size_t numUrns = 6; static const UrnString urns[ numUrns ]; static const Encoding encoding = base32Encoding; typedef boost::array< uchar, byteCount > RawStorage;