Skip to content

Commit 35cb30a

Browse files
committed
Rework JerryScript transport layer.
Introducing jerryscript-debugger-transport.h interface, which allows chaining multiple protocols (e.g. tcp and websocket). JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg [email protected]
1 parent 0c6b5ea commit 35cb30a

15 files changed

+1169
-388
lines changed

docs/13.DEBUGGER-TRANSPORT.md

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
# JerryScript debugger transport interface
2+
3+
The transport interface support allows dynamic selection of transportation
4+
layers which can encode/decode or send/receive messages transmitted between
5+
the debugger client and server.
6+
7+
**Warning** This API is not part of the standard JerryScript API and may change
8+
without further notice.
9+
10+
# Types
11+
12+
## jerry_debugger_transport_receive_context_t
13+
14+
**Summary**
15+
16+
This context represent the current status of processing received data.
17+
The final state is returned by
18+
[jerry_debugger_transport_receive](#jerry_debugger_transport_receive)
19+
and must be passed to
20+
[jerry_debugger_transport_receive_completed](#jerry_debugger_transport_receive_completed)
21+
after the message is processed.
22+
23+
**Prototype**
24+
25+
```c
26+
typedef struct
27+
{
28+
uint8_t *buffer_p; /**< buffer for storing the received data */
29+
size_t received_length; /**< number of currently received bytes */
30+
uint8_t *message_p; /**< start of the received message */
31+
size_t message_length; /**< length of the received message */
32+
size_t message_total_length; /**< total length for datagram protocols,
33+
* 0 for stream protocols */
34+
} jerry_debugger_transport_receive_context_t;
35+
```
36+
37+
## jerry_debugger_transport_header_t
38+
39+
**Summary**
40+
41+
Shared header for each transport interface. It mostly contains callback functions
42+
used by the JerryScript debugger server.
43+
44+
**Prototype**
45+
46+
```c
47+
typedef struct jerry_debugger_transport_layer_t
48+
{
49+
/* The following fields must be filled before calling jerry_debugger_transport_add(). */
50+
jerry_debugger_transport_close_t close; /**< close connection callback */
51+
jerry_debugger_transport_send_t send; /**< send data callback */
52+
jerry_debugger_transport_receive_t receive; /**< receive data callback */
53+
54+
/* The following fields are filled by jerry_debugger_transport_add(). */
55+
struct jerry_debugger_transport_layer_t *next_p; /**< next transport layer */
56+
} jerry_debugger_transport_header_t;
57+
```
58+
59+
## jerry_debugger_transport_close_t
60+
61+
**Summary**
62+
63+
Called when the connection is closed. Must call
64+
[jerry_debugger_transport_free](#jerry_debugger_transport_free).
65+
66+
**Prototype**
67+
68+
```c
69+
typedef void (*jerry_debugger_transport_close_t) (struct jerry_debugger_transport_interface_t *header_p);
70+
```
71+
72+
## jerry_debugger_transport_send_t
73+
74+
**Summary**
75+
76+
Called when a message needs to be sent. Must either transmit the message or call
77+
the `header_p->next_p->send()` method.
78+
79+
**Prototype**
80+
81+
```c
82+
typedef bool (*jerry_debugger_transport_send_t) (struct jerry_debugger_transport_interface_t *header_p,
83+
uint8_t *message_p, size_t message_length);
84+
```
85+
86+
## jerry_debugger_transport_receive_t
87+
88+
**Summary**
89+
90+
Called during message processing. If messages are available it must return with
91+
the next message.
92+
93+
**Prototype**
94+
95+
```c
96+
typedef bool (*jerry_debugger_transport_receive_t) (struct jerry_debugger_transport_interface_t *header_p,
97+
jerry_debugger_transport_receive_context_t *context_p);
98+
```
99+
100+
# Transport interface API functions
101+
102+
## jerry_debugger_transport_create
103+
104+
**Summary**
105+
106+
Allocates memory for the transport interface.
107+
108+
**Prototype**
109+
110+
```c
111+
jerry_debugger_transport_header_t * jerry_debugger_transport_create (size_t size);
112+
```
113+
114+
- `size`: total size of the transportation interface.
115+
- return value: a newly created transportation interface.
116+
117+
## jerry_debugger_transport_free
118+
119+
**Summary**
120+
121+
Free memory allocated by [jerry_debugger_transport_create](#jerry_debugger_transport_create)
122+
123+
**Prototype**
124+
125+
```c
126+
void jerry_debugger_transport_free (jerry_debugger_transport_header_t *header_p, size_t size);
127+
```
128+
129+
- `header_p`: header of a transporation interface.
130+
- `size`: total size of the transportation interface.
131+
132+
## jerry_debugger_transport_add
133+
134+
**Summary**
135+
136+
Add a new interface to the transporation interface chain. The interface
137+
will be the first item of the interface chain.
138+
139+
**Prototype**
140+
141+
```c
142+
void jerry_debugger_transport_add (jerry_debugger_transport_header_t *header_p,
143+
size_t send_message_header_size, size_t max_send_message_size,
144+
size_t receive_message_header_size, size_t max_receive_message_size);
145+
```
146+
147+
- `header_p`: header of a transporation interface.
148+
- `send_message_header_size`: size of the outgoing message header, can be 0.
149+
- `max_send_message_size`: maximum outgoing message size supported by the interface.
150+
- `receive_message_header_size`: size of the incoming message header, can be 0.
151+
- `max_receive_message_size`: maximum incoming message size supported by the interface.
152+
153+
## jerry_debugger_transport_is_connected
154+
155+
**Summary**
156+
157+
Tells whether a debugger client is connected to the debugger server.
158+
159+
**Prototype**
160+
161+
```c
162+
bool jerry_debugger_transport_is_connected (void);
163+
```
164+
165+
- return value: `true`, if a client is connected, `false` otherwise.
166+
167+
## jerry_debugger_transport_close
168+
169+
**Summary**
170+
171+
Disconnect from the current debugger client. It does nothing if a client is
172+
not connected,
173+
174+
**Prototype**
175+
176+
```c
177+
void jerry_debugger_transport_close (void);
178+
```
179+
180+
## jerry_debugger_transport_send
181+
182+
**Summary**
183+
184+
Send message to the client.
185+
186+
**Prototype**
187+
188+
```c
189+
bool jerry_debugger_transport_send (const uint8_t *message_p, size_t message_length);
190+
```
191+
192+
- `message_p`: message to be sent.
193+
- `message_length`: message length in bytes.
194+
- return value: `true`, if a client is still connected, `false` otherwise.
195+
196+
## jerry_debugger_transport_receive
197+
198+
**Summary**
199+
200+
Receive message from the client.
201+
202+
**Prototype**
203+
204+
```c
205+
bool jerry_debugger_transport_receive (jerry_debugger_transport_receive_context_t *context_p);
206+
```
207+
208+
- `context_p`: an unused [jerry_debugger_transport_receive_context_t](#jerry_debugger_transport_receive_context_t).
209+
- return value: `true`, if a client is still connected, `false` otherwise.
210+
211+
## jerry_debugger_transport_receive_completed
212+
213+
**Summary**
214+
215+
Must be called after [jerry_debugger_transport_receive](#jerry_debugger_transport_receive)
216+
returns with a valid message. Must not be called otherwise.
217+
218+
**Prototype**
219+
220+
```c
221+
void jerry_debugger_transport_receive_completed (jerry_debugger_transport_receive_context_t *context_p);
222+
```
223+
224+
- `context_p`: a [jerry_debugger_transport_receive_context_t](#jerry_debugger_transport_receive_context_t)
225+
passed to [jerry_debugger_transport_receive](#jerry_debugger_transport_receive).
226+
227+
## jerry_debugger_transport_sleep
228+
229+
**Summary**
230+
231+
Can be used to wait for incoming messages. Currently the delay is 100ms.
232+
233+
**Prototype**
234+
235+
```c
236+
void jerry_debugger_transport_sleep (void);
237+
```

0 commit comments

Comments
 (0)