1 /** 2 * Licensed to the University Corporation for Advanced Internet 3 * Development, Inc. (UCAID) under one or more contributor license 4 * agreements. See the NOTICE file distributed with this work for 5 * additional information regarding copyright ownership. 6 * 7 * UCAID licenses this file to you under the Apache License, 8 * Version 2.0 (the "License"); you may not use this file except 9 * in compliance with the License. You may obtain a copy of the 10 * License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 17 * either express or implied. See the License for the specific 18 * language governing permissions and limitations under the License. 19 */ 20 21 /** 22 * @file xmltooling/util/URLEncoder.h 23 * 24 * Interface to a URL-encoding mechanism along with a default implementation. 25 */ 26 27 #ifndef __xmltool_urlenc_h__ 28 #define __xmltool_urlenc_h__ 29 30 #include <xmltooling/base.h> 31 32 namespace xmltooling { 33 /** 34 * Interface to a URL-encoding mechanism along with a default implementation. 35 * 36 * Since URL-encoding is not canonical, it's important that the same 37 * encoder is used during some library operations and the calling code. 38 * Applications can supply an alternative implementation to the library 39 * if required. 40 */ 41 class XMLTOOL_API URLEncoder { 42 MAKE_NONCOPYABLE(URLEncoder); 43 public: 44 URLEncoder(); 45 46 virtual ~URLEncoder(); 47 48 /** 49 * Produce a URL-safe but equivalent version of the input string. 50 * 51 * @param s input string to encode 52 * @return a string object containing the result of encoding the input 53 */ 54 virtual std::string encode(const char* s) const; 55 56 /** 57 * Perform an in-place decoding operation on the input string. 58 * The resulting string will be NULL-terminated. 59 * 60 * @param s input string to decode in a writable buffer 61 */ 62 virtual void decode(char* s) const; 63 64 protected: 65 /** 66 * Returns true iff the input character requires encoding. 67 * 68 * @param ch the character to check 69 * @return true iff the character should be encoded 70 */ 71 virtual bool isBad(char ch) const; 72 }; 73 }; 74 75 #endif /* __xmltool_urlenc_h__ */ 76