shell bypass 403
<?php
declare(strict_types=1);
namespace smpp;
use InvalidArgumentException;
use smpp\exceptions\SmppException;
/**
* An extension of a SMS, with data embedded into the message part of the SMS.
* @author hd@onlinecity.dk
*/
class DeliveryReceipt extends Sms
{
public int $id;
public int $sub;
public int $dlvrd;
public int $submitDate;
public int $doneDate;
public string $stat;
public int $err;
public string $text;
/**
* Parse a delivery receipt formatted as specified in SMPP v3.4 - Appendix B
* It accepts all chars except space as the message id
*
* @throws InvalidArgumentException
*/
public function parseDeliveryReceipt(): void
{
$numMatches = preg_match(
'/^id:([^ ]+) sub:(\d{1,3}) dlvrd:(\d{3}) submit date:(\d{10,12}) done date:(\d{10,12}) stat:([A-Z ]{7}) err:(\d{2,3}) text:(.*)$/si',
$this->message,
$matches
);
if ($numMatches === 0) {
throw new InvalidArgumentException(
'Could not parse delivery receipt: '
. $this->message
. "\n"
. bin2hex($this->body)
);
}
[
$matched,
$this->id,
$this->sub,
$this->dlvrd,
$submitDate,
$doneDate,
$this->stat,
$this->err,
$this->text
] = $matches;
$this->submitDate = $this->convertDate($submitDate);
$this->doneDate = $this->convertDate($doneDate);
}
private function convertDate(string $date): int
{
$dateParts = str_split($date, 2);
$timestamp = gmmktime(
(int)$dateParts[3],
(int)$dateParts[4],
(int)$dateParts[5],
(int)$dateParts[1],
(int)$dateParts[2],
(int)$dateParts[0]
);
if ($timestamp === false) {
throw new SmppException('Invalid date provided');
}
return $timestamp;
}
}