oRTP 0.16.3
|
00001 /* ///////////////////////////////////////////////////////////////////////////// 00002 * File: b64/b64.h 00003 * 00004 * Purpose: Header file for the b64 library 00005 * 00006 * Created: 18th October 2004 00007 * Updated: 24th August 2008 00008 * 00009 * Thanks: To Adam McLaurin, for ideas regarding the b64_decode2() and 00010 * b64_encode2(). 00011 * 00012 * Home: http://synesis.com.au/software/ 00013 * 00014 * Copyright (c) 2004-2008, Matthew Wilson and Synesis Software 00015 * All rights reserved. 00016 * 00017 * Redistribution and use in source and binary forms, with or without 00018 * modification, are permitted provided that the following conditions are met: 00019 * 00020 * - Redistributions of source code must retain the above copyright notice, this 00021 * list of conditions and the following disclaimer. 00022 * - Redistributions in binary form must reproduce the above copyright notice, 00023 * this list of conditions and the following disclaimer in the documentation 00024 * and/or other materials provided with the distribution. 00025 * - Neither the name(s) of Matthew Wilson and Synesis Software nor the names of 00026 * any contributors may be used to endorse or promote products derived from 00027 * this software without specific prior written permission. 00028 * 00029 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00030 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00031 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00032 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 00033 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00034 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00035 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00036 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00037 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00038 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00039 * POSSIBILITY OF SUCH DAMAGE. 00040 * 00041 * ////////////////////////////////////////////////////////////////////////// */ 00042 00043 00049 #ifndef B64_INCL_B64_H_B64 00050 #define B64_INCL_B64_H_B64 00051 00052 /* ///////////////////////////////////////////////////////////////////////////// 00053 * Version information 00054 */ 00055 00056 #ifndef B64_DOCUMENTATION_SKIP_SECTION 00057 # define B64_VER_B64_H_B64_MAJOR 1 00058 # define B64_VER_B64_H_B64_MINOR 5 00059 # define B64_VER_B64_H_B64_REVISION 4 00060 # define B64_VER_B64_H_B64_EDIT 28 00061 #endif /* !B64_DOCUMENTATION_SKIP_SECTION */ 00062 00079 #ifndef B64_DOCUMENTATION_SKIP_SECTION 00080 # define B64_VER_1_0_1 0x01000100 00081 # define B64_VER_1_0_2 0x01000200 00082 # define B64_VER_1_0_3 0x01000300 00083 # define B64_VER_1_1_1 0x01010100 00084 # define B64_VER_1_1_2 0x01010200 00085 # define B64_VER_1_1_3 0x01010300 00086 # define B64_VER_1_2_1 0x01020100 00087 # define B64_VER_1_2_2 0x01020200 00088 # define B64_VER_1_2_3 0x01020300 00089 # define B64_VER_1_2_4 0x01020400 00090 # define B64_VER_1_2_5 0x01020500 00091 # define B64_VER_1_2_6 0x01020600 00092 # define B64_VER_1_2_7 0x01020700 00093 # define B64_VER_1_3_1 0x010301ff 00094 # define B64_VER_1_3_2 0x010302ff 00095 # define B64_VER_1_3_3 0x010303ff 00096 # define B64_VER_1_3_4 0x010304ff 00097 00098 # define B64_VER B64_VER_1_3_4 00099 #else /* ? B64_DOCUMENTATION_SKIP_SECTION */ 00100 # define B64_VER 0x010304ff 00101 #endif /* !B64_DOCUMENTATION_SKIP_SECTION */ 00102 00103 #define B64_VER_MAJOR 1 00104 #define B64_VER_MINOR 3 00105 #define B64_VER_REVISION 4 00106 00107 /* ///////////////////////////////////////////////////////////////////////////// 00108 * Includes 00109 */ 00110 00111 #include <stddef.h> 00112 00113 /* ///////////////////////////////////////////////////////////////////////////// 00114 * Namespace 00115 */ 00116 00117 #if !defined(B64_NO_NAMESPACE) && \ 00118 !defined(__cplusplus) 00119 # define B64_NO_NAMESPACE 00120 #endif /* !B64_NO_NAMESPACE && !__cplusplus */ 00121 00122 #ifdef B64_NAMESPACE 00123 # undef B64_NAMESPACE 00124 #endif /* B64_NAMESPACE */ 00125 00126 #ifdef B64_NAMESPACE_QUALIFIER 00127 # undef B64_NAMESPACE_QUALIFIER 00128 #endif /* B64_NAMESPACE_QUALIFIER */ 00129 00130 00131 #ifndef B64_NO_NAMESPACE 00132 00133 # ifdef B64_CUSTOM_NAMESPACE 00134 # define B64_NAMESPACE B64_CUSTOM_NAMESPACE 00135 # else /* ? B64_CUSTOM_NAMESPACE */ 00136 # define B64_NAMESPACE b64 00137 # endif /* B64_CUSTOM_NAMESPACE */ 00138 00139 # if defined(B64_CUSTOM_NAMESPACE) && \ 00140 defined(B64_CUSTOM_NAMESPACE_QUALIFIER) 00141 # define B64_NAMESPACE_QUALIFIER B64_CUSTOM_NAMESPACE_QUALIFIER 00142 # else /* B64_CUSTOM_NAMESPACE && B64_CUSTOM_NAMESPACE_QUALIFIER */ 00143 # define B64_NAMESPACE_QUALIFIER ::B64_NAMESPACE 00144 # endif /* B64_CUSTOM_NAMESPACE && B64_CUSTOM_NAMESPACE_QUALIFIER */ 00145 00146 00155 namespace B64_NAMESPACE 00156 { 00157 #endif /* !B64_NO_NAMESPACE */ 00158 00159 /* ///////////////////////////////////////////////////////////////////////////// 00160 * Enumerations 00161 */ 00162 00165 enum B64_RC 00166 { 00167 B64_RC_OK = 0 00168 , B64_RC_INSUFFICIENT_BUFFER = 1 00169 , B64_RC_TRUNCATED_INPUT = 2 00170 , B64_RC_DATA_ERROR = 3 00171 #ifndef B64_DOCUMENTATION_SKIP_SECTION 00172 , B64_max_RC_value 00173 #endif /* !B64_DOCUMENTATION_SKIP_SECTION */ 00174 }; 00175 00176 #ifndef __cplusplus 00177 typedef enum B64_RC B64_RC; 00178 #endif /* !__cplusplus */ 00179 00182 enum B64_FLAGS 00183 { 00184 B64_F_LINE_LEN_USE_PARAM = 0x0000 00185 , B64_F_LINE_LEN_INFINITE = 0x0001 00186 , B64_F_LINE_LEN_64 = 0x0002 00187 , B64_F_LINE_LEN_76 = 0x0003 00188 , B64_F_LINE_LEN_MASK = 0x000f 00189 , B64_F_STOP_ON_NOTHING = 0x0000 00190 , B64_F_STOP_ON_UNKNOWN_CHAR = 0x0100 00191 , B64_F_STOP_ON_UNEXPECTED_WS = 0x0200 00192 , B64_F_STOP_ON_BAD_CHAR = 0x0300 00193 }; 00194 00195 #ifndef __cplusplus 00196 typedef enum B64_FLAGS B64_FLAGS; 00197 #endif /* !__cplusplus */ 00198 00199 /* ///////////////////////////////////////////////////////////////////////////// 00200 * Functions 00201 */ 00202 00203 #ifdef __cplusplus 00204 extern "C" { 00205 #endif /* __cplusplus */ 00206 00230 size_t b64_encode(void const *src, size_t srcSize, char *dest, size_t destLen); 00231 00260 size_t b64_encode2( void const *src 00261 , size_t srcSize 00262 , char *dest 00263 , size_t destLen 00264 , unsigned flags 00265 , int lineLen /* = 0 */ 00266 , B64_RC *rc /* = NULL */); 00267 00301 size_t b64_decode(char const *src, size_t srcLen, void *dest, size_t destSize); 00302 00343 size_t b64_decode2( char const *src 00344 , size_t srcLen 00345 , void *dest 00346 , size_t destSize 00347 , unsigned flags 00348 , char const **badChar /* = NULL */ 00349 , B64_RC *rc /* = NULL */); 00350 00351 00356 char const *b64_getErrorString(B64_RC code); 00357 00364 size_t b64_getErrorStringLength(B64_RC code); 00365 00366 00367 #ifdef __cplusplus 00368 } /* extern "C" */ 00369 #endif /* __cplusplus */ 00370 00371 /* ///////////////////////////////////////////////////////////////////////////// 00372 * Namespace 00373 */ 00374 00375 #ifndef B64_NO_NAMESPACE 00376 } /* namespace B64_NAMESPACE */ 00377 00378 # ifndef B64_DOCUMENTATION_SKIP_SECTION 00379 00380 namespace stlsoft 00381 { 00382 00383 inline char const *c_str_data_a( B64_NAMESPACE_QUALIFIER::B64_RC code) 00384 { 00385 return B64_NAMESPACE_QUALIFIER::b64_getErrorString(code); 00386 } 00387 inline char const *c_str_data( B64_NAMESPACE_QUALIFIER::B64_RC code) 00388 { 00389 return B64_NAMESPACE_QUALIFIER::b64_getErrorString(code); 00390 } 00391 00392 inline size_t c_str_len_a( B64_NAMESPACE_QUALIFIER::B64_RC code) 00393 { 00394 return B64_NAMESPACE_QUALIFIER::b64_getErrorStringLength(code); 00395 } 00396 inline size_t c_str_len( B64_NAMESPACE_QUALIFIER::B64_RC code) 00397 { 00398 return B64_NAMESPACE_QUALIFIER::b64_getErrorStringLength(code); 00399 } 00400 00401 inline char const *c_str_ptr_a( B64_NAMESPACE_QUALIFIER::B64_RC code) 00402 { 00403 return B64_NAMESPACE_QUALIFIER::b64_getErrorString(code); 00404 } 00405 inline char const *c_str_ptr( B64_NAMESPACE_QUALIFIER::B64_RC code) 00406 { 00407 return B64_NAMESPACE_QUALIFIER::b64_getErrorString(code); 00408 } 00409 00410 } /* namespace stlsoft */ 00411 00412 # endif /* !B64_DOCUMENTATION_SKIP_SECTION */ 00413 00414 #endif /* !B64_NO_NAMESPACE */ 00415 00416 /* ////////////////////////////////////////////////////////////////////////// */ 00417 00418 #endif /* B64_INCL_B64_H_B64 */ 00419 00420 /* ////////////////////////////////////////////////////////////////////////// */