-
Notifications
You must be signed in to change notification settings - Fork 0
/
PBODataTypes.php
106 lines (83 loc) · 2.83 KB
/
PBODataTypes.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
/**
* Created by Ascendro S.R.L.
* User: Michael
* Date: 19.06.13
* Time: 08:44
*/
class PBOHeaderEntry {
const PACKINGMETHOD_UNCOMPRESSED = 0x00000000;
const PACKINGMETHOD_PACKED = 0x43707273;
const PACKINGMETHOD_PRODUCTENTRY = 0x56657273;
public $filename;
public $packingMethod;
public $originalSize;
public $reserved;
public $timestamp;
public $datasize;
public static function createByConsumeStream($stream) {
$pboHeaderEntry = new PBOHeaderEntry();
$pboHeaderEntry->filename = "";
do {
$char = fread($stream,1);
if ($char != "\0") {
$pboHeaderEntry->filename .= $char;
}
} while (!feof($stream) && $char != "\0");
$longValue = fread($stream,4);
$array = unpack("V",$longValue);
$pboHeaderEntry->packingMethod = $array[1];
$longValue = fread($stream,4);
$array = unpack("V",$longValue);
$pboHeaderEntry->originalSize = $array[1];
$longValue = fread($stream,4);
$array = unpack("V",$longValue);
$pboHeaderEntry->reserved = $array[1];
$longValue = fread($stream,4);
$array = unpack("V",$longValue);
$pboHeaderEntry->timestamp = $array[1];
$longValue = fread($stream,4);
$array = unpack("V",$longValue);
$pboHeaderEntry->datasize = $array[1];
return $pboHeaderEntry;
}
public function isEndOfHeader() {
return (($this->filename == "") && ($this->packingMethod != PBOHeaderEntry::PACKINGMETHOD_PRODUCTENTRY) && ($this->datasize == 0));
}
}
class PBOFileEntry {
public $content = null;
public $isCompressed = false;
public $isRapified = false;
public $pboHeader = null;
public static function createByConsumeStream($stream,$header) {
$file = new PBOFileEntry();
$file->pboHeader = $header;
if ($file->content) {
fclose($file->content);
$file->content = null;
}
$file->content = fopen("php://memory", 'r+');
if ($header->datasize > 0) {
stream_copy_to_stream($stream,$file->content,$header->datasize);
}
rewind($file->content);
if ($header->packingMethod == PBOHeaderEntry::PACKINGMETHOD_PACKED) {
$file->isCompressed = true;
//Compressed files not supported yet.
return $file;
}
if (RAPConverter::isRapified($file->content)) {
$file->isRapified = true;
}
return $file;
}
public static function consumeFile($stream,$header) {
if ($header->datasize > 0) {
fread($stream,$header->datasize);
}
}
public function __destruct()
{
}
}