[Nice] minimal example

Youness Alaoui youness.alaoui at collabora.co.uk
Fri Jan 13 13:09:45 PST 2012


Should be fairly easy to serialize, it's not such a big structure. All you need
is the type, component id, address and priority.
Here it explains how to encode it into a string for the SDP protocol :
http://tools.ietf.org/html/rfc5245#section-15
You can do simpler with something like :

nice_address_to_string(cand->addr, addr_string);
sprintf(out, "CANDIDATE: %s %d %d %s %s\n",
       cand->foundation, cand->component_id, cand->priority,
       cand->transport == NICE_CANDIDATE_TRANSPORT_UDP ? "UDP" : "UNK",
       addr_string, nice_address_get_port(cand->addr),
       cand->type == NICE_CANDIDATE_TYPE_HOST ? "host" :
       cand->type == NICE_CANDIDATE_TYPE_SERVER_REFLEXIVE ? "srv" : "relay")

and read it with :

sscanf (in, "CANDIDATE: %s %d %d %s %s\n",
       foundation, component_id, priority,
       transport_str, addr_string, addr_port, type_str);
cand = nice_candidate_new(memcmp(type_str, "host") == 0 ?
                          NICE_CANDIDATE_TYPE_HOST :
                          memcmp(type_str, "srv") == 0 ?
                          NICE_CANDIDATE_TYPE_SERVER_REFLEXIVE :
                          NICE_CANDIDATE_TYPE_RELAY_REFLEXIVE);
memcpy(cand->foundation, foundation, NICE_CANDIDATE_MAX_FOUNDATION);
cand->component_id = component_id;
cand->priority = priority;
cand->transport = NICE_CANDIDATE_TRANSPORT_UDP;
nice_address_set_from_string(cand->addr, addr_string);
nice_address_set_port(cand->addr, addr_port);

This should do it.. don't forget to also send out your credentials separately.

Hope this helps,
Youness.

On 01/13/2012 03:36 PM, Eduardo Bezerra wrote:
> Yes, I guess I'll need some 3rd guy in the middle to allow the two peers to
> connect to each other (and then, hopefully, communicate directly). But how to
> you go from a NiceCandidate struct of a peer (which contains several other
> structs and unions) to, say, a string? Such string could be sent to the
> 3rd-party and forwarded to the other peer, which would parse it and recreate the
> NiceCandidate struct, for each received remote candidate... The thing is that I
> want different platforms to communicate, so there should be some "protocol" to
> send the candidates info...
> 
> 
> On Fri, Jan 13, 2012 at 8:49 PM, Youness Alaoui <youness.alaoui at collabora.co.uk
> <mailto:youness.alaoui at collabora.co.uk>> wrote:
> 
>     Hi,
> 
>     Thanks Tiago for taking over while I was asleep! Nice to see all this activity
>     and to have Eduardo's tests successful! :)
>     Having a nat friendly retwork as one of the peers guarantees success, if you
>     have two nat-hostile networks, then it depends on the type of NATs involved, if
>     both are symmetric NATs, then it will fail, if at least one of them is not a
>     symmetric NAT, then it should succeed (c.f.
>     http://en.wikipedia.org/wiki/Network_address_translation#Methods_of_Port_translation
>     )
> 
>     libnice does not provide any serialization method, you will still always need a
>     third party server to do the candidate exchange and that will depend on the
>     protocol used by this server, could be XMPP, could be SIP, could be custom, it
>     really all depends on what your needs are and what the server supports/accepts.
> 
>     Youness.
> 
> 
> 
> _______________________________________________
> 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: 262 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freedesktop.org/archives/nice/attachments/20120113/ef502c0e/attachment.pgp>


More information about the Nice mailing list