Exemplo n.º 1
0
 function read($fp, &$limit = PHP_INT_MAX)
 {
     while (!feof($fp) && $limit > 0) {
         $tag = Protobuf::read_varint($fp, $limit);
         if ($tag === false) {
             break;
         }
         $wire = $tag & 0x7;
         $field = $tag >> 3;
         //var_dump("Log_Content: 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');
                 }
                 if ($len > 0) {
                     $tmp = fread($fp, $len);
                 } else {
                     $tmp = '';
                 }
                 if ($tmp === false) {
                     throw new Exception("fread({$len}) returned false");
                 }
                 $this->key_ = $tmp;
                 $limit -= $len;
                 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->value_ = $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');
     }
 }