diff options
| author | Christian Weiske <cweiske@cweiske.de> | 2012-07-16 22:58:34 +0200 |
|---|---|---|
| committer | Christian Weiske <cweiske@cweiske.de> | 2012-07-16 22:58:34 +0200 |
| commit | 0073743d7518e5899f0cd075a1c7755a9d603bbd (patch) | |
| tree | c48e95609e678627529b1ca4ee5b43c7a3a43ab4 /src/callnotifier/EDSS1/Parser.php | |
| parent | f66acab69b4981bbb21bccd2754cb1e870f3d360 (diff) | |
| download | auerswald-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.php | 41 |
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; + } +} + +?> |
