Annotation of embedaddon/php/ext/sockets/tests/mcast_ipv6_recv.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Multicast support: IPv6 receive options
! 3: --SKIPIF--
! 4: <?php
! 5: if (!extension_loaded('sockets')) {
! 6: die('skip sockets extension not available.');
! 7: }
! 8: if (!defined('IPPROTO_IPV6')) {
! 9: die('skip IPv6 not available.');
! 10: }
! 11: $s = socket_create(AF_INET6, SOCK_DGRAM, SOL_UDP);
! 12: $br = socket_bind($s, '::', 3000);
! 13: /* On Linux, there is no route ff00::/8 by default on lo, which makes it
! 14: * troublesome to send multicast traffic from lo, which we must since
! 15: * we're dealing with interface-local traffic... */
! 16: $so = socket_set_option($s, IPPROTO_IPV6, MCAST_JOIN_GROUP, array(
! 17: "group" => 'ff01::114',
! 18: "interface" => 0,
! 19: ));
! 20: if ($so === false) {
! 21: die('skip unable to join multicast group on any interface.');
! 22: }
! 23: $r = socket_sendto($s, $m = "testing packet", strlen($m), 0, 'ff01::114', 3000);
! 24: if ($r === false) {
! 25: die('skip unable to send multicast packet.');
! 26: }
! 27:
! 28: if (!defined("MCAST_JOIN_SOURCE_GROUP"))
! 29: die('skip source operations are unavailable');
! 30:
! 31: $so = socket_set_option($s, IPPROTO_IPV6, MCAST_LEAVE_GROUP, array(
! 32: "group" => 'ff01::114',
! 33: "interface" => 0,
! 34: ));
! 35: $so = socket_set_option($s, IPPROTO_IPV6, MCAST_JOIN_SOURCE_GROUP, array(
! 36: "group" => 'ff01::114',
! 37: "interface" => 0,
! 38: "source" => '2001::dead:beef',
! 39: ));
! 40: if ($so === false) {
! 41: die('skip protocol independent multicast API is unavailable.');
! 42: }
! 43:
! 44: --FILE--
! 45: <?php
! 46: include __DIR__."/mcast_helpers.php.inc";
! 47: $domain = AF_INET6;
! 48: $level = IPPROTO_IPV6;
! 49: $interface = 0;
! 50: $mcastaddr = 'ff01::114';
! 51: $sblock = "?";
! 52:
! 53: echo "creating send socket\n";
! 54: $sends1 = socket_create($domain, SOCK_DGRAM, SOL_UDP) or die("err");
! 55: var_dump($sends1);
! 56:
! 57: echo "creating receive socket\n";
! 58: $s = socket_create($domain, SOCK_DGRAM, SOL_UDP) or die("err");
! 59: var_dump($s);
! 60: $br = socket_bind($s, '::0', 3000) or die("err");
! 61: var_dump($br);
! 62:
! 63: $so = socket_set_option($s, $level, MCAST_JOIN_GROUP, array(
! 64: "group" => $mcastaddr,
! 65: "interface" => $interface,
! 66: )) or die("err");
! 67: var_dump($so);
! 68:
! 69: $r = socket_sendto($sends1, $m = "testing packet", strlen($m), 0, $mcastaddr, 3000);
! 70: var_dump($r);
! 71: checktimeout($s, 500);
! 72: $r = socket_recvfrom($s, $str, 2000, 0, $from, $fromPort);
! 73: var_dump($r, $str, $from);
! 74: $sblock = $from;
! 75:
! 76: $r = socket_sendto($sends1, $m = "initial packet", strlen($m), 0, $mcastaddr, 3000);
! 77: var_dump($r);
! 78:
! 79: $i = 0;
! 80: checktimeout($s, 500);
! 81: while (($str = socket_read($s, 3000)) !== FALSE) {
! 82: $i++;
! 83: echo "$i> ", $str, "\n";
! 84:
! 85: if ($i == 1) {
! 86: echo "leaving group\n";
! 87: $so = socket_set_option($s, $level, MCAST_LEAVE_GROUP, array(
! 88: "group" => $mcastaddr,
! 89: "interface" => $interface,
! 90: ));
! 91: var_dump($so);
! 92: $r = socket_sendto($sends1, $m = "ignored mcast packet", strlen($m), 0, $mcastaddr, 3000);
! 93: var_dump($r);
! 94: $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "::1", 3000);
! 95: var_dump($r);
! 96: }
! 97: if ($i == 2) {
! 98: echo "re-joining group\n";
! 99: $so = socket_set_option($s, $level, MCAST_JOIN_GROUP, array(
! 100: "group" => $mcastaddr,
! 101: "interface" => $interface,
! 102: ));
! 103: var_dump($so);
! 104: $r = socket_sendto($sends1, $m = "mcast packet", strlen($m), 0, $mcastaddr, 3000);
! 105: var_dump($r);
! 106: }
! 107: if ($i == 3) {
! 108: echo "blocking source\n";
! 109: $so = socket_set_option($s, $level, MCAST_BLOCK_SOURCE, array(
! 110: "group" => $mcastaddr,
! 111: "interface" => $interface,
! 112: "source" => $sblock,
! 113: ));
! 114: var_dump($so);
! 115: $r = socket_sendto($sends1, $m = "ignored packet (blocked source)", strlen($m), 0, $mcastaddr, 3000);
! 116: var_dump($r);
! 117: $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "::1", 3000);
! 118: var_dump($r);
! 119: }
! 120: if ($i == 4) {
! 121: echo "unblocking source\n";
! 122: $so = socket_set_option($s, $level, MCAST_UNBLOCK_SOURCE, array(
! 123: "group" => $mcastaddr,
! 124: "interface" => $interface,
! 125: "source" => $sblock,
! 126: ));
! 127: var_dump($so);
! 128: $r = socket_sendto($sends1, $m = "mcast packet", strlen($m), 0, $mcastaddr, 3000);
! 129: var_dump($r);
! 130: }
! 131: if ($i == 5) {
! 132: echo "leaving group\n";
! 133: $so = socket_set_option($s, $level, MCAST_LEAVE_GROUP, array(
! 134: "group" => $mcastaddr,
! 135: "interface" => $interface,
! 136: ));
! 137: var_dump($so);
! 138: $r = socket_sendto($sends1, $m = "ignored mcast packet", strlen($m), 0, $mcastaddr, 3000);
! 139: var_dump($r);
! 140: $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "::1", 3000);
! 141: var_dump($r);
! 142: }
! 143: if ($i == 6) {
! 144: echo "joining source group\n";
! 145: $so = socket_set_option($s, $level, MCAST_JOIN_SOURCE_GROUP, array(
! 146: "group" => $mcastaddr,
! 147: "interface" => $interface,
! 148: "source" => $sblock,
! 149: ));
! 150: var_dump($so);
! 151: $r = socket_sendto($sends1, $m = "mcast packet from desired source", strlen($m), 0, $mcastaddr, 3000);
! 152: var_dump($r);
! 153: }
! 154: if ($i == 7) {
! 155: echo "leaving source group\n";
! 156: $so = socket_set_option($s, $level, MCAST_LEAVE_SOURCE_GROUP, array(
! 157: "group" => $mcastaddr,
! 158: "interface" => $interface,
! 159: "source" => $sblock,
! 160: ));
! 161: var_dump($so);
! 162: $r = socket_sendto($sends1, $m = "ignored mcast packet", strlen($m), 0, $mcastaddr, 3000);
! 163: var_dump($r);
! 164: $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "::1", 3000);
! 165: var_dump($r);
! 166: }
! 167: if ($i == 8) {
! 168: /*echo "joining source group\n";
! 169: $so = socket_set_option($s, $level, MCAST_JOIN_SOURCE_GROUP, array(
! 170: "group" => $mcastaddr,
! 171: "interface" => $interface,
! 172: "source" => $sblock,
! 173: ));
! 174: var_dump($so);*/
! 175: break;
! 176: }
! 177:
! 178: }
! 179: --EXPECTF--
! 180: creating send socket
! 181: resource(%d) of type (Socket)
! 182: creating receive socket
! 183: resource(%d) of type (Socket)
! 184: bool(true)
! 185: bool(true)
! 186: int(14)
! 187: int(14)
! 188: string(14) "testing packet"
! 189: string(%d) "%s"
! 190: int(14)
! 191: 1> initial packet
! 192: leaving group
! 193: bool(true)
! 194: int(20)
! 195: int(14)
! 196: 2> unicast packet
! 197: re-joining group
! 198: bool(true)
! 199: int(12)
! 200: 3> mcast packet
! 201: blocking source
! 202: bool(true)
! 203: int(31)
! 204: int(14)
! 205: 4> unicast packet
! 206: unblocking source
! 207: bool(true)
! 208: int(12)
! 209: 5> mcast packet
! 210: leaving group
! 211: bool(true)
! 212: int(20)
! 213: int(14)
! 214: 6> unicast packet
! 215: joining source group
! 216: bool(true)
! 217: int(32)
! 218: 7> mcast packet from desired source
! 219: leaving source group
! 220: bool(true)
! 221: int(20)
! 222: int(14)
! 223: 8> unicast packet
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>