aboutsummaryrefslogtreecommitdiff
path: root/src/callnotifier/EDSS1/Parser.php
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2012-07-16 22:58:34 +0200
committerChristian Weiske <cweiske@cweiske.de>2012-07-16 22:58:34 +0200
commit0073743d7518e5899f0cd075a1c7755a9d603bbd (patch)
treec48e95609e678627529b1ca4ee5b43c7a3a43ab4 /src/callnotifier/EDSS1/Parser.php
parentf66acab69b4981bbb21bccd2754cb1e870f3d360 (diff)
downloadauerswald-callnotifier-0073743d7518e5899f0cd075a1c7755a9d603bbd.tar.gz
auerswald-callnotifier-0073743d7518e5899f0cd075a1c7755a9d603bbd.zip
first try on E-DSS-1 ISDN d-channel parsing
Diffstat (limited to 'src/callnotifier/EDSS1/Parser.php')
-rw-r--r--src/callnotifier/EDSS1/Parser.php41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/callnotifier/EDSS1/Parser.php b/src/callnotifier/EDSS1/Parser.php
new file mode 100644
index 0000000..5a298e5
--- /dev/null
+++ b/src/callnotifier/EDSS1/Parser.php
@@ -0,0 +1,41 @@
+<?php
+namespace callnotifier;
+
+class EDSS1_Parser
+{
+ const PARAM = 0;
+ const PARAMLENGTH = 1;
+ const PARAMVAL = 2;
+
+ public function parse($bytes)
+ {
+ $m = new EDSS1_Message();
+ $m->type = ord($bytes{7});
+
+ $curpos = 7;
+ $complete = false;
+ do {
+ //parameter type
+ $curbit = $bytes{++$curpos};
+ if ($curbit == "\xFF" && $bytes{$curpos + 1} == "\n") {
+ $complete = true;
+ break;
+ }
+ $param = new EDSS1_Parameter();
+ $m->parameters[] = $param;
+ $param->type = ord($curbit);
+
+ //parameter length
+ $curbit = $bytes{++$curpos};
+ $param->length = ord($curbit);
+
+ //parameter data
+ $param->data = substr($bytes, $curpos + 1, $param->length);
+ $curpos += $param->length;
+ } while ($curpos < strlen($bytes) - 1);
+
+ return $m;
+ }
+}
+
+?>