122 lines
3.6 KiB
Markdown
122 lines
3.6 KiB
Markdown
# poomer-zmq-client_server
|
|
c++ cross platform prototype zmq rep-req client and server with encryption
|
|
|
|
[ZeroMQ messaging library](https://zeromq.org)
|
|
|
|
server starts in pubkey server mode, allowing one client to grab the pubkey
|
|
- keypairs are generated on every start creating a purely encrypted connection.
|
|
- Host verification and Trust on First Usage security design pattern are not incorporated. (ie .ssh/know_hosts)
|
|
- used tcp ports 5555, 5556, 5557
|
|
- [TODO] backport bellatui Args, requires making bella_scene_sdk a dependency
|
|
|
|
# Usage
|
|
- [TODO] Fill in
|
|
|
|
# Build
|
|
|
|
```
|
|
workdir/
|
|
├── libzmq/
|
|
├── cppzmq/
|
|
├── poomer-zmq-client_server/
|
|
|
|
( additional Windows package manager dependency )
|
|
├── vcpkg/
|
|
|
|
( additional MacOS package manager dependency )
|
|
└── homebrew/
|
|
|
|
```
|
|
|
|
## Linux
|
|
```
|
|
//apt install -y libzmq-dev
|
|
//ldconfig
|
|
apt install -y libtool
|
|
apt install -y libsodium-dev
|
|
apt install -y cmake
|
|
mkdir workdir
|
|
cd workdir
|
|
apt install libgnutls28-dev
|
|
apt install pkg-config
|
|
git clone https://github.com/zeromq/libzmq
|
|
cd libzmq
|
|
mkdir build
|
|
cd build
|
|
cmake .. -DENABLE_CURVE=ON -DWITH_LIBSODIUM=/usr/include/sodium
|
|
cd ../..
|
|
git https://github.com/zeromq/cppzmq
|
|
cd cppzmq
|
|
mkdir build
|
|
cd build
|
|
cmake ..
|
|
g++ server.cpp -o server -lzmq -Wl,-rpath,.
|
|
g++ client.cpp -o client -lzmq -Wl,-rpath,.
|
|
```
|
|
- [TODO] wrap in a makefile, see bellatui
|
|
- [TODO] put in bin/Linux
|
|
- [TODO] get rid of package manager
|
|
|
|
## MacOS
|
|
Install Cmake to /Applications
|
|
```
|
|
curl -LO https://github.com/Kitware/CMake/releases/download/v3.31.6/cmake-3.31.6-macos-universal.dmg
|
|
open cmake-3.31.6-macos-universal.dmg
|
|
```
|
|
Install Xcode
|
|
|
|
```
|
|
mkdir -p workdir/homebrew
|
|
cd workdir
|
|
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip-components 1 -C homebrew
|
|
eval "$(homebrew/bin/brew shellenv)"
|
|
brew update --force --quiet
|
|
//chmod -R go-w "$(brew --prefix)/share/zsh"
|
|
brew install libsodium
|
|
//brew install gnutls
|
|
brew install pkg-config
|
|
git clone https://github.com/zeromq/libzmq
|
|
cd libzmq
|
|
mkdir build
|
|
cd build
|
|
/Applications/CMake.app/Contents/bin/cmake .. -DENABLE_CURVE=ON -DWITH_LIBSODIUM=../../homebrew/Cellar/libsodium/1.0.20/include/sodium -DSODIUM_INCLUDE_DIRS=../../homebrew/Cellar/libsodium/1.0.20/include -DSODIUM_LIBRARIES=../../homebrew/Cellar/libsodium/1.0.20/lib/libsodium.a
|
|
make -j4
|
|
cd ../..
|
|
git clone https://github.com/zeromq/cppzmq
|
|
git clone https://github.com/oomer/poomer-zmq-client_server.git
|
|
cd poomer-zmq-client_server
|
|
g++ -std=c++11 server.cpp -o server -I../libzmq/include -I../cppzmq -L../libzmq/build/lib -lzmq -Wl,-rpath,.
|
|
g++ -std=c++11 client.cpp -o client -I../libzmq/include -I../cppzmq -L../libzmq/build/lib -lzmq -Wl,-rpath,.
|
|
cp ../libzmq/build/lib/libzmq.5.dylib .
|
|
```
|
|
- [TODO] wrap in a makefile, see bellatui
|
|
- [TODO] put in bin/Darwin
|
|
- [TODO] clears compile time warnings
|
|
- [TODO] get rid of package manager
|
|
|
|
## Windows
|
|
- Install Visual Studio Community 2022
|
|
- Add Desktop development with C++ workload
|
|
- Launch x64 Native tools Command Prompt for VS2022
|
|
|
|
```
|
|
mkdir workdir
|
|
cd workdir
|
|
git clone https://github.com/microsoft/vcpkg.git
|
|
cd vcpkg; .\bootstrap-vcpkg.bat
|
|
.\vcpkg.exe install boost:x64-windows zeromq[sodium]:x64-windows
|
|
.\vcpkg.exe install cppzmq:x64-windows
|
|
.\vcpkg integrate install
|
|
cd ..
|
|
git clone https://github.com/oomer/bellatui.git
|
|
cd bellatui
|
|
cl /std:c++17 client.cpp -Fe:client.exe -Ic:..\vcpkg\installed\x64-windows\include\ /link ..\vcpkg\installed\x64-windows\lib\libzmq-mt-4_3_5.lib
|
|
cl /std:c++17 server.cpp -Fe:server.exe -Ic:..\vcpkg\installed\x64-windows\include\ /link ..\vcpkg\installed\x64-windows\lib\libzmq-mt-4_3_5.lib
|
|
```
|
|
|
|
- [TODO] create a .vcxproj, see bellatui
|
|
- [TODO] get rid of package manager
|
|
|
|
|
|
|