/// <summary> /// TODO: Documentation StartAutoRefresh /// </summary> public void StartAutoRefresh(TurnManager turnManager) { this.refreshTimer = new Timer(); this.refreshTimer.AutoReset = true; this.refreshTimer.Interval = (this.LifeTime * 1000) - 60000; // lifetime - 1min this.refreshTimer.Elapsed += new ElapsedEventHandler((sender, e) => { this.AutoRefresh(turnManager); }); this.refreshTimer.Start(); }
/// <summary> /// TODO: Documentation ConnectionBind /// </summary> /// <param name="connectionId"></param> /// <param name="username"></param> /// <param name="password"></param> public void ConnectionBind(StunAttribute connectionId, String username, String password) { this.TurnTcpManager = new TurnManager(this.StunClient.ServerEP, this.StunClient.ProtocolType, this.StunClient.ClientCertificate, this.StunClient.RemoteCertificateValidation); this.TurnTcpManager.OnAllocateSucceed += (object sender, TurnAllocation allocation, StunMessage sentMsg, StunMessage receivedMsg) => { StunMessage msg = new StunMessage(StunMethodType.ConnectionBind, StunMethodClass.Request, StunUtilities.NewTransactionId); msg.Turn.ConnectionId = connectionId; msg.Stun.Username = new UTF8Attribute(StunAttributeType.Username, allocation.Username); msg.Stun.Realm = new UTF8Attribute(StunAttributeType.Realm, allocation.Realm); msg.Stun.Nonce = new UTF8Attribute(StunAttributeType.Nonce, allocation.Nonce); msg.AddMessageIntegrity(allocation.Password, true); this.TurnTcpManager.StunClient.BeginSendMessage(msg, this.TurnTcpManager.StunClient.Socket); }; this.TurnTcpManager.OnConnectionBindSucceed += (object sender, Socket connectedSocket, StunMessage receivedMsg) => { this.TurnTcpManager.Allocations.Clear(); this.TurnTcpManager.StunClient.Cancel = true; if (this.OnConnectionBindSucceed != null) this.OnConnectionBindSucceed(sender, connectedSocket, receivedMsg); }; this.TurnTcpManager.Connect(); this.TurnTcpManager.Allocate(username, password); }
/// <summary> /// TODO: Documentation AutoRefresh /// </summary> /// <param name="turnManager"></param> private void AutoRefresh(TurnManager turnManager) { turnManager.RefreshAllocation(this, this.LifeTime); this.refreshTimer.Interval = (this.LifeTime * 1000) - 60000; // lifetime - 1min }
/// <summary> /// TODO: Documentation CreateTurnSession /// </summary> /// <param name="sid"></param> /// <param name="useTurnOnly"></param> private void CreateTurnSession(String sid, Boolean useTurnOnly) { TurnManager turnManager = new TurnManager(this.StunServerEP, ProtocolType.Tcp, this.TurnClientCertificate, this.TurnRemoteCertificateValidation); turnManager.OnAllocateSucceed += new TurnAllocateSuccessHandler(this.turnManager_OnAllocateSucceed); turnManager.OnAllocateFailed += new StunMessageReceptionHandler(this.turnManager_OnAllocateFailed); turnManager.OnConnectionAttemptReceived += new StunIndicationReceptionHandler(this.turnManager_OnConnectionAttemptReceived); turnManager.OnConnectionBindSucceed += new TurnConnectionBindSuccessHandler(this.turnManager_OnConnectionBindSucceed); turnManager.Connect(); turnManager.Allocate(this.TurnUsername, this.TurnPassword); this.turnSessions.Add(sid, new TurnSession() { TurnManager = turnManager, UseTurnOnly = useTurnOnly }); }