Re: [Freeswitch-users] Precompiled Windows Binaries

2009-11-25 Thread Josh Rivers
Carlos,

Do you have any documentation or scripts for your builds? I'm interested in
having a working automated build and installer build process, and I'm
curious if there's any work you've done that can make my job easier. :)

Thanks,
Josh

On Wed, Nov 4, 2009 at 6:51 AM, Carlos Talbot wrote:

>
> I usually try to update the svn file at least once a month. I have a new
> version ready that was compiled last night but am ironing out login issues
> with the FS dudes for upload access. Also, the SVN snapshot now includes
> binaries for 32 and 64 bit. It no longer includes flite though as the
> install file was approaching 80MB in size. I will revisit this later if
> others feel it important to include flite.
>
>>
>> You mentioned FreePBX V3. I had been fumbling around trying to work out
>> what
>> this is and from what I've read, it seems to provide a GUI Front End for
>> configuring FreeSwitch ?
>>
> Yes, it's still in development phase and as such not ready for production
> use.
>
>>
>> I am guessing that while it has been installed with FreeSwitch, I then
>> need
>> to run the FreePBX Installer to update the FreePBX/FreeSwitch
>> configuration
>> on my hardware ?
>>
>>
>> When I start FreeSwitch, it does not automatically load the WAMPServer.
>>
>> Freeswitch and WAMPServer are independant of each other. WAMPServer is
> bundled in this install for the purpose of FreePBX as MySQL, Apache and PHP
> are all required components of FreePBX.
>
> When I start WAMPServer manually, and open up localhost (127.0.0.1) in a
>> web
>> browser, I can see the WampServer logo and various tools such as phpinfo()
>> and phpmyadmin. FreePBX is there under Your Projects.
>>
>> If you want to configure FreePBX you need to click on the FreePBX.url
> shortcut that gets created on your desktop.
>
>
>> When I opened this up the first time, it appeared to want to install
>> FreePBX
>> over FreeSwitch, I tried to abort this when it was going to overwrite some
>> FreeSwitch conf files and I thought I'd better not go on until I had a
>> better idea what was happening. I backed out of the FreePBX install and
>> now
>> I can't get the FreePBX or phpmyadmin pages up again (missing files) so it
>> looks like I'm going to have to reinstall anyway.
>>
>> So, for next time,am I right in thinking that I should proceed with
>> running
>> the FreePBX install from the WAMPServer menu ?
>>
>
> No, launch it from the shortcut as stated above. Unfortunately, at this
> time there is very little user documentation on configuring FreePBX. Here is
> the link to the developer's info: http://www.freepbx.org/v3
>
> regards,
>
> Carlos
>
>>
>>
>> - Original Message -
>> From: "Jeff Lenk" 
>> To: 
>> Sent: Tuesday, November 03, 2009 2:48 PM
>> Subject: Re: [Freeswitch-users] Precompiled Windows Binaries
>>
>>
>> >
>> > Hi Dave,
>> >
>> > These are supported by "Carlos Talbot" . They also include Freepbx v3
>> >
>> > Just as you said freeswitch-1.0.4.exe is the tagged release and
>> > freeswitch.exe is a newer svn snapshot.
>> >
>> > There should be no problems installing the new version allthough best to
>> > just try and see!
>> >
>> > Not sure why the newest one is from October 7th.
>> >
>> > Jeff
>> >
>> >
>> > Dave Stevenson wrote:
>> >>
>> >> Hi,
>> >>
>> >> I have read the Docs on the Wiki
>> >> (
>> http://wiki.freeswitch.org/wiki/Installation_Guide#Precompiled_Binaries)
>> >> but am still not sure of what the different Windows install files are.
>> >> Currently, the Windows Installer directory contains :-
>> >>
>> >> LATEST_SVN_15106 - 6 Bytes
>> >>
>> >> freeswitch-1.0.4.exe - 42 Megabytes
>> >>
>> >> freeswitch.exe - 32 Megabytes
>> >>
>> >> I have installed the freeswitch-1.0.4.exe file which is dated 3rd
>> >> September. The freeswitch.exe file is dated 7th October and think that
>> it
>> >> contains the minor updates since 3rd September ?
>> >>
>> >> Could someone who knows FreeSwitch under windows help me understand the
>> >> two files please ?
>> >>
>> >> I chickened out of running the later exe in case it did something to
>> the
>> >> running install of FreeSwitch 1.0.4, is it safe to run the newer exe
>> with
>> >> the old one already installed ?
>> >> What will it actually do ?
>> >>
>> >> regards
>> >> Dave
>> >> ___
>> >> FreeSWITCH-users mailing list
>> >> FreeSWITCH-users@lists.freeswitch.org
>> >> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> >> UNSUBSCRIBE:
>> http://lists.freeswitch.org/mailman/options/freeswitch-users
>> >> http://www.freeswitch.org
>> >>
>> >>
>> >
>> > --
>> > View this message in context:
>> >
>> http://n2.nabble.com/Precompiled-Windows-Binaries-tp3937943p3938887.html
>> > Sent from the freeswitch-users mailing list archive at Nabble.com.
>> >
>> > ___
>> > FreeSWITCH-users mailing list
>> > FreeSWITCH-users@lists.freeswitch.org
>> > http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> >

[Freeswitch-users] ESL command completion

2009-11-25 Thread Josh Rivers
Is there a way of determining if a call-command sent to a session via ESL
has completed? Is there a return event which is always fired? Is there a
identifier I can use to verify that the return event matches my command?

Thanks,
Josh
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-27 Thread Josh Rivers
Where does 'somePtr' come from?

On Sun, Sep 27, 2009 at 4:06 PM, Michael Giagnocavo wrote:

>  It’s in the “FSUtil” class (no I’m not happy with the name). I also made
> it an extension method on IntPtr (I’m not a big fan of extension methods,
> but the code is sorta messy anyways, so it’s not relatively bad.)
>
>
>
> var x = CreateSwigTypePointer(somePtr);
>
>
>
> Moving stuff out of the SWIG DLL removes the ability to use partial classes
> to extend the generated swigtypes. This is used a bit, and will be used a
> lot more as the managed plugin is cleaned up. For example, most of the FS
> APIs return string, when they should return a better representation. Also,
> the constructors for some of the types are internal only, and I don’t really
> enjoy using reflection to create them.
>
>
>
> -Michael
>
>
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Saturday, September 26, 2009 11:29 PM
>
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> The ability to directly create swigtypes...that's huge! I'd love to see
> some examples of how to use that.
>
>
>
> I've update my refactoring to include the changes to the trunk up through
> r14981. I've also checked in updated binaries that should work with the
> latest trunk builds(I hope?)
>
>
>
> A question occurred to me: would it make any sense to push the plugin
> loader into a separate DLL? That way we could keep the P/Invoke layer very
> cleanly separated from the loader/process host/abstraction layer structures.
>
>
>
> Josh
>
> On Fri, Sep 25, 2009 at 1:13 PM, Michael Giagnocavo 
> wrote:
>
> There is a new function I checked in a little bit ago that lets you create
> any of the SWIGTYPE_p_xxx types – all you need is a pointer to the memory to
> represent whatever it is in native land. So with that, it’s actually
> possible to call most or all of the functions. (Yes DRK, you can now go do
> XML binding.) But sure, it’d be nice to make a real .NET-ish layer.
>
>
>
> Async events seems like it wouldn’t be hard, assuming FreeSWITCH delivers
> them that way?
>
>
>
> -Michael
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Michael
> Jerris
> *Sent:* Thursday, September 24, 2009 10:26 PM
>
>
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> There are a few other things I can think would be nice additions to
> mod_managed.  Maybe an event handler that does not require a thread to be
> sitting and waiting for events trying in a loop would be nice, instead
> something that is triggered each time there is a certain event class
> triggered.  Also, there has been some interest in doing full endpoint
> modules in mod_managed.  exposing all the state handlers in .net like ways
> and having that all work would be quite interesting, but probably requires
> someone specific actually ready to write a module like that to be
> worthwhile.
>
>
>
> Mike
>
>
>
> On Sep 24, 2009, at 4:01 AM, Michael Giagnocavo wrote:
>
>
>
> Great – hopefully we’ll meet on IRC or the conference sometime on Friday.
> Email me when you’re on.
>
>
>
> A few questions I have:
>
>
>
> Clarity – I agree with you there, and thanks!
>
>
>
> Testability – is this even remotely practical? Looking at our FS code
> plugins, there’s simply no way any amount of test environment code would get
> us to anything testable. We make tons of direct P/Invoke calls, and the
> whole model for what variables are set when, the state machine progression,
> etc. does not seem like something that we can hope to possibly model right.
> And it’s subject to many external influences (all the modules you have
> loaded in FS). Logging is a pretty simple case, sure, we can make it not
> call FS for testing. But in a real app, it just seems that there are way too
> many dependencies, no? Maybe others who have apps written can chime in?
>
>
>
> Modularity – I agree there are two parts. But, I think they are pretty
> tightly coupled. The FS interface into unmanaged code is done via unmanaged
> code and is really clear: App, Api, ApiBackground. The other ways I can
> think of are FS-specific, such as XML binding interface and so on. But those
> are things we should just add to the mod_managed core and be done with. I’m
> thinking maybe w

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-27 Thread Josh Rivers
One more addition added. The loader process now looks for the string
".primary" in the filename. If it exists, it loads the dll into the primary
appdomain and executes to Load() routine on implementors
of IPrimaryAppdomainExtension. I also added an example showing the use of
this to display a WinForm logger.
http://github.com/joshrivers/FreeSWITCH.Managed
On Sat, Sep 26, 2009 at 10:28 PM, Josh Rivers  wrote:

> The ability to directly create swigtypes...that's huge! I'd love to see
> some examples of how to use that.
>
> I've update my refactoring to include the changes to the trunk up through
> r14981. I've also checked in updated binaries that should work with the
> latest trunk builds(I hope?)
> A question occurred to me: would it make any sense to push the plugin
> loader into a separate DLL? That way we could keep the P/Invoke layer very
> cleanly separated from the loader/process host/abstraction layer structures.
>
> Josh
>
>
> On Fri, Sep 25, 2009 at 1:13 PM, Michael Giagnocavo 
> wrote:
>
>>  There is a new function I checked in a little bit ago that lets you
>> create any of the SWIGTYPE_p_xxx types – all you need is a pointer to the
>> memory to represent whatever it is in native land. So with that, it’s
>> actually possible to call most or all of the functions. (Yes DRK, you can
>> now go do XML binding.) But sure, it’d be nice to make a real .NET-ish
>> layer.
>>
>>
>>
>> Async events seems like it wouldn’t be hard, assuming FreeSWITCH delivers
>> them that way?
>>
>>
>>
>> -Michael
>>
>>
>>
>> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
>> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Michael
>> Jerris
>> *Sent:* Thursday, September 24, 2009 10:26 PM
>>
>> *To:* freeswitch-users@lists.freeswitch.org
>> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
>> .NET
>>
>>
>>
>> There are a few other things I can think would be nice additions to
>> mod_managed.  Maybe an event handler that does not require a thread to be
>> sitting and waiting for events trying in a loop would be nice, instead
>> something that is triggered each time there is a certain event class
>> triggered.  Also, there has been some interest in doing full endpoint
>> modules in mod_managed.  exposing all the state handlers in .net like ways
>> and having that all work would be quite interesting, but probably requires
>> someone specific actually ready to write a module like that to be
>> worthwhile.
>>
>>
>>
>> Mike
>>
>>
>>
>> On Sep 24, 2009, at 4:01 AM, Michael Giagnocavo wrote:
>>
>>
>>
>>   Great – hopefully we’ll meet on IRC or the conference sometime on
>> Friday. Email me when you’re on.
>>
>>
>>
>> A few questions I have:
>>
>>
>>
>> Clarity – I agree with you there, and thanks!
>>
>>
>>
>> Testability – is this even remotely practical? Looking at our FS code
>> plugins, there’s simply no way any amount of test environment code would get
>> us to anything testable. We make tons of direct P/Invoke calls, and the
>> whole model for what variables are set when, the state machine progression,
>> etc. does not seem like something that we can hope to possibly model right.
>> And it’s subject to many external influences (all the modules you have
>> loaded in FS). Logging is a pretty simple case, sure, we can make it not
>> call FS for testing. But in a real app, it just seems that there are way too
>> many dependencies, no? Maybe others who have apps written can chime in?
>>
>>
>>
>> Modularity – I agree there are two parts. But, I think they are pretty
>> tightly coupled. The FS interface into unmanaged code is done via unmanaged
>> code and is really clear: App, Api, ApiBackground. The other ways I can
>> think of are FS-specific, such as XML binding interface and so on. But those
>> are things we should just add to the mod_managed core and be done with. I’m
>> thinking maybe we are talking about different things? Can you provide some
>> user stories that we want to cover with a pluggable loader/executor/etc.?
>> Thanks for putting up with me!
>>
>>
>>
>> -Michael
>>
>>
>>
>> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
>> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
>> *Sent:* Thursday, September 24, 2009 12:32 AM
>> *To:* freeswitch-users@lists.freeswitch.org
>> *Subject:* Re: [Freeswitch-u

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-26 Thread Josh Rivers
The ability to directly create swigtypes...that's huge! I'd love to see some
examples of how to use that.

I've update my refactoring to include the changes to the trunk up through
r14981. I've also checked in updated binaries that should work with the
latest trunk builds(I hope?)
A question occurred to me: would it make any sense to push the plugin loader
into a separate DLL? That way we could keep the P/Invoke layer very cleanly
separated from the loader/process host/abstraction layer structures.

Josh

On Fri, Sep 25, 2009 at 1:13 PM, Michael Giagnocavo wrote:

>  There is a new function I checked in a little bit ago that lets you
> create any of the SWIGTYPE_p_xxx types – all you need is a pointer to the
> memory to represent whatever it is in native land. So with that, it’s
> actually possible to call most or all of the functions. (Yes DRK, you can
> now go do XML binding.) But sure, it’d be nice to make a real .NET-ish
> layer.
>
>
>
> Async events seems like it wouldn’t be hard, assuming FreeSWITCH delivers
> them that way?
>
>
>
> -Michael
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Michael
> Jerris
> *Sent:* Thursday, September 24, 2009 10:26 PM
>
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> There are a few other things I can think would be nice additions to
> mod_managed.  Maybe an event handler that does not require a thread to be
> sitting and waiting for events trying in a loop would be nice, instead
> something that is triggered each time there is a certain event class
> triggered.  Also, there has been some interest in doing full endpoint
> modules in mod_managed.  exposing all the state handlers in .net like ways
> and having that all work would be quite interesting, but probably requires
> someone specific actually ready to write a module like that to be
> worthwhile.
>
>
>
> Mike
>
>
>
> On Sep 24, 2009, at 4:01 AM, Michael Giagnocavo wrote:
>
>
>
>   Great – hopefully we’ll meet on IRC or the conference sometime on
> Friday. Email me when you’re on.
>
>
>
> A few questions I have:
>
>
>
> Clarity – I agree with you there, and thanks!
>
>
>
> Testability – is this even remotely practical? Looking at our FS code
> plugins, there’s simply no way any amount of test environment code would get
> us to anything testable. We make tons of direct P/Invoke calls, and the
> whole model for what variables are set when, the state machine progression,
> etc. does not seem like something that we can hope to possibly model right.
> And it’s subject to many external influences (all the modules you have
> loaded in FS). Logging is a pretty simple case, sure, we can make it not
> call FS for testing. But in a real app, it just seems that there are way too
> many dependencies, no? Maybe others who have apps written can chime in?
>
>
>
> Modularity – I agree there are two parts. But, I think they are pretty
> tightly coupled. The FS interface into unmanaged code is done via unmanaged
> code and is really clear: App, Api, ApiBackground. The other ways I can
> think of are FS-specific, such as XML binding interface and so on. But those
> are things we should just add to the mod_managed core and be done with. I’m
> thinking maybe we are talking about different things? Can you provide some
> user stories that we want to cover with a pluggable loader/executor/etc.?
> Thanks for putting up with me!
>
>
>
> -Michael
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Thursday, September 24, 2009 12:32 AM
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
>
>
> On Wed, Sep 23, 2009 at 7:31 PM, Michael Giagnocavo 
> wrote:
>
> Right off the bat: there can be tons of cleanup and refactoring, no doubt
> about that. Much of the current code is to satisfy my needs in production,
> which it does very well.
>
> The current base doesn't have anything wrong with it for sure, in fact, I
> learned a good bit about PInvoke. AppDomains, and In-Process Remoting in the
> last week.
>
>
>
> My refactoring had the following goals (in no particular order)
>
>  - Testability - I'd really like to see a decent unit test suite on the
> more module so that we can change it with confidence. Also, it's been
> drilled into me that a testable design is a good design.
>
>  - Clarity - Where poss

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-26 Thread Josh Rivers
I don't know what we'd want to write endpoints for, so I'll leave that one
alone... ;)
I do, however, agree with you on the event handler idea. My work on the
module system is largely a precursor to putting in some work on a pub/sub
event bus in managed code. I wanted some lifecycle and exception handling
control that wasn't easy in the existing dll and I wanted to be able to
create it without breaking stuff for other people.

My question is this: is an event bus a good thing to put in mod_managed, or
should it be an optional plugin that you load in?

Josh

On Thu, Sep 24, 2009 at 9:26 PM, Michael Jerris  wrote:

> There are a few other things I can think would be nice additions to
> mod_managed.  Maybe an event handler that does not require a thread to be
> sitting and waiting for events trying in a loop would be nice, instead
> something that is triggered each time there is a certain event class
> triggered.  Also, there has been some interest in doing full endpoint
> modules in mod_managed.  exposing all the state handlers in .net like ways
> and having that all work would be quite interesting, but probably requires
> someone specific actually ready to write a module like that to be
> worthwhile.
> Mike
>
> On Sep 24, 2009, at 4:01 AM, Michael Giagnocavo wrote:
>
> Great – hopefully we’ll meet on IRC or the conference sometime on Friday.
> Email me when you’re on.
>
> A few questions I have:
>
> Clarity – I agree with you there, and thanks!
>
> Testability – is this even remotely practical? Looking at our FS code
> plugins, there’s simply no way any amount of test environment code would get
> us to anything testable. We make tons of direct P/Invoke calls, and the
> whole model for what variables are set when, the state machine progression,
> etc. does not seem like something that we can hope to possibly model right.
> And it’s subject to many external influences (all the modules you have
> loaded in FS). Logging is a pretty simple case, sure, we can make it not
> call FS for testing. But in a real app, it just seems that there are way too
> many dependencies, no? Maybe others who have apps written can chime in?
>
> Modularity – I agree there are two parts. But, I think they are pretty
> tightly coupled. The FS interface into unmanaged code is done via unmanaged
> code and is really clear: App, Api, ApiBackground. The other ways I can
> think of are FS-specific, such as XML binding interface and so on. But those
> are things we should just add to the mod_managed core and be done with. I’m
> thinking maybe we are talking about different things? Can you provide some
> user stories that we want to cover with a pluggable loader/executor/etc.?
> Thanks for putting up with me!
>
> -Michael
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Thursday, September 24, 2009 12:32 AM
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> On Wed, Sep 23, 2009 at 7:31 PM, Michael Giagnocavo 
> wrote:
>
> Right off the bat: there can be tons of cleanup and refactoring, no doubt
> about that. Much of the current code is to satisfy my needs in production,
> which it does very well.
> The current base doesn't have anything wrong with it for sure, in fact, I
> learned a good bit about PInvoke. AppDomains, and In-Process Remoting in the
> last week.
>
> My refactoring had the following goals (in no particular order)
>  - Testability - I'd really like to see a decent unit test suite on the
> more module so that we can change it with confidence. Also, it's been
> drilled into me that a testable design is a good design.
>  - Clarity - Where possible, I extracted blocks of code that served a
> particular purpose so that purpose could be self-documenting in the method
> calls rather than mixed in.
>  - Modularity - I wanted to make it easy to remove or add alternative
> behavior to the managed.dll.
>
>
> I’m a bit hesitant to go too far from the FreeSWITCH core as far as
> architecture goes. For instance, I’m not quite sure why’d we have our own
> managed logging subsystem that allows them to plug in other things that
> aren’t part of FS. Either they should use the FS logging system, or use
> their own such as log4net. Or perhaps I don’t see why we’d want this
> behavior.
>
> I completely agree, with the following caveats:
> 1) I'd like to see things testable. It's very hard to do isolation testing
> with classes making direct calls out to a static Log class that in turn
> pinvokes out to unmanaged code.
> 2) I'd like to allow folk to make changes

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-26 Thread Josh Rivers
Sorry for fading off for a few days. Having too much fun doing stuff!
A few responses:

