[Nice] complete example

Bryce Allen ballen at ci.uchicago.edu
Fri Feb 1 12:46:18 PST 2013


Great thanks, I'm curious to know a good way of doing the stdin with
glib! I guess I am biased towards using threading because it's required
for integrating into my application. I'm not sure it's worth
maintaining two versions, but I do think it's helpful to have an
example with threading. Granted busy waiting is not doing it properly -
I could update it to use condition variables. I guess running the
mainloop in a thread is pretty standard stuff; how to do it without a
thread is less obvious (at least to me), so it may serve as a more
instructive example that way.

-Bryce

On Fri, 01 Feb 2013 15:25:05 -0500
Youness Alaoui <youness.alaoui at collabora.co.uk> wrote:
> Hi Bryce,
> 
> I've looked at the code and it looks good! I do agree with Rohan
> though that multi-threading is not a good thing for a simple example.
> I think what Rohan wanted to do is call g_main_loop_run, then wait
> until the callback calls g_main_loop_quit, then continue doing stuff
> in the main() function, then call g_main_loop_run() again (instead of
> "while (!something_done) sleep(1);"). I think the way I'll do it is a
> bit better, I will simply call nice_agent_gather_candidates() then
> g_main_loop_run(), and that's the end of the main() function. The
> rest of the code will be done in the gathering_done callback. I will
> be refactoring that code not to use any threads and will let you know
> when it's done (later today it should be). I think I will also make
> it use glib to add a io_watch on stdin instead of calling fgets()
> synchronously.
> 
> Thanks,
> Youness.
> 
> On 02/01/2013 12:24 PM, Bryce Allen wrote:
> > Hi Rohan,
> > 
> > Thanks for testing it out and for the feedback!
> > 
> > Re parse_args, I think it is correct as is. The line returned by
> > fgets may not contains '\n' (if it's very long), so it's not safe
> > to only check for '\n' as end of string, and the !isspace(*p)
> > already handles the '\n' as well as other whitespace to make sure
> > it won't be included in the arg:
> > 
> >         // find end of current arg
> >         while (*p != '\0' && !isspace(*p)) { p++; }
> >         if (*p == '\0')
> >             break;
> >         *p = '\0';
> > 
> > Were you getting a crash or a hang? It works for me when I copy just
> > the single line, but if I include extra empty lines it just hangs.
> > Also if your terminal wraps the input line, it will fail. It would
> > be nice to have a less fragile format - I think that is what
> > Youness was suggesting with the SDP format. I've attached a new
> > version that handles empty lines and re-prompts if the parse fails,
> > and fixes a memory leak in parse_remote_data.
> > 
> > Re removing the thread for mainloop, I'm not sure the STUN
> > binding/keep alive requests will continue if the thread is quit
> > after negotiation is complete (during the send/receive phase). It
> > seems nice to manually drive the loop for tests and avoid the
> > complexity of threads, but I'm not sure it's what we want for an
> > example.
> > 
> > -Bryce
> > 
> > 
> > On Fri, 1 Feb 2013 12:37:43 +0530
> > Rohan Garg <rohan16garg at gmail.com> wrote:
> >> Hey everyone :)
> >> I went over the program a bit, and I'm attaching a patch that
> >> fixes a couple of issues, just minor stuff regarding the
> >> thread_mainloop and making the code a wee bit more async.
> >>
> >> There also seems to be a bug on line 241 of the original code
> >> where it only stops at \0 , I believe that should be \n. When
> >> using \0 the program simply crashes at " remote_candidates =
> >> g_slist_reverse(remote_candidates); " in parse_remote_data.
> >>
> >>
> >> On Fri, Feb 1, 2013 at 6:05 AM, Youness Alaoui
> >>> I have a plan of adding a new API call for transforming the
> >>> candidates into SDP and to parse candidates from SDP. I think it
> >>> will help people, and I think it would be a good idea to port your
> >>> code to it. I'll let you know tomorrow what I find!
> >>>
> >> Could you explain this a bit on the list in another thread? :)
> >>
> >> Regards
> >> Rohan Garg
> >>
> >>> Thanks,
> >>> Youness.
> >>>
> >>>
> >>> On 01/31/2013 07:30 PM, Bryce Allen wrote:
> >>>> I expanded my nicetest.c into a complete example, using a simple
> >>>> serialization format and copying/pasting the data between
> >>>> clients. It's inspired by icedemo from pjnath, but I didn't find
> >>>> having separate commands for each phase useful for testing and
> >>>> it made reading the code more difficult, so I just have three
> >>>> phases:
> >>>>
> >>>> 1) gather candidates, print serialized local data
> >>>> 2) prompt user for remote data, parse and set when entered
> >>>> 3) if successful, prompt for data to send to remote end
> >>>>
> >>>> I'm probably missing some failure cases and some error checking,
> >>>> but it seems like it could be a useful addition to the main
> >>>> distribution after a fixup. I can re-license under LGPL/MPL if
> >>>> needed.
> >>>>
> >>>> Also please let me know if I'm doing anything fundamentally wrong
> >>>> here. I'm using pretty much the same flow for a real application,
> >>>> with condition variables to synchronize instead busy waiting.
> >>>>
> >>>> Thanks,
> >>>> Bryce
> >>>>
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> nice mailing list
> >>>> nice at lists.freedesktop.org
> >>>> http://lists.freedesktop.org/mailman/listinfo/nice
> >>>>
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> nice mailing list
> >>> nice at lists.freedesktop.org
> >>> http://lists.freedesktop.org/mailman/listinfo/nice
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> nice mailing list
> >>> nice at lists.freedesktop.org
> >>> http://lists.freedesktop.org/mailman/listinfo/nice
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/nice/attachments/20130201/ceb076d8/attachment.pgp>


More information about the nice mailing list