oRTP: include/ortp/b64.h Source File

- Main Page
- Data Structures
- Files

# include/ortp/b64.h

    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 /* ////////////////////////////////////////////////////////////////////////// */