Поддержка динамического запроса TURN (ICE) серверов для связи.
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"g365sfu/network"
|
||||
"g365sfu/sfu"
|
||||
connection "g365sfu/socket/struct"
|
||||
"g365sfu/turn"
|
||||
"g365sfu/utils"
|
||||
"net/http"
|
||||
"os"
|
||||
@@ -218,5 +219,41 @@ func processData(data <-chan []byte, connection *connection.Connection) {
|
||||
connection.WriteBinary(response.Bytes())
|
||||
continue
|
||||
}
|
||||
|
||||
// Запрос от бекенда на получение данных для подключения к TURN серверу
|
||||
if packetId == byte(network.TURN_ASK) && turn.TURN_PUBLIC_IP != "" {
|
||||
// Отвечаем только в том случае, если TURN сервер был успешно запущен и данные для подключения к нему были заполнены
|
||||
// Отправляем два пакета один на tcp сервер другой на udp сервер, так как некоторые клиенты могут поддерживать только один из этих протоколов
|
||||
|
||||
//tcp
|
||||
response := bytebuffer.Allocate(1 + 4 + len([]byte(turn.TURN_PUBLIC_IP)) + 4 + len([]byte(turn.TURN_USER)) + 4 + len([]byte(turn.TURN_PASS)) + 4 + len([]byte("tcp")))
|
||||
response.Put(byte(network.TURN_SERVER))
|
||||
response.PutUint32(uint32(len([]byte(turn.TURN_PUBLIC_IP))))
|
||||
response.PutBytes([]byte(turn.TURN_PUBLIC_IP))
|
||||
response.PutUint32(uint32(len([]byte(turn.TURN_USER))))
|
||||
response.PutBytes([]byte(turn.TURN_USER))
|
||||
response.PutUint32(uint32(len([]byte(turn.TURN_PASS))))
|
||||
response.PutBytes([]byte(turn.TURN_PASS))
|
||||
response.PutUint32(uint32(len([]byte("tcp"))))
|
||||
response.PutBytes([]byte("tcp"))
|
||||
response.Flip()
|
||||
connection.WriteBinary(response.Bytes())
|
||||
|
||||
//udp
|
||||
responseUDP := bytebuffer.Allocate(1 + 4 + len([]byte(turn.TURN_PUBLIC_IP)) + 4 + len([]byte(turn.TURN_USER)) + 4 + len([]byte(turn.TURN_PASS)) + 4 + len([]byte("udp")))
|
||||
responseUDP.Put(byte(network.TURN_SERVER))
|
||||
responseUDP.PutUint32(uint32(len([]byte(turn.TURN_PUBLIC_IP))))
|
||||
responseUDP.PutBytes([]byte(turn.TURN_PUBLIC_IP))
|
||||
responseUDP.PutUint32(uint32(len([]byte(turn.TURN_USER))))
|
||||
responseUDP.PutBytes([]byte(turn.TURN_USER))
|
||||
responseUDP.PutUint32(uint32(len([]byte(turn.TURN_PASS))))
|
||||
responseUDP.PutBytes([]byte(turn.TURN_PASS))
|
||||
responseUDP.PutUint32(uint32(len([]byte("udp"))))
|
||||
responseUDP.PutBytes([]byte("udp"))
|
||||
responseUDP.Flip()
|
||||
connection.WriteBinary(responseUDP.Bytes())
|
||||
continue
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user