From 19e5e158f8a6e9dda406c2eb70ad035211613df8 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Sat, 14 Jul 2012 21:14:29 +0200 Subject: [PATCH] introduce classes --- README.rst | 7 +++ callnotifier.php | 95 ++++++--------------------------- src/callnotifier/CLI.php | 14 +++++ src/callnotifier/Socket.php | 101 ++++++++++++++++++++++++++++++++++++ 4 files changed, 139 insertions(+), 78 deletions(-) create mode 100644 src/callnotifier/CLI.php create mode 100644 src/callnotifier/Socket.php diff --git a/README.rst b/README.rst index 188b878..f31a299 100644 --- a/README.rst +++ b/README.rst @@ -19,3 +19,10 @@ Issues Ctrl+C does not send the disconnect command. This is a problem with PHP since pcntl_signal handling and blocking sockets do not work together. The signal will not be handled. + + +Source +====== +Original git website: http://git.cweiske.de/?p=auerswald-callnotifier.git + +Mirror: https://github.com/cweiske/auerswald-callnotifier diff --git a/callnotifier.php b/callnotifier.php index a481b1f..9093691 100644 --- a/callnotifier.php +++ b/callnotifier.php @@ -1,84 +1,23 @@ #!/usr/bin/env php CDPN[41], - var_dump($details); - $regex = '#CGPN\\[([^\\]]+)\\]->CDPN\\[([^\\]]+)\\]#'; - if (preg_match($regex, $details, $matches)) { - var_dump('a call!', $matches); - } -} +$cli = new CLI(); +$cli->run(); ?> \ No newline at end of file diff --git a/src/callnotifier/CLI.php b/src/callnotifier/CLI.php new file mode 100644 index 0000000..4bc0e60 --- /dev/null +++ b/src/callnotifier/CLI.php @@ -0,0 +1,14 @@ +run(); + } +} + +?> \ No newline at end of file diff --git a/src/callnotifier/Socket.php b/src/callnotifier/Socket.php new file mode 100644 index 0000000..1130bd8 --- /dev/null +++ b/src/callnotifier/Socket.php @@ -0,0 +1,101 @@ +ip = $ip; + } + + public function run() + { + $this->connect($this->ip, $this->port); + $this->init(); + $this->loop(); + $this->disconnect(); + } + + public function connect($ip, $port) + { + $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); + if ($socket === false) { + echo "socket_create() failed: reason: " + . socket_strerror(socket_last_error()) . "\n"; + } else { + echo "OK.\n"; + } + echo "Attempting to connect to '$ip' on port '$port'..."; + $result = socket_connect($socket, $ip, $port); + if ($result === false) { + echo "socket_connect() failed.\nReason: ($result) " + . socket_strerror(socket_last_error($socket)) . "\n"; + } else { + echo "OK.\n"; + } + + $this->socket = $socket; + } + + function init() + { + $msg = "\x00\x01DecoderV=1\n"; + socket_write($this->socket, $msg, strlen($msg)); + $res = $this->read_response(); + socket_write($this->socket, "\x00\x02", 2); + } + + function loop() + { + while (true) { + $dbgmsg = $this->read_response(); + //echo $dbgmsg . "\n"; + $this->handle_msg($dbgmsg); + } + } + function read_response() + { + $res = socket_read($this->socket, 2048, PHP_NORMAL_READ); + return substr($res, 2, -1); + } + + function disconnect() + { + socket_write($this->socket, "\x00\x03", 2); + socket_close($this->socket); + } + + function handle_msg($msg) + { + if (substr($msg, 0, 9) != '[DKANPROT') { + //unknown message type + return; + } + $regex = '#^\\[DKANPROT-([^ ]+) ([0-9]+)\\] (.*)$#'; + if (!preg_match($regex, $msg, $matches)) { + //message should always be that way + return false; + } + list(, $type, $someid, $details) = $matches; + + if ($type != 'Info') { + //we only want info messages + var_dump($type . ': ' . $details); + return; + } + //Vegw/Ets-Cref:[0xffef]/[0x64] - VEGW_SETUP from upper layer to internal destination: CGPN[**22]->CDPN[41], + var_dump($details); + $regex = '#CGPN\\[([^\\]]+)\\]->CDPN\\[([^\\]]+)\\]#'; + if (preg_match($regex, $details, $matches)) { + var_dump('a call!', $matches); + } + } + + +} + +?> -- 2.30.2