Compare commits
2 Commits
5291e2cb5b
...
ccaa256960
Author | SHA1 | Date | |
---|---|---|---|
ccaa256960 | |||
126aba5ee5 |
@ -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();
|
||||
|
||||
|
@ -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<System.Timers.Timer, RegistrationStatus>(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
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -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
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -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<string> sipIDs = new List<string>();
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -1870,11 +1889,6 @@ namespace SipComponent
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private bool IsInSameSubnet(IPAddress address2, IPAddress address, IPAddress subnetMask)
|
||||
{
|
||||
IPAddress network1 = GetNetworkAddress(address, subnetMask);
|
||||
|
Loading…
Reference in New Issue
Block a user