3 $connections = array();
6 require('udp-inc.php');
8 error_reporting(E_ALL | E_STRICT);
10 out(__FILE__, __LINE__, 'Opening server port...');
11 $socket = stream_socket_server('udp://0.0.0.0:9060', $errno, $errstr, STREAM_SERVER_BIND);
13 if ((!is_resource($socket)) || ($errno > 0)) {
14 out(__FILE__, __LINE__, $errstr . ' (' . $errno . ')');
18 if (!stream_set_blocking($socket, FALSE)) {
19 out(__FILE__, __LINE__, 'ERROR: Cannot set non-blocking mode!');
25 out(__FILE__, __LINE__, 'Waiting for connections...');
28 $pkt = trim(stream_socket_recvfrom($socket, 1500, 0, $peer));
32 if (!isset($connections[$peer])) {
33 out(__FILE__, __LINE__, 'New peer ' . $peer . ' detected.');
34 $connections[$peer] = 1;
35 } elseif ($connections[$peer] == 0) {
36 out(__FILE__, __LINE__, 'Peer ' . $peer . ' has returned.');
37 $connections[$peer] = 1;
40 //out(__FILE__, __LINE__, 'Sending data to peer ' . $peer . '.');
41 stream_socket_sendto($socket, (time() . ':md5=' . md5(time())), 0, $peer);
42 } elseif ($pkt == 'BYE') {
44 if (!isset($connections[$peer])) {
45 out(__FILE__, __LINE__, 'Peer ' . $peer . ' is NOT in peer list.');
47 out(__FILE__, __LINE__, 'Peer ' . $peer . ' is leaving us.');
48 stream_socket_sendto($socket, 'BYE', 0, $peer);
49 $connections[$peer] = 0;
51 } elseif (!empty($peer)) {
52 out(__FILE__, __LINE__, 'Invalid packet ' . $pkt . ' from peer ' . $peer . '.');
53 stream_socket_sendto($socket, 'INVALID', 0, $peer);
55 // Waiting for packages
59 $test = (round(date('s', time()) / 10));
60 if ($first != $test) {
61 out(__FILE__, __LINE__, count($connections) . ' total connections so far.', true);
66 if (function_exists('time_nanosleep')) time_nanosleep(0, 500000);
67 } while ($pkt !== FALSE);