#ifndef __RR_MIME_H__
#define __RR_MIME_H__

typedef struct _RRMimePart RRMimePart;

#include <glib.h>

G_BEGIN_DECLS

struct _RRMimePart {
	GHashTable *headers;
	gboolean    multipart;
	GSList     *subparts;
	gchar      *body;
	gsize       body_len;
	gboolean    should_free;
	gchar      *multipart_type;
	gchar      *boundary;
	gsize       boundary_len;
};

typedef void (*RRMimeFunc) (RRMimePart *part, gpointer user_data);

RRMimePart  *rr_mime_parse              (const gchar *data,
					 gsize len);

RRMimePart  *rr_mime_part_new           (const gchar *type);
RRMimePart  *rr_mime_multipart_new      (const gchar *type);

void         rr_mime_part_free          (RRMimePart *part);

gchar       *rr_mime_part_to_string     (RRMimePart *part);
gsize        rr_mime_part_render        (RRMimePart *part, gchar *str);
gsize        rr_mime_part_to_string_len (RRMimePart *part);

void         rr_mime_part_set_header    (RRMimePart *part, 
					 const gchar *name,
					 const gchar *value);

gboolean     rr_mime_part_has_header    (RRMimePart *part, 
					 const gchar *name);
const gchar *rr_mime_part_get_header    (RRMimePart *part, 
					 const gchar *name);
const gchar *rr_mime_part_get_id        (RRMimePart *part);
void         rr_mime_part_set_unique_id (RRMimePart *part);

void         rr_mime_part_set_body      (RRMimePart *part,
					 gchar *data,
					 gsize len,
					 gboolean should_free);
const gchar *rr_mime_part_get_body      (RRMimePart *part);
gsize        rr_mime_part_get_body_len  (RRMimePart *part);

void         rr_mime_part_append        (RRMimePart *part, 
					 RRMimePart *subpart);

#define rr_mime_part_get_first(part) rr_mime_part_get_next (part, NULL)
RRMimePart  *rr_mime_part_get_next      (RRMimePart *part,
					 RRMimePart *iter);
RRMimePart  *rr_mime_part_find          (RRMimePart *part, 
					 const gchar *content_id);
RRMimePart  *rr_mime_part_find_type     (RRMimePart *part, 
					 const gchar *content_type,
					 RRMimePart *iter);

void         rr_mime_part_foreach       (RRMimePart *part,
					 RRMimeFunc func,
					 gpointer user_data);

G_END_DECLS

#endif /* __RR_MIME_H__ */


syntax highlighted by Code2HTML, v. 0.9.1