On Thu, Sep 24, 2009 at 1:01 AM, Michael Giagnocavo wrote:

>  A few questions I have:
>
> Testability – is this even remotely practical?
>
I've seen three areas of testability:
1) Interop
2) Module Extensibility Framework
3) Modules and Plugins

The interop testability picture is not an area I'm very familiar. I imagine
you could write a native mod_managed.dll testing shim and test against that.
I think this would have some limited value. It would confirm that interop
layers behaved as expected, but not much more. The biggest values would be
a) verifying that the api doesn't change accidentally, and b) providing a
good way of adding bug-solution cases when the behavior of the core is
causing a failure that we need to provide some padding around.

The extensibility portion is very easy to write tests for. The module loader
framework that I've refactored out of your code is completely stupid about
the unmanaged code. It blindly passes the pointers through to the consumers
that want them, and all of the module loader responsibilities are in managed
code and mostly coded to interface. Very easy to mock and test.

Finally the plugin testability story. Currently this is harder, since the
plugins are written to talk to a lot of static methods and direct unmanaged
types. As things evolve, I'd want to create a updated plugin interface that
passes all the interop points by interface. The unit testing responsibility
for an app or api plugin should primarily be that for a given set of inputs
or responses, it makes a specified set of calls. That should be possible to
mock and test in managed code if we provide a thin managed interface layer
over the P/Invoke|SWIG layer. I'm currently writing a plugin that does just
this, but I have the interface layer inside my code. Not everyone should
have to write their own though?

