From 126aba5ee569a96fa6cca55511536b46bfc67181 Mon Sep 17 00:00:00 2001 From: Laurentiu Date: Thu, 20 Jun 2024 19:03:35 +0300 Subject: [PATCH] refactor code --- AppServer/MulticastListener.cs | 8 ++ SipComponent/SipClientClass2.cs | 174 +++++++++++++++++--------------- 2 files changed, 102 insertions(+), 80 deletions(-) diff --git a/AppServer/MulticastListener.cs b/AppServer/MulticastListener.cs index 9ec5892..22db15f 100644 --- a/AppServer/MulticastListener.cs +++ b/AppServer/MulticastListener.cs @@ -2270,6 +2270,14 @@ namespace AppServer { SM.Debug("Load " + emailHT.Count + " subscribers emails from DB ..."); } + + if (sslServer == null) + { + SM.Debug("sslServer is null"); + return; + } + + Int64 latestEmailTime = sslServer.getLastEmailTime(); ArrayList EmailList = sslServer.getEmails(); diff --git a/SipComponent/SipClientClass2.cs b/SipComponent/SipClientClass2.cs index 0c6cff7..88fef26 100644 --- a/SipComponent/SipClientClass2.cs +++ b/SipComponent/SipClientClass2.cs @@ -263,19 +263,24 @@ namespace SipComponent } else _localIPaddress = localIPAddress; + _sipDomainPort = sipDomainPort; _sipClient = CreateSipClientClass(sipDomain, _sipDomainPort, _localIPaddress, localSipPort, userName, password, requestTimeout); _bufferMiliseconds = bufferMiliseconds; + // Registration Timer _registrationInterval = registrationInterval; _registrationData = new RegistrationData(userName, _registrationInterval + 2); + System.Timers.Timer registrationTimer = new System.Timers.Timer(); // Set up the registration timer registrationTimer.Interval = _registrationInterval * 1000; registrationTimer.Elapsed += _registrationTimer_Elapsed; + _sipID_regTimer_regStatus_Dict.Add(userName, new Tuple(registrationTimer, RegistrationStatus.RegistrationNotStarted )); + _IDsregisteredList.Add(userName); StartRegistrationTimer(); @@ -304,6 +309,7 @@ namespace SipComponent throw new ObjectDisposedException("SipClientClass"); if (idToInvite == null) throw new ArgumentNullException("idToInvite"); + lock (_lockerSipDialog) { if (!_IDsentInviteDict.ContainsKey(idToInvite) && !_IDreceivedInviteDict.ContainsKey(idToInvite) @@ -324,6 +330,7 @@ namespace SipComponent throw new ObjectDisposedException("SipClientClass"); if (groupIDtoInvite == null) throw new ArgumentNullException("groupIDtoInvite"); + // Check if registered to the group id lock (_lockerSipDialog) { @@ -342,6 +349,7 @@ namespace SipComponent { if (_sipClassClosed) throw new ObjectDisposedException("SipClientClass"); + Task t = null; CancelInvite_private(idToCancel, out t); } @@ -370,6 +378,7 @@ namespace SipComponent { return dialog.CallID == _IDsentInviteDict[idToCancel].CallID; }); + if (d != null) { //Send Cancel Request @@ -387,6 +396,7 @@ namespace SipComponent } }, d); } + // Remove from dict _IDsentInviteDict.Remove(idToCancel); _IDsCalledByMeList.Remove(idToCancel); @@ -585,6 +595,7 @@ namespace SipComponent { if (_sipClassClosed) throw new ObjectDisposedException("SipClientClass"); + lock (_lockerSipDialog) { if (_IDdialogTuple.ContainsKey(idToSendVoice)) @@ -603,29 +614,29 @@ namespace SipComponent { if (_sipClassClosed) throw new ObjectDisposedException("SipClientClass"); - if (idToRequestGps != null) - { - // Send Gps request for Linx - // [#msgLen]#seqID#154# - string cmdText = string.Format("#{0}#154#", seqID); - string cmd = AddMsgLenForMBus(cmdText); - Message pollRequestForLinx = GenerateSipMessage(idToRequestGps, UserName, _sipClient.Domain, _sipDomainPort, cmd); - pollRequestForLinx.Header.Add("Ais-Service", "mbus"); - Task.Factory.StartNew(() => - { - try - { - _sipClient.SendRequest(pollRequestForLinx); - } - catch (Exception) - { - ; // Probably timeout exception, do not do anything - } - }); - } - else + + if (idToRequestGps == null) throw new ArgumentNullException("idToRequestGps"); + + // Send Gps request for Linx + // [#msgLen]#seqID#154# + string cmdText = string.Format("#{0}#154#", seqID); + string cmd = AddMsgLenForMBus(cmdText); + Message pollRequestForLinx = GenerateSipMessage(idToRequestGps, UserName, _sipClient.Domain, _sipDomainPort, cmd); + pollRequestForLinx.Header.Add("Ais-Service", "mbus"); + Task.Factory.StartNew(() => + { + try + { + _sipClient.SendRequest(pollRequestForLinx); + } + catch (Exception) + { + ; // Probably timeout exception, do not do anything + } + }); + } /// @@ -636,26 +647,26 @@ namespace SipComponent { if (_sipClassClosed) throw new ObjectDisposedException("SipClientClass"); - if (linxID != null) - { - // Send [#msgLen]#seqID#238# - string textToSend = string.Format("#{0}#238#", _rand.Next().ToString()); - string cmdToSend = AddMsgLenForMBus(textToSend); - Message sipMessage = GenerateSipMessage(linxID, UserName, _sipClient.Domain, _sipDomainPort, cmdToSend); - Task.Factory.StartNew(() => - { - try - { - _sipClient.SendRequest(sipMessage); - } - catch (Exception) - { - // Do nothing - } - }); - } - else + + if (linxID == null) throw new ArgumentNullException("linxID"); + + // Send [#msgLen]#seqID#238# + string textToSend = string.Format("#{0}#238#", _rand.Next().ToString()); + string cmdToSend = AddMsgLenForMBus(textToSend); + Message sipMessage = GenerateSipMessage(linxID, UserName, _sipClient.Domain, _sipDomainPort, cmdToSend); + Task.Factory.StartNew(() => + { + try + { + _sipClient.SendRequest(sipMessage); + } + catch (Exception) + { + // Do nothing + } + }); + } /// @@ -669,10 +680,12 @@ namespace SipComponent { if (_sipClassClosed) throw new ObjectDisposedException("SipClientClass"); + if (idToSendSMS != null && text != null) { bool sendSipMessage = true; string unconfirmedSmsKey = null; + if (_smsConfirmationFromServer) { unconfirmedSmsKey = idToSendSMS + text.GetHashCode(); @@ -691,6 +704,7 @@ namespace SipComponent } } } + if (sendSipMessage) { // Create a new thread on which: @@ -743,15 +757,16 @@ namespace SipComponent throw new ArgumentNullException("text"); } - private Message GenerateSipMessage(string destinationID, string senderID, string sipServer, - int sipServerPort, string text) + private Message GenerateSipMessage(string destinationID, string senderID, string sipServer, int sipServerPort, string text) { - Message sipMessage = new Message(); - sipMessage.Uri = "sip:" + destinationID + "@" + sipServer + ":" + sipServerPort; - sipMessage.From = new ContactInfo(string.Format("sip:{0}@{1}", senderID, sipServer)); - sipMessage.To = new ContactInfo(string.Format("sip:{0}@{1}", destinationID, sipServer)); - sipMessage.ContentType = "text/plain;charset=UTF-8"; - sipMessage.Body = text; + Message sipMessage = new Message() + { + Uri = $"sip:{destinationID}@{sipServer}:{sipServerPort}", + From = new ContactInfo($"sip:{senderID}@{sipServer}"), + To = new ContactInfo($"sip:{destinationID}@{sipServer}"), + ContentType = "text/plain;charset=UTF-8", + Body = text + }; return sipMessage; } @@ -833,10 +848,12 @@ namespace SipComponent if (!_sipClassClosed) { _sipClassClosed = true; + // Send ARS OFF and disconnect from socket IO if (_sendArsOnOff) _socketIOClass.SendArs(new ArsInfo(false, "0", UserName)); - _socketIOClass.Disconect(); + _socketIOClass.Disconect(); + // List sipIDs = new List(); Task task = null; @@ -892,6 +909,7 @@ namespace SipComponent // Stop sip class _sipClient.Disconnect(); }); + if (!async) t.Wait(); } @@ -911,6 +929,8 @@ namespace SipComponent zeroRegistrationData = new RegistrationData(id, 0, true); else zeroRegistrationData = new RegistrationData(id, 0); + + _sipID_regTimer_regStatus_Dict[id].Item1.Stop(); SendSipRegister(zeroRegistrationData); } @@ -1398,10 +1418,11 @@ namespace SipComponent string lastWord = source.Substring(source.LastIndexOf(' ') + 1); if (lastWord.Contains("delivered")) return true; - else if (lastWord.Contains("failed")) + + if (lastWord.Contains("failed")) return false; - else - throw new ApplicationException("Error on parsing the sms confirmation from sip server"); + + throw new ApplicationException("Error on parsing the sms confirmation from sip server"); } #endregion @@ -1418,11 +1439,13 @@ namespace SipComponent // Extract ip and port where to send voice to simoco IPAddress ipToSendAudio = null; int portToSendAudio; + if (IPAddress.TryParse(receivedSDP.Connection.Address, out ipToSendAudio)) { portToSendAudio = receivedSDP.Media[0].Port; } - else throw new ApplicationException("Canot determine ip where to send audio"); + else + throw new ApplicationException("Canot determine ip where to send audio"); // Creez clientul de UDP conectat la portul pe care voi primi voce UdpClient udpClient = new UdpClient(localRTPport); @@ -1563,9 +1586,9 @@ namespace SipComponent private SipClient CreateSipClientClass(string sipDomain, int sipDomainPort, string localIPaddress, int localSipPort, string userName, string password, int requestTimeout) { - SipClient sipClient; + // Set up the master SIP class - sipClient = new SipClient(sipDomain, sipDomainPort, Independentsoft.Sip.ProtocolType.Udp, userName, password); + SipClient sipClient = new SipClient(sipDomain, sipDomainPort, Independentsoft.Sip.ProtocolType.Udp, userName, password); sipClient.LocalIPEndPoint = new IPEndPoint(IPAddress.Parse(localIPaddress), localSipPort); // Turn on logging //sipClient.Logger = new Logger(AppDomain.CurrentDomain.BaseDirectory + "\\sipLog.txt"); @@ -1590,6 +1613,7 @@ namespace SipComponent int rtpPort = ReturnAvailablePort(); SessionDescription sdp = CreateSDP(rtpPort); + Invite inv = new Invite(); inv.Uri = "sip:" + idToCall + "@" + sipServerIP; inv.From = new ContactInfo("sip:" + sipID.ToString() + "@" + sipServerIP); @@ -1650,20 +1674,17 @@ namespace SipComponent private void SendSipRegister(object registrationDataObj) { string sipServerIP = _sipClient.Domain; + RegistrationData regData = (RegistrationData)registrationDataObj; string sipIDfrom = _sipClient.Username; - string sipIDto = regData.SipID; + string sipIDto = regData.SipID; int expiresValue = regData.Expires; bool isUnregisterRequest = (expiresValue == 0); Register reg = new Register(); reg.Uri = "sip:" + sipServerIP; - reg.From = new ContactInfo( - sipIDfrom.ToString(), - "sip:" + sipIDfrom + "@" + sipServerIP); - reg.To = new ContactInfo( - sipIDto.ToString(), - "sip:" + sipIDto.ToString() + "@" + sipServerIP); + reg.From = new ContactInfo( sipIDfrom.ToString(), $"sip:{sipIDfrom}@{sipServerIP}"); + reg.To = new ContactInfo( sipIDto.ToString(), $"sip:{sipIDto}@{sipServerIP}"); reg.Contact = new Contact("sip:" + sipIDfrom.ToString() + "@" + _sipClient.LocalIPEndPoint.ToString()); reg.Expires = expiresValue; @@ -1763,6 +1784,7 @@ namespace SipComponent { SendSipRegister(state); }, _registrationData); + // Start registration timer _sipID_regTimer_regStatus_Dict[UserName].Item1.Start(); } @@ -1807,10 +1829,12 @@ namespace SipComponent { rtpPort += 2; } + if (rtpPort < MaxRtpPortNumber) return rtpPort; - else - throw new SipClassException( + + + throw new SipClassException( string.Format("Nu gasesc port liber in range-ul {0} - {1}", MinRtpPortNumber, MaxRtpPortNumber)); } } @@ -1821,10 +1845,8 @@ namespace SipComponent { return invite.SessionDescription.Media[0].Port == portNb; }); - if (inv != null) - return true; - else - return false; + + return (inv != null); } private bool IsPortAllreadyInUse(int portNumber) @@ -1843,15 +1865,12 @@ namespace SipComponent public static bool ValidRtpPort(int rtpPort) { if (rtpPort < 1024 || rtpPort > 65534) - { return false; - } - else if (rtpPort % 2 == 1) - { + + if (rtpPort % 2 == 1) return false; - } - else - return true; + + return true; } /// @@ -1870,11 +1889,6 @@ namespace SipComponent - - - - - private bool IsInSameSubnet(IPAddress address2, IPAddress address, IPAddress subnetMask) { IPAddress network1 = GetNetworkAddress(address, subnetMask);