Annotation of embedaddon/php/ext/sockets/tests/mcast_ipv6_recv.phpt, revision 1.1.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>