Skip to content

Commit

Permalink
add: partial SChannel support
Browse files Browse the repository at this point in the history
This commit adds partial support for using SChannel in FrequenC.
  • Loading branch information
ThePedroo committed May 28, 2024
1 parent 74ed186 commit 9508cd0
Show file tree
Hide file tree
Showing 11 changed files with 418 additions and 117 deletions.
57 changes: 25 additions & 32 deletions FrequenC.vcxproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="packages\openssl-native.3.0.13\build\native\openssl-native.props" Condition="Exists('packages\openssl-native.3.0.13\build\native\openssl-native.props')" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
Expand Down Expand Up @@ -78,50 +77,56 @@
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>EnableAllWarnings</WarningLevel>
<AdditionalIncludeDirectories>C:/Program Files (x86)/OpenSSL-Win32/include;external;include;sources</AdditionalIncludeDirectories>
<PreprocessorDefinitions>PCLL_SSL_LIBRARY=1;GITHUB_BRANCH="unknown";GITHUB_COMMIT_SHA="unknown";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>external;include;sources</AdditionalIncludeDirectories>
<PreprocessorDefinitions>PCLL_SSL_LIBRARY=3;GITHUB_BRANCH="unknown";GITHUB_COMMIT_SHA="unknown";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<AdditionalDependencies>wsock32.lib;Advapi32.lib;libssl.lib;libcrypto.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>C:/Program Files (x86)/OpenSSL-Win32/lib/VC/x86/MTd;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>ws2_32.lib;wsock32.lib;Advapi32.lib;secur32.lib;shlwapi.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>C:/Program Files/OpenSSL-Win64/include;external;include;sources</AdditionalIncludeDirectories>
<PreprocessorDefinitions>PCLL_SSL_LIBRARY=1;GITHUB_BRANCH="unknown";GITHUB_COMMIT_SHA="unknown";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>external;include;sources</AdditionalIncludeDirectories>
<PreprocessorDefinitions>PCLL_SSL_LIBRARY=3;GITHUB_BRANCH="unknown";GITHUB_COMMIT_SHA="unknown";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
<OmitFramePointers>false</OmitFramePointers>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<AdditionalDependencies>ws2_32.lib;wsock32.lib;Advapi32.lib;libssl.lib;libcrypto.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>C:/Program Files/OpenSSL-Win64/lib/VC/x64/MTd;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>ws2_32.lib;wsock32.lib;Advapi32.lib;secur32.lib;shlwapi.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>EnableAllWarnings</WarningLevel>
<AdditionalIncludeDirectories>C:/Program Files (x86)/OpenSSL-Win32/include;external;include;sources</AdditionalIncludeDirectories>
<PreprocessorDefinitions>PCLL_SSL_LIBRARY=1;GITHUB_BRANCH="unknown";GITHUB_COMMIT_SHA="unknown";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>external;include;sources</AdditionalIncludeDirectories>
<PreprocessorDefinitions>PCLL_SSL_LIBRARY=3;GITHUB_BRANCH="unknown";GITHUB_COMMIT_SHA="unknown";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>wsock32.lib;Advapi32.lib;libssl.lib;libcrypto.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>C:/Program Files (x86)/OpenSSL-Win32/lib/VC/x86/MTd;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>ws2_32.lib;wsock32.lib;Advapi32.lib;secur32.lib;shlwapi.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>packages\openssl-native.3.0.13\include;external;include;sources</AdditionalIncludeDirectories>
<PreprocessorDefinitions>PCLL_SSL_LIBRARY=1;GITHUB_BRANCH="unknown";GITHUB_COMMIT_SHA="unknown";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>external;include;sources</AdditionalIncludeDirectories>
<PreprocessorDefinitions>PCLL_SSL_LIBRARY=3;GITHUB_BRANCH="unknown";GITHUB_COMMIT_SHA="unknown";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
Expand All @@ -138,8 +143,8 @@
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ws2_32.lib;wsock32.lib;Advapi32.lib;libssl.lib;libcrypto.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>packages\openssl-native.3.0.13\lib\win-x64\native;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>ws2_32.lib;wsock32.lib;Advapi32.lib;secur32.lib;shlwapi.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
Expand Down Expand Up @@ -190,18 +195,6 @@
<ClInclude Include="include\websocket.h" />
<ClInclude Include="sources\youtube.h" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="packages\openssl-native.3.0.13\build\native\openssl-native.targets" Condition="Exists('packages\openssl-native.3.0.13\build\native\openssl-native.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('packages\openssl-native.3.0.13\build\native\openssl-native.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\openssl-native.3.0.13\build\native\openssl-native.props'))" />
<Error Condition="!Exists('packages\openssl-native.3.0.13\build\native\openssl-native.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\openssl-native.3.0.13\build\native\openssl-native.targets'))" />
</Target>
<ImportGroup Label="ExtensionTargets" />
</Project>
3 changes: 0 additions & 3 deletions FrequenC.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,4 @@
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion FrequenC.vcxproj.user
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ShowAllFiles>true</ShowAllFiles>
<ShowAllFiles>false</ShowAllFiles>
</PropertyGroup>
</Project>
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ The standalone audio-sending node written in C.

