From 01cb5e02e9cdeb0e54873caa419ac76131e18c24 Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 26 Nov 2013 20:59:25 -0500 Subject: [PATCH] delivery type Destination for garlic cloves --- Garlic.cpp | 14 ++++++++++++-- LeaseSet.h | 2 ++ RouterInfo.cpp | 2 ++ RouterInfo.h | 4 +++- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Garlic.cpp b/Garlic.cpp index b5586590..d1c580cd 100644 --- a/Garlic.cpp +++ b/Garlic.cpp @@ -95,8 +95,18 @@ namespace garlic size_t size = 0; payload[size] = 1; // 1 clove size++; - payload[size] = 0;// delivery instructions flag - size++; + if (m_Destination->IsDestination ()) + { + payload[size] = eGarlicDeliveryTypeDestination << 5;// delivery instructions flag destination + size++; + memcpy (payload + size, m_Destination->GetIdentHash (), 32); + size += 32; + } + else + { + payload[size] = 0;// delivery instructions flag local + size++; + } memcpy (payload + size, msg->GetBuffer (), msg->GetLength ()); size += msg->GetLength (); *(uint32_t *)(payload + size) = htobe32 (m_Rnd.GenerateWord32 ()); // CloveID diff --git a/LeaseSet.h b/LeaseSet.h index 1b9f445d..0d5afff0 100644 --- a/LeaseSet.h +++ b/LeaseSet.h @@ -22,6 +22,7 @@ namespace data public: virtual const uint8_t * GetIdentHash () const = 0; virtual const uint8_t * GetEncryptionPublicKey () const = 0; + virtual bool IsDestination () const = 0; // for garlic }; class LeaseSet: public RoutingDestination @@ -33,6 +34,7 @@ namespace data // implements RoutingDestination const uint8_t * GetIdentHash () const { return m_IdentHash; }; const uint8_t * GetEncryptionPublicKey () const { return m_EncryptionKey; }; + bool IsDestination () const { return true; }; private: diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 94bdc44b..efc6a5bd 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -126,6 +126,8 @@ namespace data CryptoPP::SHA256().CalculateDigest(m_IdentHash, (uint8_t *)&m_RouterIdentity, sizeof (m_RouterIdentity)); size_t l = i2p::data::ByteStreamToBase64 (m_IdentHash, 32, m_IdentHashBase64, 48); m_IdentHashBase64[l] = 0; + memcpy (m_IdentHashAbbreviation, m_IdentHashBase64, 4); + m_IdentHashAbbreviation[4] = 0; } void RouterInfo::WriteToStream (std::ostream& s) diff --git a/RouterInfo.h b/RouterInfo.h index 774a25bb..4507ce17 100644 --- a/RouterInfo.h +++ b/RouterInfo.h @@ -52,6 +52,7 @@ namespace data const RouterIdentity& GetRouterIdentity () const { return m_RouterIdentity; }; void SetRouterIdentity (const RouterIdentity& identity); const char * GetIdentHashBase64 () const { return m_IdentHashBase64; }; + const char * GetIdentHashAbbreviation () const { return m_IdentHashAbbreviation; }; const std::vector
& GetAddresses () const { return m_Addresses; }; Address * GetNTCPAddress (); @@ -71,6 +72,7 @@ namespace data // implements RoutingDestination const uint8_t * GetIdentHash () const { return m_IdentHash; }; const uint8_t * GetEncryptionPublicKey () const { return m_RouterIdentity.publicKey; }; + bool IsDestination () const { return false; }; private: @@ -85,7 +87,7 @@ namespace data RouterIdentity m_RouterIdentity; uint8_t m_IdentHash[32]; - char m_IdentHashBase64[48]; + char m_IdentHashBase64[48], m_IdentHashAbbreviation[5]; char m_Buffer[2048]; int m_BufferLen; uint64_t m_Timestamp;