in hessian2/basic_codec/byte_codec.cc [23:73]
bool decodeBytesWithReader(std::vector<uint8_t> &output, ReaderPtr &reader) {
uint8_t code = reader->read<uint8_t>().second;
switch (code) {
case 0x20:
case 0x21:
case 0x22:
case 0x23:
case 0x24:
case 0x25:
case 0x26:
case 0x27:
case 0x28:
case 0x29:
case 0x2a:
case 0x2b:
case 0x2c:
case 0x2d:
case 0x2e:
case 0x2f:
if (!readBytes(output, reader, code - 0x20, true)) {
return false;
}
return true;
case 0x34:
case 0x35:
case 0x36:
case 0x37: {
auto res = reader->read<uint8_t>();
if (!res.first ||
!readBytes(output, reader, ((code - 0x34) << 8) + res.second, true)) {
return false;
}
return true;
}
case 0x42: {
auto res = reader->readBE<uint16_t>();
if (!res.first) {
return false;
}
return readBytes(output, reader, res.second, true);
}
case 0x41: {
auto res = reader->readBE<uint16_t>();
if (!res.first) {
return false;
}
return readBytes(output, reader, res.second, false);
}
}
return false;
}