Moved SILC_PARAM_* types under generic SilcParam type into the
authorPekka Riikonen <priikone@silcnet.org>
Sun, 30 Dec 2007 12:46:48 +0000 (12:46 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 30 Dec 2007 12:46:48 +0000 (12:46 +0000)
silctypes.h.

lib/silcutil/silcbuffmt.c
lib/silcutil/silcbuffmt.h
lib/silcutil/silctypes.h

index 3a789fc90c29935357036dcae871f38dbe43cc38..b0c5d5c5beb8dfa110eb2eef704902daa205dfed 100644 (file)
@@ -78,15 +78,17 @@ int silc_buffer_sformat(SilcStack stack, SilcBuffer dst, ...)
 
 int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
 {
-  SilcBufferParamType fmt;
+  SilcParam fmt;
   int flen = 0;
   SilcBool advance = FALSE;
 
   /* Parse the arguments by formatting type. */
   while (1) {
-    fmt = va_arg(ap, SilcBufferParamType);
+    fmt = va_arg(ap, SilcParam);
 
-    switch(fmt) {
+    SILC_LOG_DEBUG(("Buffer format type %x", fmt));
+
+    switch (fmt) {
     case SILC_PARAM_FUNC:
       {
        SilcBufferFormatFunc func;
@@ -108,9 +110,9 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
     case SILC_PARAM_UI8_STRING:
     case SILC_PARAM_UI16_STRING:
     case SILC_PARAM_UI32_STRING:
-    case SILC_PARAM_UI8_STRING_ALLOC:
-    case SILC_PARAM_UI16_STRING_ALLOC:
-    case SILC_PARAM_UI32_STRING_ALLOC:
+    case SILC_PARAM_UI8_STRING | SILC_PARAM_ALLOC:
+    case SILC_PARAM_UI16_STRING | SILC_PARAM_ALLOC:
+    case SILC_PARAM_UI32_STRING | SILC_PARAM_ALLOC:
       {
        char *x = va_arg(ap, char *);
        SilcUInt32 tmp_len = x ? strlen(x) : 0;
@@ -124,13 +126,11 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
     case SILC_PARAM_UI8_NSTRING:
     case SILC_PARAM_UI16_NSTRING:
     case SILC_PARAM_UI32_NSTRING:
-    case SILC_PARAM_UI_XNSTRING:
-    case SILC_PARAM_DATA:
-    case SILC_PARAM_UI8_NSTRING_ALLOC:
-    case SILC_PARAM_UI16_NSTRING_ALLOC:
-    case SILC_PARAM_UI32_NSTRING_ALLOC:
-    case SILC_PARAM_UI_XNSTRING_ALLOC:
-    case SILC_PARAM_DATA_ALLOC:
+    case SILC_PARAM_UICHAR:
+    case SILC_PARAM_UI8_NSTRING | SILC_PARAM_ALLOC:
+    case SILC_PARAM_UI16_NSTRING | SILC_PARAM_ALLOC:
+    case SILC_PARAM_UI32_NSTRING | SILC_PARAM_ALLOC:
+    case SILC_PARAM_UICHAR | SILC_PARAM_ALLOC:
       {
        unsigned char *x = va_arg(ap, unsigned char *);
        SilcUInt32 tmp_len = va_arg(ap, SilcUInt32);
@@ -141,7 +141,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
        }
        break;
       }
-    case SILC_PARAM_UI8_CHAR:
+    case SILC_PARAM_UINT8:
       {
        unsigned char x = (unsigned char)va_arg(ap, int);
        FORMAT_HAS_SPACE(stack, dst, 1);
@@ -149,7 +149,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
        silc_buffer_pull(dst, 1);
        break;
       }
-    case SILC_PARAM_UI16_SHORT:
+    case SILC_PARAM_UINT16:
       {
        unsigned char xf[2];
        SilcUInt16 x = (SilcUInt16)va_arg(ap, int);
@@ -159,7 +159,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
        silc_buffer_pull(dst, 2);
        break;
       }
-    case SILC_PARAM_UI32_INT:
+    case SILC_PARAM_UINT32:
       {
        unsigned char xf[4];
        SilcUInt32 x = va_arg(ap, SilcUInt32);
@@ -169,7 +169,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
        silc_buffer_pull(dst, 4);
        break;
       }
-    case SILC_PARAM_UI64_INT:
+    case SILC_PARAM_UINT64:
       {
        unsigned char xf[8];
        SilcUInt64 x = va_arg(ap, SilcUInt64);
@@ -179,7 +179,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
        silc_buffer_pull(dst, sizeof(SilcUInt64));
        break;
       }
-    case SILC_PARAM_SI8_CHAR:
+    case SILC_PARAM_SINT8:
       {
        char x = (char)va_arg(ap, int);
        FORMAT_HAS_SPACE(stack, dst, 1);
@@ -187,7 +187,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
        silc_buffer_pull(dst, 1);
        break;
       }
-    case SILC_PARAM_SI16_SHORT:
+    case SILC_PARAM_SINT16:
       {
        unsigned char xf[2];
        SilcInt16 x = (SilcInt16)va_arg(ap, int);
@@ -197,7 +197,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
        silc_buffer_pull(dst, 2);
        break;
       }
-    case SILC_PARAM_SI32_INT:
+    case SILC_PARAM_SINT32:
       {
        unsigned char xf[4];
        SilcInt32 x = va_arg(ap, SilcInt32);
@@ -207,7 +207,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
        silc_buffer_pull(dst, 4);
        break;
       }
-    case SILC_PARAM_SI64_INT:
+    case SILC_PARAM_SINT64:
       {
        unsigned char xf[8];
        SilcInt64 x = va_arg(ap, SilcInt64);
@@ -218,7 +218,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
        break;
       }
     case SILC_PARAM_BUFFER:
-    case SILC_PARAM_BUFFER_ALLOC:
+    case SILC_PARAM_BUFFER | SILC_PARAM_ALLOC:
       {
        SilcBuffer x = va_arg(ap, SilcBuffer);
        unsigned char xf[4];
@@ -313,16 +313,18 @@ int silc_buffer_sunformat(SilcStack stack, SilcBuffer src, ...)
 
 int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
 {
-  SilcBufferParamType fmt;
+  SilcParam fmt;
   unsigned char *start_ptr = src->data;
   int len = 0;
   SilcBool advance = FALSE;
 
   /* Parse the arguments by formatting type. */
-  while(1) {
-    fmt = va_arg(ap, SilcBufferParamType);
+  while (1) {
+    fmt = va_arg(ap, SilcParam);
 
-    switch(fmt) {
+    SILC_LOG_DEBUG(("Buffer unformat type %x", fmt));
+
+    switch (fmt) {
     case SILC_PARAM_FUNC:
       {
        SilcBufferUnformatFunc func;
@@ -340,8 +342,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
          silc_buffer_pull(src, tmp_len);
        }
       }
-    case SILC_PARAM_UI_XNSTRING:
-    case SILC_PARAM_DATA:
+    case SILC_PARAM_UICHAR:
       {
        unsigned char **x = va_arg(ap, unsigned char **);
        SilcUInt32 len2 = va_arg(ap, SilcUInt32);
@@ -351,8 +352,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, len2);
        break;
       }
-    case SILC_PARAM_UI_XNSTRING_ALLOC:
-    case SILC_PARAM_DATA_ALLOC:
+    case SILC_PARAM_UICHAR | SILC_PARAM_ALLOC:
       {
        unsigned char **x = va_arg(ap, unsigned char **);
        SilcUInt32 len2 = va_arg(ap, SilcUInt32);
@@ -364,7 +364,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, len2);
        break;
       }
-    case SILC_PARAM_UI8_CHAR:
+    case SILC_PARAM_UINT8:
       {
        unsigned char *x = va_arg(ap, unsigned char *);
        UNFORMAT_HAS_SPACE(src, 1);
@@ -373,7 +373,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, 1);
        break;
       }
-    case SILC_PARAM_UI16_SHORT:
+    case SILC_PARAM_UINT16:
       {
        SilcUInt16 *x = va_arg(ap, SilcUInt16 *);
        UNFORMAT_HAS_SPACE(src, 2);
@@ -382,7 +382,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, 2);
        break;
       }
-    case SILC_PARAM_UI32_INT:
+    case SILC_PARAM_UINT32:
       {
        SilcUInt32 *x = va_arg(ap, SilcUInt32 *);
        UNFORMAT_HAS_SPACE(src, 4);
@@ -391,7 +391,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, 4);
        break;
       }
-    case SILC_PARAM_UI64_INT:
+    case SILC_PARAM_UINT64:
       {
        SilcUInt64 *x = va_arg(ap, SilcUInt64 *);
        UNFORMAT_HAS_SPACE(src, sizeof(SilcUInt64));
@@ -400,7 +400,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, sizeof(SilcUInt64));
        break;
       }
-    case SILC_PARAM_SI8_CHAR:
+    case SILC_PARAM_SINT8:
       {
        char *x = va_arg(ap, char *);
        UNFORMAT_HAS_SPACE(src, 1);
@@ -409,7 +409,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, 1);
        break;
       }
-    case SILC_PARAM_SI16_SHORT:
+    case SILC_PARAM_SINT16:
       {
        SilcInt16 *x = va_arg(ap, SilcInt16 *);
        UNFORMAT_HAS_SPACE(src, 2);
@@ -418,7 +418,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, 2);
        break;
       }
-    case SILC_PARAM_SI32_INT:
+    case SILC_PARAM_SINT32:
       {
        SilcInt32 *x = va_arg(ap, SilcInt32 *);
        UNFORMAT_HAS_SPACE(src, 4);
@@ -427,7 +427,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, 4);
        break;
       }
-    case SILC_PARAM_SI64_INT:
+    case SILC_PARAM_SINT64:
       {
        SilcInt64 *x = va_arg(ap, SilcInt64 *);
        UNFORMAT_HAS_SPACE(src, sizeof(SilcInt64));
@@ -449,20 +449,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, len2);
        break;
       }
-    case SILC_PARAM_UI16_STRING:
-      {
-       SilcUInt16 len2;
-       unsigned char **x = va_arg(ap, unsigned char **);
-       UNFORMAT_HAS_SPACE(src, 2);
-       SILC_GET16_MSB(len2, src->data);
-       silc_buffer_pull(src, 2);
-       UNFORMAT_HAS_SPACE(src, len2);
-       if (silc_likely(x))
-         *x = src->data;
-       silc_buffer_pull(src, len2);
-       break;
-      }
-    case SILC_PARAM_UI8_STRING_ALLOC:
+    case SILC_PARAM_UI8_STRING | SILC_PARAM_ALLOC:
       {
        SilcUInt8 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
@@ -477,7 +464,20 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, len2);
        break;
       }
