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