<br>Ok, well, I guess that&#39;s not my problem then!<br><br>I feel like I&#39;m very close...<br><br>I have two agents... both of which are getting their local candidates, serializing them and sendthing them to the other...<br>
<br>Both of them are also sending their local credentials to each other and calling &quot;nice_agent_set_remote_credentials()&quot; on them...<br><br>They are both talking to my stun server, and I believe that all of the information is being serialized and deserialized correctly (it&#39;s safe to use nice_address_to_string() and nice_address_set_from_string() to serialize and deserialize the NiceCandidate-&gt;addr and NiceCandidate-&gt;base_addr members right?)... <br>
<br>BTW, do I need to set the &quot;NiceCandidate-&gt;username&quot; and &quot;NiceCandidate-&gt;password&quot; fields if I am seperately sending the credentials ( I currently am both sending them as part of my NiceCandidate serialization process and seperately for calls to set_remote_credentials())...?<br>
<br>The behaviour that I&#39;m seeing is that my componet state never changes to 4... it goes right from 2 to 5... then a send() of course fails...<br><br>    td<br><br><div class="gmail_quote">On Mon, Aug 30, 2010 at 2:47 PM, Youness Alaoui <span dir="ltr">&lt;<a href="mailto:youness.alaoui@collabora.co.uk">youness.alaoui@collabora.co.uk</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><div></div><div class="h5">On 08/30/2010 05:43 PM, Tony Di Croce wrote:<br>
&gt; In the &quot;test-thread.c&quot; example application that is included in the<br>
&gt; libnice source tree a number of threads are created...<br>
&gt;<br>
&gt; My current thinking is that &quot;lthread&quot; and &quot;rthread&quot; are needed to<br>
&gt; implement the main loop of the agents themselves... IE.. The threads<br>
&gt; that execute the &quot;candidate-gathering-done&quot; etc signals...<br>
&gt;<br>
&gt; I&#39;m less sure about &quot;ldthread&quot; and &quot;rdthread&quot;.... These seem to be used<br>
&gt; when you&#39;re attaching a recv function... So I&#39;m guessing these are<br>
&gt; internal worker threads that actually do the data transfer between<br>
&gt; endpoints? If so, do you need a thread like this per stream or is one<br>
&gt; worker thread for the whole agent sufficient?<br>
&gt;<br>
&gt;     td<br>
<br>
</div></div>No threads are needed, The test-thread.c example is for &quot;testing threads&quot;, it&#39;s<br>
there to make sure that even if libnice is being used by a multi-threaded<br>
environment, the library is thread-safe. It does not mean at all that you need<br>
to be using threads in order to make it work.. you only need one thread, your<br>
main one, the one where your main_loop is running, that&#39;s why you give the<br>
nice_agent_new the main_context to your mainloop, and that&#39;s why you give it to<br>
the nice_agent_attach_recv. That&#39;s all you need.<br>
<br>
p.s: Please keep asking your questions on the mailing list.<br>
<br>
Youness.<br>
<br>
</blockquote></div><br>