Function silc_packet_stream_add_remote
SYNOPSIS
SilcPacketStream silc_packet_stream_add_remote(SilcPacketStream stream,
const char *remote_ip,
SilcUInt16 remote_port,
SilcPacket packet);
DESCRIPTION
This function is used to add remote receivers in packet stream `stream'
that has UDP/IP socket stream as the underlaying stream. This function
cannot be used with other type of streams. This returns new packet
stream context that can be used to send to and receive packets from
the specified remote IP and remote port, or NULL on error. The `stream'
is the actual stream that is used to send and receive the data.
When the parent `stream' receives packets from remote IP address
and port that does not have its own remote packet stream, it returns
the packet to the packet callback set for `stream'. The sender's
IP address and port can then be retrieved by using the
silc_packet_get_sender function and to create new packet stream by
calling this function. After that, all packets from that IP address
and port will be received by the new packet stream.
If the `packet' is non-NULL it will be injected into the new packet
stream as soon as the scheduler associated with `stream' schedules
new tasks. It can be used to inject an incoming packet to the stream.
This interface is for connectionless UDP streams. If it is possible
to create connected stream it should be done for performance reasons.
EXAMPLE
// Create parent packet stream, it can receive packets from anywhere
listener = silc_net_udp_connect("0.0.0.0", 500, NULL, 0, schedule);
parent = silc_packet_stream_create(engine, schedule, listener);
...
// Received a packet to the parent stream, get the sender information.
silc_packet_get_sender(packet, &ip, &port);
// Create new packet stream for this remote location.
remote = silc_packet_stream_add_remote(parent, ip, port, packet);
|