> Modularity – I agree there are two parts. But, I think they are pretty
> tightly coupled. The FS interface into unmanaged code is done via unmanaged
> code and is really clear: App, Api, ApiBackground. The other ways I can
> think of are FS-specific, such as XML binding interface and so on. But those
> are things we should just add to the mod_managed core and be done with. I’m
> thinking maybe we are talking about different things? Can you provide some
> user stories that we want to cover with a pluggable loader/executor/etc.?
>
 I'm going to be a bit long-winded here. I hope I can clarify my intent,
because I think I've been unclear on it so far.
A) Philosophy: I have two principal concepts that are guiding me in my push
towards modularity.
1) Single Responsibility Principal: "Each class or code file should only
have one reason to change." I don't think I'm quite here in the code I've
shown you, but it's getting closer. (I could definitely use help.) The idea
here is that the class that monitors the plugin directory shouldn't also
load the files. The class that loads the files shouldn't be responsible for
configuring and creating app domains. Neither of those classes should have
concrete logging code in them. The good thing about this is that you don't
have to worry about breaking the loader when you change the watcher, and
vice-versa. If we later decide to change the watcher so that it only checks
for updates manually, we don't need to even let the loader know.
2) Open-Closed Principal: "Classes should be open for extension and closed
for modification." The idea here is that once we've written a working class
that has it's bugs ironed out and it's unit tests written, we shouldn't
(ideally) ever need to change it. If we need a new behavior, we can just
subclass the original, or implement the same interface, or whatever, and use
the new class instead of the old one. If everything is nice
an loosely coupled, we can just slide the new implementation in for improved
behavior without changing the old one. What this means for the module system
is that we can create new functionality without breaking old functionality.

B) Actual uses: (Please note, that in most cases, I don't think that
mod_managed needs to build out these functions, rather, I think mod_managed
should "get out of the way" and let developers plug in what they want)
1) Commercial PBX Developer/Distributor:
Case: Say I want to write my own FreeSWITCH distro/UI/packaged software on
Windows, and I want to do all of my development in managed code and I don't
care about plugins or anything.
Answer: recompile my managed.dll with just a few changed lines in Loader.cs
and your code controls everything coming into mod_managed. Ultimate power.
Roll your own. Use it to launch a UI. Go nutz.
2) Complicated interwoven plugins:
Case: I want to write a bunch of plugin dlls and have them all
cross-communicate and share caches and statics.
Answer: provide your own implementation of IModuleLoader and plug it into
the registry. Now you can eliminate all of those pesky appdo

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-23 Thread Josh Rivers
On Wed, Sep 23, 2009 at 7:31 PM, Michael Giagnocavo wrote:

>  Right off the bat: there can be tons of cleanup and refactoring, no doubt
> about that. Much of the current code is to satisfy my needs in production,
> which it does very well.
>
The current base doesn't have anything wrong with it for sure, in fact, I
learned a good bit about PInvoke. AppDomains, and In-Process Remoting in the
last week.

My refactoring had the following goals (in no particular order)
 - Testability - I'd really like to see a decent unit test suite on the more
module so that we can change it with confidence. Also, it's been drilled
into me that a testable design is a good design.
 - Clarity - Where possible, I extracted blocks of code that served a
particular purpose so that purpose could be self-documenting in the method
calls rather than mixed in.
 - Modularity - I wanted to make it easy to remove or add alternative
behavior to the managed.dll.


> I’m a bit hesitant to go too far from the FreeSWITCH core as far as
> architecture goes. For instance, I’m not quite sure why’d we have our own
> managed logging subsystem that allows them to plug in other things that
> aren’t part of FS. Either they should use the FS logging system, or use
> their own such as log4net. Or perhaps I don’t see why we’d want this
> behavior.
>
I completely agree, with the following caveats:
1) I'd like to see things testable. It's very hard to do isolation testing
with classes making direct calls out to a static Log class that in turn
pinvokes out to unmanaged code.
2) I'd like to allow folk to make changes to the default behavior
(optimally) without recompiling managed.dll.

One thing at issue here is that there are two principal purposes for
managed.dll. The first is to provide an interface into unmanaged code. The
second is a module/plugin extensibility framework. The first purpose should
absolutely provide the thinnest layer possible. The second purpose is very
likely to need a lot of change and adaptation as people come up with
development models that they would like to follow in using freeswitch. The
extensibility framework should be mostly managed code, coded to interfaces
for mock-ability and testabiliy. It should also be able to just push it out
of the way and hook your own extensibilty framework in instead.

>  Going away from the core as far as adding .NET specific features (like
> look at the static ManagedSession.Originate that takes hangup delegates, or
> the “nice” wrapper for Log (Write and WeiteLine, with an enum instead of a
> string) are keeping close to the core, just adding a tiny bit of API
> cleanup. FreeSWITCH exposes a lot of strings, and while maybe that’s
> important for some languages, .NET users are going to expect stronger
> typing. But I don’t think these types of things get people away from
> FreeSWITCH much.
>
No disagreement here. I would like to see these things made available by
interface rather than concrete implementation. It's currently not possible
to test a plugin without loading it into FS. That precludes automated
testing, and leaves a pretty big round-trip to test a tweak. I'm a sloppy
coder too, so I'm always introducing interesting regressions, and that's why
I like doing my testing without having to bring up a full process :)

> Things like making a published SOAP interface for FS seem not really
> related to mod_managed. They can easily be done as 3rd party plugins, or
> convince the core FS team that exposing via SOAP via mod_managed is the way
> to go. Also keep in mind that the majority of users are on Linux, so that
> rules out WCF and some other fun stuff that only works on the CLR – I’d say
> it all has to work on Mono.
>
This kind of stuff is definitely beyond the scope of mod_managed. Although
there is a slippery slope since we're building in an extensibility model. I
don't think a WCF host, or a winforms host, or any of that should be baked
in. Rather, I think we should provide the hooks for adding such a thing. If
somebody wants to build ESL via WCF, why should they need to leave managed
code? If the module system is general enough, then such a thing should just
be a module.
(BTW, I think WCF-Mono is getting there
http://www.mono-project.com/WCF_Development)
Absolutely, everything in mod_managed and managed.dll should run on mono and
the CLR. However, there shouldn't be any reason that a Win-only developer
can't build a complete FS application framework that plugs in and only runs
on Windows.

> As for all the rest of it, can we talk interactively, perhaps with other
> users interested in mod_managed? Reading over your email, I think I’m not
> understanding many of the use cases that are being fixed.
>
I'd be very glad to get a discussion going. I definitely haven't covered all
of the issues here.

-Josh
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:h

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-23 Thread Josh Rivers
;
>>
>>
>> That’d provide the control you want for loading. We could do something
>> similar for App/Api plugins.
>>
>>
>>
>> I want to move ILoadNotificationPlugin from being this “catch all” thing
>> that controls the entire assembly to something that can be used to fire up
>> code; effectively “OnLoad” and “OnUnload”. To dynamically control loading,
>> we’ll probably reflect on the individual plugins looking for attributes or
>> perhaps some sort of static load function.
>>
>>
>>
>> How’s that sound?
>>
>>
>>
>>
>>
>> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
>> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
>> *Sent:* Thursday, September 10, 2009 12:48 PM
>>
>> *To:* freeswitch-users@lists.freeswitch.org
>> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
>> .NET
>>
>>
>>
>> I'm only concerned with the difference in treatment.
>>
>> public class CrashFreeSWITCH : ILoadNotificationPlugin
>> {
>> public bool Load()
>> {
>> ThreadPool.QueueUserWorkItem((o) => { throw new
>> NotImplementedException(); });
>> return true;
>> }
>> }
>>
>> Crashes the entire switch, terminating all calls and disconnecting from
>> the PSTN.
>>
>> public class CrashFreeSWITCH : ILoadNotificationPlugin
>> {
>> public bool Load()
>> {
>> throw new NotImplementedException();
>> return true;
>> }
>> }
>>
>> Logs a message to the console and doesn't load the module, while leaving
>> the switch operating.
>>
>>
>>
>> In my experience, exceptions in multi-threaded code: a) happen, b) are
>> hard to diagnose. Is the best behavior for the environment to crash,
>> providing no diagnostic information? That's hard in development, and even
>> harder in production. I suppose 'terminate switch on fault' should be an
>> option, to allow the operating system to restart the whole process on fault
>> conditions, but if that is the intended result, shouldn't any fault do the
>> same thing? What if the billing was happening in my second code block?
>>
>>
>>
>> Normally, I'd trap the ThreadException and UnhandledExceptions in my
>> application, so that my code could choose the correct actions to perform
>> should the application get into an unknown state. This can include
>> terminating the whole application, but also logging diagnostic information,
>> trying to save uncommitted data, and sending notifications of the failure.
>>
>>
>>
>> Is 'crash if it's a thread, but not if it's not' good because it's the way
>> the module works now, or is it a better design for a reason I'm not
>> understanding?
>>
>>
>>
>> On Wed, Sep 9, 2009 at 11:09 PM, Michael Giagnocavo 
>> wrote:
>>
>> Well, a segfault in voicemail would do the same thing.
>>
>>
>>
>> Suppose your plugin runs a thread that does something important, like
>> billing or so on. That thread fails – do you really want it to go on?
>>
>>
>>
>> Anyways, the solution is simple enough, handle your exceptions J. Every
>> plugin can decide what it wants to do here.
>>
>>
>>
>> -Michael
>>
>>
>>
>> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
>> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
>> *Sent:* Wednesday, September 09, 2009 10:41 PM
>>
>>
>> *To:* freeswitch-users@lists.freeswitch.org
>> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
>> .NET
>>
>>
>>
>> The question is whether the CLR should take down the whole phone server
>> due to an unhandled exception...definitely the CLR should terminate...but
>> shouldn't it just log the exception to the console, not crash the core?
>>
>> On Wed, Sep 9, 2009 at 6:30 PM, Michael Giagnocavo 
>> wrote:
>>
>> That’s by design. If a thread fails, and there’s no handler, then the
>> application could be in a corrupted state, so the CLR takes down the
>> process.
>>
>>
>>
>> I think there is a .NET 1.0 compat switch you can enable in the config if
>> you like exceptions to be silently ignored J.
>>
>>
>>
>> -Michael
>>
>>
>>
>>

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-10 Thread Josh Rivers
I'm only concerned with the difference in treatment.

