in Aliyun/Log/sls.proto.php [147:178]
function read($fp, &$limit = PHP_INT_MAX) {
while(!feof($fp) && $limit > 0) {
$tag = Protobuf::read_varint($fp, $limit);
if ($tag === false) break;
$wire = $tag & 0x07;
$field = $tag >> 3;
//var_dump("Log: Found $field type " . Protobuf::get_wiretype($wire) . " $limit bytes left");
switch($field) {
case 1:
ASSERT('$wire == 0');
$tmp = Protobuf::read_varint($fp, $limit);
if ($tmp === false)
throw new Exception('Protobuf::read_varint returned false');
$this->time_ = $tmp;
break;
case 2:
ASSERT('$wire == 2');
$len = Protobuf::read_varint($fp, $limit);
if ($len === false)
throw new Exception('Protobuf::read_varint returned false');
$limit-=$len;
$this->contents_[] = new Log_Content($fp, $len);
ASSERT('$len == 0');
break;
default:
$this->_unknown[$field . '-' . Protobuf::get_wiretype($wire)][] = Protobuf::read_field($fp, $wire, $limit);
}
}
if (!$this->validateRequired())
throw new Exception('Required fields are missing');
}