-    case SILC_PARAM_UI16_STRING_ALLOC:
+    case SILC_PARAM_UI16_STRING:
+      {
+       SilcUInt16 len2;
+       unsigned char **x = va_arg(ap, unsigned char **);
+       UNFORMAT_HAS_SPACE(src, 2);
+       SILC_GET16_MSB(len2, src->data);
+       silc_buffer_pull(src, 2);
+       UNFORMAT_HAS_SPACE(src, len2);
+       if (silc_likely(x))
+         *x = src->data;
+       silc_buffer_pull(src, len2);
+       break;
+      }
+    case SILC_PARAM_UI16_STRING | SILC_PARAM_ALLOC:
       {
        SilcUInt16 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
@@ -505,7 +505,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, len2);
        break;
       }
-    case SILC_PARAM_UI32_STRING_ALLOC:
+    case SILC_PARAM_UI32_STRING | SILC_PARAM_ALLOC:
       {
        SilcUInt32 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
@@ -536,23 +536,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, len2);
        break;
       }
-    case SILC_PARAM_UI16_NSTRING:
-      {
-       SilcUInt16 len2;
-       unsigned char **x = va_arg(ap, unsigned char **);
-       SilcUInt16 *len3 = va_arg(ap, SilcUInt16 *);
-       UNFORMAT_HAS_SPACE(src, 2);
-       SILC_GET16_MSB(len2, src->data);
-       silc_buffer_pull(src, 2);
-       UNFORMAT_HAS_SPACE(src, len2);
-       if (len3)
-         *len3 = len2;
-       if (x)
-         *x = src->data;
-       silc_buffer_pull(src, len2);
-       break;
-      }
-    case SILC_PARAM_UI8_NSTRING_ALLOC:
+    case SILC_PARAM_UI8_NSTRING | SILC_PARAM_ALLOC:
       {
        SilcUInt8 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
@@ -570,7 +554,23 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, len2);
        break;
       }
