diff options
author | Chris Wilson <chris+github@qwirx.com> | 2015-04-06 12:17:47 +0000 |
---|---|---|
committer | Chris Wilson <chris+github@qwirx.com> | 2015-04-06 12:17:47 +0000 |
commit | f152abd45f13daf1425c0ee32bccfe0d2dd2a647 (patch) | |
tree | d8653176990a5bc3c25d8ae4fa7a3383a25f9ebe /lib/common/Archive.h | |
parent | c5ecc644d872ce15aab5ba9ce342397cfd331245 (diff) |
Add missing timeouts to Archive reads.
Allows Archive to be used safely on network streams.
Diffstat (limited to 'lib/common/Archive.h')
-rw-r--r-- | lib/common/Archive.h | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/common/Archive.h b/lib/common/Archive.h index 6d5ce88b..87dd1d44 100644 --- a/lib/common/Archive.h +++ b/lib/common/Archive.h @@ -49,18 +49,18 @@ public: void Write(int Item) { int32_t privItem = htonl(Item); - mrStream.Write(&privItem, sizeof(privItem)); + mrStream.Write(&privItem, sizeof(privItem), mTimeout); } void Write(int64_t Item) { int64_t privItem = box_hton64(Item); - mrStream.Write(&privItem, sizeof(privItem)); + mrStream.Write(&privItem, sizeof(privItem), mTimeout); } void WriteExact(uint64_t Item) { Write(Item); } void Write(uint64_t Item) { uint64_t privItem = box_hton64(Item); - mrStream.Write(&privItem, sizeof(privItem)); + mrStream.Write(&privItem, sizeof(privItem), mTimeout); } void Write(uint8_t Item) { @@ -71,7 +71,7 @@ public: { int size = Item.size(); Write(size); - mrStream.Write(Item.c_str(), size); + mrStream.Write(Item.c_str(), size, mTimeout); } // // @@ -100,7 +100,9 @@ public: void Read(int &rItemOut) { int32_t privItem; - if(!mrStream.ReadFullBuffer(&privItem, sizeof(privItem), 0 /* not interested in bytes read if this fails */)) + if(!mrStream.ReadFullBuffer(&privItem, sizeof(privItem), + 0 /* not interested in bytes read if this fails */, + mTimeout)) { THROW_EXCEPTION(CommonException, ArchiveBlockIncompleteRead) } @@ -110,7 +112,8 @@ public: { int32_t privItem; int bytesRead; - if(mrStream.ReadFullBuffer(&privItem, sizeof(privItem), &bytesRead)) + if(mrStream.ReadFullBuffer(&privItem, sizeof(privItem), + &bytesRead, mTimeout)) { rItemOut = ntohl(privItem); } @@ -128,7 +131,9 @@ public: void Read(int64_t &rItemOut) { int64_t privItem; - if(!mrStream.ReadFullBuffer(&privItem, sizeof(privItem), 0 /* not interested in bytes read if this fails */)) + if(!mrStream.ReadFullBuffer(&privItem, sizeof(privItem), + 0 /* not interested in bytes read if this fails */, + mTimeout)) { THROW_EXCEPTION(CommonException, ArchiveBlockIncompleteRead) } @@ -138,7 +143,9 @@ public: void Read(uint64_t &rItemOut) { uint64_t privItem; - if(!mrStream.ReadFullBuffer(&privItem, sizeof(privItem), 0 /* not interested in bytes read if this fails */)) + if(!mrStream.ReadFullBuffer(&privItem, sizeof(privItem), + 0 /* not interested in bytes read if this fails */, + mTimeout)) { THROW_EXCEPTION(CommonException, ArchiveBlockIncompleteRead) } |