[commit] r12881 - in freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket: . Commands General SipEvents
Author: verifier Date: Thu Apr 2 05:08:41 2009 New Revision: 12881 Log: Added: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallLegVariable.cs freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallVariable.cs freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaUnregister.cs Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/HoldCmd.cs freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.pfx freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SofiaSipAddress.cs freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/HoldCmd.cs ============================================================================== --- freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/HoldCmd.cs (original) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/HoldCmd.cs Thu Apr 2 05:08:41 2009 @@ -13,7 +13,7 @@ public override string Command { - get { return "hold"; } + get { return "uuid_hold"; } } public override string Arguments Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs ============================================================================== --- freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs (original) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs Thu Apr 2 05:08:41 2009 @@ -22,7 +22,7 @@ { private SofiaSipAddress _caller; private Address _destination; - private readonly IList<ChannelVariable> _variables = new List<ChannelVariable>(); + private readonly IList<CallVariable> _variables = new List<CallVariable>(); private string _callerIdName; private string _callerIdNumber; private bool _varsAdded; @@ -49,7 +49,7 @@ set { _destination = value; } } - public IList<ChannelVariable> Variables + public IList<CallVariable> Variables { get { return _variables; } } @@ -77,22 +77,35 @@ { if (!_varsAdded) { - _variables.Add(new ChannelVariable("origination_caller_id_name", CallerIdName ?? _caller.Extension)); + string name = CallerIdName ?? _caller.Extension; + _variables.Add(new CallVariable("origination_caller_id_name", "'" + name + "'")); if (!string.IsNullOrEmpty(_callerIdNumber)) - _variables.Add(new ChannelVariable("origination_caller_id_number", _callerIdNumber)); + _variables.Add(new CallVariable("origination_caller_id_number", _callerIdNumber)); _varsAdded = true; if (_autoAnswer) - _variables.Add(new ChannelVariable("sip_auto_answer", "true")); + { + _variables.Add(new CallLegVariable("sip_invite_params", "intercom=true")); + _variables.Add(new CallLegVariable("sip_h_Call-Info", "<sip:$${domain}>;answer-after=0")); + _variables.Add(new CallLegVariable("sip_auto_answer", "true")); + } } string variables = string.Empty; - foreach (ChannelVariable var in _variables) - variables += var + ","; + string legVariables = string.Empty; + foreach (CallVariable var in _variables) + { + if (var is CallLegVariable) + legVariables += var + ","; + else + variables += var + ","; + } if (variables.Length > 0) variables = "{" + variables.Remove(variables.Length - 1, 1) + "}"; + if (legVariables.Length > 0) + legVariables = "[" + legVariables.Remove(legVariables.Length - 1, 1) + "]"; - return variables + Caller + " " + Destination; + return variables + legVariables + Caller + " " + Destination; } } Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs ============================================================================== --- freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs (original) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs Thu Apr 2 05:08:41 2009 @@ -73,8 +73,8 @@ public void Start(string hostname) { _socket.MessageReceived += OnMessage; - _socket.Connect(hostname); _socket.DataReceived += OnData; + _socket.Connect(hostname); } private void OnData(string data) Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs ============================================================================== --- freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs (original) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs Thu Apr 2 05:08:41 2009 @@ -141,18 +141,22 @@ _text.CopyTo(i, chars, 0, plainEvent.ContentLength); plainEvent.Body = new string(chars); - // check for errors. - int pos = plainEvent.Body.IndexOf("\n\n"); - if (pos < plainEvent.Body.Length - 2) + // api/response is buggy for originate, no \n\n are appended at the end. + if (plainEvent.ContentType != "api/response") { - Console.WriteLine("Invalid event"); - Console.WriteLine("Header"); - Console.WriteLine(headers); - Console.WriteLine("Body"); - Console.WriteLine(plainEvent.Body); - Console.WriteLine("=========================== EVERYTHING in _text =============================="); - Console.WriteLine(_text); - throw new InvalidDataException("Invalid event: " + _text); + // check for errors. + int pos = plainEvent.Body.IndexOf("\n\n"); + if (pos < plainEvent.Body.Length - 2) + { + Console.WriteLine("Invalid event"); + Console.WriteLine("Header"); + Console.WriteLine(headers); + Console.WriteLine("Body"); + Console.WriteLine(plainEvent.Body); + Console.WriteLine("=========================== EVERYTHING unparsed =============================="); + Console.WriteLine(_text); + throw new InvalidDataException("Invalid event: " + _text); + } } if (plainEvent.Body.Length < plainEvent.ContentLength) Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs ============================================================================== --- freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs (original) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs Thu Apr 2 05:08:41 2009 @@ -198,12 +198,16 @@ } catch (InvalidDataException err) { - LogWriter(LogPrio.Warning, "Failed to parse event message (" + err.Message + "): " + Environment.NewLine + _parser.Text); + LogWriter(LogPrio.Warning, + "Failed to parse event message." + Environment.NewLine + "Exception: " + err + + Environment.NewLine + _parser.Text); HandleDisconnect(); } catch (ArgumentException err) { - LogWriter(LogPrio.Warning, "Failed to parse event message ("+err.Message+"): " + Environment.NewLine + _parser.Text); + LogWriter(LogPrio.Warning, + "Failed to parse event message." + Environment.NewLine + "Exception: " + err + + Environment.NewLine + _parser.Text); HandleDisconnect(); } } @@ -260,10 +264,10 @@ try { PlainEventMsg msg = _parser.ParseOne(); - LogWriter(LogPrio.Trace, "MessageType: " + msg.ContentType); while (msg != null) { - switch (msg.ContentType) + LogWriter(LogPrio.Trace, "MessageType: " + msg.ContentType); + switch (msg.ContentType) { case "auth/request": { Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.pfx ============================================================================== Binary files. No diff available. Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj ============================================================================== --- freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj (original) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj Thu Apr 2 05:08:41 2009 @@ -70,6 +70,7 @@ <Compile Include="Commands\SleepCmd.cs" /> <Compile Include="EventManager.cs" /> <Compile Include="ChannelEvents\EventDtmfStatus.cs" /> + <Compile Include="General\CallVariable.cs" /> <Compile Include="Ivr\DtmfEventArgs.cs" /> <Compile Include="Ivr\IvrInterface.cs" /> <Compile Include="Ivr\IvrQueue.cs" /> @@ -90,7 +91,7 @@ <Compile Include="Events\EventHeartbeat.cs" /> <Compile Include="Events\EventReSchedule.cs" /> <Compile Include="General\Address.cs" /> - <Compile Include="General\ChannelVariable.cs" /> + <Compile Include="General\CallLegVariable.cs" /> <Compile Include="General\SipAddress.cs" /> <Compile Include="General\SofiaSipAddress.cs" /> <Compile Include="PartyInfo.cs" /> @@ -103,6 +104,7 @@ <Compile Include="SipEvents\EventPresenceProbe.cs" /> <Compile Include="SipEvents\EventRoster.cs" /> <Compile Include="Events\EventMessageWaiting.cs" /> + <Compile Include="SipEvents\EventSofiaUnregister.cs" /> <Compile Include="SipEvents\SipEvent.cs" /> <Compile Include="SipEvents\EventPresence.cs" /> <Compile Include="SipEvents\EventSofiaExpire.cs" /> Added: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallLegVariable.cs ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallLegVariable.cs Thu Apr 2 05:08:41 2009 @@ -0,0 +1,22 @@ +namespace FreeSwitch.EventSocket.General +{ + /// <summary> + /// Variable stored only for a specific leg. + /// </summary> + /// <remarks> + /// Channel variables are used in FreeSWITCH to store information + /// that can be used by JavaScript programs. + /// </remarks> + public class CallLegVariable : CallVariable + { + /// <summary> + /// Initializes a new instance of the <see cref="CallLegVariable"/> class. + /// </summary> + /// <param name="name">The name.</param> + /// <param name="value">The value.</param> + public CallLegVariable(string name, string value) : base(name, value) + { + } + + } +} Added: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallVariable.cs ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallVariable.cs Thu Apr 2 05:08:41 2009 @@ -0,0 +1,41 @@ +namespace FreeSwitch.EventSocket.General +{ + /// <summary> + /// Variable that applies to both legs in a call. + /// </summary> + /// <remarks> + /// Variables can be access from FreeSWITCH with the name + /// "variable_[name]" + /// </remarks> + public class CallVariable + { + private readonly string _name; + private readonly string _value; + + /// <summary> + /// Initializes a new instance of the <see cref="CallVariable"/> class. + /// </summary> + /// <param name="name">Name of variable.</param> + /// <param name="value">Value.</param> + public CallVariable(string name, string value) + { + _name = name; + _value = value; + } + + public string Name + { + get { return _name; } + } + + public string Value + { + get { return _value; } + } + + public override string ToString() + { + return _name + "=" + _value; + } + } +} Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SofiaSipAddress.cs ============================================================================== --- freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SofiaSipAddress.cs (original) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SofiaSipAddress.cs Thu Apr 2 05:08:41 2009 @@ -1,44 +1,46 @@ namespace FreeSwitch.EventSocket.General { + /// <summary> + /// Destination as a FreeSWITCH Sofia sip address. + /// </summary> public class SofiaSipAddress : Address { - private readonly string _domain; + private readonly string _profileName; - public SofiaSipAddress(string domain, string userName) + /// <summary> + /// Initializes a new instance of the <see cref="SofiaSipAddress"/> class. + /// </summary> + /// <param name="profileName">Profile (context) name.</param> + /// <param name="userName">User name (and if needed, IP address / domain name).</param> + public SofiaSipAddress(string profileName, string userName) { Extension = userName; - _domain = domain; + _profileName = profileName; } + /// <summary> + /// Initializes a new instance of the <see cref="SofiaSipAddress"/> class. + /// </summary> + /// <param name="address">Another address.</param> public SofiaSipAddress(SipAddress address) { - _domain = address.Domain; + _profileName = address.Domain; Extension = address.Extension; } public override string ToString() { - return "sofia/mydomain.com/" + Extension + "%" + _domain; + return "sofia/" + _profileName + "/" + Extension; } public static SofiaSipAddress Parse(string fullAddress) { string[] parts = fullAddress.Split('@'); if (parts.Length == 2) - { return new SofiaSipAddress(parts[1], parts[0]); - } - else - { - parts = fullAddress.Split('/'); - if (parts.Length == 3) - { - return new SofiaSipAddress(parts[1], parts[2]); - } - } - return null; - + parts = fullAddress.Split('/'); + return parts.Length == 3 ? new SofiaSipAddress(parts[1], parts[2]) : null; } } } Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs ============================================================================== --- freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs (original) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs Thu Apr 2 05:08:41 2009 @@ -95,14 +95,8 @@ Caller = new PartyInfo(); return Caller.Parse(name.Substring(7), value); } - else - { - if (base.ParseCommand(name, value)) - return true; - else - return res; - } - + + return base.ParseCommand(name, value) || res; } return true; } Modified: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs ============================================================================== --- freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs (original) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs Thu Apr 2 05:08:41 2009 @@ -1,11 +1,15 @@ +using System; + namespace FreeSwitch.EventSocket { public class EventSofiaExpire : EventPresence { + private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1); private string _profileName; private string _userName; private string _domain; private string _userAgent; + private DateTime _expires; public string ProfileName { @@ -31,6 +35,12 @@ set { _userAgent = value; } } + public DateTime Expires + { + get { return _expires; } + set { _expires = value; } + } + /* switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "profile-name", "%s", argv[6]); switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "user", "%s", argv[1]); @@ -50,6 +60,11 @@ case "host": _domain = value; break; + case "expires": + int seconds; + if (int.TryParse(value, out seconds)) + _expires = UnixEpoch.AddSeconds(seconds); + break; case "user-agent": _userAgent = value; break; Added: freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaUnregister.cs ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaUnregister.cs Thu Apr 2 05:08:41 2009 @@ -0,0 +1,87 @@ +namespace FreeSwitch.EventSocket.SipEvents +{ + public class EventSofiaUnregister : EventBase +{ + private string _domain; + private string _profileName; + private string _user; + private string _contact; + private string _callId; + private int _expires; + + public string ProfileName + { + get { return _profileName; } + set { _profileName = value; } + } + + public string UserName + { + get { return _user; } + set { _user = value; } + } + + public string Domain + { + get { return _domain; } + set { _domain = value; } + } + + public string Contact + { + get { return _contact; } + set { _contact = value; } + } + + public string CallId + { + get { return _callId; } + set { _callId = value; } + } + + public int Expires + { + get { return _expires; } + set { _expires = value; } + } + + /* + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "profile-name", "%s", profile->name); + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from-user", "%s", to_user); + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from-host", "%s", to_host); + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "rpid", "%s", rpid); + */ + public override bool ParseCommand(string name, string value) + { + switch (name) + { + case "profile-name": + _profileName = value; + break; + case "from-user": + _user = value; + break; + case "from-host": + _domain = value; + break; + case "contact": + _contact = value; + break; + case "call-id": + _callId = value; + break; + case "expires": + int.TryParse(value, out _expires); + break; + default: + return base.ParseCommand(name, value); + } + return true; + } + + public override string ToString() + { + return "SofiaUnregister(" + _user + "@" + _domain + ", " + _expires + ")." + base.ToString(); + } + } +}
participants (1)
-
FreeSWITCH SVN