1 // 2 // 3 // Copyright 2016 gRPC authors. 4 // 5 // Licensed under the Apache License, Version 2.0 (the "License"); 6 // you may not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, software 12 // distributed under the License is distributed on an "AS IS" BASIS, 13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 // See the License for the specific language governing permissions and 15 // limitations under the License. 16 // 17 // 18 19 #ifndef GRPC_SRC_CORE_LIB_SLICE_PERCENT_ENCODING_H 20 #define GRPC_SRC_CORE_LIB_SLICE_PERCENT_ENCODING_H 21 22 // Percent encoding and decoding of slices. 23 // Transforms arbitrary strings into safe-for-transmission strings by using 24 // variants of percent encoding (RFC 3986). 25 // Two major variants are supplied: one that strictly matches URL encoding, 26 // and another which applies percent encoding only to non-http2 header 27 // bytes (the 'compatible' variant) 28 29 #include <grpc/support/port_platform.h> 30 31 #include "src/core/lib/slice/slice.h" 32 33 namespace grpc_core { 34 35 enum class PercentEncodingType { 36 // Flags [A-Za-z0-9-_.~] as unreserved bytes for the percent encoding routines 37 URL, 38 // Flags ascii7 non-control characters excluding '%' as unreserved bytes for 39 // the percent encoding routines 40 Compatible 41 }; 42 43 // Percent-encode a slice, returning the new slice (this cannot fail): 44 // unreserved_bytes is a bitfield indicating which bytes are considered 45 // unreserved and thus do not need percent encoding 46 Slice PercentEncodeSlice(Slice slice, PercentEncodingType type); 47 // Percent-decode a slice, permissively. 48 // If a % triplet can not be decoded, pass it through verbatim. 49 // This cannot fail. 50 Slice PermissivePercentDecodeSlice(Slice slice_in); 51 52 } // namespace grpc_core 53 54 #endif // GRPC_SRC_CORE_LIB_SLICE_PERCENT_ENCODING_H 55