Added really lame script to update copyright year.
[hub.git] / contrib / udp-server.php
1 <?php
2
3 $connections = array();
4 $first = -1;
5
6 require('udp-inc.php');
7
8 error_reporting(E_ALL | E_STRICT);
9
10 out(__FILE__, __LINE__, 'Opening server port...');
11 $socket = stream_socket_server('udp://0.0.0.0:9060', $errno, $errstr, STREAM_SERVER_BIND);
12
13 if ((!is_resource($socket)) || ($errno > 0)) {
14         out(__FILE__, __LINE__, $errstr . ' (' . $errno . ')');
15         exit;
16 }
17
18 if (!stream_set_blocking($socket, FALSE)) {
19         out(__FILE__, __LINE__, 'ERROR: Cannot set non-blocking mode!');
20         exit;
21 }
22
23 $pkt = '';
24
25 out(__FILE__, __LINE__, 'Waiting for connections...');
26
27 do {
28         $pkt = trim(stream_socket_recvfrom($socket, 1500, 0, $peer));
29
30         if ($pkt == 'PING') {
31                 // Peer in list?
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;
38                 }
39
40                 //out(__FILE__, __LINE__, 'Sending data to peer ' . $peer . '.');
41                 stream_socket_sendto($socket, (time() . ':md5=' . md5(time())), 0, $peer);
42         } elseif ($pkt == 'BYE') {
43                 // Peer in list?
44                 if (!isset($connections[$peer])) {
45                         out(__FILE__, __LINE__, 'Peer ' . $peer . ' is NOT in peer list.');
46                 } else {
47                         out(__FILE__, __LINE__, 'Peer ' . $peer . ' is leaving us.');
48                         stream_socket_sendto($socket, 'BYE', 0, $peer);
49                         $connections[$peer] = 0;
50                 }
51         } elseif (!empty($peer)) {
52                 out(__FILE__, __LINE__, 'Invalid packet ' . $pkt . ' from peer ' . $peer . '.');
53                 stream_socket_sendto($socket, 'INVALID', 0, $peer);
54         } else {
55                 // Waiting for packages
56                 $pkt = '';
57         }
58
59         $test = (round(date('s', time()) / 10));
60         if ($first != $test) {
61                 out(__FILE__, __LINE__, count($connections) . ' total connections so far.', true);
62                 $first = $test;
63         }
64
65         // Sleep a little
66         if (function_exists('time_nanosleep')) time_nanosleep(0, 500000);
67 } while ($pkt !== FALSE);
68
69 ?>