]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | #ifndef DUK_TRANS_DVALUE_H_INCLUDED |
2 | #define DUK_TRANS_DVALUE_H_INCLUDED | |
3 | ||
4 | #include "duktape.h" | |
5 | ||
6 | typedef struct duk_dvalue duk_dvalue; | |
7 | typedef struct duk_trans_buffer duk_trans_buffer; | |
8 | typedef struct duk_trans_dvalue_ctx duk_trans_dvalue_ctx; | |
9 | ||
10 | typedef void (*duk_trans_dvalue_received_function)(duk_trans_dvalue_ctx *ctx, duk_dvalue *dv); | |
11 | typedef void (*duk_trans_dvalue_cooperate_function)(duk_trans_dvalue_ctx *ctx, int block); | |
12 | typedef void (*duk_trans_dvalue_handshake_function)(duk_trans_dvalue_ctx *ctx, const char *handshake_line); | |
13 | typedef 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 | ||
38 | struct 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 | ||
47 | struct duk_trans_buffer { | |
48 | unsigned char *base; | |
49 | size_t write_offset; | |
50 | size_t read_offset; | |
51 | size_t alloc_size; | |
52 | }; | |
53 | ||
54 | struct 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. */ | |
69 | duk_dvalue *duk_dvalue_alloc(void); | |
70 | void duk_dvalue_free(duk_dvalue *dv); | |
71 | void duk_dvalue_to_string(duk_dvalue *dv, char *buf); | |
72 | duk_dvalue *duk_dvalue_make_tag(int tag); | |
73 | duk_dvalue *duk_dvalue_make_tag_int(int tag, int intval); | |
74 | duk_dvalue *duk_dvalue_make_tag_double(int tag, double dblval); | |
75 | duk_dvalue *duk_dvalue_make_tag_data(int tag, const char *buf, size_t len); | |
76 | duk_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. */ | |
79 | duk_trans_dvalue_ctx *duk_trans_dvalue_init(void); | |
80 | void duk_trans_dvalue_free(duk_trans_dvalue_ctx *ctx); | |
81 | ||
82 | /* Sending dvalues towards Duktape. */ | |
83 | void duk_trans_dvalue_send(duk_trans_dvalue_ctx *ctx, duk_dvalue *dv); | |
84 | void duk_trans_dvalue_send_eom(duk_trans_dvalue_ctx *ctx); | |
85 | void duk_trans_dvalue_send_req(duk_trans_dvalue_ctx *ctx); | |
86 | void duk_trans_dvalue_send_rep(duk_trans_dvalue_ctx *ctx); | |
87 | void duk_trans_dvalue_send_err(duk_trans_dvalue_ctx *ctx); | |
88 | void duk_trans_dvalue_send_nfy(duk_trans_dvalue_ctx *ctx); | |
89 | void duk_trans_dvalue_send_integer(duk_trans_dvalue_ctx *ctx, int val); | |
90 | void duk_trans_dvalue_send_string(duk_trans_dvalue_ctx *ctx, const char *str); | |
91 | void duk_trans_dvalue_send_lstring(duk_trans_dvalue_ctx *ctx, const char *str, size_t len); | |
92 | void duk_trans_dvalue_send_buffer(duk_trans_dvalue_ctx *ctx, const char *buf, size_t len); | |
93 | void duk_trans_dvalue_send_unused(duk_trans_dvalue_ctx *ctx); | |
94 | void duk_trans_dvalue_send_undefined(duk_trans_dvalue_ctx *ctx); | |
95 | void duk_trans_dvalue_send_null(duk_trans_dvalue_ctx *ctx); | |
96 | void duk_trans_dvalue_send_true(duk_trans_dvalue_ctx *ctx); | |
97 | void duk_trans_dvalue_send_false(duk_trans_dvalue_ctx *ctx); | |
98 | void duk_trans_dvalue_send_number(duk_trans_dvalue_ctx *ctx, double val); | |
99 | void duk_trans_dvalue_send_object(duk_trans_dvalue_ctx *ctx, int classnum, const char *ptr_data, size_t ptr_len); | |
100 | void duk_trans_dvalue_send_pointer(duk_trans_dvalue_ctx *ctx, const char *ptr_data, size_t ptr_len); | |
101 | void duk_trans_dvalue_send_lightfunc(duk_trans_dvalue_ctx *ctx, int lf_flags, const char *ptr_data, size_t ptr_len); | |
102 | void duk_trans_dvalue_send_heapptr(duk_trans_dvalue_ctx *ctx, const char *ptr_data, size_t ptr_len); | |
103 | void duk_trans_dvalue_send_req_cmd(duk_trans_dvalue_ctx *ctx, int cmd); | |
104 | ||
105 | /* Duktape debug callbacks provided by the transport. */ | |
106 | duk_size_t duk_trans_dvalue_read_cb(void *udata, char *buffer, duk_size_t length); | |
107 | duk_size_t duk_trans_dvalue_write_cb(void *udata, const char *buffer, duk_size_t length); | |
108 | duk_size_t duk_trans_dvalue_peek_cb(void *udata); | |
109 | void duk_trans_dvalue_read_flush_cb(void *udata); | |
110 | void duk_trans_dvalue_write_flush_cb(void *udata); | |
111 | void duk_trans_dvalue_detached_cb(void *udata); | |
112 | ||
113 | #endif /* DUK_TRANS_DVALUE_H_INCLUDED */ |