public class CrashFreeSWITCH : ILoadNotificationPlugin
{
public bool Load()
{
ThreadPool.QueueUserWorkItem((o) => { throw new
NotImplementedException(); });
return true;
}
}
Crashes the entire switch, terminating all calls and disconnecting from the
PSTN.

public class CrashFreeSWITCH : ILoadNotificationPlugin
{
public bool Load()
{
throw new NotImplementedException();
return true;
}
}
Logs a message to the console and doesn't load the module, while leaving the
switch operating.

In my experience, exceptions in multi-threaded code: a) happen, b) are hard
to diagnose. Is the best behavior for the environment to crash, providing no
diagnostic information? That's hard in development, and even harder in
production. I suppose 'terminate switch on fault' should be an option, to
allow the operating system to restart the whole process on fault conditions,
but if that is the intended result, shouldn't any fault do the same thing?
What if the billing was happening in my second code block?

Normally, I'd trap the ThreadException and UnhandledExceptions in my
application, so that my code could choose the correct actions to perform
should the application get into an unknown state. This can include
terminating the whole application, but also logging diagnostic information,
trying to save uncommitted data, and sending notifications of the failure.

Is 'crash if it's a thread, but not if it's not' good because it's the way
the module works now, or is it a better design for a reason I'm not
understanding?

On Wed, Sep 9, 2009 at 11:09 PM, Michael Giagnocavo wrote:

>  Well, a segfault in voicemail would do the same thing.
>
>
>
> Suppose your plugin runs a thread that does something important, like
> billing or so on. That thread fails – do you really want it to go on?
>
>
>
> Anyways, the solution is simple enough, handle your exceptions J. Every
> plugin can decide what it wants to do here.
>
>
>
> -Michael
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Wednesday, September 09, 2009 10:41 PM
>
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> The question is whether the CLR should take down the whole phone server due
> to an unhandled exception...definitely the CLR should terminate...but
> shouldn't it just log the exception to the console, not crash the core?
>
> On Wed, Sep 9, 2009 at 6:30 PM, Michael Giagnocavo 
> wrote:
>
> That’s by design. If a thread fails, and there’s no handler, then the
> application could be in a corrupted state, so the CLR takes down the
> process.
>
>
>
> I think there is a .NET 1.0 compat switch you can enable in the config if
> you like exceptions to be silently ignored J.
>
>
>
> -Michael
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Wednesday, September 09, 2009 6:39 PM
>
>
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> I have a new thought on the crashes...I'm able to crash FreeSWITCH any time
> I like, just by having an exception in a thread.
>
>
>
> public class CrashFreeSWITCH : ILoadNotificationPlugin
>
> {
>
> public bool Load()
>
> {
>
> ThreadPool.QueueUserWorkItem((o) => { throw new
> NotImplementedException(); });
>
> return true;
>
> }
>
> }
>
>
>
> Perhaps Application.ThreadException or AppDomain.UnhandledException need to
> be trapped?
>
>
>
> On Wed, Sep 9, 2009 at 4:51 PM, Michael Giagnocavo 
> wrote:
>
> >Looks like the event object goes straight to pinvokes, so a null result
> just crashes?
>
>
>
> If it’s null, you should get a NullReferenceException. The C# compiler
> should callvirt the property getter and that’ll do a null check. If that
> isn’t happening, that’d be an interesting optimization somewhere along the
> line.
>
>
>
> -Michael
>
>
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Wednesday, September 09, 2009 3:01 PM
>
>
> *To:* freeswitch-users@lists.freeswitch.org
>
> *Subject:* Re: [Free

Re: [Freeswitch-users] Implementing h extension in FS

2009-09-09 Thread Josh Rivers
You should be able to handle hangups in one of two ways:1) Register a hangup
handler in your script or dialplan. This will execute a script on the hangup
of the call.
2) Use the Event Socket Layer(ESL) to listen to hangup events and then
perform your actions there.

You can find more about these options in the wiki.

On Wed, Sep 9, 2009 at 10:16 PM, Ahmed Munir wrote:

> HI,
>
> I'm newbie in FS, I want to know how to implement h extension of asterisk
> to FS. As I listed down below;
>
> h =>
> {
> NOOP("Call Completed with Carrier ${CARRIER}");
> goto add_cdr|h|1;
> };
>
> My other question is, which application/function/class is use in mod_perl
> to check the channel status? i.e. busy, answer,hangup,ringing,etc.
>
>
> Kindly advice me soon.
>
> --
> Regards,
>
> Ahmed Munir
>
>
>
> ___
> FreeSWITCH-users mailing list
> FreeSWITCH-users@lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-09 Thread Josh Rivers
The question is whether the CLR should take down the whole phone server due
to an unhandled exception...definitely the CLR should terminate...but
shouldn't it just log the exception to the console, not crash the core?

On Wed, Sep 9, 2009 at 6:30 PM, Michael Giagnocavo wrote:

>  That’s by design. If a thread fails, and there’s no handler, then the
> application could be in a corrupted state, so the CLR takes down the
> process.
>
>
>
> I think there is a .NET 1.0 compat switch you can enable in the config if
> you like exceptions to be silently ignored J.
>
>
>
> -Michael
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Wednesday, September 09, 2009 6:39 PM
>
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> I have a new thought on the crashes...I'm able to crash FreeSWITCH any time
> I like, just by having an exception in a thread.
>
>
>
> public class CrashFreeSWITCH : ILoadNotificationPlugin
>
> {
>
> public bool Load()
>
> {
>
> ThreadPool.QueueUserWorkItem((o) => { throw new
> NotImplementedException(); });
>
> return true;
>
> }
>
> }
>
>
>
> Perhaps Application.ThreadException or AppDomain.UnhandledException need
> to be trapped?
>
>
>
> On Wed, Sep 9, 2009 at 4:51 PM, Michael Giagnocavo 
> wrote:
>
> >Looks like the event object goes straight to pinvokes, so a null result
> just crashes?
>
>
>
> If it’s null, you should get a NullReferenceException. The C# compiler
> should callvirt the property getter and that’ll do a null check. If that
> isn’t happening, that’d be an interesting optimization somewhere along the
> line.
>
>
>
> -Michael
>
>
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Wednesday, September 09, 2009 3:01 PM
>
>
> *To:* freeswitch-users@lists.freeswitch.org
>
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> A new discovery:
>
> public bool Load()
>
> {
>
> ThreadPool.QueueUserWorkItem((o) =>
>
> {
>
> Log.WriteLine(LogLevel.Notice, "Thread Starting. ");
>
> EventConsumer con = new EventConsumer("all", "");
>
> while (true)
>
> {
>
> Event ev = con.pop(0);
>
> if (ev == null) continue;
>
> Log.WriteLine(LogLevel.Notice, "Event: " +
> ev.serialized_string);
>
> }
>
> });
>
> return true;
>
> }
>
> Does not crash. (Adding the null check prevents crash.) The backgrounded
> loop runs fine. Looks like the event object goes straight to pinvokes, so a
> null result just crashes?
>
>
>
> I like the idea of a 'startup-script' for mod_managed. It would also be
> excellent if there was an event or message  informing the background code to
> terminate nicely when the module reloads.
>
>
>
> --Josh
>
>
>
> On Wed, Sep 9, 2009 at 12:57 PM, Jeff Lenk  wrote:
>
>
> I think the problem here is that the loader only keeps this method in scope
> until completion then it drops the remoted connection. Therefore you should
> not use threads in this method. Michael please correct me if I am wrong
> here.
>
> As an example of the failure simply just put a Sleep(1) call in the
> thread and you will see the failure.
>
> As Michael said this method was only designed to allow the option to opt
> out
> of being loaded.
>
> In order to support this perhaps a configuration flag simular to the lua
> "startup-script" should be added.
>
>
>
>
> Here is the error I get with the loop I mentioned. -Josh
> [image: Capture.PNG]
>
> On Tue, Sep 8, 2009 at 5:05 AM, Michael Giagnocavo
> wrote:
>
> >  Hi,
> >
> >
> >
> > Can you please elaborate on the crash you receive when
> you
> > queue a thread during load?
> >
> >
> >
> > Thanks,
> >
> > Michael
> >
> >
>
> --
> View this message in context:
> http://n2.nabble.com/Subscribing-to-events-in-managed-C-NET-tp3573619p3613195.html
> Sent from the freeswitch-users mailing list archive at Nabble

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-09 Thread Josh Rivers
I have a new thought on the crashes...I'm able to crash FreeSWITCH any time
I like, just by having an exception in a thread.
public class CrashFreeSWITCH : ILoadNotificationPlugin
{
public bool Load()
{
ThreadPool.QueueUserWorkItem((o) => { throw new
NotImplementedException(); });
return true;
}
}

