]> git.proxmox.com Git - ceph.git/blame - ceph/src/civetweb/src/third_party/duktape-1.8.0/examples/debug-trans-dvalue/duk_trans_dvalue.h
import 12.2.13 release
[ceph.git] / ceph / src / civetweb / src / third_party / duktape-1.8.0 / examples / debug-trans-dvalue / duk_trans_dvalue.h
CommitLineData
7c673cae
FG
1#ifndef DUK_TRANS_DVALUE_H_INCLUDED
2#define DUK_TRANS_DVALUE_H_INCLUDED
3
4#include "duktape.h"
5
6typedef struct duk_dvalue duk_dvalue;
7typedef struct duk_trans_buffer duk_trans_buffer;
8typedef struct duk_trans_dvalue_ctx duk_trans_dvalue_ctx;
9
10typedef void (*duk_trans_dvalue_received_function)(duk_trans_dvalue_ctx *ctx, duk_dvalue *dv);
11typedef void (*duk_trans_dvalue_cooperate_function)(duk_trans_dvalue_ctx *ctx, int block);
12typedef void (*duk_trans_dvalue_handshake_function)(duk_trans_dvalue_ctx *ctx, const char *handshake_line);
13typedef void (*duk_trans_dvalue_detached_function)(duk_trans_dvalue_ctx *ctx);
14
15/* struct duk_dvalue 'tag' values, note that these have nothing to do with
16 * Duktape debug protocol inital byte. Struct fields used with the type
17 * are noted next to the define.
18 */
19#define DUK_DVALUE_EOM 1 /* no fields */
20#define DUK_DVALUE_REQ 2 /* no fields */
21#define DUK_DVALUE_REP 3 /* no fields */
22#define DUK_DVALUE_ERR 4 /* no fields */
23#define DUK_DVALUE_NFY 5 /* no fields */
24#define DUK_DVALUE_INTEGER 6 /* i: 32-bit signed integer */
25#define DUK_DVALUE_STRING 7 /* buf: string data, len: string length */
26#define DUK_DVALUE_BUFFER 8 /* buf: buffer data, len: buffer length */
27#define DUK_DVALUE_UNUSED 9 /* no fields */
28#define DUK_DVALUE_UNDEFINED 10 /* no fields */
29#define DUK_DVALUE_NULL 11 /* no fields */
30#define DUK_DVALUE_TRUE 12 /* no fields */
31#define DUK_DVALUE_FALSE 13 /* no fields */
32#define DUK_DVALUE_NUMBER 14 /* d: ieee double */
33#define DUK_DVALUE_OBJECT 15 /* i: class number, buf: pointer data, len: pointer length */
34#define DUK_DVALUE_POINTER 16 /* buf: pointer data, len: pointer length */
35#define DUK_DVALUE_LIGHTFUNC 17 /* i: lightfunc flags, buf: pointer data, len: pointer length */
36#define DUK_DVALUE_HEAPPTR 18 /* buf: pointer data, len: pointer length */
37
38struct duk_dvalue {
39 /* Could use a union for the value but the gain would be relatively small. */
40 int tag;
41 int i;
42 double d;
43 size_t len;
44 unsigned char *buf;
45};
46
47struct duk_trans_buffer {
48 unsigned char *base;
49 size_t write_offset;
50 size_t read_offset;
51 size_t alloc_size;
52};
53
54struct duk_trans_dvalue_ctx {
55 duk_trans_dvalue_received_function received;
56 duk_trans_dvalue_cooperate_function cooperate;
57 duk_trans_dvalue_handshake_function handshake;
58 duk_trans_dvalue_detached_function detached;
59 duk_trans_buffer send_buf; /* sending towards Duktape (duktape read callback) */
60 duk_trans_buffer recv_buf; /* receiving from Duktape (duktape write callback) */
61 int handshake_done;
62 int double_byteorder; /* 0=little endian, 1=big endian, 2=mixed endian */
63};
64
65/* Buffer size needed by duk_dvalue_to_string(). */
66#define DUK_DVALUE_TOSTRING_BUFLEN 256
67
68/* Dvalue handling. */
69duk_dvalue *duk_dvalue_alloc(void);
70void duk_dvalue_free(duk_dvalue *dv);
71void duk_dvalue_to_string(duk_dvalue *dv, char *buf);
72duk_dvalue *duk_dvalue_make_tag(int tag);
73duk_dvalue *duk_dvalue_make_tag_int(int tag, int intval);
74duk_dvalue *duk_dvalue_make_tag_double(int tag, double dblval);
75duk_dvalue *duk_dvalue_make_tag_data(int tag, const char *buf, size_t len);
76duk_dvalue *duk_dvalue_make_tag_int_data(int tag, int intval, const char *buf, size_t len);
77
78/* Initializing and freeing the transport context. */
79duk_trans_dvalue_ctx *duk_trans_dvalue_init(void);
80void duk_trans_dvalue_free(duk_trans_dvalue_ctx *ctx);
81
82/* Sending dvalues towards Duktape. */
83void duk_trans_dvalue_send(duk_trans_dvalue_ctx *ctx, duk_dvalue *dv);
84void duk_trans_dvalue_send_eom(duk_trans_dvalue_ctx *ctx);
85void duk_trans_dvalue_send_req(duk_trans_dvalue_ctx *ctx);
86void duk_trans_dvalue_send_rep(duk_trans_dvalue_ctx *ctx);
87void duk_trans_dvalue_send_err(duk_trans_dvalue_ctx *ctx);
88void duk_trans_dvalue_send_nfy(duk_trans_dvalue_ctx *ctx);
89void duk_trans_dvalue_send_integer(duk_trans_dvalue_ctx *ctx, int val);
90void duk_trans_dvalue_send_string(duk_trans_dvalue_ctx *ctx, const char *str);
91void duk_trans_dvalue_send_lstring(duk_trans_dvalue_ctx *ctx, const char *str, size_t len);
92void duk_trans_dvalue_send_buffer(duk_trans_dvalue_ctx *ctx, const char *buf, size_t len);
93void duk_trans_dvalue_send_unused(duk_trans_dvalue_ctx *ctx);
94void duk_trans_dvalue_send_undefined(duk_trans_dvalue_ctx *ctx);
95void duk_trans_dvalue_send_null(duk_trans_dvalue_ctx *ctx);
96void duk_trans_dvalue_send_true(duk_trans_dvalue_ctx *ctx);
97void duk_trans_dvalue_send_false(duk_trans_dvalue_ctx *ctx);
98void duk_trans_dvalue_send_number(duk_trans_dvalue_ctx *ctx, double val);
99void duk_trans_dvalue_send_object(duk_trans_dvalue_ctx *ctx, int classnum, const char *ptr_data, size_t ptr_len);
100void duk_trans_dvalue_send_pointer(duk_trans_dvalue_ctx *ctx, const char *ptr_data, size_t ptr_len);
101void duk_trans_dvalue_send_lightfunc(duk_trans_dvalue_ctx *ctx, int lf_flags, const char *ptr_data, size_t ptr_len);
102void duk_trans_dvalue_send_heapptr(duk_trans_dvalue_ctx *ctx, const char *ptr_data, size_t ptr_len);
103void duk_trans_dvalue_send_req_cmd(duk_trans_dvalue_ctx *ctx, int cmd);
104
105/* Duktape debug callbacks provided by the transport. */
106duk_size_t duk_trans_dvalue_read_cb(void *udata, char *buffer, duk_size_t length);
107duk_size_t duk_trans_dvalue_write_cb(void *udata, const char *buffer, duk_size_t length);
108duk_size_t duk_trans_dvalue_peek_cb(void *udata);
109void duk_trans_dvalue_read_flush_cb(void *udata);
110void duk_trans_dvalue_write_flush_cb(void *udata);
111void duk_trans_dvalue_detached_cb(void *udata);
112
113#endif /* DUK_TRANS_DVALUE_H_INCLUDED */