diff options
author | jgeboski <jgeboski@gmail.com> | 2015-01-14 13:29:45 -0500 |
---|---|---|
committer | jgeboski <jgeboski@gmail.com> | 2015-01-14 21:55:39 -0500 |
commit | 3f9da0c8ea2b785ba33df99fff7147e3db575a5d (patch) | |
tree | 05923570d92b65a180a1f926f379a8043d3d10a1 /facebook/facebook-thrift.h | |
parent | b29d66da918a912ce47551546a4cfa866325e56c (diff) | |
download | bitlbee-facebook-3f9da0c8ea2b785ba33df99fff7147e3db575a5d.tar.gz bitlbee-facebook-3f9da0c8ea2b785ba33df99fff7147e3db575a5d.tar.bz2 bitlbee-facebook-3f9da0c8ea2b785ba33df99fff7147e3db575a5d.tar.xz |
Implemented THRIFT interface
Diffstat (limited to 'facebook/facebook-thrift.h')
-rw-r--r-- | facebook/facebook-thrift.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/facebook/facebook-thrift.h b/facebook/facebook-thrift.h new file mode 100644 index 0000000..493e679 --- /dev/null +++ b/facebook/facebook-thrift.h @@ -0,0 +1,169 @@ +/* + * Copyright 2014 James Geboski <jgeboski@gmail.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file **/ + +#ifndef _FACEBOOK_THRIFT_H +#define _FACEBOOK_THRIFT_H + +#include <glib.h> + + +/** The flags of a #fb_thrift. **/ +typedef enum fb_thrift_flags fb_thrift_flags_t; + +/** The #fb_thrift data types. **/ +typedef enum fb_thrift_type fb_thrift_type_t; + +/** The main structure for Thrift IO. **/ +typedef struct fb_thrift fb_thrift_t; + + +/** + * The flags of a #fb_thrift. + **/ +enum fb_thrift_flags +{ + FB_THRIFT_FLAG_COMPACT = 1 << 0, /** Compact types. **/ + FB_THRIFT_FLAG_INTERNAL = 1 << 1 /** Internal #GByteArray. **/ +}; + +/** + * The #fb_thrift data types. + **/ +enum fb_thrift_type +{ + FB_THRIFT_TYPE_STOP = 0, /** Stop. **/ + FB_THRIFT_TYPE_VOID = 1, /** Void. **/ + FB_THRIFT_TYPE_BOOL = 2, /** Boolean. **/ + FB_THRIFT_TYPE_BYTE = 3, /** Byte. **/ + FB_THRIFT_TYPE_DOUBLE = 4, /** Double. **/ + FB_THRIFT_TYPE_I16 = 6, /** Integer (16-bit). **/ + FB_THRIFT_TYPE_I32 = 8, /** Integer (32-bit). **/ + FB_THRIFT_TYPE_I64 = 10, /** Integer (64-bit). **/ + FB_THRIFT_TYPE_STRING = 11, /** String. **/ + FB_THRIFT_TYPE_STRUCT = 12, /** Structure. **/ + FB_THRIFT_TYPE_MAP = 13, /** Map. **/ + FB_THRIFT_TYPE_SET = 14, /** Set. **/ + FB_THRIFT_TYPE_LIST = 15, /** List. **/ + FB_THRIFT_TYPE_ENUM = 16, /** Enumerator. **/ + + FB_THRIFT_TYPE_UNKNOWN /** Unknown. **/ + +}; + +/** + * The main structure for Thrift IO. + **/ +struct fb_thrift +{ + fb_thrift_flags_t flags; /** The #fb_thrift_flags. **/ + + gint16 lastid; /** The last identifier. **/ + guint lastbool; /** The last boolean value. **/ + + GByteArray *bytes; /** The #GByteArray of data. **/ + guint offset; /** The data offset. **/ + guint pos; /** The cursor position. **/ +}; + + +fb_thrift_t *fb_thrift_new(GByteArray *bytes, guint offset, gboolean compact); + +void fb_thrift_free(fb_thrift_t *thft); + +void fb_thrift_reset(fb_thrift_t *thft); + +gboolean fb_thrift_read(fb_thrift_t *thft, gpointer data, guint size); + +gboolean fb_thrift_read_bool(fb_thrift_t *thft, gboolean *bln); + +gboolean fb_thrift_read_byte(fb_thrift_t *thft, guint8 *byte); + +gboolean fb_thrift_read_dbl(fb_thrift_t *thft, gdouble *dbl); + +gboolean fb_thrift_read_i16(fb_thrift_t *thft, gint16 *i16); + +gboolean fb_thrift_read_vi16(fb_thrift_t *thft, guint16 *u16); + +gboolean fb_thrift_read_i32(fb_thrift_t *thft, gint32 *i32); + +gboolean fb_thrift_read_vi32(fb_thrift_t *thft, guint32 *u32); + +gboolean fb_thrift_read_i64(fb_thrift_t *thft, gint64 *i64); + +gboolean fb_thrift_read_vi64(fb_thrift_t *thft, guint64 *u64); + +gboolean fb_thrift_read_str(fb_thrift_t *thft, gchar **str); + +gboolean fb_thrift_read_field(fb_thrift_t *thft, fb_thrift_type_t *type, + gint16 *id); + +gboolean fb_thrift_read_stop(fb_thrift_t *thft); + +gboolean fb_thrift_read_isstop(fb_thrift_t *thft); + +gboolean fb_thrift_read_list(fb_thrift_t *thft, fb_thrift_type_t *type, + guint *size); + +gboolean fb_thrift_read_map(fb_thrift_t *thft, fb_thrift_type_t *ktype, + fb_thrift_type_t *vtype, guint *size); + +gboolean fb_thrift_read_set(fb_thrift_t *thft, fb_thrift_type_t *type, + guint *size); + +void fb_thrift_write(fb_thrift_t *thft, gconstpointer data, guint size); + +void fb_thrift_write_bool(fb_thrift_t *thft, gboolean bln); + +void fb_thrift_write_byte(fb_thrift_t *thft, guint8 byte); + +void fb_thrift_write_dbl(fb_thrift_t *thft, gdouble dbl); + +void fb_thrift_write_i16(fb_thrift_t *thft, gint16 i16); + +void fb_thrift_write_vi16(fb_thrift_t *thft, guint16 u16); + +void fb_thrift_write_i32(fb_thrift_t *thft, gint32 i32); + +void fb_thrift_write_vi32(fb_thrift_t *thft, guint32 u32); + +void fb_thrift_write_i64(fb_thrift_t *thft, gint64 i64); + +void fb_thrift_write_vi64(fb_thrift_t *thft, guint64 u64); + +void fb_thrift_write_str(fb_thrift_t *thft, const gchar *str); + +void fb_thrift_write_field(fb_thrift_t *thft, fb_thrift_type_t type, + gint16 id); + +void fb_thrift_write_stop(fb_thrift_t *thft); + +void fb_thrift_write_list(fb_thrift_t *thft, fb_thrift_type_t type, + guint size); + +void fb_thrift_write_map(fb_thrift_t *thft, fb_thrift_type_t ktype, + fb_thrift_type_t vtype, guint size); + +void fb_thrift_write_set(fb_thrift_t *thft, fb_thrift_type_t type, + guint size); + +guint8 fb_thrift_t2ct(fb_thrift_type_t type); + +fb_thrift_type_t fb_thrift_ct2t(guint8 type); + +#endif /* _FACEBOOK_THRIFT_H */ |