+
+
+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);
+
+
+
+ |
+