Merge pull request #6 from mikhail4021/master

adding Windows support
pull/7/head
orignal 11 years ago
commit fd84226bd2

@ -1,5 +1,5 @@
#include <inttypes.h>
#include <endian.h>
#include "I2PEndian.h"
#include <map>
#include <string>
#include "ElGamal.h"

@ -1,5 +1,5 @@
#include <string.h>
#include <endian.h>
#include "I2PEndian.h"
#include <cryptopp/sha.h>
#include <cryptopp/modes.h>
#include <cryptopp/aes.h>

@ -0,0 +1,81 @@
#include "I2PEndian.h"
// http://habrahabr.ru/post/121811/
// http://codepad.org/2ycmkz2y
#include "LittleBigEndian.h"
uint16_t htobe16(uint16_t int16)
{
BigEndian<uint16_t> u16(int16);
return u16.raw_value;
}
uint32_t htobe32(uint32_t int32)
{
BigEndian<uint32_t> u32(int32);
return u32.raw_value;
}
uint64_t htobe64(uint64_t int64)
{
BigEndian<uint64_t> u64(int64);
return u64.raw_value;
}
uint16_t be16toh(uint16_t big16)
{
LittleEndian<uint16_t> u16(big16);
return u16.raw_value;
}
uint32_t be32toh(uint32_t big32)
{
LittleEndian<uint32_t> u32(big32);
return u32.raw_value;
}
uint64_t be64toh(uint64_t big64)
{
LittleEndian<uint64_t> u64(big64);
return u64.raw_value;
}
/* it can be used in Windows 8
#include <Winsock2.h>
uint16_t htobe16(uint16_t int16)
{
return htons(int16);
}
uint32_t htobe32(uint32_t int32)
{
return htonl(int32);
}
uint64_t htobe64(uint64_t int64)
{
// http://msdn.microsoft.com/en-us/library/windows/desktop/jj710199%28v=vs.85%29.aspx
//return htonll(int64);
return 0;
}
uint16_t be16toh(uint16_t big16)
{
return ntohs(big16);
}
uint32_t be32toh(uint32_t big32)
{
return ntohl(big32);
}
uint64_t be64toh(uint64_t big64)
{
// http://msdn.microsoft.com/en-us/library/windows/desktop/jj710199%28v=vs.85%29.aspx
//return ntohll(big64);
return 0;
}
*/

@ -0,0 +1,19 @@
#ifndef I2PENDIAN_H__
#define I2PENDIAN_H__
#ifndef _WIN32
#include <endian.h>
#else
#include <cstdint>
uint16_t htobe16(uint16_t int16);
uint32_t htobe32(uint32_t int32);
uint64_t htobe64(uint64_t int64);
uint16_t be16toh(uint16_t big16);
uint32_t be32toh(uint32_t big32);
uint64_t be64toh(uint64_t big64);
#endif
#endif // I2PENDIAN_H__

@ -35,11 +35,15 @@ namespace data
IdentHash (const uint8_t * hash) { memcpy (m_Hash, hash, 32); };
IdentHash (const IdentHash& ) = default;
#ifndef _WIN32 // FIXME!!! msvs 2013 can't compile it
IdentHash (IdentHash&& ) = default;
#endif
IdentHash () = default;
IdentHash& operator= (const IdentHash& ) = default;
#ifndef _WIN32
IdentHash& operator= (IdentHash&& ) = default;
#endif
uint8_t * operator()() { return m_Hash; };
const uint8_t * operator()() const { return m_Hash; };

