Browse Source

Merge pull request #68 from alexmac6574/github-actions

ci: Update GitHub actions
pull/108/head v1.4.0
cacggghp 3 months ago
committed by GitHub
parent
commit
bbae69229e
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 7
      .github/workflows/ci.yml
  2. 182
      .github/workflows/release.yml
  3. 244
      README.md
  4. 2
      go.mod
  5. 4
      go.sum

7
.github/workflows/ci.yml

@ -1,10 +1,13 @@
name: CI name: CI
permissions:
contents: read
on: on:
push: push:
branches: [ "main", "master" ] branches: [ "main" ]
pull_request: pull_request:
branches: [ "main", "master" ] branches: [ "main" ]
jobs: jobs:
check: check:

182
.github/workflows/release.yml

@ -1,10 +1,12 @@
name: Release name: Release
permissions:
contents: read
on: on:
push: push:
# Trigger on tag pushes. Adjust pattern as needed (e.g. 'v*.*.*') branches:
tags: - main
- '**'
workflow_dispatch: workflow_dispatch:
jobs: jobs:
@ -25,7 +27,7 @@ jobs:
cgo: 0 cgo: 0
- goos: linux - goos: linux
goarch: arm goarch: arm
goarm: '7' goarm: "7"
cgo: 0 cgo: 0
- goos: linux - goos: linux
goarch: mipsle goarch: mipsle
@ -76,7 +78,7 @@ jobs:
- name: Set up Go - name: Set up Go
uses: actions/setup-go@v6 uses: actions/setup-go@v6
with: with:
go-version: '1.25.5' go-version: "1.25.5"
# Install Android NDK only for android rows # Install Android NDK only for android rows
- name: Setup Android NDK - name: Setup Android NDK
@ -149,23 +151,187 @@ jobs:
name: Create GitHub Release name: Create GitHub Release
needs: build needs: build
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs:
should_release: ${{ steps.meta.outputs.should_release }}
tag_name: ${{ steps.meta.outputs.tag_name }}
permissions: permissions:
contents: write contents: write
steps: steps:
- name: Check out code
uses: actions/checkout@v6
with:
fetch-depth: 0
fetch-tags: true
- name: Download build artifacts - name: Download build artifacts
uses: actions/download-artifact@v7 uses: actions/download-artifact@v7
with: with:
path: dist path: dist
- name: Prepare release metadata
id: meta
run: |
LATEST_TAG="$(git tag -l | grep -E '^(v)?[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -n 1 || true)"
PREFIX=""
BASE_VERSION="$LATEST_TAG"
if [ -z "$LATEST_TAG" ]; then
BASE_VERSION="0.0.0"
elif [ "${LATEST_TAG#v}" != "$LATEST_TAG" ]; then
PREFIX="v"
BASE_VERSION="${LATEST_TAG#v}"
fi
IFS=. read -r MAJOR MINOR PATCH <<< "$BASE_VERSION"
if [ -n "$LATEST_TAG" ]; then
RANGE="$LATEST_TAG..HEAD"
else
RANGE="HEAD"
fi
COMMITS="$(git log --no-merges --format='%s' "$RANGE")"
BUMP=""
if printf '%s\n' "$COMMITS" | grep -Eiq '^break([(:! ]|$)'; then
BUMP="major"
MAJOR=$((MAJOR + 1))
MINOR=0
PATCH=0
elif printf '%s\n' "$COMMITS" | grep -Eiq '^feat([(:! ]|$)'; then
BUMP="minor"
MINOR=$((MINOR + 1))
PATCH=0
elif printf '%s\n' "$COMMITS" | grep -Eiq '^fix([(:! ]|$)'; then
BUMP="patch"
PATCH=$((PATCH + 1))
fi
NEXT_VERSION="${MAJOR}.${MINOR}.${PATCH}"
NEXT_TAG="${PREFIX}${NEXT_VERSION}"
{
echo "previous_tag=$LATEST_TAG"
echo "range=$RANGE"
echo "bump=$BUMP"
echo "should_release=$([ -n "$BUMP" ] && echo true || echo false)"
echo "tag_name=$NEXT_TAG"
echo "release_name=$NEXT_TAG"
echo "body_path=release-notes.md"
} >> "$GITHUB_OUTPUT"
- name: Generate release notes from commit messages
id: notes
if: steps.meta.outputs.should_release == 'true'
env:
PREVIOUS_TAG: ${{ steps.meta.outputs.previous_tag }}
NEXT_TAG: ${{ steps.meta.outputs.tag_name }}
BUMP: ${{ steps.meta.outputs.bump }}
RANGE: ${{ steps.meta.outputs.range }}
run: |
strip_prefix() {
sed -E 's/^(feat|fix|break)([(!:]|[[:space:]])+[[:space:]]*//I'
}
FEATURES="$(git log --no-merges --format='%s (%h)' "$RANGE" | grep -Ei '^feat([(:! ]|$)' | strip_prefix | LC_ALL=C sort -f || true)"
FIXES="$(git log --no-merges --format='%s (%h)' "$RANGE" | grep -Ei '^fix([(:! ]|$)' | strip_prefix | LC_ALL=C sort -f || true)"
BREAKING="$(git log --no-merges --format='%s (%h)' "$RANGE" | grep -Ei '^break([(:! ]|$)' | strip_prefix | LC_ALL=C sort -f || true)"
{
echo "body_path=release-notes.md"
} >> "$GITHUB_OUTPUT"
{
if [ -n "$BREAKING" ]; then
echo "### Несовместимые изменения"
echo
printf '%s\n' "$BREAKING" | sed 's/^/- /'
echo
fi
if [ -n "$FEATURES" ]; then
echo "### Новые функции"
echo
printf '%s\n' "$FEATURES" | sed 's/^/- /'
echo
fi
if [ -n "$FIXES" ]; then
echo "### Исправление багов"
echo
printf '%s\n' "$FIXES" | sed 's/^/- /'
echo
fi
} > release-notes.md
- name: Create Release - name: Create Release
if: steps.meta.outputs.should_release == 'true'
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v2
with: with:
# upload every file in dist/ including nested files # upload every file in dist/ including nested files
files: | files: |
dist/** dist/**
# make the release name/tag the pushed tag tag_name: ${{ steps.meta.outputs.tag_name }}
tag_name: ${{ github.ref_name }} target_commitish: ${{ github.sha }}
name: ${{ github.ref_name }} name: ${{ steps.meta.outputs.release_name }}
body_path: ${{ steps.meta.outputs.body_path }}
overwrite_files: true overwrite_files: true
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Skip release when no semantic commit is found
if: steps.meta.outputs.should_release != 'true'
run: |
echo "No new semantic release created."
echo "Add a commit starting with break, feat, or fix after the latest tag."
docker:
name: Publish Docker image
needs: release
if: needs.release.outputs.should_release == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Check out code
uses: actions/checkout@v6
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Prepare image name
id: image
env:
REPOSITORY: ${{ github.repository }}
run: |
echo "name=ghcr.io/$(echo "$REPOSITORY" | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT"
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ steps.image.outputs.name }}
tags: |
type=raw,value=latest
type=raw,value=${{ needs.release.outputs.tag_name }}
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

244
README.md

@ -1,66 +1,136 @@
# Good TURN # Good TURN
Проброс трафика WireGuard/Hysteria через TURN сервера VK звонков или Яндекс телемоста. Пакеты шифруются DTLS 1.2, затем параллельными потоками через TCP или UDP отправляются на TURN сервер по протоколу STUN ChannelData. Оттуда по UDP отправляются на ваш сервер, где расшифровываются и передаются в WireGuard. Логин/пароль от TURN генерируются из ссылки на звонок. Проброс трафика WireGuard/Hysteria через TURN сервера VK звонков или Яндекс телемоста. Пакеты шифруются DTLS 1.2, затем параллельными потоками через TCP или UDP отправляются на TURN сервер по протоколу STUN ChannelData. Оттуда по UDP отправляются на ваш сервер, где расшифровываются и передаются в WireGuard. Логин/пароль от TURN генерируются из ссылки на звонок.
Только для учебных целей! Только для учебных целей!
## Настройка ## Настройка
Нам понадобится: Нам понадобится:
1. Ссылка на действующий ВК звонок: создаём свой (нужен аккаунт вк), или гуглим `"https://vk.com/call/join/"`. 1. Ссылка на действующий ВК звонок: создаём свой (нужен аккаунт вк), или гуглим `"https://vk.com/call/join/"`.
Ссылка действительна вечно, если не нажимать "завершить звонок для всех" Ссылка действительна вечно, если не нажимать "завершить звонок для всех"
2. Или ссыска на звонок Яндекс телемоста: `"https://telemost.yandex.ru/j/"`. Её лучше не гуглить, так как видно подключение к конференции 2. Или ссыска на звонок Яндекс телемоста: `"https://telemost.yandex.ru/j/"`. Её лучше не гуглить, так как видно подключение к конференции
3. VPS с установленным WireGuard 3. VPS с установленным WireGuard
4. Для андроида: скачать Termux из F-Droid 4. Для андроида: скачать Termux из F-Droid
### Сервер ### Сервер
<details><summary>Рекомендуется tmux</summary>
На сервере запустить tmux:
```bash
# Создание сессии tmux
tmux new -s vkturn
``` ```
Внутри сессии tmux запустить команду сервера ниже. Далее нажать `Ctrl+B` `D`, чтобы свернуть сессию, не завершая её. Прокси процесс останется запущенным, сервер будет доступен для новых команд или безопасного выхода из него.
```bash
# Войти в ранее созданную сессию tmux
tmux a -t vkturn
```
</details>
Скачать бинарник, в данном примере используется самый популярный сервер `server-linux-amd64`:
```bash
# Скачать бинарник
curl -L -o server https://github.com/cacggghp/vk-turn-proxy/releases/latest/download/server-linux-amd64 && chmod +x server
```
```bash
# Запуск сервера
./server -listen 0.0.0.0:56000 -connect 127.0.0.1:<порт wg> ./server -listen 0.0.0.0:56000 -connect 127.0.0.1:<порт wg>
``` ```
#### Docker #### Docker
Сборка образа:
Образ Docker публикуется в GitHub Container Registry:
```
docker pull ghcr.io/cacggghp/vk-turn-proxy:latest
docker tag ghcr.io/cacggghp/vk-turn-proxy:latest vkt
```
Для Linux-сервера, где `xray` или WireGuard слушает локально, удобнее запускать через host network:
```
docker run --rm --network host -e CONNECT_ADDR=127.0.0.1:<порт wg> vkt
```
Если нужен bridge mode:
```
docker run --rm -p 56000:56000/udp -e CONNECT_ADDR=<ip хоста>:<порт wg> vkt
``` ```
Сборка образа вручную:
```
git clone https://github.com/cacggghp/vk-turn-proxy.git
cd vk-turn-proxy
docker build -t vk-turn-proxy . docker build -t vk-turn-proxy .
``` ```
Переменная окружения **CONNECT_ADDR** — адрес WireGuard (обязательный), например `192.168.1.10:51820`. Переменная окружения **CONNECT_ADDR** — адрес WireGuard (обязательный), например `192.168.1.10:51820`.
Пример запуска: Пример запуска:
``` ```
docker run -p 56000:56000/udp -e CONNECT_ADDR=192.168.1.10:51820 vk-turn-proxy docker run -p 56000:56000/udp -e CONNECT_ADDR=192.168.1.10:51820 vk-turn-proxy
``` ```
### Клиент ### Клиент
#### Android #### Android
**Рекомендуемый способ:** **Рекомендуемый способ:**
Использовать нативное Android-приложение [vk-turn-proxy-android](https://github.com/MYSOREZ/vk-turn-proxy-android). Использовать нативное Android-приложение [vk-turn-proxy-android](https://github.com/MYSOREZ/vk-turn-proxy-android).
- В клиентском конфиге WireGuard меняем адрес сервера на `127.0.0.1:9000`, ставим MTU 1280 - В клиентском конфиге WireGuard меняем адрес сервера на `127.0.0.1:9000`, ставим MTU 1280
- **Добавляем приложение в исключения WireGuard. Нажимаем "сохранить".** - **Добавляем приложение в исключения WireGuard. Нажимаем "сохранить".**
**Альтернативный способ (через Termux):** **Альтернативный способ (через Termux):**
- В клиентском конфиге WireGuard меняем адрес сервера на `127.0.0.1:9000`, ставим MTU 1280 - В клиентском конфиге WireGuard меняем адрес сервера на `127.0.0.1:9000`, ставим MTU 1280
- **Добавляем Termux в исключения WireGuard. Нажимаем "сохранить".** - **Добавляем Termux в исключения WireGuard. Нажимаем "сохранить".**
В Termux: В Termux:
``` ```
termux-wake-lock termux-wake-lock
``` ```
Телефон не будет уходить в глубокий сон, так что на ночь ставьте на зарядку. Чтобы отключить: Телефон не будет уходить в глубокий сон, так что на ночь ставьте на зарядку. Чтобы отключить:
``` ```
termux-wake-unlock termux-wake-unlock
``` ```
Копируем бинарник в локальную папку, даём права на исполнение:
``` Скачиваем бинарник в локальную папку, даём права на исполнение, в команде указаана самая популярная архитектура `client-android-arm64`:
cp /sdcard/Download/client-android ./
chmod 777 ./client-android ```bash
curl -L -o client https://github.com/cacggghp/vk-turn-proxy/releases/latest/download/client-android-arm64 && chmod +x client
``` ```
Запускаем: Запускаем:
``` ```
./client-android -peer <ip сервера wg>:56000 -vk-link <VK ссылка> -listen 127.0.0.1:9000 ./client -listen 127.0.0.1:9000 -peer <ip сервера wg>:56000 -vk-link <VK ссылка>
``` ```
Или Или
``` ```
./client-android -udp -turn 5.255.211.241 -peer <ip сервера wg>:56000 -yandex-link <Ya ссылка> -listen 127.0.0.1:9000 ./client -udp -turn 5.255.211.241 -peer <ip сервера wg>:56000 -yandex-link <Ya ссылка> -listen 127.0.0.1:9000
``` ```
**Если после включения VPN в терминале вылезают ошибки DNS, попробуйте в Wireguard включить VPN только для нужных приложений.** **Если после включения VPN в терминале вылезают ошибки DNS, попробуйте в Wireguard включить VPN только для нужных приложений.**
#### Linux #### Linux
В клиентском конфиге WireGuard меняем адрес сервера на `127.0.0.1:9000`, ставим MTU 1280 В клиентском конфиге WireGuard меняем адрес сервера на `127.0.0.1:9000`, ставим MTU 1280
Скрипт будет добавлять маршруты к нужным ip: Скрипт будет добавлять маршруты к нужным ip:
@ -74,7 +144,9 @@ chmod 777 ./client-android
``` ```
Не включайте впн, пока программа не установит соединение! В отличие от андроида, здесь часть запросов будет идти через впн (dns и запрос подключения к turn) Не включайте впн, пока программа не установит соединение! В отличие от андроида, здесь часть запросов будет идти через впн (dns и запрос подключения к turn)
#### Windows #### Windows
В клиентском конфиге WireGuard меняем адрес сервера на `127.0.0.1:9000`, ставим MTU 1280 В клиентском конфиге WireGuard меняем адрес сервера на `127.0.0.1:9000`, ставим MTU 1280
В PowerShell от Администратора (чтобы скрипт прописывал маршруты): В PowerShell от Администратора (чтобы скрипт прописывал маршруты):
@ -88,7 +160,9 @@ chmod 777 ./client-android
``` ```
Не включайте впн, пока программа не установит соединение! В отличие от андроида, здесь часть запросов будет идти через впн (dns и запрос подключения к turn) Не включайте впн, пока программа не установит соединение! В отличие от андроида, здесь часть запросов будет идти через впн (dns и запрос подключения к turn)
### Если не работает ### Если не работает
С помощью опции `-turn` можно указать адрес TURN сервера вручную. Это должен быть сервер ВК, Макса или Одноклассников (ссылка вк) или Яндекса (ссылка яндекса). Возможно потом составлю список. С помощью опции `-turn` можно указать адрес TURN сервера вручную. Это должен быть сервер ВК, Макса или Одноклассников (ссылка вк) или Яндекса (ссылка яндекса). Возможно потом составлю список.
Если не работает TCP, попробуйте добавить флаг `-udp`. Если не работает TCP, попробуйте добавить флаг `-udp`.
@ -96,6 +170,7 @@ chmod 777 ./client-android
Добавьте флаг `-n 1` для более стабильного подключения в 1 поток (ограничение 5 Мбит/с для ВК) Добавьте флаг `-n 1` для более стабильного подключения в 1 поток (ограничение 5 Мбит/с для ВК)
## Яндекс телемост ## Яндекс телемост
**UPD. ТЕЛЕМОСТ ЗАКРЫЛИ** **UPD. ТЕЛЕМОСТ ЗАКРЫЛИ**
В отличие от ВК, сервера яндекса не ограничивают скорость, так что по умолчанию стоит `-n 1`. Увеличение этого числа может привести к временной блокировке по IP из-за переполнения конференции фейковыми участниками. В отличие от ВК, сервера яндекса не ограничивают скорость, так что по умолчанию стоит `-n 1`. Увеличение этого числа может привести к временной блокировке по IP из-за переполнения конференции фейковыми участниками.
@ -103,19 +178,18 @@ chmod 777 ./client-android
В режиме `-udp` скорость обычно больше В режиме `-udp` скорость обычно больше
Большинство диапазонов IP TURN серверов Яндекса не работают, указывайте вручную через `-turn` Большинство диапазонов IP TURN серверов Яндекса не работают, указывайте вручную через `-turn`
<details> <details>
<summary> <summary>
Рабочие IP Рабочие IP
</summary> </summary>
5.255.211.241 5.255.211.241
5.255.211.242 5.255.211.242
5.255.211.243 5.255.211.243
5.255.211.245 5.255.211.245
5.255.211.246 5.255.211.246
</details> </details>
Спасибо https://github.com/KillTheCensorship/Turnel за часть кода :) Спасибо https://github.com/KillTheCensorship/Turnel за часть кода :)
@ -133,51 +207,45 @@ chmod 777 ./client-android
```json ```json
{ {
"inbounds": [ "inbounds": [
{ {
"protocol": "socks", "protocol": "socks",
"listen": "127.0.0.1", "listen": "127.0.0.1",
"port": 1080, "port": 1080,
"settings": { "settings": {
"udp": true "udp": true
}, },
"sniffing": { "sniffing": {
"enabled": true, "enabled": true,
"destOverride": [ "destOverride": ["http", "tls"]
"http", }
"tls" },
] {
} "protocol": "http",
}, "listen": "127.0.0.1",
{ "port": 8080,
"protocol": "http", "sniffing": {
"listen": "127.0.0.1", "enabled": true,
"port": 8080, "destOverride": ["http", "tls"]
"sniffing": { }
"enabled": true, }
"destOverride": [ ],
"http", "outbounds": [
"tls" {
] "protocol": "wireguard",
} "settings": {
} "secretKey": "<client secret key>",
], "peers": [
"outbounds": [ {
{ "endpoint": "127.0.0.1:9000",
"protocol": "wireguard", "publicKey": "<server public key>"
"settings": { }
"secretKey": "<client secret key>", ],
"peers": [ "domainStrategy": "ForceIPv4",
{ "mtu": 1280
"endpoint": "127.0.0.1:9000", }
"publicKey": "<server public key>" }
} ]
],
"domainStrategy": "ForceIPv4",
"mtu": 1280
}
}
]
} }
``` ```
@ -191,41 +259,39 @@ chmod 777 ./client-android
```json ```json
{ {
"inbounds": [ "inbounds": [
{ {
"protocol": "wireguard", "protocol": "wireguard",
"listen": "0.0.0.0", "listen": "0.0.0.0",
"port": 51820, "port": 51820,
"settings": { "settings": {
"secretKey": "<server secret key>", "secretKey": "<server secret key>",
"peers": [ "peers": [
{ {
"publicKey": "<client public key>" "publicKey": "<client public key>"
} }
], ],
"mtu": 1280 "mtu": 1280
}, },
"sniffing": { "sniffing": {
"enabled": true, "enabled": true,
"destOverride": [ "destOverride": ["http", "tls"]
"http", }
"tls" }
] ],
} "outbounds": [
} {
], "protocol": "freedom",
"outbounds": [ "settings": {
{ "domainStrategy": "UseIPv4"
"protocol": "freedom", }
"settings": { }
"domainStrategy": "UseIPv4" ]
}
}
]
} }
``` ```
</details> </details>
## Direct mode ## Direct mode
С флагом `-no-dtls` можно отправлять пакеты без обфускации DTLS и подключаться к обычным серверам Wireguard. Может привести к бану от вк/яндекса. С флагом `-no-dtls` можно отправлять пакеты без обфускации DTLS и подключаться к обычным серверам Wireguard. Может привести к бану от вк/яндекса.

2
go.mod

@ -7,7 +7,7 @@ require (
github.com/cbeuw/connutil v1.0.1 github.com/cbeuw/connutil v1.0.1
github.com/google/uuid v1.6.0 github.com/google/uuid v1.6.0
github.com/gorilla/websocket v1.5.3 github.com/gorilla/websocket v1.5.3
github.com/pion/dtls/v3 v3.0.10 github.com/pion/dtls/v3 v3.0.11
github.com/pion/logging v0.2.4 github.com/pion/logging v0.2.4
github.com/pion/turn/v5 v5.0.2 github.com/pion/turn/v5 v5.0.2
) )

4
go.sum

@ -14,8 +14,8 @@ github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/miekg/dns v1.1.69 h1:Kb7Y/1Jo+SG+a2GtfoFUfDkG//csdRPwRLkCsxDG9Sc= github.com/miekg/dns v1.1.69 h1:Kb7Y/1Jo+SG+a2GtfoFUfDkG//csdRPwRLkCsxDG9Sc=
github.com/miekg/dns v1.1.69/go.mod h1:7OyjD9nEba5OkqQ/hB4fy3PIoxafSZJtducccIelz3g= github.com/miekg/dns v1.1.69/go.mod h1:7OyjD9nEba5OkqQ/hB4fy3PIoxafSZJtducccIelz3g=
github.com/pion/dtls/v3 v3.0.10 h1:k9ekkq1kaZoxnNEbyLKI8DI37j/Nbk1HWmMuywpQJgg= github.com/pion/dtls/v3 v3.0.11 h1:zqn8YhoAU7d9whsWLhNiQlbB8QdpJj8XQVSc5ImUons=
github.com/pion/dtls/v3 v3.0.10/go.mod h1:YEmmBYIoBsY3jmG56dsziTv/Lca9y4Om83370CXfqJ8= github.com/pion/dtls/v3 v3.0.11/go.mod h1:YEmmBYIoBsY3jmG56dsziTv/Lca9y4Om83370CXfqJ8=
github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8=
github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so=
github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA=

Loading…
Cancel
Save