aboutsummaryrefslogtreecommitdiff
path: root/src/serialization.cpp
diff options
context:
space:
mode:
authorElias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com>2020-11-04 16:44:42 +0100
committerGitHub <noreply@github.com>2020-11-04 16:44:42 +0100
commit5d9ae5a91c544fc7fbd475decf47cef7e09ef8fc (patch)
treec980d614fec4a5495798be3e79e033229062c3cd /src/serialization.cpp
parent28f6a79706b088c37268a59d90878220dc4ef9c7 (diff)
parent3af10766fd2b58b068e970266724d7eb10e9316b (diff)
downloaddragonfireclient-5d9ae5a91c544fc7fbd475decf47cef7e09ef8fc.tar.xz
Merge branch 'master' into master
Diffstat (limited to 'src/serialization.cpp')
-rw-r--r--src/serialization.cpp180
1 files changed, 81 insertions, 99 deletions
diff --git a/src/serialization.cpp b/src/serialization.cpp
index 310604f54..64d5cefcc 100644
--- a/src/serialization.cpp
+++ b/src/serialization.cpp
@@ -26,29 +26,29 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/* report a zlib or i/o error */
void zerr(int ret)
{
- dstream<<"zerr: ";
- switch (ret) {
- case Z_ERRNO:
- if (ferror(stdin))
- dstream<<"error reading stdin"<<std::endl;
- if (ferror(stdout))
- dstream<<"error writing stdout"<<std::endl;
- break;
- case Z_STREAM_ERROR:
- dstream<<"invalid compression level"<<std::endl;
- break;
- case Z_DATA_ERROR:
- dstream<<"invalid or incomplete deflate data"<<std::endl;
- break;
- case Z_MEM_ERROR:
- dstream<<"out of memory"<<std::endl;
- break;
- case Z_VERSION_ERROR:
- dstream<<"zlib version mismatch!"<<std::endl;
+ dstream << "zerr: ";
+ switch (ret) {
+ case Z_ERRNO:
+ if (ferror(stdin))
+ dstream << "error reading stdin" << std::endl;
+ if (ferror(stdout))
+ dstream << "error writing stdout" << std::endl;
+ break;
+ case Z_STREAM_ERROR:
+ dstream << "invalid compression level" << std::endl;
+ break;
+ case Z_DATA_ERROR:
+ dstream << "invalid or incomplete deflate data" << std::endl;
+ break;
+ case Z_MEM_ERROR:
+ dstream << "out of memory" << std::endl;
+ break;
+ case Z_VERSION_ERROR:
+ dstream << "zlib version mismatch!" << std::endl;
break;
default:
- dstream<<"return value = "<<ret<<std::endl;
- }
+ dstream << "return value = " << ret << std::endl;
+ }
}
void compressZlib(const u8 *data, size_t data_size, std::ostream &os, int level)
@@ -64,30 +64,28 @@ void compressZlib(const u8 *data, size_t data_size, std::ostream &os, int level)
z.opaque = Z_NULL;
ret = deflateInit(&z, level);
- if(ret != Z_OK)
+ if (ret != Z_OK)
throw SerializationError("compressZlib: deflateInit failed");
// Point zlib to our input buffer
- z.next_in = (Bytef*)&data[0];
+ z.next_in = (Bytef *)&data[0];
z.avail_in = data_size;
// And get all output
- for(;;)
- {
- z.next_out = (Bytef*)output_buffer;
+ for (;;) {
+ z.next_out = (Bytef *)output_buffer;
z.avail_out = bufsize;
status = deflate(&z, Z_FINISH);
- if(status == Z_NEED_DICT || status == Z_DATA_ERROR
- || status == Z_MEM_ERROR)
- {
+ if (status == Z_NEED_DICT || status == Z_DATA_ERROR ||
+ status == Z_MEM_ERROR) {
zerr(status);
throw SerializationError("compressZlib: deflate failed");
}
int count = bufsize - z.avail_out;
- if(count)
+ if (count)
os.write(output_buffer, count);
// This determines zlib has given all output
- if(status == Z_STREAM_END)
+ if (status == Z_STREAM_END)
break;
}
@@ -96,7 +94,7 @@ void compressZlib(const u8 *data, size_t data_size, std::ostream &os, int level)
void compressZlib(const std::string &data, std::ostream &os, int level)
{
- compressZlib((u8*)data.c_str(), data.size(), os, level);
+ compressZlib((u8 *)data.c_str(), data.size(), os, level);
}
void decompressZlib(std::istream &is, std::ostream &os, size_t limit)
@@ -116,17 +114,16 @@ void decompressZlib(std::istream &is, std::ostream &os, size_t limit)
z.opaque = Z_NULL;
ret = inflateInit(&z);
- if(ret != Z_OK)
+ if (ret != Z_OK)
throw SerializationError("dcompressZlib: inflateInit failed");
z.avail_in = 0;
- //dstream<<"initial fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
+ // dstream<<"initial fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
- for(;;)
- {
+ for (;;) {
int output_size = bufsize;
- z.next_out = (Bytef*)output_buffer;
+ z.next_out = (Bytef *)output_buffer;
z.avail_out = output_size;
if (limit) {
@@ -140,53 +137,50 @@ void decompressZlib(std::istream &is, std::ostream &os, size_t limit)
}
}
- if(z.avail_in == 0)
- {
- z.next_in = (Bytef*)input_buffer;
+ if (z.avail_in == 0) {
+ z.next_in = (Bytef *)input_buffer;
is.read(input_buffer, bufsize);
input_buffer_len = is.gcount();
z.avail_in = input_buffer_len;
- //dstream<<"read fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
+ // dstream<<"read fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
}
- if(z.avail_in == 0)
- {
- //dstream<<"z.avail_in == 0"<<std::endl;
+ if (z.avail_in == 0) {
+ // dstream<<"z.avail_in == 0"<<std::endl;
break;
}
- //dstream<<"1 z.avail_in="<<z.avail_in<<std::endl;
+ // dstream<<"1 z.avail_in="<<z.avail_in<<std::endl;
status = inflate(&z, Z_NO_FLUSH);
- //dstream<<"2 z.avail_in="<<z.avail_in<<std::endl;
+ // dstream<<"2 z.avail_in="<<z.avail_in<<std::endl;
bytes_read += is.gcount() - z.avail_in;
- //dstream<<"bytes_read="<<bytes_read<<std::endl;
+ // dstream<<"bytes_read="<<bytes_read<<std::endl;
- if(status == Z_NEED_DICT || status == Z_DATA_ERROR
- || status == Z_MEM_ERROR)
- {
+ if (status == Z_NEED_DICT || status == Z_DATA_ERROR ||
+ status == Z_MEM_ERROR) {
zerr(status);
throw SerializationError("decompressZlib: inflate failed");
}
int count = output_size - z.avail_out;
- //dstream<<"count="<<count<<std::endl;
- if(count)
+ // dstream<<"count="<<count<<std::endl;
+ if (count)
os.write(output_buffer, count);
bytes_written += count;
- if(status == Z_STREAM_END)
- {
- //dstream<<"Z_STREAM_END"<<std::endl;
+ if (status == Z_STREAM_END) {
+ // dstream<<"Z_STREAM_END"<<std::endl;
- //dstream<<"z.avail_in="<<z.avail_in<<std::endl;
- //dstream<<"fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
+ // dstream<<"z.avail_in="<<z.avail_in<<std::endl;
+ // dstream<<"fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
// Unget all the data that inflate didn't take
is.clear(); // Just in case EOF is set
- for(u32 i=0; i < z.avail_in; i++)
- {
+ for (u32 i = 0; i < z.avail_in; i++) {
is.unget();
- if(is.fail() || is.bad())
- {
- dstream<<"unget #"<<i<<" failed"<<std::endl;
- dstream<<"fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
- throw SerializationError("decompressZlib: unget failed");
+ if (is.fail() || is.bad()) {
+ dstream << "unget #" << i << " failed"
+ << std::endl;
+ dstream << "fail=" << is.fail()
+ << " bad=" << is.bad() << std::endl;
+ throw SerializationError(
+ "decompressZlib: unget failed");
}
}
@@ -199,51 +193,42 @@ void decompressZlib(std::istream &is, std::ostream &os, size_t limit)
void compress(const SharedBuffer<u8> &data, std::ostream &os, u8 version)
{
- if(version >= 11)
- {
- compressZlib(*data ,data.getSize(), os);
+ if (version >= 11) {
+ compressZlib(*data, data.getSize(), os);
return;
}
- if(data.getSize() == 0)
+ if (data.getSize() == 0)
return;
// Write length (u32)
u8 tmp[4];
writeU32(tmp, data.getSize());
- os.write((char*)tmp, 4);
+ os.write((char *)tmp, 4);
// We will be writing 8-bit pairs of more_count and byte
u8 more_count = 0;
u8 current_byte = data[0];
- for(u32 i=1; i<data.getSize(); i++)
- {
- if(
- data[i] != current_byte
- || more_count == 255
- )
- {
+ for (u32 i = 1; i < data.getSize(); i++) {
+ if (data[i] != current_byte || more_count == 255) {
// write count and byte
- os.write((char*)&more_count, 1);
- os.write((char*)&current_byte, 1);
+ os.write((char *)&more_count, 1);
+ os.write((char *)&current_byte, 1);
more_count = 0;
current_byte = data[i];
- }
- else
- {
+ } else {
more_count++;
}
}
// write count and byte
- os.write((char*)&more_count, 1);
- os.write((char*)&current_byte, 1);
+ os.write((char *)&more_count, 1);
+ os.write((char *)&current_byte, 1);
}
void decompress(std::istream &is, std::ostream &os, u8 version)
{
- if(version >= 11)
- {
+ if (version >= 11) {
decompressZlib(is, os);
return;
}
@@ -251,31 +236,28 @@ void decompress(std::istream &is, std::ostream &os, u8 version)
// Read length (u32)
u8 tmp[4];
- is.read((char*)tmp, 4);
+ is.read((char *)tmp, 4);
u32 len = readU32(tmp);
// We will be reading 8-bit pairs of more_count and byte
u32 count = 0;
- for(;;)
- {
- u8 more_count=0;
- u8 byte=0;
+ for (;;) {
+ u8 more_count = 0;
+ u8 byte = 0;
- is.read((char*)&more_count, 1);
+ is.read((char *)&more_count, 1);
- is.read((char*)&byte, 1);
+ is.read((char *)&byte, 1);
- if(is.eof())
+ if (is.eof())
throw SerializationError("decompress: stream ended halfway");
- for(s32 i=0; i<(u16)more_count+1; i++)
- os.write((char*)&byte, 1);
+ for (s32 i = 0; i < (u16)more_count + 1; i++)
+ os.write((char *)&byte, 1);
- count += (u16)more_count+1;
+ count += (u16)more_count + 1;
- if(count == len)
+ if (count == len)
break;
}
}
-
-