Improved UTF-8 encoding and decoding, improved toolkit doc,
[silc.git] / lib / silcutil / silcstrutil.h
index 868fdc8c9ad8866feb92970e6b8f1cb75101daec..1f0608cf02720e317be5ec8254e134080f0cf346 100644 (file)
@@ -88,12 +88,15 @@ unsigned char *silc_pem_decode(unsigned char *pem, SilcUInt32 pem_len,
  * SOURCE
  */
 typedef enum {
-  SILC_STRING_ASCII     = 0,   /* Any 8 bit ASCII encoding (default) */
-
-  /* Rest are not implemented yet */
-  SILC_STRING_ASCII_ESC = 1,   /* 7 bit ASCII (>0x7f escaped) */
-  SILC_STRING_BMP       = 2,   /* 16 bit, UCS-2, BMP, ISO/IEC 10646 */
-  SILC_STRING_UNIVERSAL = 3,   /* 32 bit, UCS-4, Universal, ISO/IEC 10646 */
+  SILC_STRING_ASCII         = 0, /* Any 8 bit ASCII encoding (default) */
+  SILC_STRING_ASCII_ESC     = 1, /* 7 bit ASCII (>0x7f escaped) */
+  SILC_STRING_BMP           = 2, /* 16 bit, UCS-2, BMP, ISO/IEC 10646 */
+  SILC_STRING_BMP_LSB       = 3, /* BMP, least significant byte first */
+  SILC_STRING_UNIVERSAL     = 4, /* 32 bit, UCS-4, Universal, ISO/IEC 10646 */
+  SILC_STRING_UNIVERSAL_LSB = 5, /* Universal, least significant byte first */
+  SILC_STRING_LANGUAGE      = 6, /* Language and charset specific conversion
+                                   on those platforms that support iconv().
+                                   Fallback is SILC_STRING_ASCII. */
 } SilcStringEncoding;
 /***/
 
@@ -172,5 +175,43 @@ SilcUInt32 silc_utf8_encoded_len(const unsigned char *bin, SilcUInt32 bin_len,
  ***/
 bool silc_utf8_valid(const unsigned char *utf8, SilcUInt32 utf8_len);
 
+/****f* silcutil/SilcStrUtilAPI/silc_mime_parse
+ *
+ * SYNOPSIS
+ *
+ *    bool
+ *    silc_mime_parse(const unsigned char *mime, SilcUInt32 mime_len,
+ *                    char *version, SilcUInt32 version_size,
+ *                    char *content_type, SilcUInt32 content_type_size,
+ *                    char *transfer_encoding,
+ *                    SilcUInt32 transfer_encoding_size,
+ *                    unsigned char **mime_data_ptr,
+ *                    SilcUInt32 *mime_data_len);
+ *
+ * DESCRIPTION
+ *
+ *    Parses MIME header indicated by `mime' data block of length of
+ *    `mime_len'.  Returns TRUE if the `mime' is valid MIME object.
+ *    Parses from the MIME header the MIME Version (if present) and
+ *    copies it to the `version' pointer if provided, content type
+ *    indicating the data in the MIME object and copies it to the
+ *    `content_type' if provided, and the tranfer encoding (if present)
+ *    indicating the encoding of the data and copies it to the
+ *    `content_transfer_encoding' if provided.
+ *
+ *    The pointer to the actual data in the MIME object is saved into 
+ *    `mime_data_ptr'.  The pointer is a location in the `mime' and it 
+ *    does not allocate or copy anything, ie. the `mime_data_ptr' is a 
+ *    pointer to the `mime'.  The `mime_data_len' indicates the length of 
+ *    the data without the MIME header.  The caller is responsible of
+ *    NULL terminating the buffers it provides.
+ *
+ ***/
+bool
+silc_mime_parse(const unsigned char *mime, SilcUInt32 mime_len,
+                char *version, SilcUInt32 version_size,
+                char *content_type, SilcUInt32 content_type_size,
+                char *transfer_encoding, SilcUInt32 transfer_encoding_size,
+                unsigned char **mime_data_ptr, SilcUInt32 *mime_data_len);
 
 #endif /* SILCSTRUTIL_H */