Serwer TURN dla Delphi

Uruchom własny serwer TURN (RFC 8656) w Delphi. Alokuj przekazywane adresy transportowe dla klientów, którzy nie mogą nawiązać ścieżki peer-to-peer, z poświadczeniami long-term i limitami przypadającymi na alokację.

TsgcTURNServer

Samohostowany serwer TURN — przetwarza Allocate / CreatePermission / ChannelBind / Send / Refresh / Data, zarządza alokacjami i ich czasem życia, waliduje poświadczenia long-term.

Klasa komponentu

TsgcTURNServer

Protokół

TURN (RFC 8656)

Platformy

Windows, macOS, Linux, iOS, Android

Edycja

Enterprise

Upuść, ustaw realm, wydaj poświadczenia

Ustaw Port oraz realm w TURNOptions.Authentication.LongTermCredentials, dostarcz hasła poszczególnych użytkowników przez OnSTUNRequestAuthorization, Active := True — Twój serwer alokuje teraz relaye dla każdego klienta zgodnego z RFC 8656.

uses
  sgcP2P, sgcP2P_STUN_Classes;

// TFormTURNServer zawiera FServer: TsgcTURNServer oraz handler

procedure TFormTURNServer.StartServer;
begin
  FServer := TsgcTURNServer.Create(nil);
  FServer.Port := 3478;

  FServer.TURNOptions.Authentication.Enabled := True;
  FServer.TURNOptions.Authentication.LongTermCredentials.Enabled := True;
  FServer.TURNOptions.Authentication.LongTermCredentials.Realm :=
    'turn.example.com';

  // ogranicz nadużycia: alokacje na użytkownika i maksymalny czas życia
  FServer.TURNOptions.Allocation.MaxUserAllocations := 4;
  FServer.TURNOptions.Allocation.MaxLifeTime := 3600;

  FServer.OnSTUNRequestAuthorization := OnSTUNRequestAuthorization;

  FServer.Active := True;
end;

procedure TFormTURNServer.OnSTUNRequestAuthorization(Sender: TObject;
  const aRequest: TsgcSTUN_Message;
  const aUsername, aRealm: string;
  var Password: string);
begin
  // zwróć hasło tego użytkownika, puste odrzuca żądanie
  Password := LookupPassword(aUsername);
end;
// includes: sgcP2P.hpp, sgcP2P_STUN_Classes.hpp
TsgcTURNServer *Server = new TsgcTURNServer(this);
Server->Port = 3478;
Server->TURNOptions->Authentication->Enabled = true;
Server->TURNOptions->Authentication->LongTermCredentials->Enabled = true;
Server->TURNOptions->Authentication->LongTermCredentials->Realm = "turn.example.com";
Server->TURNOptions->Allocation->MaxUserAllocations = 4;
Server->OnSTUNRequestAuthorization = OnSTUNRequestAuthorization;
Server->Active = true;

Co jest w środku

Samohostowany relay — pozwala Twoim wdrożeniom WebRTC i ICE uniezależnić się od zewnętrznych dostawców TURN.

Allocate / Refresh / Free

Obsługuje żądania Allocate z REQUESTED-TRANSPORT, wybiera wolny port relayu i śledzi czas życia. Refresh przedłuża alokację; serwer demontuje ją po wygaśnięciu.

CreatePermission / ChannelBind

Śledzi uprawnienia peerów dla poszczególnych alokacji i bindowanie kanałów. Odrzuca ramki Send/Data dla peerów, którzy nie otrzymali uprawnień zgodnie z RFC 8656 §9.

Send / Data / ChannelData

Obsługiwane są zarówno 36-bajtowe koperty Send / Data, jak i 4-bajtowe ramki ChannelData. Relay przekazuje datagramy między relayed-transport-address a powiązanym peerem.

Poświadczenia long-term

TURNOptions.Authentication.LongTermCredentials przechowuje realm, a OnSTUNRequestAuthorization udostępnia Ci nazwę użytkownika i ten realm, abyś zwrócił hasło. Serwer sam waliduje MESSAGE-INTEGRITY i rotuje nonces.

Limity i porty relayu

TURNOptions.Allocation.MaxUserAllocations ogranicza liczbę relayów przypadających na jednego użytkownika, DefaultLifeTime i MaxLifeTime ograniczają czas życia każdego z nich, a MinPort / MaxPort / RelayIP ustalają zakres relayu. Użytkownik przekraczający limit otrzymuje 486 Allocation Quota Reached.

Weryfikuj każdą alokację

OnTURNBeforeAllocate udostępnia adres żądającego wraz z parametrem var Reject, a OnTURNBeforeRelayIndication i OnTURNBeforeRelayChannelData robią to samo dla każdego przekazywanego datagramu. OnTURNCreateAllocation i OnTURNDeleteAllocation pozwalają śledzić te alokacje, które są aktywne.

Specyfikacje i odniesienia

Wiarygodne źródła protokołu, który implementuje ten komponent.

Dokumentacja i dema

Przejdź bezpośrednio do dokumentacji komponentu, pobierz gotowy do uruchomienia projekt demonstracyjny i pobierz wersję próbną.

Pomoc online — TsgcTURNServer Pełna dokumentacja właściwości, metod i zdarzeń tego komponentu.
Projekt demonstracyjny — Demos\35.P2P\03.TURN Gotowy do uruchomienia projekt przykładowy. Dostarczany w pakiecie sgcWebSockets — pobierz wersję próbną poniżej.
Dokument techniczny (PDF) Funkcje, szybki start, przykłady kodu dla Delphi i C++ Builder oraz odniesienia do źródeł — tylko ten komponent.
Podręcznik użytkownika (PDF) Kompleksowy podręcznik obejmujący każdy komponent biblioteki.

Serwer TURN, najczęściej zadawane pytania

Częste pytania o uruchamianie własnego przekaźnika TURN w Delphi i C++ Builder.

Upuść komponent TsgcTURNServer, ustaw Port i Realm, dostarcz hasła dla poszczególnych użytkowników ze zdarzenia OnSTUNRequestAuthorization, a następnie ustaw Active := True. Serwer obsługuje wtedy Allocate, CreatePermission, ChannelBind, Send, Refresh i Data dla dowolnego klienta RFC 8656, przekazując datagramy między przekazywanym adresem transportowym a powiązanym peerem.
Implementuje TURN zgodnie z RFC 8656, weryfikując poświadczenia długoterminowe za pomocą MESSAGE-INTEGRITY i automatycznie rotując nonce'y. Odwołuje się też do RFC 6062 dla alokacji TURN przez TCP oraz RFC 8489 dla bazowego formatu komunikatów STUN i obsługuje transporty UDP, TCP oraz TLS over TCP.
Nie. TsgcTURNServer to własny przekaźnik, który osadzasz we własnej aplikacji Delphi lub C++ Builder, więc Twoje wdrożenia WebRTC i ICE mogą przestać zależeć od zewnętrznych dostawców TURN lub osobnej instalacji coturn. Limity dla poszczególnych alokacji (maksymalna liczba alokacji na użytkownika, przepustowość i czas życia) ograniczają nadużycia, a OnQuotaExceeded raportuje odrzucenia.
Serwer TURN jest częścią edycji Enterprise sgcWebSockets i obsługuje Delphi 7 aż po najnowsze wydanie Delphi oraz odpowiadające im wersje C++ Builder, w systemach Windows, macOS, Linux, iOS i Android. Pobierz bezpłatną wersję próbną, aby postawić przekaźnik TURN we własnym projekcie.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy, by uruchomić własny serwer TURN?

Pobierz bezpłatną wersję próbną i postaw relay TURN w Delphi.