## idmef-data

idmef-data

## Synopsis

    enum                idmef_data_type_t;
                        data;
    int                 idmef_data_new                      (idmef_data_t **data);
    idmef_data_t *      idmef_data_ref                      (idmef_data_t *data);
    int                 idmef_data_new_char                 (idmef_data_t **data,
                                                             char c);
    int                 idmef_data_new_byte                 (idmef_data_t **data,
                                                             uint8_t i);
    int                 idmef_data_new_uint32               (idmef_data_t **data,
                                                             uint32_t i);
    int                 idmef_data_new_uint64               (idmef_data_t **data,
                                                             uint64_t i);
    int                 idmef_data_new_float                (idmef_data_t **data,
                                                             float f);
    void                idmef_data_set_char                 (idmef_data_t *data,
                                                             char c);
    void                idmef_data_set_byte                 (idmef_data_t *data,
                                                             uint8_t i);
    void                idmef_data_set_uint32               (idmef_data_t *data,
                                                             uint32_t i);
    void                idmef_data_set_uint64               (idmef_data_t *data,
                                                             uint64_t i);
    void                idmef_data_set_float                (idmef_data_t *data,
                                                             float f);
    int                 idmef_data_set_ptr_dup_fast         (idmef_data_t *data,
                                                             idmef_data_type_t type,
                                                             const void *ptr,
                                                             size_t len);
    int                 idmef_data_set_ptr_ref_fast         (idmef_data_t *data,
                                                             idmef_data_type_t type,
                                                             const void *ptr,
                                                             size_t len);
    int                 idmef_data_set_ptr_nodup_fast       (idmef_data_t *data,
                                                             idmef_data_type_t type,
                                                             void *ptr,
                                                             size_t len);
    int                 idmef_data_new_ptr_dup_fast         (idmef_data_t **data,
                                                             idmef_data_type_t type,
                                                             const void *ptr,
                                                             size_t len);
    int                 idmef_data_new_ptr_ref_fast         (idmef_data_t **data,
                                                             idmef_data_type_t type,
                                                             const void *ptr,
                                                             size_t len);
    int                 idmef_data_new_ptr_nodup_fast       (idmef_data_t **data,
                                                             idmef_data_type_t type,
                                                             void *ptr,
                                                             size_t len);
    int                 idmef_data_set_char_string_dup_fast (idmef_data_t *data,
                                                             const char *str,
                                                             size_t len);
    int                 idmef_data_new_char_string_dup_fast (idmef_data_t **data,
                                                             const char *str,
                                                             size_t len);
    int                 idmef_data_new_char_string_ref_fast (idmef_data_t **data,
                                                             const char *ptr,
                                                             size_t len);
    int                 idmef_data_new_char_string_nodup_fast
                                                            (idmef_data_t **data,
                                                             char *ptr,
                                                             size_t len);
    int                 idmef_data_set_char_string_ref_fast (idmef_data_t *data,
                                                             const char *ptr,
                                                             size_t len);
    int                 idmef_data_set_char_string_nodup_fast
                                                            (idmef_data_t *data,
                                                             char *ptr,
                                                             size_t len);
    int                 idmef_data_new_char_string_ref      (idmef_data_t **data,
                                                             const char *ptr);
    int                 idmef_data_new_char_string_dup      (idmef_data_t **data,
                                                             const char *ptr);
    int                 idmef_data_new_char_string_nodup    (idmef_data_t **data,
                                                             char *ptr);
    int                 idmef_data_set_char_string_ref      (idmef_data_t *data,
                                                             const char *ptr);
    int                 idmef_data_set_char_string_dup      (idmef_data_t *data,
                                                             const char *ptr);
    int                 idmef_data_set_char_string_nodup    (idmef_data_t *data,
                                                             char *ptr);
    #define             idmef_data_set_char_string_constant (string, str)
    int                 idmef_data_new_byte_string_ref      (idmef_data_t **data,
                                                             unsigned char *ptr,
                                                             size_t len);
    int                 idmef_data_new_byte_string_dup      (idmef_data_t **data,
                                                             unsigned char *ptr,
                                                             size_t len);
    int                 idmef_data_new_byte_string_nodup    (idmef_data_t **data,
                                                             unsigned char *ptr,
                                                             size_t len);
    int                 idmef_data_set_byte_string_ref      (idmef_data_t *data,
                                                             unsigned char *ptr,
                                                             size_t len);
    int                 idmef_data_set_byte_string_dup      (idmef_data_t *data,
                                                             unsigned char *ptr,
                                                             size_t len);
    int                 idmef_data_set_byte_string_nodup    (idmef_data_t *data,
                                                             unsigned char *ptr,
                                                             size_t len);
    void                idmef_data_destroy                  (idmef_data_t *data);
    int                 idmef_data_copy_ref                 (const idmef_data_t *src,
                                                             idmef_data_t *dst);
    int                 idmef_data_copy_dup                 (const idmef_data_t *src,
                                                             idmef_data_t *dst);
    int                 idmef_data_clone                    (const idmef_data_t *src,
                                                             idmef_data_t **dst);
    idmef_data_type_t   idmef_data_get_type                 (const idmef_data_t *data);
    size_t              idmef_data_get_len                  (const idmef_data_t *data);
    const void *        idmef_data_get_data                 (const idmef_data_t *data);
    char                idmef_data_get_char                 (const idmef_data_t *data);
    uint8_t             idmef_data_get_byte                 (const idmef_data_t *data);
    uint32_t            idmef_data_get_uint32               (const idmef_data_t *data);
    uint64_t            idmef_data_get_uint64               (const idmef_data_t *data);
    float               idmef_data_get_float                (const idmef_data_t *data);
    const char *        idmef_data_get_char_string          (const idmef_data_t *data);
    const unsigned char * idmef_data_get_byte_string        (const idmef_data_t *data);
    prelude_bool_t      idmef_data_is_empty                 (const idmef_data_t *data);
    int                 idmef_data_to_string                (const idmef_data_t *data,
                                                             prelude_string_t *out);
    void                idmef_data_destroy_internal         (idmef_data_t *data);

