void send_timestamp_chunk(bool ignore_time_interval = false) { StaticOutStream<12 + GTF_SIZE_KEYBUF_REC * sizeof(uint32_t) + 1> payload; payload.out_timeval_to_uint64le_usec(this->timer); if (this->send_input) { payload.out_uint16_le(this->mouse_x); payload.out_uint16_le(this->mouse_y); payload.out_uint8(ignore_time_interval ? 1 : 0); /* for (uint32_t i = 0, c = keyboard_buffer_32.size() / sizeof(uint32_t); i < c; i++) { LOG(LOG_INFO, "send_timestamp_chunk: '%c'(0x%X)", (keyboard_buffer_32.data[i]<128)?(char)keyboard_buffer_32.data[i]:'?', keyboard_buffer_32.data[i]); } */ payload.out_copy_bytes(keyboard_buffer_32.get_data(), keyboard_buffer_32.get_offset()); keyboard_buffer_32 = OutStream(keyboard_buffer_32_buf); } send_wrm_chunk(this->trans, TIMESTAMP, payload.get_offset(), 1); this->trans.send(payload.get_data(), payload.get_offset()); this->last_sent_timer = this->timer; }
void session_update(timeval const & now, array_view_const_char message) override { uint16_t message_length = message.size() + 1; // Null-terminator is included. StaticOutStream<16> payload; payload.out_timeval_to_uint64le_usec(now); payload.out_uint16_le(message_length); send_wrm_chunk(this->trans, SESSION_UPDATE, payload.get_offset() + message_length, 1); this->trans.send(payload.get_data(), payload.get_offset()); this->trans.send(message.data(), message.size()); this->trans.send("\0", 1); this->last_sent_timer = this->timer; }