1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #ifndef sproto_h
- #define sproto_h
- #include <stddef.h>
- struct sproto;
- struct sproto_type;
- #define SPROTO_REQUEST 0
- #define SPROTO_RESPONSE 1
- // type (sproto_arg.type)
- #define SPROTO_TINTEGER 0
- #define SPROTO_TBOOLEAN 1
- #define SPROTO_TSTRING 2
- #define SPROTO_TDOUBLE 3
- #define SPROTO_TSTRUCT 4
- // container type
- #define SPROTO_TARRAY 0x80
- // sub type of string (sproto_arg.extra)
- #define SPROTO_TSTRING_STRING 0
- #define SPROTO_TSTRING_BINARY 1
- #define SPROTO_CB_ERROR -1
- #define SPROTO_CB_NIL -2
- #define SPROTO_CB_NOARRAY -3
- struct sproto * sproto_create(const void * proto, size_t sz);
- void sproto_release(struct sproto *);
- int sproto_prototag(const struct sproto *, const char * name);
- const char * sproto_protoname(const struct sproto *, int proto);
- // SPROTO_REQUEST(0) : request, SPROTO_RESPONSE(1): response
- struct sproto_type * sproto_protoquery(const struct sproto *, int proto, int what);
- int sproto_protoresponse(const struct sproto *, int proto);
- struct sproto_type * sproto_type(const struct sproto *, const char * type_name);
- int sproto_pack(const void * src, int srcsz, void * buffer, int bufsz);
- int sproto_unpack(const void * src, int srcsz, void * buffer, int bufsz);
- struct sproto_arg {
- void *ud;
- const char *tagname;
- int tagid;
- int type;
- struct sproto_type *subtype;
- void *value;
- int length;
- int index; // array base 1, negative value indicates that it is a empty array
- int mainindex; // for map
- int extra; // SPROTO_TINTEGER: decimal ; SPROTO_TSTRING 0:utf8 string 1:binary
- // When interpretd two fields struct as map, the following fields must not be NULL.
- const char *ktagname;
- const char *vtagname;
- };
- typedef int (*sproto_callback)(const struct sproto_arg *args);
- int sproto_decode(const struct sproto_type *, const void * data, int size, sproto_callback cb, void *ud);
- int sproto_encode(const struct sproto_type *, void * buffer, int size, sproto_callback cb, void *ud);
- // for debug use
- void sproto_dump(struct sproto *);
- const char * sproto_name(struct sproto_type *);
- #endif
|