in Aliyun/Log/sls.proto.php [261:326]
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("LogGroup: Found $field type " . Protobuf::get_wiretype($wire) . " $limit bytes left");
switch($field) {
case 1:
ASSERT('$wire == 2');
$len = Protobuf::read_varint($fp, $limit);
if ($len === false)
throw new Exception('Protobuf::read_varint returned false');
$limit-=$len;
$this->logs_[] = new Log($fp, $len);
ASSERT('$len == 0');
break;
case 2:
ASSERT('$wire == 2');
$len = Protobuf::read_varint($fp, $limit);
if ($len === false)
throw new Exception('Protobuf::read_varint returned false');
if ($len > 0)
$tmp = fread($fp, $len);
else
$tmp = '';
if ($tmp === false)
throw new Exception("fread($len) returned false");
$this->category_ = $tmp;
$limit-=$len;
break;
case 3:
ASSERT('$wire == 2');
$len = Protobuf::read_varint($fp, $limit);
if ($len === false)
throw new Exception('Protobuf::read_varint returned false');
if ($len > 0)
$tmp = fread($fp, $len);
else
$tmp = '';
if ($tmp === false)
throw new Exception("fread($len) returned false");
$this->topic_ = $tmp;
$limit-=$len;
break;
case 4:
ASSERT('$wire == 2');
$len = Protobuf::read_varint($fp, $limit);
if ($len === false)
throw new Exception('Protobuf::read_varint returned false');
if ($len > 0)
$tmp = fread($fp, $len);
else
$tmp = '';
if ($tmp === false)
throw new Exception("fread($len) returned false");
$this->source_ = $tmp;
$limit-=$len;
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');
}