@ -0,0 +1,242 @@
// LittleBigEndian.h fixed for 64-bits added union
//
#ifndef LITTLEBIGENDIAN_H
#define LITTLEBIGENDIAN_H
// Determine Little-Endian or Big-Endian
#define CURRENT_BYTE_ORDER (*(int *)"\x01\x02\x03\x04")
#define LITTLE_ENDIAN_BYTE_ORDER 0x04030201
#define BIG_ENDIAN_BYTE_ORDER 0x01020304
#define PDP_ENDIAN_BYTE_ORDER 0x02010403
#define IS_LITTLE_ENDIAN (CURRENT_BYTE_ORDER == LITTLE_ENDIAN_BYTE_ORDER)
#define IS_BIG_ENDIAN (CURRENT_BYTE_ORDER == BIG_ENDIAN_BYTE_ORDER)
#define IS_PDP_ENDIAN (CURRENT_BYTE_ORDER == PDP_ENDIAN_BYTE_ORDER)
// Forward declaration
template<typename T>
struct LittleEndian;
template<typename T>
struct BigEndian;
// Little-Endian template
#pragma pack(push,1)
template<typename T>
struct LittleEndian
{
union
{
unsigned char bytes[sizeof(T)];
T raw_value;
};
LittleEndian(T t = T())
{
operator =(t);
}
LittleEndian(const LittleEndian<T> & t)
{
raw_value = t.raw_value;
}
LittleEndian(const BigEndian<T> & t)
{
for (unsigned i = 0; i < sizeof(T); i++)
bytes[i] = t.bytes[sizeof(T)-1-i];
}
operator const T() const
{
T t = T();
for (unsigned i = 0; i < sizeof(T); i++)
t |= T(bytes[i]) << (i << 3);
return t;
}
const T operator = (const T t)
{
for (unsigned i = 0; i < sizeof(T); i++)
bytes[i] = t >> (i << 3);
return t;
}
// operators
const T operator += (const T t)
{
return (*this = *this + t);
}
const T operator -= (const T t)
{
return (*this = *this - t);
}
const T operator *= (const T t)
{
return (*this = *this * t);
}
const T operator /= (const T t)
{
return (*this = *this / t);
}
const T operator %= (const T t)
{
return (*this = *this % t);
}
LittleEndian<T> operator ++ (int)
{
LittleEndian<T> tmp(*this);
operator ++ ();
return tmp;
}
LittleEndian<T> & operator ++ ()
{
for (unsigned i = 0; i < sizeof(T); i++)
{
++bytes[i];
if (bytes[i] != 0)
break;
}
return (*this);
}
LittleEndian<T> operator -- (int)
{
LittleEndian<T> tmp(*this);
operator -- ();
return tmp;
}
LittleEndian<T> & operator -- ()
{
for (unsigned i = 0; i < sizeof(T); i++)
{
--bytes[i];
if (bytes[i] != (T)(-1))
break;
}
return (*this);
}
};
#pragma pack(pop)
// Big-Endian template
#pragma pack(push,1)
template<typename T>
struct BigEndian
{
union
{
unsigned char bytes[sizeof(T)];
T raw_value;
};
BigEndian(T t = T())
{
operator =(t);
}
BigEndian(const BigEndian<T> & t)
{
raw_value = t.raw_value;
}
BigEndian(const LittleEndian<T> & t)
{
for (unsigned i = 0; i < sizeof(T); i++)
bytes[i] = t.bytes[sizeof(T)-1-i];
}
operator const T() const
{
T t = T();
for (unsigned i = 0; i < sizeof(T); i++)
t |= T(bytes[sizeof(T) - 1 - i]) << (i << 3);
return t;
}
const T operator = (const T t)
{
for (unsigned i = 0; i < sizeof(T); i++)
bytes[sizeof(T) - 1 - i] = t >> (i << 3);
return t;
}
// operators
const T operator += (const T t)
{
return (*this = *this + t);
}
const T operator -= (const T t)
{
return (*this = *this - t);
}
const T operator *= (const T t)
{
return (*this = *this * t);
}
const T operator /= (const T t)
{
return (*this = *this / t);
}
const T operator %= (const T t)
{
return (*this = *this % t);
}
BigEndian<T> operator ++ (int)
{
BigEndian<T> tmp(*this);
operator ++ ();
return tmp;
}
BigEndian<T> & operator ++ ()
{
for (unsigned i = 0; i < sizeof(T); i++)
{
++bytes[sizeof(T) - 1 - i];
if (bytes[sizeof(T) - 1 - i] != 0)
break;
}
return (*this);
}
BigEndian<T> operator -- (int)
{
BigEndian<T> tmp(*this);
operator -- ();
return tmp;
}
BigEndian<T> & operator -- ()
{
for (unsigned i = 0; i < sizeof(T); i++)
{
--bytes[sizeof(T) - 1 - i];
if (bytes[sizeof(T) - 1 - i] != (T)(-1))
break;
}
return (*this);
}
};
#pragma pack(pop)
#endif // LITTLEBIGENDIAN_H

@ -1,6 +1,6 @@
#include <string.h>
#include <stdlib.h>
#include <endian.h>
#include "I2PEndian.h"
#include <time.h>
#include <boost/bind.hpp>
#include <cryptopp/dh.h>

