dumping network data is possible now
[auerswald-callnotifier.git] / src / callnotifier / MessageHandler.php
diff --git a/src/callnotifier/MessageHandler.php b/src/callnotifier/MessageHandler.php
new file mode 100644 (file)
index 0000000..b4ed645
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+namespace callnotifier;
+
+class MessageHandler
+{
+    protected $dumpHdl;
+
+
+    public function __construct($config)
+    {
+        $this->config = $config;
+        $this->prepareDump();
+    }
+
+    public function handle($msg)
+    {
+        if ($this->config->dumpFile !== null) {
+            $this->dump($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);
+        }
+    }
+
+    protected function prepareDump()
+    {
+        if ($this->config->dumpFile === null) {
+            return;
+        }
+        $this->dumpHdl = fopen($this->config->dumpFile, 'w');
+        if (!$this->dumpHdl) {
+            throw new Exception('Cannot open replay file for reading');
+        }
+    }
+
+    protected function dump($msg)
+    {
+        fwrite($this->dumpHdl, $msg . "\n");
+    }
+}
+
+?>