# DPS Manager Server

This directory contains the current C++17 service implementation. The legacy Java project is kept only as a behavior reference under `旧的java项目/`.

## Build targets

The server now uses one codebase with the same runtime behavior on:

- Windows: `MSVC + xmake`
- Linux: `gcc/clang + xmake`

`mingw` is no longer the primary target for this service.

## Dependencies

Xmake resolves these shared dependencies for both platforms:

- `openssl3`
- `zlib`
- `mariadb-connector-c`

Platform system links:

- Windows: `ws2_32`
- Linux: `pthread`, `crypt`

Linux builds also rely on the system `crypt.h` header and `libcrypt` for bcrypt support. Windows builds continue to use the vendored Openwall bcrypt sources.

## Database TLS

- `database.ssl_mode=disable`: disable TLS for local Windows testing
- `database.ssl_mode=preferred`: allow TLS without strict certificate validation
- `database.ssl_mode=required`: require TLS but skip certificate validation
- `database.ssl_mode=verify_ca`: require TLS and verify the server certificate chain
- `database.ssl_mode=verify_identity`: same strict verification path as `verify_ca` in the current Connector/C integration
- `database.ssl_ca`: optional CA certificate file path for strict verification modes
- `database.plugin_dir`: optional MariaDB auth plugin directory override; Windows builds also copy connector plugins to `mariadb-plugin` beside the executable

## Build

### Windows local testing

```powershell
xmake f -p windows -a x64 -m debug
xmake
Copy-Item config/server.windows.conf config/server.conf
```

### Linux deployment build

```bash
xmake f -p linux -a x86_64 -m release
xmake
cp config/server.conf.example config/server.conf
```

## Run

Windows:

```powershell
./build/windows/x64/debug/dps_manager_server.exe --config config/server.conf
```

Linux:

```bash
./build/linux/x86_64/release/dps_manager_server --config config/server.conf
```

## Notes

- Password hashing, JWT signing, RSA operations, and gzip payload generation all use the same OpenSSL/zlib-based implementation on Windows and Linux.
- The server fails fast on startup if the database connection cannot be established.
- Windows local testing can set `database.ssl_mode=disable` when the remote database presents a certificate chain that Windows does not trust yet.
- Proxy headers are ignored by default; enable `server.trust_proxy=true` only when the service runs behind a trusted reverse proxy.
- `config/server.conf.example` is the Linux-oriented template, and `config/server.windows.conf` is the Windows local test template.
