Author: michaelgg Date: Sat Oct 4 05:36:52 2008 New Revision: 9831 Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/Loader.cs freeswitch/trunk/src/mod/languages/mod_managed/managed/ManagedSession.cs freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Log: Tweak input/error handling Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/Loader.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/Loader.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/Loader.cs Sat Oct 4 05:36:52 2008 @@ -57,6 +57,14 @@ return false; } + AppDomain.CurrentDomain.AssemblyResolve += (_, rargs) => { + Log.WriteLine(LogLevel.Debug, "Trying to resolve assembly '{0}'.", rargs.Name); + if (rargs.Name == Assembly.GetExecutingAssembly().FullName) return Assembly.GetExecutingAssembly(); + var path = Path.Combine(managedDir, rargs.Name + ".dll"); + Log.WriteLine(LogLevel.Debug, "Resolving to: '" + path + "'."); + return File.Exists(path) ? Assembly.LoadFile(path) : null; + }; + // This is a simple one-time loader to get things in memory // Some day we should allow reloading of modules or something loadAssemblies(managedDir) @@ -109,6 +117,7 @@ { string f = Path.Combine(managedDir, s); try { + Log.WriteLine(LogLevel.Debug, "Loading '{0}'.", f); System.Reflection.Assembly.LoadFile(f); } catch (Exception ex) { Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/ManagedSession.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/ManagedSession.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/ManagedSession.cs Sat Oct 4 05:36:52 2008 @@ -76,7 +76,6 @@ } catch (Exception ex) { Log.WriteLine(LogLevel.Warning, "Exception in hangupCallback: {0}", ex.ToString()); - throw; } } @@ -86,35 +85,36 @@ string inputCallback(IntPtr input, Native.switch_input_type_t inputType) { - switch (inputType) { - case FreeSWITCH.Native.switch_input_type_t.SWITCH_INPUT_TYPE_DTMF: - using (var dtmf = new Native.switch_dtmf_t(input, false)) { - return dtmfCallback(dtmf); - } - case FreeSWITCH.Native.switch_input_type_t.SWITCH_INPUT_TYPE_EVENT: - using (var swevt = new Native.switch_event(input, false)) { - return eventCallback(swevt); - } - default: - return ""; + try { + switch (inputType) { + case FreeSWITCH.Native.switch_input_type_t.SWITCH_INPUT_TYPE_DTMF: + using (var dtmf = new Native.switch_dtmf_t(input, false)) { + return dtmfCallback(dtmf); + } + case FreeSWITCH.Native.switch_input_type_t.SWITCH_INPUT_TYPE_EVENT: + using (var swevt = new Native.switch_event(input, false)) { + return eventCallback(swevt); + } + default: + return ""; + } + } catch (Exception ex) { + Log.WriteLine(LogLevel.Error, "InputCallback threw exception: " + ex.ToString()); + return "-ERR InputCallback Exception: " + ex.Message; } } - string dtmfCallback(Native.switch_dtmf_t dtmf) - { + string dtmfCallback(Native.switch_dtmf_t dtmf) { var f = DtmfReceivedFunction; - return f == null ? - "-ERR No DtmfReceivedFunction set." : - f(((char)(byte)dtmf.digit), TimeSpan.FromMilliseconds(dtmf.duration)); + return f == null ? "" + : f(((char)(byte)dtmf.digit), TimeSpan.FromMilliseconds(dtmf.duration)); } - string eventCallback(Native.switch_event swevt) - { + string eventCallback(Native.switch_event swevt) { using (var evt = new FreeSWITCH.Native.Event(swevt, 0)) { var f = EventReceivedFunction; - return f == null ? - "-ERR No EventReceivedFunction set." : - f(evt); + return f == null ? "" + : f(evt); } } Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Sat Oct 4 05:36:52 2008 @@ -2758,7 +2758,7 @@ return ret; } - public static switch_status_t switch_ivr_detect_speech(SWIGTYPE_p_switch_core_session session, string mod_name, string grammar, string path, string dest, switch_asr_handle ah) { + public static switch_status_t oh(SWIGTYPE_p_switch_core_session session, string mod_name, string grammar, string path, string dest, switch_asr_handle ah) { switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech(SWIGTYPE_p_switch_core_session.getCPtr(session), mod_name, grammar, path, dest, switch_asr_handle.getCPtr(ah)); return ret; }