using models for AdvertPath, AppStart and Contact responses
This commit is contained in:
+64
-42
@@ -3,7 +3,9 @@
|
|||||||
namespace Menking\Meshcore;
|
namespace Menking\Meshcore;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use Menking\Meshcore\Model\AdvertPathResponse;
|
||||||
use Menking\Meshcore\Model\AdvertResponse;
|
use Menking\Meshcore\Model\AdvertResponse;
|
||||||
|
use Menking\Meshcore\Model\AppStartResponse;
|
||||||
use Menking\Meshcore\Model\BinaryResponse;
|
use Menking\Meshcore\Model\BinaryResponse;
|
||||||
use Menking\Meshcore\Model\ChannelResponse;
|
use Menking\Meshcore\Model\ChannelResponse;
|
||||||
use Menking\Meshcore\Model\CodeSentResponse;
|
use Menking\Meshcore\Model\CodeSentResponse;
|
||||||
@@ -13,6 +15,7 @@ use Menking\Meshcore\Model\ErrorResponse;
|
|||||||
use Menking\Meshcore\Model\LoginResponse;
|
use Menking\Meshcore\Model\LoginResponse;
|
||||||
use Menking\Meshcore\Model\LogReceiveResponse;
|
use Menking\Meshcore\Model\LogReceiveResponse;
|
||||||
use Menking\Meshcore\Model\BatteryStorageResponse;
|
use Menking\Meshcore\Model\BatteryStorageResponse;
|
||||||
|
use Menking\Meshcore\Model\ContactResponse;
|
||||||
use Menking\Meshcore\Model\ContactsFullResponse;
|
use Menking\Meshcore\Model\ContactsFullResponse;
|
||||||
use Menking\Meshcore\Model\MessageResponse;
|
use Menking\Meshcore\Model\MessageResponse;
|
||||||
use Menking\Meshcore\Model\MessagesWaitingResponse;
|
use Menking\Meshcore\Model\MessagesWaitingResponse;
|
||||||
@@ -110,7 +113,7 @@ class CoreParser {
|
|||||||
$m = new AdvertResponse();
|
$m = new AdvertResponse();
|
||||||
|
|
||||||
$m->code = ord($payload[0]);
|
$m->code = ord($payload[0]);
|
||||||
$m->pub_key = base64_encode(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE));
|
$m->pub_key = self::formatPublicKey(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE));
|
||||||
|
|
||||||
if( strlen($payload) > CoreProtocol::PUB_KEY_SIZE + 2 ) {
|
if( strlen($payload) > CoreProtocol::PUB_KEY_SIZE + 2 ) {
|
||||||
$m->type = ord($payload[33]);
|
$m->type = ord($payload[33]);
|
||||||
@@ -213,7 +216,7 @@ class CoreParser {
|
|||||||
$data->code = ord($payload[0]);
|
$data->code = ord($payload[0]);
|
||||||
$data->status = false;
|
$data->status = false;
|
||||||
$data->is_admin = ord($payload[1]);
|
$data->is_admin = ord($payload[1]);
|
||||||
$data->pub_key_prefix = base64_encode(substr($payload, 2, 6));
|
$data->pub_key_prefix = self::formatPublicKey(substr($payload, 2, 6));
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
@@ -229,7 +232,7 @@ class CoreParser {
|
|||||||
$data->code = ord($payload[0]);
|
$data->code = ord($payload[0]);
|
||||||
$data->status = true;
|
$data->status = true;
|
||||||
$data->is_admin = ord($payload[1]);
|
$data->is_admin = ord($payload[1]);
|
||||||
$data->pub_key_prefix = base64_encode(substr($payload, 2, 6));
|
$data->pub_key_prefix = self::formatPublicKey(substr($payload, 2, 6));
|
||||||
|
|
||||||
if( strlen($payload) > 8 ) {
|
if( strlen($payload) > 8 ) {
|
||||||
$data->timestamp = unpack('V', substr($payload, 8, 4))[1];
|
$data->timestamp = unpack('V', substr($payload, 8, 4))[1];
|
||||||
@@ -313,49 +316,64 @@ class CoreParser {
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getContact(string $payload) {
|
/**
|
||||||
$contact = [
|
*
|
||||||
'code'=>ord($payload[0]),
|
* @param string $payload
|
||||||
'pub_key'=>base64_encode(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE)),
|
* @return ContactResponse
|
||||||
'type'=>ord($payload[33]),
|
*/
|
||||||
'flags'=>ord($payload[34]),
|
public static function getContact(string $payload): ContactResponse {
|
||||||
'out_path_len'=>ord($payload[35]),
|
$m = new ContactResponse();
|
||||||
'out_path'=>trim(substr($payload, 36, 64)),
|
|
||||||
'contact_name'=>trim(substr($payload, 100, 32)),
|
|
||||||
'last_advert_timestamp'=>date('r', unpack('V', substr($payload, 132, 4))[1]),
|
|
||||||
'gps_lat'=>unpack('l', substr($payload, 136, 4))[1] / 1000000.0,
|
|
||||||
'gps_lon'=>unpack('l', substr($payload, 140, 4))[1] / 1000000.0,
|
|
||||||
'lastmod'=>date('r', unpack('V', substr($payload, 144, 4))[1])
|
|
||||||
];
|
|
||||||
|
|
||||||
return $contact;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function parseAppStart(string $payload) {
|
|
||||||
$info = [
|
|
||||||
'response_code'=>ord($payload[0]),
|
|
||||||
'advert_type'=>ord($payload[1]),
|
|
||||||
'tx_power_dbm'=>ord($payload[2]),
|
|
||||||
'max_tx_power'=>ord($payload[3]),
|
|
||||||
'public_key'=>base64_encode(substr($payload, 4, CoreProtocol::PUB_KEY_SIZE)),
|
|
||||||
'lat'=>unpack('l', substr($payload, 36, 4))[1] / 1000000.0,
|
|
||||||
'long'=>unpack('l', substr($payload, 40, 4))[1] / 1000000.0,
|
|
||||||
'multi_acks'=>ord($payload[44]),
|
|
||||||
'advert_loc_policy'=>ord($payload[45]),
|
|
||||||
];
|
|
||||||
|
|
||||||
return $info;
|
$m->code = ord($payload[0]);
|
||||||
|
$m->pub_key = self::formatPublicKey(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE));
|
||||||
|
$m->type = ord($payload[33]);
|
||||||
|
$m->flags = ord($payload[34]);
|
||||||
|
$m->out_path_len = ord($payload[35]);
|
||||||
|
$m->out_path = substr($payload, 36, 64);
|
||||||
|
$m->name = trim(substr($payload, 100, 32), ' ');
|
||||||
|
$m->last_advert_timestamp = date('r', unpack('V', substr($payload, 132, 4))[1]);
|
||||||
|
$m->lat = unpack('l', substr($payload, 136, 4))[1] / 1000000.0;
|
||||||
|
$m->lon = unpack('l', substr($payload, 140, 4))[1] / 1000000.0;
|
||||||
|
$m->lastmod = date('r', unpack('V', substr($payload, 144, 4))[1]);
|
||||||
|
|
||||||
|
return $m;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function parseAdvertPathResponse(string $payload) {
|
/**
|
||||||
$info = [
|
*
|
||||||
'code'=>ord($payload[0]),
|
* @param string $payload
|
||||||
'received_timestamp'=>unpack('V', substr($payload, 1, 4))[1],
|
* @return AppStartResponse
|
||||||
'path_len'=>ord($payload[5]),
|
*/
|
||||||
'path'=>substr($payload, 6, ord($payload[5]))
|
public static function parseAppStart(string $payload): AppStartResponse {
|
||||||
];
|
$m = new AppStartResponse();
|
||||||
|
|
||||||
|
$m->code = ord($payload[0]);
|
||||||
|
$m->advert_type = ord($payload[1]);
|
||||||
|
$m->tx_power_dbm = ord($payload[2]);
|
||||||
|
$m->max_tx_power = ord($payload[3]);
|
||||||
|
$m->pub_key = self::formatPublicKey(substr($payload, 4, CoreProtocol::PUB_KEY_SIZE));
|
||||||
|
$m->lat = unpack('l', substr($payload, 36, 4))[1] / 1000000.0;
|
||||||
|
$m->lon = unpack('l', substr($payload, 40, 4))[1] / 1000000.0;
|
||||||
|
$m->multi_acks = ord($payload[44]);
|
||||||
|
$m->advert_loc_policy = ord($payload[45]);
|
||||||
|
|
||||||
return $info;
|
return $m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param string $payload
|
||||||
|
* @return AdvertPathResponse
|
||||||
|
*/
|
||||||
|
public static function parseAdvertPathResponse(string $payload): AdvertPathResponse {
|
||||||
|
$m = new AdvertPathResponse();
|
||||||
|
|
||||||
|
$m->code = ord($payload[0]);
|
||||||
|
$m->received_timestamp = unpack('V', substr($payload, 1, 4))[1];
|
||||||
|
$m->path_len = ord($payload[5]);
|
||||||
|
$m->path = substr($payload, 6, ord($payload[5]));
|
||||||
|
|
||||||
|
return $m;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function parseCodeStatusResponse(string $payload) {
|
public static function parseCodeStatusResponse(string $payload) {
|
||||||
@@ -445,4 +463,8 @@ class CoreParser {
|
|||||||
return trim(substr($str, 0, $x));
|
return trim(substr($str, 0, $x));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function formatPublicKey(string $pubkey): string {
|
||||||
|
return bin2hex($pubkey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Menking\Meshcore\Model;
|
||||||
|
|
||||||
|
class AdvertPathResponse extends Response {
|
||||||
|
public int $code;
|
||||||
|
public int $received_timestamp;
|
||||||
|
public int $path_len;
|
||||||
|
public string $path;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Menking\Meshcore\Model;
|
||||||
|
|
||||||
|
class AppStartResponse extends Response {
|
||||||
|
public int $code;
|
||||||
|
public int $advert_type;
|
||||||
|
public int $tx_power_dbm;
|
||||||
|
public int $max_tx_power;
|
||||||
|
public string $pub_key;
|
||||||
|
public int $lat;
|
||||||
|
public int $lon;
|
||||||
|
public int $multi_acks;
|
||||||
|
public int $advert_loc_policy;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Menking\Meshcore\Model;
|
||||||
|
|
||||||
|
class ContactResponse extends Response {
|
||||||
|
public int $code;
|
||||||
|
public string $pub_key;
|
||||||
|
public int $type;
|
||||||
|
public int $flags;
|
||||||
|
public int $out_path_len;
|
||||||
|
public string $out_path;
|
||||||
|
public string $name;
|
||||||
|
public int $last_advert_timestamp;
|
||||||
|
public int $lat;
|
||||||
|
public int $lon;
|
||||||
|
public int $lastmod;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user