Fixed ACK/NACK range writing

This commit is contained in:
Shoghi Cervantes Pueyo
2013-03-29 11:18:47 +01:00
parent 257b330a53
commit af52b0a5b5

View File

@ -61,20 +61,36 @@ class Packet{
switch($this->pid){ switch($this->pid){
case 0xc0: case 0xc0:
case 0xa0: case 0xa0:
$cnt = 0; $payload = "";
$this->addRaw(Utils::writeShort(ceil(count($this->data[$field]) / 2))); $records = 0;
foreach($this->data[$field] as $i => $count){ $pointer = 0;
if(($cnt % 2) === 0 or $cnt === 0){ sort($this->data[$field], SORT_NUMERIC);
if(count($this->data[$field]) > 1){ $max = count($this->data[$field]);
$this->addRaw(Utils::writeBool(false)); while($pointer < $max){
$type = true;
$curr = $start = $this->data[$field][$pointer];
for($i = $start + 1; $i < $max; ++$i){
$n = $this->data[$field][$i];
if(($n - $curr) === 1){
$curr = $end = $n;
$type = false;
$pointer = $i + 1;
}else{ }else{
$this->addRaw(Utils::writeBool(true)); break;
} }
} }
++$cnt; ++$pointer;
$this->addRaw(strrev(Utils::writeTriad($count))); if($type === false){
unset($this->data[$field][$i]); $payload .= Utils::writeBool(false);
$payload .= strrev(Utils::writeTriad($start));
$payload .= strrev(Utils::writeTriad($end));
}else{
$payload .= Utils::writeBool(true);
$payload .= strrev(Utils::writeTriad($start));
}
++$records;
} }
$this->addRaw(Utils::writeShort($records) . $payload);
break; break;
case 0x05: case 0x05:
$this->addRaw($this->data[$field]); $this->addRaw($this->data[$field]);