Delphi STUN/TURN Sunucusu ve İstemcisi (4/4)

· Bileşenler

sgcWebSockets 4.5.2 sürümünden itibaren, sgcWebSockets kütüphanesini kullanarak kendi STUN/TURN Sunucunuzu ve İstemcilerinizi oluşturabilirsiniz.

STUN

Session Traversal Utilities for NAT (STUN) (kısaltma içinde kısaltma), genel adresinizi keşfetmek ve bir eşle (peer) doğrudan bağlantıyı engelleyecek olan yönlendiricinizdeki herhangi bir kısıtlamayı belirlemek için bir protokoldür.

İstemci, İnternet'teki bir STUN sunucusuna bir istek gönderir; sunucu da istemcinin genel adresiyle ve istemcinin yönlendiricinin NAT'ı arkasından erişilebilir olup olmadığıyla yanıt verir.

TURN

NAT kullanan bazı yönlendiriciler, 'Simetrik NAT' adı verilen bir kısıtlama uygular. Bu, yönlendiricinin yalnızca daha önce bağlandığınız eşlerden gelen bağlantıları kabul edeceği anlamına gelir.

Traversal Using Relays around NAT (TURN), bir TURN sunucusuyla bir bağlantı açıp tüm bilgileri o sunucu üzerinden ileterek Simetrik NAT kısıtlamasını aşmayı amaçlar. Bir TURN sunucusuyla bir bağlantı oluşturur ve tüm eşlere paketleri sunucuya göndermelerini söylersiniz; bunlar daha sonra size iletilir. Bu açıkça bir miktar ek yük getirir, bu nedenle yalnızca başka alternatif yoksa kullanılır.


Bir STUN/TURN Sunucusu Oluşturma 

STUN/TURN Delphi Sunucusu oluşturma süreci çok basittir, yalnızca bir TsgcTURNServer oluşturun ve aşağıdaki özellikleri yapılandırın:

Bir TURN istemcisi bir İstek gönderdiğinde parolayı ayarlamak için OnSTUNRequestAuthorization olayını işleyin.

Son olarak, sunucuyu başlatmak için Active özelliğini True olarak ayarlayın.

STUN isteklerinin yetkilendirme gerektirmediği ve TURN isteklerinin Uzun Süreli kimlik bilgileri gerektirdiği örnek bir yapılandırmayı aşağıda bulabilirsiniz.

oTURN := TsgcTURNServer.Create(nil);
oTURN.Port := 3478;
oTURN.STUNOptions.Authentication.Enabled := False;
oTURN.TURNOptions.Authentication.Enabled := True;
oTURN.TURNOptions.Authentication.LongTermCredentials.Enabled := True;
oTURN.TURNOptions.Authentication.LongTermCredentials.Realm := 'sgcWebSockets';
oTURN.TURNOptions.Authentication.LongTermCredentials.StaleNonce := 600;
oTURN.Active := True;
procedure OnSTUNRequestAuthorization(Sender: TObject; const aRequest: TsgcSTUN_Message; const aUsername, aRealm: string; var Password: string);
begin
  if (aUsername = 'my-user') and (aRealm = 'sgcWebSockets') then
    Password := 'my-password';
end; 

Bir STUN/TURN İstemcisi Oluşturma 

Yeni bir Delphi STUN/TURN İstemcisi oluşturmak, bir Sunucu kadar basittir. Yalnızca bir TsgcTURNClient oluşturun ve aşağıdaki özellikleri yapılandırın:


IP Adresi Ayırma (Allocate)

TURN Protokolü, NAT'lar arkasındaki eşler arasında veri alışverişi için bir Relay IP Adresi kullanmaya olanak tanır.

Bir TURN sunucusunda yeni bir Relay IP Adresi oluşturmak için, istemci önce Allocate metodunu çağırmalıdır; bu metot, yeni bir Relay IP Adresi oluşturmak için TURN sunucusuna bir İstek gönderir; TURN sunucusu yeni bir Relay IP Adresi oluşturabilirse, istemci başarılı bir yanıt alır. İstemci, Allocation'ın ömrü içinde tanımlanan süre boyunca diğer eşlerle iletişim kurabilecektir.

oTURN := TsgcTURNClient.Create(nil);
oTURN.Host := 'turn.sgcwebsockets.com';
oTURN.Port := 3478;
oTURN.Allocate();
procedure OnTURNAllocate(Sender: TObject; const aSocket: TsgcSocketConnection; const
aMessage: TsgcSTUN_Message; const aAllocation: TsgcTURN_ResponseAllocation);
begin
  DoLog('Relayed IP: ' + aAllocation.RelayedIP + '. Relayed Port: ' + IntToStr(aAllocation.RelayedPort));
end;
procedure OnSTUNResponseError(Sender: TObject; const aMessage: TsgcSTUN_Message;
const aError: TsgcSTUN_ResponseError);
begin
  DoLog('Error: ' + IntToStr(aError.Code) + ' ' + aError.Reason);
end; 

Süre dolmasını önlemek için ömür, Refresh metodu kullanılarak güncellenebilir. Ömür (Lifetime), sürenin dolacağı saniye sayısıdır. Değer sıfırsa Allocation silinir.

oTURN.Refresh(600); 

TURN Sunucusu 

});

Derlenmiş TURN Sunucusu / İstemcisi Demosu