1*254b1274SAndroid Build Coastguard Worker #ifndef CBOR_PROTOCOL_H__ 2*254b1274SAndroid Build Coastguard Worker #define CBOR_PROTOCOL_H__ 3*254b1274SAndroid Build Coastguard Worker 4*254b1274SAndroid Build Coastguard Worker /* The 8 major types */ 5*254b1274SAndroid Build Coastguard Worker #define MT_UNSIGNED 0 6*254b1274SAndroid Build Coastguard Worker #define MT_NEGATIVE 1 7*254b1274SAndroid Build Coastguard Worker #define MT_BYTES 2 8*254b1274SAndroid Build Coastguard Worker #define MT_TEXT 3 9*254b1274SAndroid Build Coastguard Worker #define MT_ARRAY 4 10*254b1274SAndroid Build Coastguard Worker #define MT_MAP 5 11*254b1274SAndroid Build Coastguard Worker #define MT_TAG 6 12*254b1274SAndroid Build Coastguard Worker #define MT_PRIM 7 13*254b1274SAndroid Build Coastguard Worker 14*254b1274SAndroid Build Coastguard Worker /* The initial bytes resulting from those */ 15*254b1274SAndroid Build Coastguard Worker #define IB_UNSIGNED (MT_UNSIGNED << 5) 16*254b1274SAndroid Build Coastguard Worker #define IB_NEGATIVE (MT_NEGATIVE << 5) 17*254b1274SAndroid Build Coastguard Worker #define IB_BYTES (MT_BYTES << 5) 18*254b1274SAndroid Build Coastguard Worker #define IB_TEXT (MT_TEXT << 5) 19*254b1274SAndroid Build Coastguard Worker #define IB_ARRAY (MT_ARRAY << 5) 20*254b1274SAndroid Build Coastguard Worker #define IB_MAP (MT_MAP << 5) 21*254b1274SAndroid Build Coastguard Worker #define IB_TAG (MT_TAG << 5) 22*254b1274SAndroid Build Coastguard Worker #define IB_PRIM (MT_PRIM << 5) 23*254b1274SAndroid Build Coastguard Worker 24*254b1274SAndroid Build Coastguard Worker #define IB_NEGFLAG (IB_NEGATIVE - IB_UNSIGNED) 25*254b1274SAndroid Build Coastguard Worker #define IB_NEGFLAG_AS_BIT(ib) ((ib) >> 5) 26*254b1274SAndroid Build Coastguard Worker #define IB_TEXTFLAG (IB_TEXT - IB_BYTES) 27*254b1274SAndroid Build Coastguard Worker 28*254b1274SAndroid Build Coastguard Worker #define IB_AI(ib) ((ib) & 0x1F) 29*254b1274SAndroid Build Coastguard Worker #define IB_MT(ib) ((ib) >> 5) 30*254b1274SAndroid Build Coastguard Worker 31*254b1274SAndroid Build Coastguard Worker /* Tag numbers handled by this implementation */ 32*254b1274SAndroid Build Coastguard Worker #define TAG_TIME_EPOCH 1 33*254b1274SAndroid Build Coastguard Worker #define TAG_BIGNUM 2 34*254b1274SAndroid Build Coastguard Worker #define TAG_BIGNUM_NEG 3 35*254b1274SAndroid Build Coastguard Worker #define TAG_URI 32 36*254b1274SAndroid Build Coastguard Worker #define TAG_RE 35 37*254b1274SAndroid Build Coastguard Worker 38*254b1274SAndroid Build Coastguard Worker /* Initial bytes of those tag numbers */ 39*254b1274SAndroid Build Coastguard Worker #define IB_TIME_EPOCH (IB_TAG | TAG_TIME_EPOCH) 40*254b1274SAndroid Build Coastguard Worker #define IB_BIGNUM (IB_TAG | TAG_BIGNUM) 41*254b1274SAndroid Build Coastguard Worker #define IB_BIGNUM_NEG (IB_TAG | TAG_BIGNUM_NEG) 42*254b1274SAndroid Build Coastguard Worker /* TAG_URI and TAG_RE are non-immediate tags */ 43*254b1274SAndroid Build Coastguard Worker 44*254b1274SAndroid Build Coastguard Worker /* Simple values handled by this implementation */ 45*254b1274SAndroid Build Coastguard Worker #define VAL_FALSE 20 46*254b1274SAndroid Build Coastguard Worker #define VAL_TRUE 21 47*254b1274SAndroid Build Coastguard Worker #define VAL_NIL 22 48*254b1274SAndroid Build Coastguard Worker #define VAL_UNDEF 23 49*254b1274SAndroid Build Coastguard Worker 50*254b1274SAndroid Build Coastguard Worker /* Initial bytes of those simple values */ 51*254b1274SAndroid Build Coastguard Worker #define IB_FALSE (IB_PRIM | VAL_FALSE) 52*254b1274SAndroid Build Coastguard Worker #define IB_TRUE (IB_PRIM | VAL_TRUE) 53*254b1274SAndroid Build Coastguard Worker #define IB_NIL (IB_PRIM | VAL_NIL) 54*254b1274SAndroid Build Coastguard Worker #define IB_UNDEF (IB_PRIM | VAL_UNDEF) 55*254b1274SAndroid Build Coastguard Worker 56*254b1274SAndroid Build Coastguard Worker /* AI values with more data in head */ 57*254b1274SAndroid Build Coastguard Worker #define AI_1 24 58*254b1274SAndroid Build Coastguard Worker #define AI_2 25 59*254b1274SAndroid Build Coastguard Worker #define AI_4 26 60*254b1274SAndroid Build Coastguard Worker #define AI_8 27 61*254b1274SAndroid Build Coastguard Worker #define AI_INDEF 31 62*254b1274SAndroid Build Coastguard Worker #define IB_BREAK (IB_PRIM | AI_INDEF) 63*254b1274SAndroid Build Coastguard Worker /* For */ 64*254b1274SAndroid Build Coastguard Worker #define IB_UNUSED (IB_TAG | AI_INDEF) 65*254b1274SAndroid Build Coastguard Worker 66*254b1274SAndroid Build Coastguard Worker /* Floating point initial bytes */ 67*254b1274SAndroid Build Coastguard Worker #define IB_FLOAT2 (IB_PRIM | AI_2) 68*254b1274SAndroid Build Coastguard Worker #define IB_FLOAT4 (IB_PRIM | AI_4) 69*254b1274SAndroid Build Coastguard Worker #define IB_FLOAT8 (IB_PRIM | AI_8) 70*254b1274SAndroid Build Coastguard Worker 71*254b1274SAndroid Build Coastguard Worker // These definitions are here because they aren't required for the public 72*254b1274SAndroid Build Coastguard Worker // interface, and they were quite confusing in cn-cbor.h 73*254b1274SAndroid Build Coastguard Worker 74*254b1274SAndroid Build Coastguard Worker #ifdef USE_CBOR_CONTEXT 75*254b1274SAndroid Build Coastguard Worker /** 76*254b1274SAndroid Build Coastguard Worker * Allocate enough space for 1 `cn_cbor` structure. 77*254b1274SAndroid Build Coastguard Worker * 78*254b1274SAndroid Build Coastguard Worker * @param[in] ctx The allocation context, or NULL for calloc. 79*254b1274SAndroid Build Coastguard Worker * @return A pointer to a `cn_cbor` or NULL on failure 80*254b1274SAndroid Build Coastguard Worker */ 81*254b1274SAndroid Build Coastguard Worker #define CN_CALLOC(ctx) ((ctx) && (ctx)->calloc_func) ? \ 82*254b1274SAndroid Build Coastguard Worker (ctx)->calloc_func(1, sizeof(cn_cbor), (ctx)->context) : \ 83*254b1274SAndroid Build Coastguard Worker calloc(1, sizeof(cn_cbor)); 84*254b1274SAndroid Build Coastguard Worker 85*254b1274SAndroid Build Coastguard Worker /** 86*254b1274SAndroid Build Coastguard Worker * Free a 87*254b1274SAndroid Build Coastguard Worker * @param free_func [description] 88*254b1274SAndroid Build Coastguard Worker * @return [description] 89*254b1274SAndroid Build Coastguard Worker */ 90*254b1274SAndroid Build Coastguard Worker #define CN_FREE(ptr, ctx) ((ctx) && (ctx)->free_func) ? \ 91*254b1274SAndroid Build Coastguard Worker (ctx)->free_func((ptr), (ctx)->context) : \ 92*254b1274SAndroid Build Coastguard Worker free((ptr)); 93*254b1274SAndroid Build Coastguard Worker 94*254b1274SAndroid Build Coastguard Worker #define CBOR_CONTEXT_PARAM , context 95*254b1274SAndroid Build Coastguard Worker #define CN_CALLOC_CONTEXT() CN_CALLOC(context) 96*254b1274SAndroid Build Coastguard Worker #define CN_CBOR_FREE_CONTEXT(p) CN_FREE(p, context) 97*254b1274SAndroid Build Coastguard Worker 98*254b1274SAndroid Build Coastguard Worker #else 99*254b1274SAndroid Build Coastguard Worker 100*254b1274SAndroid Build Coastguard Worker #define CBOR_CONTEXT_PARAM 101*254b1274SAndroid Build Coastguard Worker #define CN_CALLOC_CONTEXT() CN_CALLOC 102*254b1274SAndroid Build Coastguard Worker #define CN_CBOR_FREE_CONTEXT(p) CN_FREE(p) 103*254b1274SAndroid Build Coastguard Worker 104*254b1274SAndroid Build Coastguard Worker #ifndef CN_CALLOC 105*254b1274SAndroid Build Coastguard Worker #define CN_CALLOC calloc(1, sizeof(cn_cbor)) 106*254b1274SAndroid Build Coastguard Worker #endif 107*254b1274SAndroid Build Coastguard Worker 108*254b1274SAndroid Build Coastguard Worker #ifndef CN_FREE 109*254b1274SAndroid Build Coastguard Worker #define CN_FREE free 110*254b1274SAndroid Build Coastguard Worker #endif 111*254b1274SAndroid Build Coastguard Worker 112*254b1274SAndroid Build Coastguard Worker #endif // USE_CBOR_CONTEXT 113*254b1274SAndroid Build Coastguard Worker 114*254b1274SAndroid Build Coastguard Worker #ifndef UNUSED_PARAM 115*254b1274SAndroid Build Coastguard Worker #define UNUSED_PARAM(p) ((void)&(p)) 116*254b1274SAndroid Build Coastguard Worker #endif 117*254b1274SAndroid Build Coastguard Worker 118*254b1274SAndroid Build Coastguard Worker #endif // CBOR_PROTOCOL_H__ 119