Perhaps Application.ThreadException or AppDomain.UnhandledException need to
be trapped?

On Wed, Sep 9, 2009 at 4:51 PM, Michael Giagnocavo wrote:

>  >Looks like the event object goes straight to pinvokes, so a null result
> just crashes?
>
>
>
> If it’s null, you should get a NullReferenceException. The C# compiler
> should callvirt the property getter and that’ll do a null check. If that
> isn’t happening, that’d be an interesting optimization somewhere along the
> line.
>
>
>
> -Michael
>
>
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Wednesday, September 09, 2009 3:01 PM
>
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> A new discovery:
>
> public bool Load()
>
> {
>
> ThreadPool.QueueUserWorkItem((o) =>
>
> {
>
> Log.WriteLine(LogLevel.Notice, "Thread Starting. ");
>
> EventConsumer con = new EventConsumer("all", "");
>
> while (true)
>
> {
>
> Event ev = con.pop(0);
>
> if (ev == null) continue;
>
> Log.WriteLine(LogLevel.Notice, "Event: " +
> ev.serialized_string);
>
> }
>
> });
>
> return true;
>
> }
>
> Does not crash. (Adding the null check prevents crash.) The backgrounded
> loop runs fine. Looks like the event object goes straight to pinvokes, so a
> null result just crashes?
>
>
>
> I like the idea of a 'startup-script' for mod_managed. It would also be
> excellent if there was an event or message  informing the background code to
> terminate nicely when the module reloads.
>
>
>
> --Josh
>
>
>
> On Wed, Sep 9, 2009 at 12:57 PM, Jeff Lenk  wrote:
>
>
> I think the problem here is that the loader only keeps this method in scope
> until completion then it drops the remoted connection. Therefore you should
> not use threads in this method. Michael please correct me if I am wrong
> here.
>
> As an example of the failure simply just put a Sleep(1) call in the
> thread and you will see the failure.
>
> As Michael said this method was only designed to allow the option to opt
> out
> of being loaded.
>
> In order to support this perhaps a configuration flag simular to the lua
> "startup-script" should be added.
>
>
>
>
> Here is the error I get with the loop I mentioned. -Josh
> [image: Capture.PNG]
>
> On Tue, Sep 8, 2009 at 5:05 AM, Michael Giagnocavo
> wrote:
>
> >  Hi,
> >
> >
> >
> > Can you please elaborate on the crash you receive when
> you
> > queue a thread during load?
> >
> >
> >
> > Thanks,
> >
> > Michael
> >
> >
>
> --
> View this message in context:
> http://n2.nabble.com/Subscribing-to-events-in-managed-C-NET-tp3573619p3613195.html
> Sent from the freeswitch-users mailing list archive at Nabble.com.
>
>
> ___
> FreeSWITCH-users mailing list
> FreeSWITCH-users@lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
>
> ___
> FreeSWITCH-users mailing list
> FreeSWITCH-users@lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-09 Thread Josh Rivers
It does from a fresh start of FreeSWITCH. I've noticed, although not really
confirmed, a race condition between the unload and reload of managed code.
It seems that threads started in the newly submodule are terminated along
with the threads for the old, unloading submodule. Is that what you are
seeing as well?
On Wed, Sep 9, 2009 at 2:38 PM, Jeff Lenk  wrote:

>
> Yeah I noticed that but the thread was still terminating after a few
> seconds
> anyway for me. Does it stay running for you?
>
>
> Josh Rivers-2 wrote:
> >
> > A new discovery:public bool Load()
> > {
> > ThreadPool.QueueUserWorkItem((o) =>
> > {
> > Log.WriteLine(LogLevel.Notice, "Thread Starting. ");
> > EventConsumer con = new EventConsumer("all", "");
> > while (true)
> > {
> > Event ev = con.pop(0);
> > if (ev == null) continue;
> > Log.WriteLine(LogLevel.Notice, "Event: " +
> > ev.serialized_string);
> > }
> > });
> > return true;
> > }
> > Does not crash. (Adding the null check prevents crash.) The backgrounded
> > loop runs fine. Looks like the event object goes straight to pinvokes, so
> > a
> > null result just crashes?
> >
> > I like the idea of a 'startup-script' for mod_managed. It would also be
> > excellent if there was an event or message  informing the background code
> > to
> > terminate nicely when the module reloads.
> >
> > --Josh
> >
> > On Wed, Sep 9, 2009 at 12:57 PM, Jeff Lenk 
> wrote:
> >
> >>
> >> I think the problem here is that the loader only keeps this method in
> >> scope
> >> until completion then it drops the remoted connection. Therefore you
> >> should
> >> not use threads in this method. Michael please correct me if I am wrong
> >> here.
> >>
> >> As an example of the failure simply just put a Sleep(1) call in the
> >> thread and you will see the failure.
> >>
> >> As Michael said this method was only designed to allow the option to opt
> >> out
> >> of being loaded.
> >>
> >> In order to support this perhaps a configuration flag simular to the lua
> >> "startup-script" should be added.
> >>
> >>
> >>
> >> Here is the error I get with the loop I mentioned. -Josh
> >> [image: Capture.PNG]
> >>
> >> On Tue, Sep 8, 2009 at 5:05 AM, Michael Giagnocavo
> >> wrote:
> >>
> >> >  Hi,
> >> >
> >> >
> >> >
> >> > Can you please elaborate on the crash you receive when
> >> you
> >> > queue a thread during load?
> >> >
> >> >
> >> >
> >> > Thanks,
> >> >
> >> > Michael
> >> >
> >> >
> >>
> >> --
> >> View this message in context:
> >>
> http://n2.nabble.com/Subscribing-to-events-in-managed-C-NET-tp3573619p3613195.html
> >> Sent from the freeswitch-users mailing list archive at Nabble.com.
> >>
> >> ___
> >> FreeSWITCH-users mailing list
> >> FreeSWITCH-users@lists.freeswitch.org
> >> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> >> UNSUBSCRIBE:
> http://lists.freeswitch.org/mailman/options/freeswitch-users
> >> http://www.freeswitch.org
> >>
> >
> > ___
> > FreeSWITCH-users mailing list
> > FreeSWITCH-users@lists.freeswitch.org
> > http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> > UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> > http://www.freeswitch.org
> >
> >
>
> --
> View this message in context:
> http://n2.nabble.com/Subscribing-to-events-in-managed-C-NET-tp3573619p3614845.html
> Sent from the freeswitch-users mailing list archive at Nabble.com.
>
> ___
> FreeSWITCH-users mailing list
> FreeSWITCH-users@lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-09 Thread Josh Rivers
A new discovery:public bool Load()
{
ThreadPool.QueueUserWorkItem((o) =>
{
Log.WriteLine(LogLevel.Notice, "Thread Starting. ");
EventConsumer con = new EventConsumer("all", "");
while (true)
{
Event ev = con.pop(0);
if (ev == null) continue;
Log.WriteLine(LogLevel.Notice, "Event: " +
ev.serialized_string);
}
});
return true;
}
Does not crash. (Adding the null check prevents crash.) The backgrounded
loop runs fine. Looks like the event object goes straight to pinvokes, so a
null result just crashes?

I like the idea of a 'startup-script' for mod_managed. It would also be
excellent if there was an event or message  informing the background code to
terminate nicely when the module reloads.

--Josh

On Wed, Sep 9, 2009 at 12:57 PM, Jeff Lenk  wrote:

>
> I think the problem here is that the loader only keeps this method in scope
> until completion then it drops the remoted connection. Therefore you should
> not use threads in this method. Michael please correct me if I am wrong
> here.
>
> As an example of the failure simply just put a Sleep(1) call in the
> thread and you will see the failure.
>
> As Michael said this method was only designed to allow the option to opt
> out
> of being loaded.
>
> In order to support this perhaps a configuration flag simular to the lua
> "startup-script" should be added.
>
>
>
> Here is the error I get with the loop I mentioned. -Josh
> [image: Capture.PNG]
>
> On Tue, Sep 8, 2009 at 5:05 AM, Michael Giagnocavo
> wrote:
>
> >  Hi,
> >
> >
> >
> > Can you please elaborate on the crash you receive when
> you
> > queue a thread during load?
> >
> >
> >
> > Thanks,
> >
> > Michael
> >
> >
>
> --
> View this message in context:
> http://n2.nabble.com/Subscribing-to-events-in-managed-C-NET-tp3573619p3613195.html
> Sent from the freeswitch-users mailing list archive at Nabble.com.
>
> ___
> FreeSWITCH-users mailing list
> FreeSWITCH-users@lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-09 Thread Josh Rivers
  kernel32.dll!77e4bef7()
Here's that call stack.

  [Frames below may be incorrect and/or missing, no symbols loaded for
kernel32.dll]
  kernel32.dll!77e4bef7()
  msvcr80.dll!78158e89()
  mscorwks.dll!79e7a17a()
  mscorwks.dll!79ea0fa8()
  mscorwks.dll!79ea0eff()
  mscorwks.dll!79e976cc()
  mscorwks.dll!79e976b3()
  mscorwks.dll!79e9e3bd()
  mscorwks.dll!79e970c8()
  mscorwks.dll!79f782f1()
  mscorwks.dll!79eaa5c5()
  mscorwks.dll!79eaad29()
  mscorwks.dll!79e9a15d()
  mscorwks.dll!79e9a15d()
  mscorwks.dll!79e7a1f1()
  mscorwks.dll!79e7a1f1()
  mscorwks.dll!79e7a17a()
  mscorwks.dll!79e88cca()
  mscorwks.dll!79e96571()
  mscorwks.dll!79e965a4()
  mscorwks.dll!79e965c2()
  mscorwks.dll!79f59330()
  mscorwks.dll!79f59492()
  mscorlib.ni.dll!792d5348()
  mscorlib.ni.dll!792d514f()
  mscorlib.ni.dll!792d4fde()
  mscorlib.ni.dll!79799714()
  mscorwks.dll!79e813e4()
  mscorwks.dll!79e813ec()