@ -1,4 +1,4 @@
#include <endian.h>
#include "I2PEndian.h"
#include <fstream>
#include <boost/filesystem.hpp>
#include <cryptopp/gzip.h>
@ -94,7 +94,7 @@ namespace data
else // if no new DatabaseStore coming, explore it
Explore ();
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
uint64_t ts = i2p::util::GetSecondsSinceEpoch ();
if (ts - lastTs >= 60) // save routers every minute
{
if (lastTs)
@ -169,7 +169,7 @@ namespace data
{
for (boost::filesystem::directory_iterator it1 (it->path ()); it1 != end; ++it1)
{
RouterInfo * r = new RouterInfo (it1->path ().c_str ());
RouterInfo * r = new RouterInfo (it1->path ().c_str ()); // FIXME!!! path::value_type != char in boost 1_55 on Windows. How to solve?
m_RouterInfos[r->GetIdentHash ()] = r;
numRouters++;
}
@ -277,7 +277,7 @@ namespace data
decompressor.Put (buf + offset, size);
decompressor.MessageEnd();
uint8_t uncompressed[2048];
int uncomressedSize = decompressor.MaxRetrievable ();
size_t uncomressedSize = decompressor.MaxRetrievable ();
decompressor.Get (uncompressed, uncomressedSize);
AddRouterInfo (uncompressed, uncomressedSize);
}

@ -4,3 +4,7 @@ i2pd
i2p router for Linux written on C++
Requires gcc 4.6 and higher, boost 1.46 and higher, crypto++
on Windows
Requires msvs2013, boost 1.46 and higher, crypto++

@ -1,6 +1,6 @@
#include <stdio.h>
#include <string.h>
#include <endian.h>
#include "I2PEndian.h"
#include <fstream>
#include <boost/lexical_cast.hpp>
#include <cryptopp/sha.h>

@ -1,4 +1,4 @@
#include <endian.h>
#include "I2PEndian.h"
#include <string>
#include <cryptopp/gzip.h>
#include "Log.h"

@ -20,7 +20,7 @@ namespace util
std::chrono::system_clock::now().time_since_epoch()).count ();
}
inline uint32_t GetSecondsSinceEpoch ()
inline uint64_t GetSecondsSinceEpoch ()
{
return std::chrono::duration_cast<std::chrono::seconds>(
std::chrono::system_clock::now().time_since_epoch()).count ();

@ -1,5 +1,5 @@
#include <string.h>
#include <endian.h>
#include "I2PEndian.h"
#include "Log.h"
#include "RouterContext.h"
#include "I2NPProtocol.h"

@ -1,4 +1,5 @@
#include <endian.h>
#include "I2PEndian.h"
#include <boost/thread.hpp>
#include <cryptopp/sha.h>
#include "RouterContext.h"
#include "Log.h"
@ -259,9 +260,9 @@ namespace tunnel
void Tunnels::Run ()
{
sleep (1); // wait for other parts are ready
boost::this_thread::sleep(boost::posix_time::seconds(1)); // wait for other parts are ready
uint32_t lastTs = 0;
uint64_t lastTs = 0;
while (m_IsRunning)
{
try
@ -287,7 +288,7 @@ namespace tunnel
msg = m_Queue.Get ();
}
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
uint64_t ts = i2p::util::GetSecondsSinceEpoch ();
if (ts - lastTs >= 15) // manage tunnels every 15 seconds
{
ManageTunnels ();
@ -331,7 +332,7 @@ namespace tunnel
void Tunnels::ManageOutboundTunnels ()
{
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
uint64_t ts = i2p::util::GetSecondsSinceEpoch ();
for (auto it = m_OutboundTunnels.begin (); it != m_OutboundTunnels.end ();)
{
if (ts > (*it)->GetCreationTime () + TUNNEL_EXPIRATION_TIMEOUT)
@ -377,7 +378,7 @@ namespace tunnel
void Tunnels::ManageInboundTunnels ()
{
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
uint64_t ts = i2p::util::GetSecondsSinceEpoch ();
for (auto it = m_InboundTunnels.begin (); it != m_InboundTunnels.end ();)
{
if (ts > it->second->GetCreationTime () + TUNNEL_EXPIRATION_TIMEOUT)

@ -1,4 +1,4 @@
#include <endian.h>
#include "I2PEndian.h"
#include <string.h>
#include "Log.h"
#include "I2NPProtocol.h"

@ -1,5 +1,5 @@
#include <string.h>
#include <endian.h>
#include "I2PEndian.h"
#include <cryptopp/sha.h>
#include "Log.h"
#include "RouterContext.h"

@ -1,5 +1,6 @@
#include <iostream>
#include <cryptopp/integer.h>
#include <boost/thread.hpp>
#include "Log.h"
#include "base64.h"
#include "Transports.h"
@ -19,7 +20,7 @@ int main( int, char** )
i2p::transports.Start ();
i2p::tunnel::tunnels.Start ();
sleep (1000);
boost::this_thread::sleep(boost::posix_time::seconds(1000));
i2p::tunnel::tunnels.Stop ();
i2p::transports.Stop ();
i2p::data::netdb.Stop ();

@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.21005.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "i2pd", "i2pd.vcxproj", "{930568EC-31C9-406A-AD1C-9636DF5D8FAA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{930568EC-31C9-406A-AD1C-9636DF5D8FAA}.Debug|Win32.ActiveCfg = Debug|Win32
{930568EC-31C9-406A-AD1C-9636DF5D8FAA}.Debug|Win32.Build.0 = Debug|Win32
{930568EC-31C9-406A-AD1C-9636DF5D8FAA}.Release|Win32.ActiveCfg = Release|Win32
{930568EC-31C9-406A-AD1C-9636DF5D8FAA}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{930568EC-31C9-406A-AD1C-9636DF5D8FAA}</ProjectGuid>
<RootNamespace>i2pd</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v120</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v120</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<IncludePath>$(BOOST);$(CRYPTOPP);$(IncludePath)</IncludePath>
<LibraryPath>$(BOOST)\stage\lib;$(CRYPTOPP)\cryptopp\Win32\Output\$(Configuration)\;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<IncludePath>.\boost;.\cryptopp;$(IncludePath)</IncludePath>
<LibraryPath>.\stage-x86\lib;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PreprocessorDefinitions>_MBCS;_WIN32_WINNT=0x0501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>cryptlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="base64.h" />
<ClInclude Include="CryptoConst.h" />
<ClInclude Include="ElGamal.h" />
<ClInclude Include="Garlic.h" />
<ClInclude Include="HTTPServer.h" />
<ClInclude Include="I2NPProtocol.h" />
<ClInclude Include="I2PEndian.h" />
<ClInclude Include="Identity.h" />
<ClInclude Include="LeaseSet.h" />
<ClInclude Include="LittleBigEndian.h" />
<ClInclude Include="Log.h" />
<ClInclude Include="NetDb.h" />
<ClInclude Include="NTCPSession.h" />
<ClInclude Include="Queue.h" />
<ClInclude Include="RouterContext.h" />
<ClInclude Include="RouterInfo.h" />
<ClInclude Include="Streaming.h" />
<ClInclude Include="Timestamp.h" />
<ClInclude Include="TransitTunnel.h" />
<ClInclude Include="Transports.h" />
<ClInclude Include="Tunnel.h" />
<ClInclude Include="TunnelBase.h" />
<ClInclude Include="TunnelConfig.h" />
<ClInclude Include="TunnelEndpoint.h" />
<ClInclude Include="TunnelGateway.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="base64.cpp" />
<ClCompile Include="Garlic.cpp" />
<ClCompile Include="HTTPServer.cpp" />
<ClCompile Include="I2NPProtocol.cpp" />
<ClCompile Include="i2p.cpp" />
<ClCompile Include="I2PEndian.cpp" />
<ClCompile Include="Identity.cpp" />
<ClCompile Include="LeaseSet.cpp" />
<ClCompile Include="Log.cpp" />
<ClCompile Include="NetDb.cpp" />
<ClCompile Include="NTCPSession.cpp" />
<ClCompile Include="RouterContext.cpp" />
<ClCompile Include="RouterInfo.cpp" />
<ClCompile Include="Streaming.cpp" />
<ClCompile Include="TransitTunnel.cpp" />
<ClCompile Include="Transports.cpp" />
<ClCompile Include="Tunnel.cpp" />
<ClCompile Include="TunnelEndpoint.cpp" />
<ClCompile Include="TunnelGateway.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

@ -0,0 +1,153 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="ElGamal.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Garlic.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="HTTPServer.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="I2NPProtocol.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="LeaseSet.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Log.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="NetDb.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="NTCPSession.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Queue.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="RouterContext.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="RouterInfo.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Timestamp.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="TransitTunnel.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Transports.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Tunnel.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="TunnelBase.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="TunnelConfig.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="TunnelEndpoint.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="TunnelGateway.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="base64.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="CryptoConst.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="I2PEndian.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="LittleBigEndian.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Streaming.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Identity.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Garlic.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HTTPServer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="I2NPProtocol.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="i2p.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LeaseSet.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Log.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="NetDb.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="NTCPSession.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="RouterContext.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="RouterInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TransitTunnel.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Transports.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Tunnel.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TunnelEndpoint.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TunnelGateway.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="base64.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="I2PEndian.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Streaming.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Identity.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
Loading…
Cancel
Save