-    case SILC_PARAM_UI16_NSTRING_ALLOC:
+    case SILC_PARAM_UI16_NSTRING:
+      {
+       SilcUInt16 len2;
+       unsigned char **x = va_arg(ap, unsigned char **);
+       SilcUInt16 *len3 = va_arg(ap, SilcUInt16 *);
+       UNFORMAT_HAS_SPACE(src, 2);
+       SILC_GET16_MSB(len2, src->data);
+       silc_buffer_pull(src, 2);
+       UNFORMAT_HAS_SPACE(src, len2);
+       if (len3)
+         *len3 = len2;
+       if (x)
+         *x = src->data;
+       silc_buffer_pull(src, len2);
+       break;
+      }
+    case SILC_PARAM_UI16_NSTRING | SILC_PARAM_ALLOC:
       {
        SilcUInt16 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
@@ -604,6 +604,24 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, len2);
        break;
       }
+    case SILC_PARAM_UI32_NSTRING | SILC_PARAM_ALLOC:
+      {
+       SilcUInt32 len2;
+       unsigned char **x = va_arg(ap, unsigned char **);
+       SilcUInt32 *len3 = va_arg(ap, SilcUInt32 *);
+       UNFORMAT_HAS_SPACE(src, 4);
+       SILC_GET32_MSB(len2, src->data);
+       silc_buffer_pull(src, 4);
+       UNFORMAT_HAS_SPACE(src, len2);
+       if (len3)
+         *len3 = len2;
+       if (silc_likely(x && len2)) {
+         *x = silc_scalloc(stack, len2 + 1, sizeof(unsigned char));
+         memcpy(*x, src->data, len2);
+       }
+       silc_buffer_pull(src, len2);
+       break;
+      }
     case SILC_PARAM_BUFFER:
       {
        SilcBuffer x = va_arg(ap, SilcBuffer);
@@ -616,7 +634,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
        silc_buffer_pull(src, len2);
       }
       break;
