00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00036 #ifndef _cobs_h_
00037 #define _cobs_h_
00038
00039 #include <glib.h>
00040
00041 enum cobs_magic { COBS_MAGIC = 0xc0befU };
00042
00047 typedef struct cobs_stream {
00048 enum cobs_magic magic;
00049 gchar *outbuf;
00050 gchar *end;
00051 gchar *o;
00052 gchar *cp;
00053 guchar code;
00054 guchar last_code;
00055 gboolean saw_nul;
00056 gboolean closed;
00057 } cobs_stream_t;
00058
00059
00060
00061
00062
00063 struct iovec;
00064
00065 gchar *cobs_encode(gchar *buf, size_t len, size_t *retlen);
00066 gchar *cobs_encodev(struct iovec *iov, gint iovcnt, size_t *retlen);
00067 gchar *cobs_decode(gchar *buf, size_t len, size_t *retlen, gboolean inplace);
00068 gboolean cobs_decode_into(
00069 const gchar *buf, size_t len, gchar *out, size_t outlen, size_t *retlen);
00070
00071 gboolean cobs_is_valid(const gchar *buf, size_t len);
00072
00073 void cobs_stream_init(cobs_stream_t *cs, gpointer data, size_t len);
00074 size_t cobs_stream_close(cobs_stream_t *cs, gboolean *saw_nul);
00075 gboolean cobs_stream_write(cobs_stream_t *cs, gpointer data, size_t len);
00076 void cobs_stream_invalidate(cobs_stream_t *cs);
00077 gboolean cobs_stream_is_valid(cobs_stream_t *cs);
00078
00079 #endif
00080
00081