## Description

## Details

### enum idmef_data_type_t

    typedef enum {
    	IDMEF_DATA_TYPE_UNKNOWN      = 0,
    	IDMEF_DATA_TYPE_CHAR         = 1,
    	IDMEF_DATA_TYPE_BYTE         = 2,
    	IDMEF_DATA_TYPE_UINT32       = 3,
    	IDMEF_DATA_TYPE_UINT64       = 4,
    	IDMEF_DATA_TYPE_FLOAT        = 5,
    	IDMEF_DATA_TYPE_CHAR_STRING  = 6,
    	IDMEF_DATA_TYPE_BYTE_STRING  = 7
    } idmef_data_type_t;

### data

    typedef struct {
            int refcount;

            int flags;
            idmef_data_type_t type;
            size_t len;

            union {
    		char char_data;
    		uint8_t byte_data;
    		uint32_t uint32_data;
    		uint64_t uint64_data;
    		float float_data;
    		void *rw_data;
    		const void *ro_data;
    } data;

### idmef_data_new ()

    int                 idmef_data_new                      (idmef_data_t **data);

`data` : |
Returns : |

### idmef_data_ref ()

    idmef_data_t *      idmef_data_ref                      (idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_new_char ()

    int                 idmef_data_new_char                 (idmef_data_t **data,
                                                             char c);

`data` : |
`c` : |
Returns : |

### idmef_data_new_byte ()

    int                 idmef_data_new_byte                 (idmef_data_t **data,
                                                             uint8_t i);

`data` : |
`i` : |
Returns : |

### idmef_data_new_uint32 ()

    int                 idmef_data_new_uint32               (idmef_data_t **data,
                                                             uint32_t i);

`data` : |
`i` : |
Returns : |

### idmef_data_new_uint64 ()

    int                 idmef_data_new_uint64               (idmef_data_t **data,
                                                             uint64_t i);

`data` : |
`i` : |
Returns : |

### idmef_data_new_float ()

    int                 idmef_data_new_float                (idmef_data_t **data,
                                                             float f);

`data` : |
`f` : |
Returns : |

### idmef_data_set_char ()

    void                idmef_data_set_char                 (idmef_data_t *data,
                                                             char c);

`data` : |
`c` : |

### idmef_data_set_byte ()

    void                idmef_data_set_byte                 (idmef_data_t *data,
                                                             uint8_t i);

`data` : |
`i` : |

### idmef_data_set_uint32 ()

    void                idmef_data_set_uint32               (idmef_data_t *data,
                                                             uint32_t i);

`data` : |
`i` : |

### idmef_data_set_uint64 ()

    void                idmef_data_set_uint64               (idmef_data_t *data,
                                                             uint64_t i);

`data` : |
`i` : |

### idmef_data_set_float ()

    void                idmef_data_set_float                (idmef_data_t *data,
                                                             float f);

`data` : |
`f` : |

### idmef_data_set_ptr_dup_fast ()

    int                 idmef_data_set_ptr_dup_fast         (idmef_data_t *data,
                                                             idmef_data_type_t type,
                                                             const void *ptr,
                                                             size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_ptr_ref_fast ()

    int                 idmef_data_set_ptr_ref_fast         (idmef_data_t *data,
                                                             idmef_data_type_t type,
                                                             const void *ptr,
                                                             size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_ptr_nodup_fast ()

    int                 idmef_data_set_ptr_nodup_fast       (idmef_data_t *data,
                                                             idmef_data_type_t type,
                                                             void *ptr,
                                                             size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_ptr_dup_fast ()

    int                 idmef_data_new_ptr_dup_fast         (idmef_data_t **data,
                                                             idmef_data_type_t type,
                                                             const void *ptr,
                                                             size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_ptr_ref_fast ()

    int                 idmef_data_new_ptr_ref_fast         (idmef_data_t **data,
                                                             idmef_data_type_t type,
                                                             const void *ptr,
                                                             size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_ptr_nodup_fast ()

    int                 idmef_data_new_ptr_nodup_fast       (idmef_data_t **data,
                                                             idmef_data_type_t type,
                                                             void *ptr,
                                                             size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_char_string_dup_fast ()

    int                 idmef_data_set_char_string_dup_fast (idmef_data_t *data,
                                                             const char *str,
                                                             size_t len);

`data` : |
`str` : |
`len` : |
Returns : |

### idmef_data_new_char_string_dup_fast ()

    int                 idmef_data_new_char_string_dup_fast (idmef_data_t **data,
                                                             const char *str,
                                                             size_t len);

`data` : |
`str` : |
`len` : |
Returns : |

### idmef_data_new_char_string_ref_fast ()

    int                 idmef_data_new_char_string_ref_fast (idmef_data_t **data,
                                                             const char *ptr,
                                                             size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_char_string_nodup_fast ()

    int                 idmef_data_new_char_string_nodup_fast
                                                            (idmef_data_t **data,
                                                             char *ptr,
                                                             size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_char_string_ref_fast ()

    int                 idmef_data_set_char_string_ref_fast (idmef_data_t *data,
                                                             const char *ptr,
                                                             size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_char_string_nodup_fast ()

    int                 idmef_data_set_char_string_nodup_fast
                                                            (idmef_data_t *data,
                                                             char *ptr,
                                                             size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_char_string_ref ()

    int                 idmef_data_new_char_string_ref      (idmef_data_t **data,
                                                             const char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_new_char_string_dup ()

    int                 idmef_data_new_char_string_dup      (idmef_data_t **data,
                                                             const char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_new_char_string_nodup ()

    int                 idmef_data_new_char_string_nodup    (idmef_data_t **data,
                                                             char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_set_char_string_ref ()

    int                 idmef_data_set_char_string_ref      (idmef_data_t *data,
                                                             const char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_set_char_string_dup ()

    int                 idmef_data_set_char_string_dup      (idmef_data_t *data,
                                                             const char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_set_char_string_nodup ()

    int                 idmef_data_set_char_string_nodup    (idmef_data_t *data,
                                                             char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_set_char_string_constant()

    #define             idmef_data_set_char_string_constant(string, str)

`string` : |
`str` : |

### idmef_data_new_byte_string_ref ()

    int                 idmef_data_new_byte_string_ref      (idmef_data_t **data,
                                                             unsigned char *ptr,
                                                             size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_byte_string_dup ()

    int                 idmef_data_new_byte_string_dup      (idmef_data_t **data,
                                                             unsigned char *ptr,
                                                             size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_byte_string_nodup ()

    int                 idmef_data_new_byte_string_nodup    (idmef_data_t **data,
                                                             unsigned char *ptr,
                                                             size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_byte_string_ref ()

    int                 idmef_data_set_byte_string_ref      (idmef_data_t *data,
                                                             unsigned char *ptr,
                                                             size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_byte_string_dup ()

    int                 idmef_data_set_byte_string_dup      (idmef_data_t *data,
                                                             unsigned char *ptr,
                                                             size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_byte_string_nodup ()

    int                 idmef_data_set_byte_string_nodup    (idmef_data_t *data,
                                                             unsigned char *ptr,
                                                             size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_destroy ()

    void                idmef_data_destroy                  (idmef_data_t *data);

Frees `data`. The buffer pointed by `data` will be freed if the `data` object is marked as _dup or _nodup.

`data` : | Pointer to an idmef_data_t object.

### idmef_data_copy_ref ()

    int                 idmef_data_copy_ref                 (const idmef_data_t *src,
                                                             idmef_data_t *dst);

Makes `dst` reference the same buffer as `src`.

`src` : | Source idmef_data_t object.
`dst` : | Destination idmef_data_t object.
Returns : | 0 on success, a negative value if an error occured.

### idmef_data_copy_dup ()

    int                 idmef_data_copy_dup                 (const idmef_data_t *src,
                                                             idmef_data_t *dst);

Copies `src` to `dst`, including the associated buffer. This is an alternative to `idmef_data_clone()`.

`src` : | Source idmef_data_t object.
`dst` : | Destination idmef_data_t object.
Returns : | 0 on success, a negative value if an error occured.

### idmef_data_clone ()

    int                 idmef_data_clone                    (const idmef_data_t *src,
                                                             idmef_data_t **dst);

`src` : |
`dst` : |
Returns : |

### idmef_data_get_type ()

    idmef_data_type_t   idmef_data_get_type                 (const idmef_data_t *data);

`data` : | Pointer to an idmef_data_t object.
Returns : | the type of the embedded data.

### idmef_data_get_len ()

    size_t              idmef_data_get_len                  (const idmef_data_t *data);

`data` : | Pointer to an idmef_data_t object.
Returns : | the length of data contained within `data` object.

### idmef_data_get_data ()

    const void *        idmef_data_get_data                 (const idmef_data_t *data);

`data` : | Pointer to an idmef_data_t object.
Returns : | the data contained within `data` object.

### idmef_data_get_char ()

    char                idmef_data_get_char                 (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_byte ()

    uint8_t             idmef_data_get_byte                 (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_uint32 ()

    uint32_t            idmef_data_get_uint32               (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_uint64 ()

    uint64_t            idmef_data_get_uint64               (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_float ()

    float               idmef_data_get_float                (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_char_string ()

    const char *        idmef_data_get_char_string          (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_byte_string ()

    const unsigned char * idmef_data_get_byte_string        (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_is_empty ()

    prelude_bool_t      idmef_data_is_empty                 (const idmef_data_t *data);

`data` : | Pointer to an idmef_data_t object.
Returns : | TRUE if empty, FALSE otherwise.

### idmef_data_to_string ()

    int                 idmef_data_to_string                (const idmef_data_t *data,
                                                             prelude_string_t *out);

Formats data contained within `data` to be printable, and stores the result in the provided `out` buffer.

`data` : | Pointer to an idmef_data_t object.
`out` : | Pointer to a prelude_string_t to store the formated data into.
Returns : | 0 on success, a negative value if an error occured.

### idmef_data_destroy_internal ()

    void                idmef_data_destroy_internal         (idmef_data_t *data);

`data` : |