> FreeSwitch.dll!switch_loadable_module_load_file(char * path=0x01181250,
char * filename=0x01181240, switch_bool_t global=SWITCH_FALSE,
switch_loadable_module * * new_module=0x0012d9e0)  Line 846 + 0xd bytes C
  FreeSwitch.dll!switch_loadable_module_load_module_ex(char *
dir=0x003994a8, char * fname=0x01081d59, switch_bool_t runtime=SWITCH_FALSE,
switch_bool_t global=SWITCH_FALSE, const char * * err=0x0012da5c)  Line 942
+ 0x15 bytes C
  FreeSwitch.dll!switch_loadable_module_init()  Line 1174 + 0x23 bytes C
  FreeSwitch.dll!switch_core_init_and_modload(unsigned int flags=129,
switch_bool_t console=SWITCH_TRUE, const char * * err=0x0012fdec)  Line 1469
+ 0x5 bytes C
  FreeSwitch.exe!main(int argc=1, char * * argv=0x00394f80)  Line 748 + 0x23
bytes C
  FreeSwitch.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes C
  FreeSwitch.exe!mainCRTStartup()  Line 403 C
  kernel32.dll!77e6f23b()

The breakpoint is: status = load_func_ptr(&module_interface, pool);
Line 846 in switch_loadable_module.c

--Josh

On Tue, Sep 8, 2009 at 10:50 PM, Josh Rivers  wrote:

