# Unified VPN SDK demo for Windows

This guide covers how to build, configure, and use the Unified VPN SDK demo application for Windows, including setup instructions, feature usage, and troubleshooting.

## Build the demo application MSI installer

{% hint style="info" %}
For the recommended setup method, follow the [Quickstart: run the VPN SDK demo for Windows](/paas/getting-started/quickstart.md) guide. If you encounter issues with the quickstart, use the manual steps below as an alternative.
{% endhint %}

1. Download the demo app project folder. Contact your account manager to get access to the demo app.
2. Launch [Visual Studio](https://visualstudio.microsoft.com/free-developer-offers/), navigate to the folder containing the recently downloaded project from GitHub and open the solution file `"..\unified-sdk-windows-demo\src\UnifiedSDK.Demo.sln"`.
3. Once the solution is open, you need to restore NuGet Packages.

<figure><img src="/files/HXo5M2wZNu3Odoh7ybwN" alt=""><figcaption><p>Restore NuGet Packages</p></figcaption></figure>

5. Build the "UnifiedSDK.Demo" project.

<figure><img src="/files/65eyKJWYJDgnIIzYOj00" alt=""><figcaption><p>Build the project</p></figcaption></figure>

6. Build the "UnifiedSDK.Demo.Installer.x64" project.

<figure><img src="/files/ncIRSPElCjykyqDJNhE1" alt=""><figcaption><p>Build the installer</p></figcaption></figure>

7. Navigate to `..\unified-sdk-windows-demo\output\Debug(Release)\Installer\`, then double-click `UnifiedSDK.Demo.Installer.x64.msi` to install the demo application.

## Usage

1. Sign in at [pango-cloud.com](https://www.pango-cloud.com).

{% hint style="info" %}
Note that at this time, it is not possible for users to create their own accounts directly if they do not already have an account established with example.com. Please contact your sales representative to initiate account creation as part of the project and client onboarding process or [contact us](https://www.pango.co/contact-us/). We apologize for any inconvenience.
{% endhint %}

2. In Pango dashboard, create a project and use a name for your project as a Public key. Private key is optional.

<figure><img src="/files/M0vs6LvhcmPQv7ZOdAyB" alt=""><figcaption><p>Create project page</p></figcaption></figure>

3. Navigate to the `Network` tab from the navigation bar. Then, click on the `Add location` button.

<figure><img src="/files/3xTvTBCZhlCOIUvGX9EY" alt=""><figcaption><p>Network page</p></figcaption></figure>

4. In Pango dashboard, navigate to the dashboard and locate your `carrier_id`.
5. You can find the backend URL for Prod/Stage/Dev [here](https://apidocs.aura-cloud.com/user.html#servers).
6. You are almost ready to connect to the VPN. To initiate the VPN connection process in the demo app:

   1. Enter the `carrier ID` and `backend address` in the appropriate fields.

      <figure><img src="/files/m0fqzNqq7DUdVLOhc3Ha" alt=""><figcaption><p>Carrier ID and backend address fields</p></figcaption></figure>
   2. Click the "Initialize SDK service" button. No visible change will occur (except the log message in the log window), which is expected behavior.
   3. Click the "Login" button. The app should now display a "Logged in" message, indicating successful authentication.

      <figure><img src="/files/a5Ul13qgy3MQrYobao2x" alt=""><figcaption></figcaption></figure>
   4. Choose VPN protocol and Virtual Location.

      <figure><img src="/files/bXIOI1hovHTF2jjrSze5" alt=""><figcaption></figcaption></figure>
   5. Click the "Connect" button. The app will establish the VPN connection, and display a "Connected" message upon success.

   <figure><img src="/files/JNHD8e1dbQL5FuKogKw3" alt=""><figcaption></figcaption></figure>
7. Your device is now connected to the VPN. To verify the connection:
   * Open any browser on your device.
   * Navigate to whatsmyip.com (or any other site which can identify your IP).
   * Observe that the IP address displayed is different from your device's actual IP address, confirming that traffic is being routed through the VPN.
8. To terminate the VPN connection when finished, click the "Disconnect" button in the demo app. This will sever the connection and restore direct network access.

## Features usage

#### VPN Session / SDK Auto reconnection

1. Initialize SDK service.
2. Click the "Login" button.
3. Choose VPN protocol and Virtual Location.
4. Select "Use VPN session mode" option. Observe that "Start VPN Session" replaces "Connect" button and option "Session Auto Reconnection Enabled" becomes visible.

   <figure><img src="/files/pOGu3L17sKktyuby1dgP" alt=""><figcaption></figcaption></figure>
5. Click the "Start VPN Session" button. The app will establish the VPN connection, and display a "Connected" message upon success.
6. Select or unselect "Session Auto Reconnection Enabled" to enable or disable SDK auto reconnection feature.
7. To terminate the VPN connection when finished, click the "Disconnect" button in the demo app. This will sever the connection and restore direct network access.

{% hint style="info" %}
The features described in the following sections are available for both "Connect" and "Start VPN Session" connection options.
{% endhint %}

#### Multihop / Custom VPN profiles / Custom DNS

1. Initialize SDK service.
2. Click the "Login" button.
3. Select "Use multihop proxy" if needed.
   * Select "Use optimal proxy location" or write your own location description.
4. Select "Get custom VPN profiles" if needed.
   * After Login select profile from "Custom profiles" combo box.
5. Select "Use custom DNS" if needed.
   * After Login select profile from "DNS server" combo box.
6. Fill the "User DNS server address" if you want to define the HTTP URL of DNS-over-HTTPS which should be used for a VPN session. Should be a valid URL.
7. Select VPN protocol.
8. Select virtual location.
9. Click the "Connect" button.

<figure><img src="/files/RXzWTe8LOKBdGUnplo8b" alt=""><figcaption></figcaption></figure>

#### Block local networks / Prevent IP leak / Enable Killswitch

1. Initialize SDK service and Login.
2. Select desired option in "Local Networks" dropdown if needed. This is a replacement for "Block Local Network" option, and will setup rules for local network. Available options:
   * **Nothing** - doesn't create any rules for local network module. This is the default value.
   * **Block** - blocks all local network traffic during the VPN session except for multicast networks.
   * **Permit** - allows local network traffic during the VPN session.
3. Unselect "Prevent IP leak" if needed. Enabled by default.
   * It blocks IPv6 and DNS requests outside the VPN tunnel.
4. Select "Enable Killswitch" if needed. Disabled by default.
   * It prevents traffic leakage during an unexpected VPN tunnel shutdown.
5. Click the "Connect" button.

<figure><img src="/files/5qyOUEnzlCrc6V7T1Pap" alt=""><figcaption></figcaption></figure>

#### Keep Killswitch enabled

1. Connect to VPN with Killswitch enabled.
2. Select "Keep killswitch enabled". Disabled by default.
   * It keeps traffic protection features active aftert manual disconnect.
   * It still allows to Unified SDK to connect to another location.
3. Click the "Disconnect" button.
4. To disable this feature call disable KillSwitch method or unselect "Keep killswitch enabled" and call disconnect one more time.

<figure><img src="/files/22NSxGv391tUezucxNol" alt=""><figcaption></figcaption></figure>

#### VPN bypass domains/applications (only x86 and x64 architecture )

1. Fill the domains/applications (full path required).
2. Click the "Apply" button.
3. Connect to VPN.

<figure><img src="/files/Eo6KXepBsOc4VFC19O5G" alt=""><figcaption></figcaption></figure>

#### Throttling configuration (only x86 and x64 architecture)

1. Select "Enable throttling".
2. Set global speed limits in Bit/second.
3. Set local speed limits in Bit/second.
   * Add the process you want to throttling by clicking the "Add process" button and filling the process name.
   * Click the "Add speed limit" button if you want to add another one local speed limit.
4. Click the "Send configuration button".
5. Click the "Connect" button.

<figure><img src="/files/hB9UKymz0Wb2g95XP3fY" alt=""><figcaption></figcaption></figure>

#### Route via VPN (only x86 and x64 architecture)

1. Click on the "Initialize SDK service" button.
2. Click on the "Loggin" button.
3. Uncheck "Prevent IP leaks" checkbox.
4. Check "Enable RouteViaVPN" checkbox.
5. Fill "Route via VPN applications" text box with full path to .exe file.
6. Fill "Route via VPN domains" text box.
7. Click "Apply" button.
8. Click "Connect" button.

<figure><img src="/files/GXa1xC18EuZWpIX8bNkH" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/wlXSbWZxGUJo8JHgYVbP" alt=""><figcaption></figcaption></figure>

## Logging

The demo application logs messages using the [Trace](https://betterstack.com/community/guides/logging/log-levels-explained/#6-trace) level. All logs are displayed in the panel to the right of the main window. You can right-click this panel to either clear the log output or save the current log to a file.

<figure><img src="/files/9Xqp4bM6RHFktgNmGyUd" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Please note that the demo application does not display internal SDK logs in the logging panel except SDK responses which are shown there to help better understand SDK behavior.

The SDK by default is using Error log level. For more information about SDK logging please see [Collecting debug logs](/paas/sdk/unified-vpn-sdk-for-windows/collecting-debug-logs.md).
{% endhint %}

{% hint style="danger" %}
Avoid using DEBUG or TRACE log levels for SDK logs in PROD, unless absolutely necessary for troubleshooting. These levels may expose sensitive or excessive information.

The same is recommended to do in PROD with application logs for SDK response data.
{% endhint %}

## More Information

See [SDK documentation](/paas/sdk/unified-vpn-sdk-for-windows.md)

See [Troubleshooting](/paas/sdk/unified-vpn-sdk-for-windows/troubleshooting.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://pango.gitbook.io/paas/sample-applications/unified-vpn-sdk-demo-for-windows.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
