summaryrefslogtreecommitdiffstats
path: root/net/base/big_endian.cc
diff options
context:
space:
mode:
authorszym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-06 23:32:58 +0000
committerszym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-06 23:32:58 +0000
commitad24b1827fe58c4a22c0cddb5791a95f2ab1b21b (patch)
tree7e5e4727d7ab5e3a96bc95ee890aebb1b6c2d608 /net/base/big_endian.cc
parentd7de57877613a63e36facbd485245918c1131f61 (diff)
downloadchromium_src-ad24b1827fe58c4a22c0cddb5791a95f2ab1b21b.zip
chromium_src-ad24b1827fe58c4a22c0cddb5791a95f2ab1b21b.tar.gz
chromium_src-ad24b1827fe58c4a22c0cddb5791a95f2ab1b21b.tar.bz2
Isolates generic DnsClient from AsyncHostResolver.
DnsClient provides a generic DNS client that allows fetching resource records. DnsClient is very lightweight and does not support aggregation, queuing or prioritization of requests. This is the first CL in a series to merge AsyncHostResolver into HostResolverImpl. Also introduces general-purpose BigEndianReader/Writer. BUG=90881 TEST=./net_unittests Review URL: http://codereview.chromium.org/8762001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113282 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/big_endian.cc')
-rw-r--r--net/base/big_endian.cc98
1 files changed, 98 insertions, 0 deletions
diff --git a/net/base/big_endian.cc b/net/base/big_endian.cc
new file mode 100644
index 0000000..17acc59
--- /dev/null
+++ b/net/base/big_endian.cc
@@ -0,0 +1,98 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/base/big_endian.h"
+
+#include "base/string_piece.h"
+
+namespace net {
+
+BigEndianReader::BigEndianReader(const void* buf, size_t len)
+ : ptr_(reinterpret_cast<const char*>(buf)), end_(ptr_ + len) {}
+
+bool BigEndianReader::Skip(size_t len) {
+ if (ptr_ + len > end_)
+ return false;
+ ptr_ += len;
+ return true;
+}
+
+bool BigEndianReader::ReadBytes(void* out, size_t len) {
+ if (ptr_ + len > end_)
+ return false;
+ memcpy(out, ptr_, len);
+ ptr_ += len;
+ return true;
+}
+
+bool BigEndianReader::ReadPiece(base::StringPiece* out, size_t len) {
+ if (ptr_ + len > end_)
+ return false;
+ *out = base::StringPiece(ptr_, len);
+ ptr_ += len;
+ return true;
+}
+
+template<typename T>
+bool BigEndianReader::Read(T* value) {
+ if (ptr_ + sizeof(T) > end_)
+ return false;
+ ReadBigEndian<T>(ptr_, value);
+ ptr_ += sizeof(T);
+ return true;
+}
+
+bool BigEndianReader::ReadU8(uint8* value) {
+ return Read(value);
+}
+
+bool BigEndianReader::ReadU16(uint16* value) {
+ return Read(value);
+}
+
+bool BigEndianReader::ReadU32(uint32* value) {
+ return Read(value);
+}
+
+BigEndianWriter::BigEndianWriter(void* buf, size_t len)
+ : ptr_(reinterpret_cast<char*>(buf)), end_(ptr_ + len) {}
+
+bool BigEndianWriter::Skip(size_t len) {
+ if (ptr_ + len > end_)
+ return false;
+ ptr_ += len;
+ return true;
+}
+
+bool BigEndianWriter::WriteBytes(const void* buf, size_t len) {
+ if (ptr_ + len > end_)
+ return false;
+ memcpy(ptr_, buf, len);
+ ptr_ += len;
+ return true;
+}
+
+template<typename T>
+bool BigEndianWriter::Write(T value) {
+ if (ptr_ + sizeof(T) > end_)
+ return false;
+ WriteBigEndian<T>(ptr_, value);
+ ptr_ += sizeof(T);
+ return true;
+}
+
+bool BigEndianWriter::WriteU8(uint8 value) {
+ return Write(value);
+}
+
+bool BigEndianWriter::WriteU16(uint16 value) {
+ return Write(value);
+}
+
+bool BigEndianWriter::WriteU32(uint32 value) {
+ return Write(value);
+}
+
+} // namespace net
+