You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2015/03/25 01:02:16 UTC

[07/12] mesos git commit: Moved http encode/decode from header to .cpp file.

Moved http encode/decode from header to .cpp file.

Review: https://reviews.apache.org/r/32338


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/f9961e35
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/f9961e35
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/f9961e35

Branch: refs/heads/master
Commit: f9961e353a3ceac964ed099ba5507469d250f2dd
Parents: dab7bdb
Author: Benjamin Mahler <be...@gmail.com>
Authored: Tue Mar 17 12:43:10 2015 -0700
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Tue Mar 24 16:47:18 2015 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/include/process/http.hpp | 109 +++-------------------
 3rdparty/libprocess/src/http.cpp             |  94 +++++++++++++++++++
 2 files changed, 105 insertions(+), 98 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/f9961e35/3rdparty/libprocess/include/process/http.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/include/process/http.hpp b/3rdparty/libprocess/include/process/http.hpp
index a96bc28..ca1bedc 100644
--- a/3rdparty/libprocess/include/process/http.hpp
+++ b/3rdparty/libprocess/include/process/http.hpp
@@ -1,13 +1,8 @@
 #ifndef __PROCESS_HTTP_HPP__
 #define __PROCESS_HTTP_HPP__
 
-#include <limits.h>
 #include <stdint.h>
-#include <unistd.h>
 
-#include <cctype>
-#include <cstdlib>
-#include <iomanip>
 #include <queue>
 #include <sstream>
 #include <string>
@@ -18,7 +13,6 @@
 #include <process/pid.hpp>
 
 #include <stout/error.hpp>
-#include <stout/foreach.hpp>
 #include <stout/hashmap.hpp>
 #include <stout/ip.hpp>
 #include <stout/json.hpp>
@@ -477,6 +471,17 @@ inline Try<hashmap<std::string, std::string> > parse(
 } // namespace path {
 
 
+// Returns a percent-encoded string according to RFC 3986.
+// The input string must not already be percent encoded.
+std::string encode(const std::string& s);
+
+
+// Decodes a percent-encoded string according to RFC 3986.
+// The input string must not already be decoded.
+// Returns error on the occurrence of a malformed % escape in s.
+Try<std::string> decode(const std::string& s);
+
+
 namespace query {
 
 // Decodes an HTTP query string into a map. For example:
@@ -500,98 +505,6 @@ std::string encode(const hashmap<std::string, std::string>& query);
 } // namespace query {
 
 
-// Returns a percent-encoded string according to RFC 3986.
-// The input string must not already be percent encoded.
-inline std::string encode(const std::string& s)
-{
-  std::ostringstream out;
-
-  foreach (unsigned char c, s) {
-    switch (c) {
-      // Reserved characters.
-      case '$':
-      case '&':
-      case '+':
-      case ',':
-      case '/':
-      case ':':
-      case ';':
-      case '=':
-      case '?':
-      case '@':
-      // Unsafe characters.
-      case ' ':
-      case '"':
-      case '<':
-      case '>':
-      case '#':
-      case '%':
-      case '{':
-      case '}':
-      case '|':
-      case '\\':
-      case '^':
-      case '~':
-      case '[':
-      case ']':
-      case '`':
-        // NOTE: The cast to unsigned int is needed.
-        out << '%' << std::setfill('0') << std::setw(2) << std::hex
-            << std::uppercase << (unsigned int) c;
-        break;
-      default:
-        // ASCII control characters and non-ASCII characters.
-        // NOTE: The cast to unsigned int is needed.
-        if (c < 0x20 || c > 0x7F) {
-          out << '%' << std::setfill('0') << std::setw(2) << std::hex
-              << std::uppercase << (unsigned int) c;
-        } else {
-          out << c;
-        }
-        break;
-    }
-  }
-
-  return out.str();
-}
-
-
-// Decodes a percent-encoded string according to RFC 3986.
-// The input string must not already be decoded.
-// Returns error on the occurrence of a malformed % escape in s.
-inline Try<std::string> decode(const std::string& s)
-{
-  std::ostringstream out;
-
-  for (size_t i = 0; i < s.length(); ++i) {
-    if (s[i] != '%') {
-      out << (s[i] == '+' ? ' ' : s[i]);
-      continue;
-    }
-
-    // We now expect two more characters: "% HEXDIG HEXDIG"
-    if (i + 2 >= s.length() || !isxdigit(s[i+1]) || !isxdigit(s[i+2])) {
-      return Error(
-          "Malformed % escape in '" + s + "': '" + s.substr(i, 3) + "'");
-    }
-
-    // Convert from HEXDIG HEXDIG to char value.
-    std::istringstream in(s.substr(i + 1, 2));
-    unsigned long l;
-    in >> std::hex >> l;
-    if (l > UCHAR_MAX) {
-      ABORT("Unexpected conversion from hex string: " + s.substr(i + 1, 2) +
-            " to unsigned long: " + stringify(l));
-    }
-    out << static_cast<unsigned char>(l);
-
-    i += 2;
-  }
-
-  return out.str();
-}
-
-
 // Represents a Uniform Resource Locator:
 //   scheme://domain|ip:port/path?query#fragment
 struct URL

