diff --git a/jerry-core/api/jerry-debugger.c b/jerry-core/api/jerry-debugger.c index cd26760e75..5a85f54873 100644 --- a/jerry-core/api/jerry-debugger.c +++ b/jerry-core/api/jerry-debugger.c @@ -108,6 +108,29 @@ jerry_debugger_init (jerry_debugger_transport_t *transport_p) /**< transport */ #endif /* JERRY_DEBUGGER */ } /* jerry_debugger_init */ +/** + * Debugger transport transmission sizes, each transport will need to set these. + */ +void +jerry_debugger_set_transmit_sizes (size_t send_header_size, /**< transport send header size */ + size_t max_send_size, /**< transport max send size */ + size_t receive_header_size, /**< transport receive header size */ + size_t max_receive_size) /**< transport max receive size */ +{ +#ifdef JERRY_DEBUGGER + JERRY_CONTEXT (debugger_send_header_size) = (uint8_t) send_header_size; + JERRY_CONTEXT (debugger_max_send_size) = (uint8_t) max_send_size; + JERRY_CONTEXT (debugger_receive_header_size) = (uint8_t) receive_header_size; + JERRY_CONTEXT (debugger_max_receive_size) = (uint8_t) max_receive_size; +#else /* !JERRY_DEBUGGER */ + JERRY_UNUSED (send_header_size); + JERRY_UNUSED (max_send_size); + JERRY_UNUSED (receive_header_size); + JERRY_UNUSED (max_receive_size); +#endif /* JERRY_DEBUGGER */ +} /* jerry_debugger_set_transmit_sizes */ + + /** * Sets whether the engine should wait and run a source. * diff --git a/jerry-core/debugger/debugger.c b/jerry-core/debugger/debugger.c index 7f5b4bceab..e7575ed4ac 100644 --- a/jerry-core/debugger/debugger.c +++ b/jerry-core/debugger/debugger.c @@ -1071,24 +1071,22 @@ jerry_debugger_send_exception_string (void) bool jerry_debugger_accept_connection (void) { - uint8_t *payload_p = JERRY_CONTEXT (debugger_send_buffer) + JERRY_CONTEXT (debugger_transport_p)->send_header_size; + uint8_t *payload_p = JERRY_CONTEXT (debugger_send_buffer) + JERRY_CONTEXT (debugger_send_header_size); JERRY_CONTEXT (debugger_send_buffer_payload_p) = payload_p; uint8_t max_send_size = (uint8_t) (JERRY_DEBUGGER_MAX_BUFFER_SIZE - - JERRY_CONTEXT (debugger_transport_p)->send_header_size); - if (max_send_size > JERRY_CONTEXT (debugger_transport_p)->max_message_size) + JERRY_CONTEXT (debugger_send_header_size)); + if (max_send_size <= JERRY_CONTEXT (debugger_max_send_size)) { - max_send_size = JERRY_CONTEXT (debugger_transport_p)->max_message_size; + JERRY_CONTEXT (debugger_max_send_size) = max_send_size; } - JERRY_CONTEXT (debugger_max_send_size) = max_send_size; uint8_t max_receive_size = (uint8_t) (JERRY_DEBUGGER_MAX_BUFFER_SIZE - - JERRY_CONTEXT (debugger_transport_p)->receive_header_size); - if (max_receive_size > JERRY_CONTEXT (debugger_transport_p)->max_message_size) + JERRY_CONTEXT (debugger_receive_header_size)); + if (max_receive_size <= JERRY_CONTEXT (debugger_max_send_size)) { - max_receive_size = JERRY_CONTEXT (debugger_transport_p)->max_message_size; + JERRY_CONTEXT (debugger_max_receive_size) = max_receive_size; } - JERRY_CONTEXT (debugger_max_receive_size) = max_receive_size; if (!JERRY_CONTEXT (debugger_transport_p)->accept_connection (JERRY_CONTEXT (debugger_transport_p))) { @@ -1180,7 +1178,7 @@ jerry_debugger_receive (jerry_debugger_uint8_data_t **message_data_p) /**< [out] return true; } - if (offset < JERRY_CONTEXT (debugger_transport_p)->receive_header_size) + if (offset < JERRY_CONTEXT (debugger_receive_header_size)) { if (expected_message_type != 0) { @@ -1191,7 +1189,7 @@ jerry_debugger_receive (jerry_debugger_uint8_data_t **message_data_p) /**< [out] } uint32_t message_total_size = (uint32_t) (message_size + - JERRY_CONTEXT (debugger_transport_p)->receive_header_size); + JERRY_CONTEXT (debugger_receive_header_size)); if (offset < message_total_size) { @@ -1206,7 +1204,7 @@ jerry_debugger_receive (jerry_debugger_uint8_data_t **message_data_p) /**< [out] /* The jerry_debugger_process_message function is inlined * so passing these arguments is essentially free. */ if (!jerry_debugger_process_message (JERRY_CONTEXT (debugger_receive_buffer) + - JERRY_CONTEXT (debugger_transport_p)->receive_header_size, + JERRY_CONTEXT (debugger_receive_header_size), (uint32_t) message_size, &resume_exec, &expected_message_type, diff --git a/jerry-core/include/jerryscript-debugger.h b/jerry-core/include/jerryscript-debugger.h index 8e71f64993..dd6b2f7f10 100644 --- a/jerry-core/include/jerryscript-debugger.h +++ b/jerry-core/include/jerryscript-debugger.h @@ -56,6 +56,10 @@ typedef jerry_value_t (*jerry_debugger_wait_for_source_callback_t) (const jerry_ typedef struct jerry_debugger_transport_t jerry_debugger_transport_t; void jerry_debugger_init (jerry_debugger_transport_t *transport_p); +void jerry_debugger_set_transmit_sizes (size_t send_header_size, + size_t max_send_size, + size_t receive_header_size, + size_t max_receive_size); bool jerry_debugger_is_connected (void); void jerry_debugger_stop (void); void jerry_debugger_continue (void); diff --git a/jerry-core/include/jerryscript-port.h b/jerry-core/include/jerryscript-port.h index ff4450da2c..0fa6c50d54 100644 --- a/jerry-core/include/jerryscript-port.h +++ b/jerry-core/include/jerryscript-port.h @@ -151,9 +151,6 @@ struct jerry_debugger_uint8_data_t; */ struct jerry_debugger_transport_t { - uint8_t send_header_size; - uint8_t receive_header_size; - uint8_t max_message_size; bool (*accept_connection) (struct jerry_debugger_transport_t *transport_p); void (*close_connection) (struct jerry_debugger_transport_t *transport_p); bool (*send) (struct jerry_debugger_transport_t *transport_p, diff --git a/jerry-core/jcontext/jcontext.h b/jerry-core/jcontext/jcontext.h index c7e23ea4e6..9fb1507f72 100644 --- a/jerry-core/jcontext/jcontext.h +++ b/jerry-core/jcontext/jcontext.h @@ -118,6 +118,8 @@ typedef struct uint32_t debugger_flags; /**< debugger flags */ uint16_t debugger_receive_buffer_offset; /**< receive buffer offset */ uint8_t debugger_message_delay; /**< call receive message when reaches zero */ + uint8_t debugger_send_header_size; /**< header size reserved when sending */ + uint8_t debugger_receive_header_size; /**< header size reserved when receiving */ uint8_t debugger_max_send_size; /**< maximum amount of data that can be written */ uint8_t debugger_max_receive_size; /**< maximum amount of data that can be received */ jerry_debugger_transport_t *debugger_transport_p; /**< holds the pointer to the debugger transport */ diff --git a/jerry-port/default/default-debugger-transport.c b/jerry-port/default/default-debugger-transport.c index 2ee8bc9f5d..471cd08a9f 100644 --- a/jerry-port/default/default-debugger-transport.c +++ b/jerry-port/default/default-debugger-transport.c @@ -569,9 +569,6 @@ jerry_debugger_receive_ws (struct jerry_debugger_transport_t *transport_p, /**< static struct jerry_debugger_transport_t socket_transport = { - .send_header_size = JERRY_DEBUGGER_WEBSOCKET_HEADER_SIZE, - .receive_header_size = JERRY_DEBUGGER_WEBSOCKET_HEADER_SIZE + JERRY_DEBUGGER_WEBSOCKET_MASK_SIZE, - .max_message_size = JERRY_DEBUGGER_WEBSOCKET_ONE_BYTE_LEN_MAX, .accept_connection = jerry_debugger_accept_connection_ws, .close_connection = jerry_debugger_close_connection_ws, .send = jerry_debugger_send_ws, @@ -590,6 +587,10 @@ jerry_port_default_init_socket_transport (uint16_t tcp_port) /**< server port nu { #ifdef JERRY_DEBUGGER debugger_port = tcp_port; + jerry_debugger_set_transmit_sizes (JERRY_DEBUGGER_WEBSOCKET_HEADER_SIZE, + JERRY_DEBUGGER_WEBSOCKET_ONE_BYTE_LEN_MAX, + JERRY_DEBUGGER_WEBSOCKET_HEADER_SIZE + JERRY_DEBUGGER_WEBSOCKET_MASK_SIZE, + JERRY_DEBUGGER_WEBSOCKET_ONE_BYTE_LEN_MAX); return &socket_transport; #else /* !JERRY_DEBUGGER */ JERRY_UNUSED (tcp_port);