int guac_telnet_user_size_handler(guac_user* user, int width, int height) { /* Get terminal */ guac_client* client = user->client; guac_telnet_client* telnet_client = (guac_telnet_client*) client->data; guac_terminal* terminal = telnet_client->term; /* Skip if terminal not yet ready */ if (terminal == NULL) return 0; /* Resize terminal */ guac_terminal_resize(terminal, width, height); /* Update terminal window size if connected */ if (telnet_client->telnet != NULL && telnet_client->naws_enabled) guac_telnet_send_naws(telnet_client->telnet, terminal->term_width, terminal->term_height); return 0; }
int ssh_guac_client_size_handler(guac_client* client, int width, int height) { /* Get terminal */ ssh_guac_client_data* guac_client_data = (ssh_guac_client_data*) client->data; guac_terminal* terminal = guac_client_data->term; /* Calculate dimensions */ int rows = height / terminal->display->char_height; int columns = width / terminal->display->char_width; pthread_mutex_lock(&(terminal->lock)); /* If size has changed */ if (columns != terminal->term_width || rows != terminal->term_height) { /* Resize terminal */ guac_terminal_resize(terminal, columns, rows); /* Update cursor */ guac_terminal_commit_cursor(terminal); /* Update SSH pty size if connected */ if (guac_client_data->term_channel != NULL) libssh2_channel_request_pty_size(guac_client_data->term_channel, terminal->term_width, terminal->term_height); /* Reset scroll region */ terminal->scroll_end = rows - 1; guac_terminal_display_flush(terminal->display); guac_protocol_send_sync(terminal->client->socket, client->last_sent_timestamp); guac_socket_flush(terminal->client->socket); } pthread_mutex_unlock(&(terminal->lock)); return 0; }