-    case SILC_PARAM_BUFFER_ALLOC:
+    case SILC_PARAM_BUFFER | SILC_PARAM_ALLOC:
       {
        SilcBuffer x = va_arg(ap, SilcBuffer);
        SilcUInt32 len2;
index d1745d1a8b85428111d01a858b68ba1d89094f7f..6e530f542a3d76d42993684af913e9d6342bcfff 100644 (file)
@@ -23,7 +23,7 @@
  *
  * SILC Buffer Format API provides functions for formatting different data
  * types into a buffer and retrieving different data types from a buffer
- * into specified data types.  It is especially useful to format packets,
+ * into specified data types.  It is especially useful to encode packets,
  * protocol payloads and such.
  *
  * As the SilcBuffer API is not thread-safe these routines may not be used
  *
  * memset(&buffer, 0, sizeof(buffer));
  * ret = silc_buffer_format(&buffer,
- *                          SILC_STR_UI_INT(intval),
- *                          SILC_STR_CHAR(charval),
- *                          SILC_STR_UI_INT(intval),
- *                          SILC_STR_SHORT(str_len),
+ *                          SILC_STR_UINT32(intval),
+ *                          SILC_STR_UINT8(charval),
+ *                          SILC_STR_UINT64(longintval),
+ *                          SILC_STR_UINT16(str_len),
  *                          SILC_STR_DATA(str, str_len),
  *                          SILC_STR_END);
  * if (ret < 0)
@@ -134,10 +134,10 @@ typedef int (*SilcBufferUnformatFunc)(SilcStack stack, SilcBuffer buffer,
  *
  *    memset(&buffer, 0, sizeof(buffer));
  *    ret = silc_buffer_format(&buffer,
- *                             SILC_STR_UI_INT(intval),
- *                             SILC_STR_CHAR(charval),
- *                             SILC_STR_UI_INT(intval),
- *                             SILC_STR_SHORT(str_len),
+ *                             SILC_STR_UINT32(intval),
+ *                             SILC_STR_UINT8(charval),
+ *                             SILC_STR_UINT32(intval),
+ *                             SILC_STR_UINT16(str_len),
  *                             SILC_STR_DATA(str, str_len),
  *                             SILC_STR_END);
  *    if (ret < 0)
@@ -150,8 +150,8 @@ typedef int (*SilcBufferUnformatFunc)(SilcStack stack, SilcBuffer buffer,
  *    SilcBuffer buf;
  *    buf = silc_buffer_alloc(0);
  *    ret = silc_buffer_format(buf,
- *                             SILC_STR_UI_INT(intval),
- *                             SILC_STR_CHAR(charval),
+ *                             SILC_STR_UINT32(intval),
+ *                             SILC_STR_UINT8(charval),
  *                             SILC_STR_END);
  *    if (ret < 0)
  *      error;
@@ -163,7 +163,7 @@ typedef int (*SilcBufferUnformatFunc)(SilcStack stack, SilcBuffer buffer,
  *    SilcBuffer buf;
  *    buf = silc_buffer_alloc(2 + str_len);
  *    ret = silc_buffer_format(buf,
- *                             SILC_STR_UI_SHORT(str_len),
+ *                             SILC_STR_UINT16(str_len),
  *                             SILC_STR_DATA(str, str_len),
  *                             SILC_STR_END);
  *    if (ret < 0)
@@ -237,8 +237,8 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap);
  * EXAMPLE
  *
  *    ret = silc_buffer_unformat(buffer,
- *                               SILC_STR_UI_INT(&intval),
- *                               SILC_STR_CHAR(&charval),
+ *                               SILC_STR_UINT32(&intval),
+ *                               SILC_STR_UINT8(&charval),
  *                               SILC_STR_OFFSET(4),
  *                               SILC_STR_UI16_NSTRING_ALLOC(&str, &str_len),
  *                               SILC_STR_END);
@@ -343,139 +343,149 @@ int silc_buffer_strformat(SilcBuffer dst, ...);
  ***/
 int silc_buffer_sstrformat(SilcStack stack, SilcBuffer dst, ...);
 
-/****d* silcutil/SilcBufferFormatAPI/SilcBufferParamType
+/****d* silcutil/SilcBufferFormatAPI/SILC_STR_SINT8
  *
  * NAME
  *
- *    typedef enum { ... } SilcBufferParamType;
+ *    #define SILC_STR_SINT8() ...
  *
  * DESCRIPTION
  *
- *    Buffer parameter types.  These are not needed when formatting or
- *    unformatting buffers.  Use the macros such as SILC_STR_UI_CHAR and
- *    others instead.  These types may be used when describing what a
- *    buffer looks like, and how it may be formatted and unformatted.
- *
- * SOURCE
- */
-typedef enum {
-  SILC_PARAM_SI8_CHAR,            /* Signed 8-bit char */
-  SILC_PARAM_UI8_CHAR,            /* Unsigned 8-bit char */
-  SILC_PARAM_SI16_SHORT,          /* Signed 16-bit int */
-  SILC_PARAM_UI16_SHORT,          /* Unsigned 16-bit int */
-  SILC_PARAM_SI32_INT,            /* Signed 32-bit int */
-  SILC_PARAM_UI32_INT,            /* Unsigned 32-bit int */
-  SILC_PARAM_SI64_INT,            /* Signed 64-bit int */
-  SILC_PARAM_UI64_INT,            /* Unsigned 64-bit int */
-  SILC_PARAM_UI8_STRING,          /* String (max len 8-bits)*/
-  SILC_PARAM_UI16_STRING,         /* String (max len 16-bits) */
-  SILC_PARAM_UI32_STRING,         /* String (max len 32-bits) */
-  SILC_PARAM_BUFFER,              /* SilcBuffer */
-
-  /* Internal types */
-  SILC_PARAM_DATA,                /* Binary data */
-  SILC_PARAM_UI8_NSTRING,         /* String (max len 8-bits) */
-  SILC_PARAM_UI16_NSTRING,        /* String (max len 16-bits) */
-  SILC_PARAM_UI32_NSTRING,        /* String (max len 32-bits) */
-  SILC_PARAM_UI8_STRING_ALLOC,    /* Alloc + memcpy */
-  SILC_PARAM_UI16_STRING_ALLOC,           /* Alloc + memcpy */
-  SILC_PARAM_UI32_STRING_ALLOC,           /* Alloc + memcpy */
-  SILC_PARAM_UI8_NSTRING_ALLOC,           /* Alloc + memcpy */
-  SILC_PARAM_UI16_NSTRING_ALLOC,   /* Alloc + memcpy */
-  SILC_PARAM_UI32_NSTRING_ALLOC,   /* Alloc + memcpy */
-  SILC_PARAM_DATA_ALLOC,          /* Alloc + memcpy */
-  SILC_PARAM_BUFFER_ALLOC,        /* Alloc + memcpy */
-
-  SILC_PARAM_OFFSET,
-  SILC_PARAM_ADVANCE,
-  SILC_PARAM_FUNC,
-
-  SILC_PARAM_UI_XNSTRING,
-  SILC_PARAM_UI_XNSTRING_ALLOC,
-
-  SILC_PARAM_END
-} SilcBufferParamType;
-/***/
-
-/****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_CHAR
+ *    One 8-bit signed integer.
+ *
+ *    Formatting:    SILC_STR_SINT8(SilcInt8)
+ *    Unformatting:  SILC_STR_SINT8(SilcInt8 *)
+ *
+ ***/
+#define SILC_STR_SINT8(x) SILC_PARAM_SINT8, (x)
+
+/****d* silcutil/SilcBufferFormatAPI/SILC_STR_UINT8
+ *
+ * NAME
+ *
+ *    #define SILC_STR_UINT8() ...
+ *
+ * DESCRIPTION
+ *
+ *    One 8-bit unsigned integer.
+ *
+ *    Formatting:    SILC_STR_UINT8(SilcUInt8)
+ *    Unformatting:  SILC_STR_UINT8(SilcUInt8 *)
+ *
+ ***/
+#define SILC_STR_UINT8(x) SILC_PARAM_UINT8, (x)
+
+/* Deprecated */
+#define SILC_STR_SI_CHAR(x) SILC_PARAM_SINT8, (x)
+#define SILC_STR_UI_CHAR(x) SILC_PARAM_UINT8, (x)
+
+/****d* silcutil/SilcBufferFormatAPI/SILC_STR_SINT16
+ *
+ * NAME
+ *
+ *    #define SILC_STR_SINT16() ...
+ *
+ * DESCRIPTION
+ *
+ *    SilcInt16.
+ *
+ *    Formatting:    SILC_STR_SINT16(SilcInt16)
+ *    Unformatting:  SILC_STR_SINT16(SilcInt16 *)
+ *
+ ***/
+#define SILC_STR_SINT16(x) SILC_PARAM_SINT16, (x)
+
+/****d* silcutil/SilcBufferFormatAPI/SILC_STR_UINT16
  *
  * NAME
  *
- *    #define SILC_STR_UI_CHAR() ...
- *    #define SILC_STR_SI_CHAR() ...
+ *    #define SILC_STR_UINT16() ...
  *
  * DESCRIPTION
  *
- *    One signed/unsigned character.
+ *    SilcUInt16.
  *
- *    Formatting:    SILC_STR_SI_CHAR(char)
- *                   SILC_STR_UI_CHAR(unsigned char)
- *    Unformatting:  SILC_STR_SI_CHAR(char *)
- *                   SILC_STR_UI_CHAR(unsigned char *)
+ *    Formatting:    SILC_STR_UINT16(SilcUInt16)
+ *    Unformatting:  SILC_STR_UINT16(SilcUInt16 *)
  *
  ***/
-#define SILC_STR_SI_CHAR(x) SILC_PARAM_SI8_CHAR, (x)
-#define SILC_STR_UI_CHAR(x) SILC_PARAM_UI8_CHAR, (x)
+#define SILC_STR_UINT16(x) SILC_PARAM_UINT16, (x)
 
-/****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_SHORT
+/* Deprecated */
+#define SILC_STR_SI_SHORT(x) SILC_PARAM_SINT16, (x)
+#define SILC_STR_UI_SHORT(x) SILC_PARAM_UINT16, (x)
+
+/****d* silcutil/SilcBufferFormatAPI/SILC_STR_SINT32
  *
  * NAME
  *
- *    #define SILC_STR_UI_SHORT() ...
- *    #define SILC_STR_SI_SHORT() ...
+ *    #define SILC_STR_SINT32() ...
  *
  * DESCRIPTION
  *
- *    SilcInt16/SilcUInt16.
+ *    SilcInt32.
  *
- *    Formatting:    SILC_STR_SI_SHORT(SilcInt16)
- *                   SILC_STR_UI_SHORT(SilcUInt16)
- *    Unformatting:  SILC_STR_SI_SHORT(SilcInt16 *)
- *                   SILC_STR_UI_SHORT(SilcUInt16 *)
+ *    Formatting:    SILC_STR_SINT32(SilcInt32)
+ *    Unformatting:  SILC_STR_SINT32(SilcInt32 *)
  *
  ***/
-#define SILC_STR_SI_SHORT(x) SILC_PARAM_SI16_SHORT, (x)
-#define SILC_STR_UI_SHORT(x) SILC_PARAM_UI16_SHORT, (x)
+#define SILC_STR_SINT32(x) SILC_PARAM_SINT32, (x)
 
-/****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_INT
+/****d* silcutil/SilcBufferFormatAPI/SILC_STR_UINT32
  *
  * NAME
  *
- *    #define SILC_STR_UI_INT() ...
- *    #define SILC_STR_SI_INT() ...
+ *    #define SILC_STR_UINT32() ...
  *
  * DESCRIPTION
  *
- *    SilcInt32/SilcUInt32.
+ *    SilcUInt32.
  *
- *    Formatting:    SILC_STR_SI_INT(SilcInt32)
- *                   SILC_STR_UI_INT(SilcUInt32)
- *    Unformatting:  SILC_STR_SI_INT(SilcInt32 *)
- *                   SILC_STR_UI_INT(SilcUInt32 *)
+ *    Formatting:    SILC_STR_UINT32(SilcUInt32)
+ *    Unformatting:  SILC_STR_UINT32(SilcUInt32 *)
  *
  ***/
-#define SILC_STR_SI_INT(x) SILC_PARAM_SI32_INT, (x)
-#define SILC_STR_UI_INT(x) SILC_PARAM_UI32_INT, (x)
+#define SILC_STR_UINT32(x) SILC_PARAM_UINT32, (x)
+
+/* Deprecated */
+#define SILC_STR_SI_INT(x) SILC_PARAM_SINT32, (x)
+#define SILC_STR_UI_INT(x) SILC_PARAM_UINT32, (x)
 
-/****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_INT64
+/****d* silcutil/SilcBufferFormatAPI/SILC_STR_SINT64
  *
  * NAME
  *
- *    #define SILC_STR_UI_INT64() ...
- *    #define SILC_STR_SI_INT64() ...
+ *    #define SILC_STR_SINT64() ...
  *
  * DESCRIPTION
  *
- *    SilcInt64/SilcUInt64.
+ *    SilcInt64.
  *
- *     Formatting:    SILC_STR_SI_INT64(SilcInt64)
- *                    SILC_STR_UI_INT64(SilcUInt64)
- *     Unformatting:  SILC_STR_SI_INT64(SilcInt64 *)
- *                    SILC_STR_UI_INT64(SilcUInt64 *)
+ *    Formatting:    SILC_STR_SINT64(SilcInt64)
+ *    Unformatting:  SILC_STR_SINT64(SilcInt64 *)
  *
  ***/
-#define SILC_STR_SI_INT64(x) SILC_PARAM_SI64_INT, (x)
-#define SILC_STR_UI_INT64(x) SILC_PARAM_UI64_INT, (x)
+#define SILC_STR_SI_INT64(x) SILC_PARAM_SINT64, (x)
+
+/****d* silcutil/SilcBufferFormatAPI/SILC_STR_UINT64
+ *
+ * NAME
+ *
+ *    #define SILC_STR_UINT64() ...
+ *
+ * DESCRIPTION
+ *
+ *    SilcUInt64.
+ *
+ *    Formatting:    SILC_STR_UINT64(SilcUInt64)
+ *    Unformatting:  SILC_STR_UINT64(SilcUInt64 *)
+ *
+ ***/
+#define SILC_STR_UI_INT64(x) SILC_PARAM_UINT64, (x)
+
+/* Deprecated */
+#define SILC_STR_SI_INT64(x) SILC_PARAM_SINT64, (x)
+#define SILC_STR_UI_INT64(x) SILC_PARAM_UINT64, (x)
 
 /****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_STRING
  *
@@ -521,11 +531,11 @@ typedef enum {
  *
  ***/
 #define SILC_STR_UI8_STRING(x) SILC_PARAM_UI8_STRING, (x)
-#define SILC_STR_UI8_STRING_ALLOC(x) SILC_PARAM_UI8_STRING_ALLOC, (x)
+#define SILC_STR_UI8_STRING_ALLOC(x) SILC_PARAM_UI8_STRING | SILC_PARAM_ALLOC, (x)
 #define SILC_STR_UI16_STRING(x) SILC_PARAM_UI16_STRING, (x)
-#define SILC_STR_UI16_STRING_ALLOC(x) SILC_PARAM_UI16_STRING_ALLOC, (x)
+#define SILC_STR_UI16_STRING_ALLOC(x) SILC_PARAM_UI16_STRING | SILC_PARAM_ALLOC, (x)
 #define SILC_STR_UI32_STRING(x) SILC_PARAM_UI32_STRING, (x)
-#define SILC_STR_UI32_STRING_ALLOC(x) SILC_PARAM_UI32_STRING_ALLOC, (x)
+#define SILC_STR_UI32_STRING_ALLOC(x) SILC_PARAM_UI32_STRING | SILC_PARAM_ALLOC, (x)
 
 /****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_NSTRING
  *
@@ -572,13 +582,13 @@ typedef enum {
  ***/
 #define SILC_STR_UI8_NSTRING(x, l) SILC_PARAM_UI8_NSTRING, (x), (l)
 #define SILC_STR_UI8_NSTRING_ALLOC(x, l) \
-  SILC_PARAM_UI8_NSTRING_ALLOC, (x), (l)
+  SILC_PARAM_UI8_NSTRING | SILC_PARAM_ALLOC, (x), (l)
 #define SILC_STR_UI16_NSTRING(x, l) SILC_PARAM_UI16_NSTRING, (x), (l)
 #define SILC_STR_UI16_NSTRING_ALLOC(x, l) \
-  SILC_PARAM_UI16_NSTRING_ALLOC, (x), (l)
+  SILC_PARAM_UI16_NSTRING | SILC_PARAM_ALLOC, (x), (l)
 #define SILC_STR_UI32_NSTRING(x, l) SILC_PARAM_UI32_NSTRING, (x), (l)
 #define SILC_STR_UI32_NSTRING_ALLOC(x, l) \
-  SILC_PARAM_UI32_NSTRING_ALLOC, (x), (l)
+  SILC_PARAM_UI32_NSTRING | SILC_PARAM_ALLOC, (x), (l)
 
 /****d* silcutil/SilcBufferFormatAPI/SILC_STR_DATA
  *
@@ -601,12 +611,12 @@ typedef enum {
  *    as argument in unformatting.
  *
  ***/
-#define SILC_STR_DATA(x, l) SILC_PARAM_DATA, (x), (l)
-#define SILC_STR_DATA_ALLOC(x, l) SILC_PARAM_DATA_ALLOC, (x), (l)
+#define SILC_STR_DATA(x, l) SILC_PARAM_UICHAR, (x), (l)
+#define SILC_STR_DATA_ALLOC(x, l) SILC_PARAM_UICHAR | SILC_PARAM_ALLOC, (x), (l)
 
 /* Deprecated */
-#define SILC_STR_UI_XNSTRING(x, l) SILC_PARAM_UI_XNSTRING, (x), (l)
-#define SILC_STR_UI_XNSTRING_ALLOC(x, l) SILC_PARAM_UI_XNSTRING_ALLOC, (x), (l)
+#define SILC_STR_UI_XNSTRING(x, l) SILC_PARAM_UICHAR, (x), (l)
+#define SILC_STR_UI_XNSTRING_ALLOC(x, l) SILC_PARAM_UICHAR | SILC_PARAM_ALLOC, (x), (l)
 
 /****d* silcutil/SilcBufferFormatAPI/SILC_STR_BUFFER
  *
@@ -632,7 +642,7 @@ typedef enum {
  *
  ***/
 #define SILC_STR_BUFFER(x) SILC_PARAM_BUFFER, (x)
-#define SILC_STR_BUFFER_ALLOC(x) SILC_PARAM_BUFFER_ALLOC, (x)
+#define SILC_STR_BUFFER_ALLOC(x) SILC_PARAM_BUFFER | SILC_PARAM_ALLOC, (x)
 
 /****d* silcutil/SilcBufferFormatAPI/SILC_STR_FUNC
  *
@@ -668,7 +678,7 @@ typedef enum {
  *    // Encode payload, encrypt and compute MAC.
  *    silc_buffer_format(buf,
  *                       SILC_STR_FUNC(foo_encode_id, id, ctx),
- *                       SILC_STR_UI_SHORT(len),
+ *                       SILC_STR_UINT16(len),
  *                       SILC_STR_DATA(data, len),
  *                       SILC_STR_FUNC(foo_buf_encrypt, NULL, key),
  *                       SILC_STR_FUNC(foo_buf_hmac, NULL, hmac),
@@ -680,7 +690,7 @@ typedef enum {
  *                         SILC_STR_FUNC(foo_buf_hmac, NULL, hmac),
  *                         SILC_STR_FUNC(foo_buf_decrypt, NULL, key),
  *                         SILC_STR_FUNC(foo_decode_id, &id, ctx),
- *                         SILC_STR_UI_SHORT(&len),
+ *                         SILC_STR_UINT16(&len),
  *                         SILC_STR_END);
  *
  ***/
@@ -722,8 +732,8 @@ typedef enum {
  *
  *    Advance the buffer to the end of the data after the formatting is
  *    done.  In normal operation when the formatted data is written the
- *    buffer is located at the start of the data.  With SILC_STR_ADVANCE
- *    the buffer will be located at the end of the data.  This makes it
+ *    buffer is positioned at the start of the data.  With SILC_STR_ADVANCE
+ *    the buffer will be positioned at the end of the data.  This makes it
  *    easy to add new data immediately after the previously added data.
  *    The SILC_STR_ADVANCE may also be used in unformatting.
  *
index 66409acc0fa16d74d5615c49b41244f26e2174fb..b6bbffd20641c872e4b3d5c5555235a398ef6be6 100644 (file)
@@ -268,6 +268,50 @@ typedef void * SilcSocket;
 #endif
 /***/
 
+
+/****d* silcutil/SILCTypes/SilcParam
+ *
+ * NAME
+ *
+ *    typedef SilcUInt32 SilcParam;
+ *
+ * DESCRIPTION
+ *
+ *    A generic parameters that describe the type of an parameter or argument.
+ *    They can be used to describe function arguments, buffer encoding format,
+ *    etc.
+ *
+ * SOURCE
+ */
+typedef SilcUInt32 SilcParam;
+
+#define SILC_PARAM_SINT8         1             /* SilcInt8 */
+#define SILC_PARAM_UINT8         2             /* SilcUInt8 */
+#define SILC_PARAM_SINT16        3             /* SilcInt16 */
+#define SILC_PARAM_UINT16        4             /* SilcUInt16 */
+#define SILC_PARAM_SINT32        5             /* SilcInt32 */
+#define SILC_PARAM_UINT32        6             /* SilcUInt32 */
+#define SILC_PARAM_SINT64        7             /* SilcInt64 */
+#define SILC_PARAM_UINT64        8             /* SilcUInt64 */
+#define SILC_PARAM_SICHAR        9             /* signed char * */
+#define SILC_PARAM_UICHAR        10            /* unsigned char * */
+#define SILC_PARAM_BUFFER        11            /* SilcBuffer */
+#define SILC_PARAM_PTR           12            /* void * */
+#define SILC_PARAM_END           0xfeeefff1     /* End of parameters */
+/***/
+
+/* Internal parameter types, not publicly documented */
+#define SILC_PARAM_UI8_STRING    100           /* String (max len 8-bits) */
+#define SILC_PARAM_UI16_STRING   101           /* String (max len 16-bits) */
+#define SILC_PARAM_UI32_STRING   102           /* String (max len 32-bits) */
+#define SILC_PARAM_UI8_NSTRING   103           /* String (max len 8-bits) */
+#define SILC_PARAM_UI16_NSTRING  104           /* String (max len 16-bits) */
+#define SILC_PARAM_UI32_NSTRING  105           /* String (max len 32-bits) */
+#define SILC_PARAM_OFFSET        106
+#define SILC_PARAM_ADVANCE       107
+#define SILC_PARAM_FUNC          108
+#define SILC_PARAM_ALLOC         0x00010000     /* Allocate, bitmask */
+
 /* Macros */
 
 #if (defined(SILC_I486) || defined(SILC_X86_64)) && defined(__GNUC__)
@@ -846,7 +890,7 @@ static inline SilcUInt64 silc_ror64(SilcUInt64 val, int num)
  *
  * DESCRIPTION
  *
- *    Brach prediction macro.  It specifies that it is likely that the brach
+ *    Branch prediction macro.  It specifies that it is likely that the branch
  *    where silc_likely is applied is taken.  Compiler will optimize the
  *    code based on this prediction.  Never use this before you have profiled
  *    the code first.