diff --git a/src/CoreParser.php b/src/CoreParser.php index 6be92f2..5aae06f 100644 --- a/src/CoreParser.php +++ b/src/CoreParser.php @@ -59,7 +59,7 @@ class CoreParser { case CoreProtocol::RESP_CODE_CONTACT_MSG_RECV_V3: case CoreProtocol::RESP_CODE_CHANNEL_MSG_RECV_V3: case CoreProtocol::RESP_CODE_CHANNEL_MSG_RECV: - return $payload; + return self::parseMsg($payload); case CoreProtocol::PUSH_CODE_ADVERT: case CoreProtocol::PUSH_CODE_NEW_ADVERT: return self::parseAdvert($payload); @@ -69,6 +69,41 @@ class CoreParser { } } + protected static function parseMsg(string $payload): mixed { + $idx = 0; + + $data = [ + 'code'=>ord($payload[$idx]) + ]; + $idx++; + + if( ord($payload[0]) == CoreProtocol::RESP_CODE_CHANNEL_MSG_RECV_V3 ) { + $alt = [ + 'snr'=>unpack('V', substr($payload, 1, 4))[1], + 'reserved1'=>0, + 'reserved2'=>0 + ]; + + $data = array_merge($data, $alt); + $idx = 5; + } + + $remains = [ + 'channel_idx'=>ord($payload[$idx]), + 'path_len'=>ord($payload[$idx+1]), + 'type'=>ord($payload[$idx+2]), + 'timestamp'=>unpack('V', substr($payload, $idx+3, 4))[1], + 'message'=>substr($payload, $idx+7) + ]; + + return array_merge($data, $remains); + } + + /** + * + * @param string $payload + * @return mixed + */ protected static function parseAdvert(string $payload): mixed { $data = [ 'code'=>ord($payload[0]),