http://git-wip-us.apache.org/repos/asf/mesos/blob/f9961e35/3rdparty/libprocess/src/http.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/http.cpp b/3rdparty/libprocess/src/http.cpp
index 3d2b541..f56c88e 100644
--- a/3rdparty/libprocess/src/http.cpp
+++ b/3rdparty/libprocess/src/http.cpp
@@ -1,14 +1,18 @@
 #include <arpa/inet.h>
 
 #include <stdint.h>
+#include <stdlib.h>
 
 #include <algorithm>
+#include <cctype>
 #include <cstring>
 #include <deque>
+#include <iomanip>
 #include <iostream>
 #include <map>
 #include <queue>
 #include <string>
+#include <sstream>
 #include <vector>
 
 #include <process/future.hpp>
@@ -30,7 +34,9 @@
 #include "decoder.hpp"
 
 using std::deque;
+using std::istringstream;
 using std::map;
+using std::ostringstream;
 using std::queue;
 using std::string;
 using std::vector;
@@ -301,6 +307,93 @@ Future<Nothing> Pipe::Writer::readerClosed()
 }
 
 
+string encode(const string& s)
+{
+  ostringstream out;
+
+  foreach (unsigned char c, s) {
+    switch (c) {
+      // Reserved characters.
+      case '$':
+      case '&':
+      case '+':
+      case ',':
+      case '/':
+      case ':':
+      case ';':
+      case '=':
+      case '?':
+      case '@':
+      // Unsafe characters.
+      case ' ':
+      case '"':
+      case '<':
+      case '>':
+      case '#':
+      case '%':
+      case '{':
+      case '}':
+      case '|':
+      case '\\':
+      case '^':
+      case '~':
+      case '[':
+      case ']':
+      case '`':
+        // NOTE: The cast to unsigned int is needed.
+        out << '%' << std::setfill('0') << std::setw(2) << std::hex
+            << std::uppercase << (unsigned int) c;
+        break;
+      default:
+        // ASCII control characters and non-ASCII characters.
+        // NOTE: The cast to unsigned int is needed.
+        if (c < 0x20 || c > 0x7F) {
+          out << '%' << std::setfill('0') << std::setw(2) << std::hex
+              << std::uppercase << (unsigned int) c;
+        } else {
+          out << c;
+        }
+        break;
+    }
+  }
+
+  return out.str();
+}
+
+
+Try<string> decode(const string& s)
+{
+  ostringstream out;
+
+  for (size_t i = 0; i < s.length(); ++i) {
+    if (s[i] != '%') {
+      out << (s[i] == '+' ? ' ' : s[i]);
+      continue;
+    }
+
+    // We now expect two more characters: "% HEXDIG HEXDIG"
+    if (i + 2 >= s.length() || !isxdigit(s[i+1]) || !isxdigit(s[i+2])) {
+      return Error(
+          "Malformed % escape in '" + s + "': '" + s.substr(i, 3) + "'");
+    }
+
+    // Convert from HEXDIG HEXDIG to char value.
+    istringstream in(s.substr(i + 1, 2));
+    unsigned long l;
+    in >> std::hex >> l;
+    if (l > UCHAR_MAX) {
+      ABORT("Unexpected conversion from hex string: " + s.substr(i + 1, 2) +
+            " to unsigned long: " + stringify(l));
+    }
+    out << static_cast<unsigned char>(l);
+
+    i += 2;
+  }
+
+  return out.str();
+}
+
+
 namespace query {
 
 Try<hashmap<std::string, std::string>> decode(const std::string& query)
@@ -351,6 +444,7 @@ std::string encode(const hashmap<std::string, std::string>& query)
 
 } // namespace query {
 
+
 namespace internal {
 
 Future<Response> decode(const string& buffer)