42a6382f1e
Significantly refactor the TXGroup code to allow transmit groups to operate in a unicast fanout mode in addition to the traditional pure multicast mode. Important changes include... + Each transmit group active in the system now has its own socket to send and receive traffic on. In the past, this socket was used to listen for retry requests from clients. Now it is also used to listen for group membership reports (IGMPv3 style) from unicast clients. Having an individual socket per transmit group allows unicast clients to join the group needing only the IP address and port of the transmitters socket, and not needing any additional "group id" to be sent to the client beforehand. + Setup for the transmitter is now slightly different. As before, to setup for multicast mode, a user can call setRetransmitEndpoint passing an IPv4 multicast address and specific port to transmit to. It used to also be the case that a user could pass a specific unicast address and port to transmit to as well. This is no longer allowed. Instead, to operate in unicast mode, a user passes 0.0.0.0 (IPADDR_ANY) as the IP address. In addition, they need to pass either 0 for a port to create a new unicast mode TX group, or they need to pass a specific port to cause the player to attempt to use an existing unicast mode TX group. The specific port should be the command and control port of the TX group which was bound to when the group was originally created. + A magic invoke was added to allow clients to fetch the command and control port on which a TX Player's TX Group is listening. The API described above is most likely temporary and should eventually be replaced with one where TX groups are formal top level objects with their own independent interface and life-cycle management. Signed-off-by: John Grossman <johngro@google.com> Change-Id: Ib4e9737c10660d36c50f1825c9824fff5390b1c7