> I'm running of the binary release, so I don't have debug symbols for the
> freeswitch core. I can do a build...but does somebody else already have one
> handy? -Josh
>
>
> On Tue, Sep 8, 2009 at 10:33 PM, Mathieu Rene  wrote:
>
>> Click Break, then go in Window, Debug, Stack Trace (or something similar,
>> I don't have any VS nearby), then copy paste that.
>>  Mathieu Rene
>> Avant-Garde Solutions Inc
>> Office: + 1 (514) 664-1044 x100
>> Cell: +1 (514) 664-1044 x200
>> mr...@avgs.ca
>>
>>
>>
>>
>> On 8-Sep-09, at 10:30 PM, Josh Rivers wrote:
>>
>> Here is the error I get with the loop I mentioned. -Josh
>> 
>>
>> On Tue, Sep 8, 2009 at 5:05 AM, Michael Giagnocavo 
>> wrote:
>>
>>>  Hi,
>>>
>>>
>>> Can you please elaborate on the crash you receive when
>>> you queue a thread during load?
>>>
>>>
>>> Thanks,
>>>
>>> Michael
>>>
>>>
>>> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
>>> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh
>>> Rivers
>>> *Sent:* Tuesday, September 08, 2009 12:22 AM
>>> *To:* freeswitch-users@lists.freeswitch.org
>>> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
>>> .NET
>>>
>>>
>>> Thanks for the response!
>>>
>>>
>>> I have tried putting a long-running loop here, but then it blocks
>>> anything else managed from happening:
>>>
>>>
>>>public class TestLoop : ILoadNotificationPlugin
>>>
>>> {
>>>
>>> public bool Load()
>>>
>>> {
>>>
>>> EventConsumer con = new EventConsumer("all", "");
>>>
>>> while (true)
>>>
>>> {
>>>
>>> Event ev = con.pop(0);
>>>
>>> Log.WriteLine(LogLevel.Notice, "Event: " +
>>> ev.serialized_string);
>>>
>>> freeswitch.msleep(100);
>>>
>>> }
>>>
>>> }
>>>
>>> }
>>>
>>>
>>> However, if I fork off a thread here, freeswitch crashes:
>>>
>>> public class TestLoop : ILoadNotificationPlugin
>>>
>>> {
>>>
>>> public bool Load()
>>>
>>> {
>>>
>>> ThreadPool.QueueUserWorkItem((o) =>
>>>
>>> {
>>>
>>> Log.WriteLine(LogLevel.Notice, "Thread Starting.

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-08 Thread Josh Rivers
I'm running of the binary release, so I don't have debug symbols for the
freeswitch core. I can do a build...but does somebody else already have one
handy? -Josh

On Tue, Sep 8, 2009 at 10:33 PM, Mathieu Rene  wrote:

> Click Break, then go in Window, Debug, Stack Trace (or something similar, I
> don't have any VS nearby), then copy paste that.
> Mathieu Rene
> Avant-Garde Solutions Inc
> Office: + 1 (514) 664-1044 x100
> Cell: +1 (514) 664-1044 x200
> mr...@avgs.ca
>
>
>
>
> On 8-Sep-09, at 10:30 PM, Josh Rivers wrote:
>
> Here is the error I get with the loop I mentioned. -Josh
> 
>
> On Tue, Sep 8, 2009 at 5:05 AM, Michael Giagnocavo wrote:
>
>>  Hi,
>>
>>
>> Can you please elaborate on the crash you receive when you
>> queue a thread during load?
>>
>>
>> Thanks,
>>
>> Michael
>>
>>
>> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
>> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
>> *Sent:* Tuesday, September 08, 2009 12:22 AM
>> *To:* freeswitch-users@lists.freeswitch.org
>> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
>> .NET
>>
>>
>> Thanks for the response!
>>
>>
>> I have tried putting a long-running loop here, but then it blocks anything
>> else managed from happening:
>>
>>
>>public class TestLoop : ILoadNotificationPlugin
>>
>> {
>>
>> public bool Load()
>>
>> {
>>
>> EventConsumer con = new EventConsumer("all", "");
>>
>> while (true)
>>
>> {
>>
>> Event ev = con.pop(0);
>>
>> Log.WriteLine(LogLevel.Notice, "Event: " +
>> ev.serialized_string);
>>
>> freeswitch.msleep(100);
>>
>> }
>>
>> }
>>
>> }
>>
>>
>> However, if I fork off a thread here, freeswitch crashes:
>>
>> public class TestLoop : ILoadNotificationPlugin
>>
>> {
>>
>> public bool Load()
>>
>> {
>>
>> ThreadPool.QueueUserWorkItem((o) =>
>>
>> {
>>
>> Log.WriteLine(LogLevel.Notice, "Thread Starting. ");
>>
>> EventConsumer con = new EventConsumer("all", "");
>>
>> while (true)
>>
>> {
>>
>> Event ev = con.pop(0);
>>
>> Log.WriteLine(LogLevel.Notice, "Event: " +
>> ev.serialized_string);
>>
>> freeswitch.msleep(100);
>>
>> }
>>
>> });
>>
>> return true;
>>
>> }
>>
>> }
>>
>>
>> It doesn't look like this is a good place to start a long-running process?
>>
>>
>> Thanks!
>>
>> Josh
>>
>>
>> On Mon, Sep 7, 2009 at 11:05 PM, Raffaele P. Guidi <
>> raffaele.p.gu...@gmail.com> wrote:
>>
>> Yes!
>>
>>
>> public class LoadDemo : ILoadNotificationPlugin {
>>
>> public bool Load() {
>>
>> Log.WriteLine(LogLevel.Notice, "LoadDemo running.");
>>
>> return true;
>>
>> }
>>
>> }
>>
>>
>> this example is from Michael Giagnocavo's Demo.csx which you can find into
>> the mod_managed svn.
>>
>>
>> And let me add that works like a charm :)
>>
>>
>> Ciao,
>>
>>Raffaele
>>
>>
>> On Sun, Sep 6, 2009 at 22:50, Josh Rivers  wrote:
>>
>>  Is there a way to start this when FreeSWITCH starts? The lua and perl
>> modules have a 'startup-script' configuration preference. Is there something
>> similar in mod_managed? Or is there a way to have an api command executed at
>> a startup?
>>
>>
>> 
>>
>> Exactly what I was after - thank you!
>>
>>
>> On Thu, Sep 3, 2009 at 1:54 PM, Jeff Lenk  wrote:
>>
>>
>> >
>>
>> > try something like this
>>
>> >
>>
>> > EventConsumer con = new EventConsumer("all", "");
>>
>> > Event ev = con.pop(0);
>>
>> >
>>
>> > see lua sample -
>>
>> > http://wiki.freeswitch.org/wiki/Lua#

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-08 Thread Josh Rivers
mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Raffaele P.
> Guidi
> *Sent:* Tuesday, September 08, 2009 12:22 PM
>
>
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> Well, I can't see any delegate in josh sample, just a
> ThreadPool.QueueUserWorkItem. Here is an example that, at least on my
> system (I reached my home pc in the meanwhile), works fine.
>
>
>
>  public class LoadPluginDemo : ILoadNotificationPlugin {
>
>   delegate void Listener();
>
>   private void EventListener() {
>
> EventConsumer con = new EventConsumer("all", null);
>
> while (true){
>
>  Event ev = con.pop(1);
>
>  Log.WriteLine(LogLevel.Notice, "Got event " +
> ev.GetHeader("Event-Name"));
>
> }
>
>   }
>
> public bool Load() {
>
> Log.WriteLine(LogLevel.Notice, "LoadDemo running.");
>
> new Listener(EventListener).BeginInvoke(null,null);
>
> return true;
>
> }
>
>  }
>
>
>
>
>
>
>
> On Tue, Sep 8, 2009 at 18:43, Michael Giagnocavo 
> wrote:
>
> That’s what his sample does, but he says it crashes.
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Raffaele P.
> Guidi
> *Sent:* Tuesday, September 08, 2009 10:08 AM
>
>
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> Hi, you just have to use delegates to asynchronously call the function
> containing the loop and return back the control to the calling thread. Here
> an example (don't have my code at hand, hope it doesn't contain typos).
>
>
>
> Regards,
>
>Raffaele
>
>
>
>public class TestLoop : ILoadNotificationPlugin
>
> {
>
>
>
>Delegate void DoStuffDelegate();
>
>
>
>public void doStuff()
>
> {
>
> EventConsumer con = new EventConsumer("all", "");
>
> while (true)
>
> {
>
> Event ev = con.pop(0);
>
> Log.WriteLine(LogLevel.Notice, "Event: " +
> ev.serialized_string);
>
> freeswitch.msleep(100);
>
> }
>
> }
>
> public bool Load()
>
> {
>
> DoStuffDelegate dsdlg = new DoStuffDelegate(doStuff);
>
> dsdlg.BeginInvoke();
>
> }
>
> }
>
> On Tue, Sep 8, 2009 at 08:21, Josh Rivers  wrote:
>
> Thanks for the response!
>
>
>
> I have tried putting a long-running loop here, but then it blocks anything
> else managed from happening:
>
>
>
>public class TestLoop : ILoadNotificationPlugin
>
> {
>
> public bool Load()
>
> {
>
> EventConsumer con = new EventConsumer("all", "");
>
> while (true)
>
> {
>
> Event ev = con.pop(0);
>
> Log.WriteLine(LogLevel.Notice, "Event: " +
> ev.serialized_string);
>
> freeswitch.msleep(100);
>
> }
>
> }
>
> }
>
>
>
> However, if I fork off a thread here, freeswitch crashes:
>
> public class TestLoop : ILoadNotificationPlugin
>
> {
>
> public bool Load()
>
> {
>
> ThreadPool.QueueUserWorkItem((o) =>
>
> {
>
> Log.WriteLine(LogLevel.Notice, "Thread Starting. ");
>
> EventConsumer con = new EventConsumer("all", "");
>
> while (true)
>
> {
>
> Event ev = con.pop(0);
>
> Log.WriteLine(LogLevel.Notice, "Event: " +
> ev.serialized_string);
>
> freeswitch.msleep(100);
>
> }
>
> });
>
> return true;
>
> }
>
> }
>
>
>
> It doesn't look like this is a good place to start a long-running process?
>
>
>
> Thanks!
>
> Josh
>
>
>
> On Mon, Sep 7, 2009 at 11:05 PM, Raffaele P. Guidi <
> raffaele.p.gu...@gmail.com> wrote:
>
> Yes!
>
>
>
> public class LoadDemo : ILoadNotificationPlugin {
>

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-08 Thread Josh Rivers
You are probably right, but commenting out the msleep doesn't prevent the
crash. -Josh

On Tue, Sep 8, 2009 at 11:12 AM, Phillip Jones  wrote:

> What is:
>
> freeswitch.msleep(100);
>
> Why aren't you using Thread.Sleep?
>
>
> On Tue, Sep 8, 2009 at 2:21 AM, Josh Rivers  wrote:
>
>> Thanks for the response!
>> I have tried putting a long-running loop here, but then it blocks anything
>> else managed from happening:
>>
>>public class TestLoop : ILoadNotificationPlugin
>> {
>> public bool Load()
>> {
>> EventConsumer con = new EventConsumer("all", "");
>> while (true)
>> {
>> Event ev = con.pop(0);
>> Log.WriteLine(LogLevel.Notice, "Event: " +
>> ev.serialized_string);
>> freeswitch.msleep(100);
>> }
>> }
>> }
>>
>> However, if I fork off a thread here, freeswitch crashes:
>> public class TestLoop : ILoadNotificationPlugin
>> {
>> public bool Load()
>> {
>> ThreadPool.QueueUserWorkItem((o) =>
>> {
>> Log.WriteLine(LogLevel.Notice, "Thread Starting. ");
>> EventConsumer con = new EventConsumer("all", "");
>> while (true)
>> {
>> Event ev = con.pop(0);
>> Log.WriteLine(LogLevel.Notice, "Event: " +
>> ev.serialized_string);
>> freeswitch.msleep(100);
>> }
>> });
>> return true;
>> }
>> }
>>
>> It doesn't look like this is a good place to start a long-running process?
>>
>> Thanks!
>> Josh
>>
>> On Mon, Sep 7, 2009 at 11:05 PM, Raffaele P. Guidi <
>> raffaele.p.gu...@gmail.com> wrote:
>>
>>> Yes!
>>> public class LoadDemo : ILoadNotificationPlugin {
>>> public bool Load() {
>>> Log.WriteLine(LogLevel.Notice, "LoadDemo running.");
>>> return true;
>>> }
>>> }
>>>
>>> this example is from Michael Giagnocavo's Demo.csx which you can find
>>> into the mod_managed svn.
>>>
>>> And let me add that works like a charm :)
>>>
>>> Ciao,
>>>Raffaele
>>>
>>> On Sun, Sep 6, 2009 at 22:50, Josh Rivers  wrote:
>>>
>>>> Is there a way to start this when FreeSWITCH starts? The lua and perl
>>>> modules have a 'startup-script' configuration preference. Is there 
>>>> something
>>>> similar in mod_managed? Or is there a way to have an api command executed 
>>>> at
>>>> a startup?
>>>>
>>>> 
>>>> Exactly what I was after - thank you!
>>>>
>>>> On Thu, Sep 3, 2009 at 1:54 PM, Jeff Lenk 
>>>> wrote:
>>>>
>>>> >
>>>> > try something like this
>>>> >
>>>> > EventConsumer con = new EventConsumer("all", "");
>>>> > Event ev = con.pop(0);
>>>> >
>>>> > see lua sample -
>>>> > http://wiki.freeswitch.org/wiki/Lua#freeswitch.EventConsumer
>>>> >
>>>> >
>>>> > Phillip Jones-2 wrote:
>>>> > >
>>>> > > Hi there,
>>>> > >
>>>> > > mod_managed exposes EventReceivedFunction such that:
>>>> > >
>>>> > >  Session.EventReceivedFunction = (e) =>
>>>> > >  {
>>>> > >Log.WriteLine(LogLevel.Alert, "Received Event {0}",
>>>> e.ToString());
>>>> > >return "";
>>>> > >  };
>>>> > >
>>>> > > should trap all events to which i subscribe.
>>>> > >
>>>> > >
>>>> > > But how do I subscribe to events? What is the .NET / managed
>>>> equivalent
>>>> > > of:
>>>> > >
>>>> > > switch_event_bind(const char *id, switch_event_types_t event, const
>>>> char
>>>> > > *subclass_name, switch_event_callback_t callback, void *user_data);
>>>> > >
>>>> > >
>>>> > >
>>>> > > Thank you!
>>

Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-08 Thread Josh Rivers
Here is the error I get with the loop I mentioned. -Josh
[image: Capture.PNG]

On Tue, Sep 8, 2009 at 5:05 AM, Michael Giagnocavo wrote:

>  Hi,
>
>
>
> Can you please elaborate on the crash you receive when you
> queue a thread during load?
>
>
>
> Thanks,
>
> Michael
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Tuesday, September 08, 2009 12:22 AM
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> Thanks for the response!
>
>
>
> I have tried putting a long-running loop here, but then it blocks anything
> else managed from happening:
>
>
>
>public class TestLoop : ILoadNotificationPlugin
>
> {
>
> public bool Load()
>
> {
>
> EventConsumer con = new EventConsumer("all", "");
>
> while (true)
>
> {
>
> Event ev = con.pop(0);
>
> Log.WriteLine(LogLevel.Notice, "Event: " +
> ev.serialized_string);
>
> freeswitch.msleep(100);
>
> }
>
> }
>
> }
>
>
>
> However, if I fork off a thread here, freeswitch crashes:
>
> public class TestLoop : ILoadNotificationPlugin
>
> {
>
> public bool Load()
>
> {
>
> ThreadPool.QueueUserWorkItem((o) =>
>
> {
>
> Log.WriteLine(LogLevel.Notice, "Thread Starting. ");
>
> EventConsumer con = new EventConsumer("all", "");
>
> while (true)
>
> {
>
> Event ev = con.pop(0);
>
> Log.WriteLine(LogLevel.Notice, "Event: " +
> ev.serialized_string);
>
> freeswitch.msleep(100);
>
> }
>
> });
>
> return true;
>
> }
>
> }
>
>
>
> It doesn't look like this is a good place to start a long-running process?
>
>
>
> Thanks!
>
> Josh
>
>
>
> On Mon, Sep 7, 2009 at 11:05 PM, Raffaele P. Guidi <
> raffaele.p.gu...@gmail.com> wrote:
>
> Yes!
>
>
>
> public class LoadDemo : ILoadNotificationPlugin {
>
> public bool Load() {
>
> Log.WriteLine(LogLevel.Notice, "LoadDemo running.");
>
> return true;
>
> }
>
> }
>
>
>
> this example is from Michael Giagnocavo's Demo.csx which you can find into
> the mod_managed svn.
>
>
>
> And let me add that works like a charm :)
>
>
>
> Ciao,
>
>Raffaele
>
>
>
> On Sun, Sep 6, 2009 at 22:50, Josh Rivers  wrote:
>
>   Is there a way to start this when FreeSWITCH starts? The lua and perl
> modules have a 'startup-script' configuration preference. Is there something
> similar in mod_managed? Or is there a way to have an api command executed at
> a startup?
>
>
>
> 
>
> Exactly what I was after - thank you!
>
>
>
> On Thu, Sep 3, 2009 at 1:54 PM, Jeff Lenk  wrote:
>
>
>
> >
>
> > try something like this
>
> >
>
> > EventConsumer con = new EventConsumer("all", "");
>
> > Event ev = con.pop(0);
>
> >
>
> > see lua sample -
>
> > http://wiki.freeswitch.org/wiki/Lua#freeswitch.EventConsumer
>
> >
>
> >
>
> > Phillip Jones-2 wrote:
>
> > >
>
> > > Hi there,
>
> > >
>
> > > mod_managed exposes EventReceivedFunction such that:
>
> > >
>
> > >  Session.EventReceivedFunction = (e) =>
>
> > >  {
>
> > >Log.WriteLine(LogLevel.Alert, "Received Event {0}",
> e.ToString());
>
> > >return "";
>
> > >  };
>
> > >
>
> > > should trap all events to which i subscribe.
>
> > >
>
> > >
>
> > > But how do I subscribe to events? What is the .NET / managed equivalent
>
> > > of:
>
> > >
>
> > > switch_event_bind(const char *id, switch_event_types_t event, const
> char
>
> > > *subclass_name, switch_event_callback_t callback, void *user_data);
>
> > >
>
> > >
>
> > >
>
> > > Thank you!
>
> > >
>
> > >
>
> > >
>
>
>
> 

Re: [Freeswitch-users] Using mod_managed to create full FreeSWITCH modules

2009-09-08 Thread Josh Rivers
Thanks. I can stop trying to figure out how to do that then. -Josh

On Tue, Sep 8, 2009 at 5:12 AM, Michael Giagnocavo wrote:

>  Are you looking to run when mod_managed shuts down? Or when your managed
> plugin reloads, or something else? (mod_managed is not unloadable, so I
> don’t believe it gets any notification of shutting down.)
>
>
>
> As far as interop in general, it’s usually possible. However, a lot of the
> FreeSWITCH code uses macros, and they aren’t available via SWIG. So in those
> cases, you’ll either need to manually reconstruct the macro, or write some
> interop code in C/C++ to do what you want, then expose that via SWIG (or, if
> you do it nicely, just P/Invoke it directly).
>
>
>
> Some of the native code generates some pretty ugly structures; you will
> probably need to become friends with the Marshal class and pass around a lot
> of IntPtrs to get things going.
>
>
>
> As far as I know, no one has built a non API/App with mod_managed.
>
>
>
> -Michael
>
>
>
> *From:* freeswitch-users-boun...@lists.freeswitch.org [mailto:
> freeswitch-users-boun...@lists.freeswitch.org] *On Behalf Of *Josh Rivers
> *Sent:* Monday, September 07, 2009 11:41 PM
> *To:* freeswitch-users@lists.freeswitch.org
> *Subject:* [Freeswitch-users] Using mod_managed to create full FreeSWITCH
> modules
>
>
>
> The wiki says:
>
> mod_managed exposes nearly the entire FreeSWITCH C API (courtesy of SWIG).
> This allows creation of not just API functions and call apps, but any type
> of module that FreeSWITCH supports (codecs, endpoints, etc.). The types are
> in the FreeSWITCH.Native namespace. FreeSWITCH.Native. The
> FreeSWITCH.Native.freeswitch type contains static members to access all the
> functions.
>
>
>
> Does anybody have a starting point they can share for a non-API/APP managed
> module. I'd like to build something that runs in
> the 
> SWITCH_MODULE_SHUTDOWN_FUNCTION/SWITCH_MODULE_SHUTDOWN_FUNCTION/SWITCH_MODULE_SHUTDOWN_FUNCTION
> lifecycle. How can this be done?
>
>
>
> Thanks!
>
> Josh
>
> ___
> FreeSWITCH-users mailing list
> FreeSWITCH-users@lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


Re: [Freeswitch-users] Using mod_managed to create full FreeSWITCH modules

2009-09-07 Thread Josh Rivers
Thanks for the response Raffaele,
I've successfully gotten the plugins to work. What I'm looking for is a way
to write a lower-level FreeSWITCH module, as is implied by the wiki
document. Mostly I'm trying to get something that runs stably in it's own
thread from switch startup.

Josh

On Mon, Sep 7, 2009 at 11:00 PM, Raffaele P. Guidi <
raffaele.p.gu...@gmail.com> wrote:

> I suppose you are working in windows with the binary distribution (that
> doesn't contain the mod_managed binaries, sources and examples. A bit weird,
> I think). You can get them from here
> http://fisheye.freeswitch.org/browse/FreeSWITCH/src/mod/languages/mod_managed.
> The package contains a Demo.csx file featuring three examples: api, app and
> load notification plugin - very simple to understand and that will be easy
> to extend. Once mod_managed is installed you can put that file into the
> "managed" dir and will be automatically deployed.  The csx (wich is csharp
> script) can also be compiled into an exe file and will work the same way.
>
> Regards,
>Raffaele
>
> On Tue, Sep 8, 2009 at 07:41, Josh Rivers  wrote:
>
>> The wiki says:
>> mod_managed exposes nearly the entire FreeSWITCH C API (courtesy of SWIG).
>> This allows creation of not just API functions and call apps, but any type
>> of module that FreeSWITCH supports (codecs, endpoints, etc.). The types are
>> in the FreeSWITCH.Native namespace. FreeSWITCH.Native. The
>> FreeSWITCH.Native.freeswitch type contains static members to access all the
>> functions.
>> Does anybody have a starting point they can share for a non-API/APP
>> managed module. I'd like to build something that runs in
>> the 
>> SWITCH_MODULE_SHUTDOWN_FUNCTION/SWITCH_MODULE_SHUTDOWN_FUNCTION/SWITCH_MODULE_SHUTDOWN_FUNCTION
>> lifecycle. How can this be done?
>>
>> Thanks!
>> Josh
>>
>> ___
>> FreeSWITCH-users mailing list
>> FreeSWITCH-users@lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>> http://www.freeswitch.org
>>
>>
>
> ___
> FreeSWITCH-users mailing list
> FreeSWITCH-users@lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-07 Thread Josh Rivers
Thanks for the response!
I have tried putting a long-running loop here, but then it blocks anything
else managed from happening:

   public class TestLoop : ILoadNotificationPlugin
{
public bool Load()
{
EventConsumer con = new EventConsumer("all", "");
while (true)
{
Event ev = con.pop(0);
Log.WriteLine(LogLevel.Notice, "Event: " +
ev.serialized_string);
freeswitch.msleep(100);
}
}
}

However, if I fork off a thread here, freeswitch crashes:
public class TestLoop : ILoadNotificationPlugin
{
public bool Load()
{
ThreadPool.QueueUserWorkItem((o) =>
{
Log.WriteLine(LogLevel.Notice, "Thread Starting. ");
EventConsumer con = new EventConsumer("all", "");
while (true)
{
Event ev = con.pop(0);
Log.WriteLine(LogLevel.Notice, "Event: " +
ev.serialized_string);
freeswitch.msleep(100);
}
});
return true;
}
}

It doesn't look like this is a good place to start a long-running process?

Thanks!
Josh

On Mon, Sep 7, 2009 at 11:05 PM, Raffaele P. Guidi <
raffaele.p.gu...@gmail.com> wrote:

> Yes!
> public class LoadDemo : ILoadNotificationPlugin {
> public bool Load() {
> Log.WriteLine(LogLevel.Notice, "LoadDemo running.");
> return true;
> }
> }
>
> this example is from Michael Giagnocavo's Demo.csx which you can find into
> the mod_managed svn.
>
> And let me add that works like a charm :)
>
> Ciao,
>Raffaele
>
> On Sun, Sep 6, 2009 at 22:50, Josh Rivers  wrote:
>
>> Is there a way to start this when FreeSWITCH starts? The lua and perl
>> modules have a 'startup-script' configuration preference. Is there something
>> similar in mod_managed? Or is there a way to have an api command executed at
>> a startup?
>>
>> 
>> Exactly what I was after - thank you!
>>
>> On Thu, Sep 3, 2009 at 1:54 PM, Jeff Lenk  wrote:
>>
>> >
>> > try something like this
>> >
>> > EventConsumer con = new EventConsumer("all", "");
>> > Event ev = con.pop(0);
>> >
>> > see lua sample -
>> > http://wiki.freeswitch.org/wiki/Lua#freeswitch.EventConsumer
>> >
>> >
>> > Phillip Jones-2 wrote:
>> > >
>> > > Hi there,
>> > >
>> > > mod_managed exposes EventReceivedFunction such that:
>> > >
>> > >  Session.EventReceivedFunction = (e) =>
>> > >  {
>> > >Log.WriteLine(LogLevel.Alert, "Received Event {0}",
>> e.ToString());
>> > >return "";
>> > >  };
>> > >
>> > > should trap all events to which i subscribe.
>> > >
>> > >
>> > > But how do I subscribe to events? What is the .NET / managed
>> equivalent
>> > > of:
>> > >
>> > > switch_event_bind(const char *id, switch_event_types_t event, const
>> char
>> > > *subclass_name, switch_event_callback_t callback, void *user_data);
>> > >
>> > >
>> > >
>> > > Thank you!
>> > >
>> > >
>> > >
>>
>> ___
>> FreeSWITCH-users mailing list
>> FreeSWITCH-users@lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>> http://www.freeswitch.org
>>
>>
>
> ___
> FreeSWITCH-users mailing list
> FreeSWITCH-users@lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


[Freeswitch-users] Using mod_managed to create full FreeSWITCH modules

2009-09-07 Thread Josh Rivers
The wiki says:
mod_managed exposes nearly the entire FreeSWITCH C API (courtesy of SWIG).
This allows creation of not just API functions and call apps, but any type
of module that FreeSWITCH supports (codecs, endpoints, etc.). The types are
in the FreeSWITCH.Native namespace. FreeSWITCH.Native. The
FreeSWITCH.Native.freeswitch type contains static members to access all the
functions.
Does anybody have a starting point they can share for a non-API/APP managed
module. I'd like to build something that runs in
the 
SWITCH_MODULE_SHUTDOWN_FUNCTION/SWITCH_MODULE_SHUTDOWN_FUNCTION/SWITCH_MODULE_SHUTDOWN_FUNCTION
lifecycle. How can this be done?

Thanks!
Josh
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


[Freeswitch-users] mod_managed ILoadNotificationPlugin

2009-09-07 Thread Josh Rivers
What is the purpose if the ILoadNotificationPlugin? I thought it could be
used to start off background code, but code run from that point seems to be
terminated when the method returns. Does it only exist to check
dependencies?
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


Re: [Freeswitch-users] Subscribing to events in managed C# / .NET

2009-09-07 Thread Josh Rivers
Is there a way to start this when FreeSWITCH starts? The lua and perl
modules have a 'startup-script' configuration preference. Is there something
similar in mod_managed? Or is there a way to have an api command executed at
a startup?


Exactly what I was after - thank you!

On Thu, Sep 3, 2009 at 1:54 PM, Jeff Lenk  wrote:

>
> try something like this
>
> EventConsumer con = new EventConsumer("all", "");
> Event ev = con.pop(0);
>
> see lua sample -
> http://wiki.freeswitch.org/wiki/Lua#freeswitch.EventConsumer
>
>
> Phillip Jones-2 wrote:
> >
> > Hi there,
> >
> > mod_managed exposes EventReceivedFunction such that:
> >
> >  Session.EventReceivedFunction = (e) =>
> >  {
> >Log.WriteLine(LogLevel.Alert, "Received Event {0}",
e.ToString());
> >return "";
> >  };
> >
> > should trap all events to which i subscribe.
> >
> >
> > But how do I subscribe to events? What is the .NET / managed equivalent
> > of:
> >
> > switch_event_bind(const char *id, switch_event_types_t event, const char
> > *subclass_name, switch_event_callback_t callback, void *user_data);
> >
> >
> >
> > Thank you!
> >
> >
> >
___
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org