- [`OpenSSL`](https://www.openssl.org/) or [`WolfSSL`](https://www.wolfssl.com/)

## Installation
> [!NOTE]
> For Windows, it doesn't rely on external dependencies, as it uses [Windows SChannel](https://learn.microsoft.com/en-us/windows/win32/com/schannel) for SSL/TLS.
> [!IMPORTANT]
> For Windows, you can simply click build the project using Visual Studio. Make sure to install the dependencies first.
## Installation

### 1. Clone the repository

Expand All @@ -32,6 +32,9 @@ $ git clone https://github.com/PerformanC/FrequenC
$ make -j4
```

> [!IMPORTANT]
> For Windows, you will only need to hit build on Visual Studio. Although use of Cygwin or MinGW is available, it is not recommended.
> [!NOTE]
> The `-j4` flag is used to compile the project using 4 threads. You can change the number to the number of threads you want to use.
Expand Down
49 changes: 20 additions & 29 deletions external/csocket-client.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#include <stdio.h>

#ifdef _WIN32
#include <winsock2.h>
#include <ws2tcpip.h>
Expand Down Expand Up @@ -26,15 +28,15 @@ void _csocket_client_close(struct csocket_client *client) {
}
}

int csocket_client_init(struct csocket_client *client, bool secure, char *hostname, int port) {
int csocket_client_init(struct csocket_client *client, bool secure, char *hostname, unsigned short port) {
#ifdef _WIN32
if (WSAStartup(MAKEWORD(2,2), &client->wsa) != 0) {
perror("[csocket-client]: Failed to initialize Winsock");

return CSOCKET_CLIENT_ERROR;
}

if ((client->socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {
if ((client->socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
perror("[csocket-client]: Failed to create socket");

return CSOCKET_CLIENT_ERROR;
Expand All @@ -45,30 +47,28 @@ int csocket_client_init(struct csocket_client *client, bool secure, char *hostna

return CSOCKET_CLIENT_ERROR;
}
#endif

struct hostent *host = gethostbyname(hostname);
if (host == NULL) {
perror("[csocket-client]: Failed to resolve hostname");
struct hostent *host = gethostbyname(hostname);
if (host == NULL) {
perror("[csocket-client]: Failed to resolve hostname");

return CSOCKET_CLIENT_ERROR;
}
return CSOCKET_CLIENT_ERROR;
}

struct sockaddr_in addr = {
.sin_family = AF_INET,
.sin_port = htons(port),
.sin_addr = *((struct in_addr *)host->h_addr_list[0])
};
struct sockaddr_in addr = {
.sin_family = AF_INET,
.sin_port = htons(port),
.sin_addr = *((struct in_addr *)host->h_addr_list[0])
};

if (connect(client->socket, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
perror("[csocket-client]: Failed to connect to server");
if (connect(client->socket, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
perror("[csocket-client]: Failed to connect to server");

return CSOCKET_CLIENT_ERROR;
}
return CSOCKET_CLIENT_ERROR;
}
#endif

if ((client->secure = secure)) {
pcll_init_ssl_library();

int ret = pcll_init_ssl(&client->connection);
if (ret != PCLL_SUCCESS) {
_csocket_client_close(client);
Expand All @@ -78,16 +78,7 @@ int csocket_client_init(struct csocket_client *client, bool secure, char *hostna
return CSOCKET_CLIENT_ERROR;
}

ret = pcll_set_fd(&client->connection, (int)client->socket);
if (ret != PCLL_SUCCESS) {
_csocket_client_close(client);

perror("[csocket-client]: Failed to attach SSL to socket");

return CSOCKET_CLIENT_ERROR;
}

ret = pcll_set_safe_mode(&client->connection, hostname);
ret = pcll_set_safe_mode(&client->connection, hostname, port, client->socket);
if (ret != PCLL_SUCCESS) {
_csocket_client_close(client);

Expand Down
2 changes: 1 addition & 1 deletion external/csocket-client.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ struct csocket_client {
bool secure;
};

int csocket_client_init(struct csocket_client *client, bool secure, char *hostname, int port);
int csocket_client_init(struct csocket_client *client, bool secure, char *hostname, unsigned short port);

int csocket_client_send(struct csocket_client *client, char *data, int size);

Expand Down
Loading

0 comments on commit 9508cd0

Please sign in to comment.