1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _RTL_URI_HXX_ 25 #define _RTL_URI_HXX_ 26 27 #include "rtl/malformeduriexception.hxx" 28 #include "rtl/uri.h" 29 #include "rtl/textenc.h" 30 #include "rtl/ustring.hxx" 31 #include "sal/types.h" 32 33 namespace rtl { 34 35 /** A wrapper around the C functions from <rtl/uri.h>. 36 */ 37 class Uri 38 { 39 public: 40 /** A wrapper around rtl_uriEncode() from <rtl/uri.h> (see there), using 41 an array of 128 booleans as char class. 42 */ 43 static inline rtl::OUString encode(rtl::OUString const & rText, 44 sal_Bool const * pCharClass, 45 rtl_UriEncodeMechanism eMechanism, 46 rtl_TextEncoding eCharset) 47 SAL_THROW(()); 48 49 /** A wrapper around rtl_uriEncode() from <rtl/uri.h> (see there), using 50 a predefined rtl_UriCharClass enumeration member. 51 */ 52 static inline rtl::OUString encode(rtl::OUString const & rText, 53 rtl_UriCharClass eCharClass, 54 rtl_UriEncodeMechanism eMechanism, 55 rtl_TextEncoding eCharset) 56 SAL_THROW(()); 57 58 /** A wrapper around rtl_uriDecode() from <rtl/uri.h> (see there). 59 */ 60 static inline rtl::OUString decode(rtl::OUString const & rText, 61 rtl_UriDecodeMechanism eMechanism, 62 rtl_TextEncoding eCharset) 63 SAL_THROW(()); 64 65 /** A wrapper around rtl_uriConvertRelToAbs() from <rtl/uri.h> (see there). 66 67 @exception MalformedUriException 68 Thrown in case rtl_uriConvertRelToAbs() signals an exception due to a 69 malformed base URI. 70 */ 71 static inline rtl::OUString convertRelToAbs( 72 rtl::OUString const & rBaseUriRef, rtl::OUString const & rRelUriRef); 73 74 private: 75 /** not implemented 76 @internal */ 77 Uri(); 78 79 /** not implemented 80 @internal */ 81 Uri(Uri &); 82 83 /** not implemented 84 @internal */ 85 ~Uri(); 86 87 /** not implemented 88 @internal */ 89 void operator =(Uri); 90 }; 91 92 inline rtl::OUString Uri::encode(rtl::OUString const & rText, 93 sal_Bool const * pCharClass, 94 rtl_UriEncodeMechanism eMechanism, 95 rtl_TextEncoding eCharset) 96 SAL_THROW(()) 97 { 98 rtl::OUString aResult; 99 rtl_uriEncode(const_cast< rtl::OUString & >(rText).pData, 100 pCharClass, 101 eMechanism, 102 eCharset, 103 &aResult.pData); 104 return aResult; 105 } 106 107 inline rtl::OUString Uri::encode(rtl::OUString const & rText, 108 rtl_UriCharClass eCharClass, 109 rtl_UriEncodeMechanism eMechanism, 110 rtl_TextEncoding eCharset) 111 SAL_THROW(()) 112 { 113 rtl::OUString aResult; 114 rtl_uriEncode(const_cast< rtl::OUString & >(rText).pData, 115 rtl_getUriCharClass(eCharClass), 116 eMechanism, 117 eCharset, 118 &aResult.pData); 119 return aResult; 120 } 121 122 inline rtl::OUString Uri::decode(rtl::OUString const & rText, 123 rtl_UriDecodeMechanism eMechanism, 124 rtl_TextEncoding eCharset) 125 SAL_THROW(()) 126 { 127 rtl::OUString aResult; 128 rtl_uriDecode(const_cast< rtl::OUString & >(rText).pData, 129 eMechanism, 130 eCharset, 131 &aResult.pData); 132 return aResult; 133 } 134 135 inline rtl::OUString Uri::convertRelToAbs(rtl::OUString const & rBaseUriRef, 136 rtl::OUString const & rRelUriRef) 137 { 138 rtl::OUString aResult; 139 rtl::OUString aException; 140 if (!rtl_uriConvertRelToAbs( 141 const_cast< rtl::OUString & >(rBaseUriRef).pData, 142 const_cast< rtl::OUString & >(rRelUriRef).pData, &aResult.pData, 143 &aException.pData)) 144 throw MalformedUriException(aException); 145 return aResult; 146 } 147 148 } 149 150 #endif // _RTL_URI_HXX_ 151