Main Page | Namespace List | Class List | Directories | File List | Class Members | File Members

buffer.h File Reference

Go to the source code of this file.

Classes

struct  Buffer

Defines

#define BUFFER_MAX_CHUNK   0x100000
#define BUFFER_MAX_LEN   0xa00000

Functions

void buffer_init (Buffer *)
void buffer_clear (Buffer *)
void buffer_free (Buffer *)
u_int buffer_len (Buffer *)
void * buffer_ptr (Buffer *)
void buffer_append (Buffer *, const void *, u_int)
void * buffer_append_space (Buffer *, u_int)
void buffer_get (Buffer *, void *, u_int)
void buffer_consume (Buffer *, u_int)
void buffer_consume_end (Buffer *, u_int)
void buffer_dump (Buffer *)
int buffer_get_ret (Buffer *, void *, u_int)
int buffer_consume_ret (Buffer *, u_int)
int buffer_consume_end_ret (Buffer *, u_int)


Define Documentation

#define BUFFER_MAX_CHUNK   0x100000
 

Definition at line 26 of file buffer.h.

Referenced by buffer_append_space(), and channel_pre_open().

#define BUFFER_MAX_LEN   0xa00000
 

Definition at line 27 of file buffer.h.

Referenced by buffer_append_space(), and channel_pre_open().


Function Documentation

void buffer_append Buffer ,
const void *  ,
u_int 
 

Definition at line 62 of file buffer.c.

References buffer_append_space().

Referenced by after_select(), authmethods_get(), buffer_compress(), buffer_put_bignum_ret(), buffer_put_char(), buffer_put_int(), buffer_put_int64(), buffer_put_short(), buffer_put_string(), buffer_uncompress(), channel_decode_socks4(), channel_decode_socks5(), channel_handle_efd(), channel_handle_rfd(), channel_input_data(), channel_input_extended_data(), channel_open_message(), client_check_initial_eof_on_stdin(), client_input_stderr_data(), client_input_stdout_data(), client_loop(), client_process_control(), client_process_input(), client_process_net_input(), client_process_output(), client_wait_until_can_do_something(), compat_cipher_proposal(), control_client(), display_loginmsg(), do_authloop(), do_convert_private_ssh2_from_blob(), input_userauth_pk_ok(), kbdint_alloc(), kex_buf2prop(), kex_dh_hash(), kex_input_kexinit(), kexgex_hash(), key_from_blob(), key_save_private_rsa1(), keygrab_ssh1(), list_hostkey_types(), load_server_config(), main(), mm_append_debug(), mm_get_kex(), mm_newkeys_from_blob(), mm_newkeys_to_blob(), mm_pty_allocate(), monitor_apply_keystate(), monitor_valid_hostbasedblob(), monitor_valid_userblob(), no_identities(), packet_process_incoming(), packet_put_char(), packet_put_raw(), packet_read_poll1(), packet_read_poll2(), packet_send1(), packet_send2_wrapped(), packet_start(), process_authentication_challenge1(), process_escapes(), process_input(), process_message(), process_request_identities(), process_sign_request2(), recv_rexec_state(), send_msg(), server_input_stdin_data(), server_loop(), sign_and_send_pubkey(), ssh_decrypt_challenge(), ssh_dss_verify(), ssh_request_reply(), ssh_rsa_verify(), store_lastlog_message(), userauth_finish(), userauth_hostbased(), userauth_pubkey(), and valid_request().

00063 {
00064         void *p;
00065         p = buffer_append_space(buffer, len);
00066         memcpy(p, data, len);
00067 }

void* buffer_append_space Buffer ,
u_int 
 

Definition at line 76 of file buffer.c.

References Buffer::alloc, Buffer::buf, BUFFER_MAX_CHUNK, BUFFER_MAX_LEN, Buffer::end, fatal(), MIN, Buffer::offset, and xrealloc().

Referenced by buffer_append(), get_msg(), key_load_private_rsa1(), key_load_public_rsa1(), key_save_private_rsa1(), mm_request_receive(), packet_read_poll1(), packet_read_poll2(), packet_send1(), packet_send2_wrapped(), and ssh_msg_recv().

00077 {
00078         u_int newlen;
00079         void *p;
00080 
00081         if (len > BUFFER_MAX_CHUNK)
00082                 fatal("buffer_append_space: len %u not supported", len);
00083 
00084         /* If the buffer is empty, start using it from the beginning. */
00085         if (buffer->offset == buffer->end) {
00086                 buffer->offset = 0;
00087                 buffer->end = 0;
00088         }
00089 restart:
00090         /* If there is enough space to store all data, store it now. */
00091         if (buffer->end + len < buffer->alloc) {
00092                 p = buffer->buf + buffer->end;
00093                 buffer->end += len;
00094                 return p;
00095         }
00096         /*
00097          * If the buffer is quite empty, but all data is at the end, move the
00098          * data to the beginning and retry.
00099          */
00100         if (buffer->offset > MIN(buffer->alloc, BUFFER_MAX_CHUNK)) {
00101                 memmove(buffer->buf, buffer->buf + buffer->offset,
00102                         buffer->end - buffer->offset);
00103                 buffer->end -= buffer->offset;
00104                 buffer->offset = 0;
00105                 goto restart;
00106         }
00107         /* Increase the size of the buffer and retry. */
00108 
00109         newlen = buffer->alloc + len + 32768;
00110         if (newlen > BUFFER_MAX_LEN)
00111                 fatal("buffer_append_space: alloc %u not supported",
00112                     newlen);
00113         buffer->buf = xrealloc(buffer->buf, newlen);
00114         buffer->alloc = newlen;
00115         goto restart;
00116         /* NOTREACHED */
00117 }

void buffer_clear Buffer  ) 
 

Definition at line 53 of file buffer.c.

References Buffer::end, and Buffer::offset.

Referenced by auth_debug_reset(), chan_send_oclose1(), chan_shutdown_write(), channel_handle_rfd(), channel_handle_wfd(), channel_input_close(), channel_post_output_drain_13(), channel_pre_x11_open(), channel_pre_x11_open_13(), client_process_control(), control_client(), display_loginmsg(), do_download(), do_exec(), do_exec_no_pty(), do_init(), do_lsreaddir(), do_upload(), kex_finish(), kex_prop2buf(), keygrab_ssh1(), load_server_config(), main(), mm_answer_auth2_read_banner(), mm_answer_authpassword(), mm_answer_keyallowed(), mm_answer_keyverify(), mm_answer_moduli(), mm_answer_pty(), mm_answer_pty_cleanup(), mm_answer_pwnamallow(), mm_answer_rsa_challenge(), mm_answer_rsa_keyallowed(), mm_answer_rsa_response(), mm_answer_sesskey(), mm_answer_sign(), mm_append_debug(), mm_auth2_read_banner(), mm_request_receive(), monitor_apply_keystate(), packet_read_poll1(), packet_read_poll2(), packet_send1(), packet_send2_wrapped(), packet_start(), privsep_postauth(), process_add_identity(), process_message(), send_msg(), send_read_request(), sign_and_send_pubkey(), ssh_get_num_identities(), ssh_msg_recv(), and ssh_request_reply().

00054 {
00055         buffer->offset = 0;
00056         buffer->end = 0;
00057 }

void buffer_consume Buffer ,
u_int 
 

Definition at line 163 of file buffer.c.

References buffer_consume_ret(), and fatal().

Referenced by after_select(), buffer_get_bignum_bits(), channel_decode_socks4(), channel_decode_socks5(), channel_handle_efd(), channel_handle_wfd(), channel_output_poll(), channel_post_output_drain_13(), client_loop(), client_make_packets_from_stdin_data(), client_process_output(), keygrab_ssh1(), main(), make_packets_from_stderr_data(), make_packets_from_stdout_data(), monitor_valid_userblob(), packet_read_poll1(), packet_read_poll2(), packet_send1(), packet_send2_wrapped(), packet_write_poll(), process(), process_message(), process_output(), send_msg(), and sign_and_send_pubkey().

00164 {
00165         if (buffer_consume_ret(buffer, bytes) == -1)
00166                 fatal("buffer_consume: buffer error");
00167 }

void buffer_consume_end Buffer ,
u_int 
 

Definition at line 181 of file buffer.c.

References buffer_consume_end_ret(), and fatal().

Referenced by packet_read_poll1(), and packet_read_poll2().

00182 {
00183         if (buffer_consume_end_ret(buffer, bytes) == -1)
00184                 fatal("buffer_consume_end: trying to get more bytes than in buffer");
00185 }

int buffer_consume_end_ret Buffer ,
u_int 
 

Definition at line 172 of file buffer.c.

References Buffer::end, and Buffer::offset.

Referenced by buffer_consume_end().

00173 {
00174         if (bytes > buffer->end - buffer->offset)
00175                 return (-1);
00176         buffer->end -= bytes;
00177         return (0);
00178 }

int buffer_consume_ret Buffer ,
u_int 
 

Definition at line 152 of file buffer.c.

References Buffer::end, error(), and Buffer::offset.

Referenced by buffer_consume(), and buffer_get_bignum_ret().

00153 {
00154         if (bytes > buffer->end - buffer->offset) {
00155                 error("buffer_consume_ret: trying to get more bytes than in buffer");
00156                 return (-1);
00157         }
00158         buffer->offset += bytes;
00159         return (0);
00160 }

void buffer_dump Buffer  ) 
 

Definition at line 198 of file buffer.c.

References Buffer::buf, and Buffer::offset.

Referenced by kex_dh_hash(), kexgex_hash(), packet_read_poll1(), packet_read_poll2(), packet_send1(), packet_send2_wrapped(), sign_and_send_pubkey(), userauth_hostbased(), and userauth_pubkey().

00199 {
00200         u_int i;
00201         u_char *ucp = buffer->buf;
00202 
00203         for (i = buffer->offset; i < buffer->end; i++) {
00204                 fprintf(stderr, "%02x", ucp[i]);
00205                 if ((i-buffer->offset)%16==15)
00206                         fprintf(stderr, "\r\n");
00207                 else if ((i-buffer->offset)%2==1)
00208                         fprintf(stderr, " ");
00209         }
00210         fprintf(stderr, "\r\n");
00211 }

void buffer_free Buffer  ) 
 

Definition at line 38 of file buffer.c.

References Buffer::alloc, Buffer::buf, and xfree().

Referenced by authmethods_get(), channel_free(), channel_open_message(), client_extra_session2_setup(), client_loop(), client_process_control(), client_suspend_self(), close_socket(), compat_cipher_proposal(), control_client(), derive_key(), do_close(), do_convert_private_ssh2_from_blob(), do_download(), do_init(), do_lsreaddir(), do_readlink(), do_realpath(), do_rename(), do_symlink(), do_upload(), get_decode_stat(), get_handle(), get_status(), input_userauth_pk_ok(), kbdint_alloc(), kex_buf2prop(), kex_dh_hash(), kexgex_hash(), key_from_blob(), key_load_private_rsa1(), key_load_public_rsa1(), key_save_private_rsa1(), key_to_blob(), list_hostkey_types(), main(), mm_auth2_read_banner(), mm_auth_password(), mm_auth_rsa_generate_challenge(), mm_auth_rsa_key_allowed(), mm_auth_rsa_verify_response(), mm_bsdauth_query(), mm_bsdauth_respond(), mm_choose_dh(), mm_get_keystate(), mm_getpwnamallow(), mm_inform_authserv(), mm_key_allowed(), mm_key_sign(), mm_key_verify(), mm_newkeys_from_blob(), mm_newkeys_to_blob(), mm_pty_allocate(), mm_send_keystate(), mm_session_pty_cleanup2(), mm_ssh1_session_id(), mm_ssh1_session_key(), mm_terminate(), monitor_child_preauth(), monitor_read(), monitor_valid_hostbasedblob(), monitor_valid_userblob(), no_identities(), packet_close(), packet_send2(), process_authentication_challenge1(), process_init(), process_request_identities(), process_sign_request2(), recv_rexec_state(), send_attrib(), send_data_or_handle(), send_names(), send_read_request(), send_rexec_state(), send_status(), send_string_attrs_request(), send_string_request(), server_loop(), sign_and_send_pubkey(), ssh_add_identity_constrained(), ssh_agent_sign(), ssh_close_authentication_connection(), ssh_decrypt_challenge(), ssh_dss_sign(), ssh_dss_verify(), ssh_get_num_identities(), ssh_keysign(), ssh_lock_agent(), ssh_remove_all_identities(), ssh_remove_identity(), ssh_rsa_sign(), ssh_rsa_verify(), ssh_update_card(), tty_make_modes(), userauth_hostbased(), userauth_pubkey(), and valid_request().

00039 {
00040         if (buffer->alloc > 0) {
00041                 memset(buffer->buf, 0, buffer->alloc);
00042                 buffer->alloc = 0;
00043                 xfree(buffer->buf);
00044         }
00045 }

void buffer_get Buffer ,
void *  ,
u_int 
 

Definition at line 143 of file buffer.c.

References buffer_get_ret(), and fatal().

Referenced by channel_decode_socks4(), channel_decode_socks5(), mm_newkeys_from_blob(), packet_get_char(), and process_authentication_challenge1().

00144 {
00145         if (buffer_get_ret(buffer, buf, len) == -1)
00146                 fatal("buffer_get: buffer error");
00147 }

int buffer_get_ret Buffer ,
void *  ,
u_int 
 

Definition at line 130 of file buffer.c.

References Buffer::buf, Buffer::end, error(), and Buffer::offset.

Referenced by buffer_get(), buffer_get_bignum_ret(), buffer_get_char_ret(), buffer_get_int64_ret(), buffer_get_int_ret(), buffer_get_short_ret(), and buffer_get_string_ret().

00131 {
00132         if (len > buffer->end - buffer->offset) {
00133                 error("buffer_get_ret: trying to get more bytes %d than in buffer %d",
00134                     len, buffer->end - buffer->offset);
00135                 return (-1);
00136         }
00137         memcpy(buf, buffer->buf + buffer->offset, len);
00138         buffer->offset += len;
00139         return (0);
00140 }

void buffer_init Buffer  ) 
 

Definition at line 24 of file buffer.c.

References Buffer::alloc, Buffer::buf, Buffer::end, Buffer::offset, and xmalloc().

Referenced by auth_debug_reset(), authmethods_get(), channel_new(), channel_open_message(), client_loop(), client_process_control(), client_suspend_self(), compat_cipher_proposal(), control_client(), derive_key(), do_close(), do_convert_private_ssh2_from_blob(), do_download(), do_init(), do_lsreaddir(), do_readlink(), do_realpath(), do_rename(), do_symlink(), do_upload(), get_decode_stat(), get_handle(), get_status(), input_userauth_pk_ok(), kbdint_alloc(), kex_buf2prop(), kex_dh_hash(), kex_setup(), kexgex_hash(), key_from_blob(), key_load_private_rsa1(), key_load_public_rsa1(), key_save_private_rsa1(), key_to_blob(), keygrab_ssh1(), list_hostkey_types(), main(), mm_auth2_read_banner(), mm_auth_password(), mm_auth_rsa_generate_challenge(), mm_auth_rsa_key_allowed(), mm_auth_rsa_verify_response(), mm_bsdauth_query(), mm_bsdauth_respond(), mm_choose_dh(), mm_get_kex(), mm_get_keystate(), mm_getpwnamallow(), mm_inform_authserv(), mm_key_allowed(), mm_key_sign(), mm_key_verify(), mm_newkeys_from_blob(), mm_newkeys_to_blob(), mm_pty_allocate(), mm_send_keystate(), mm_session_pty_cleanup2(), mm_ssh1_session_id(), mm_ssh1_session_key(), mm_terminate(), monitor_child_preauth(), monitor_read(), monitor_valid_hostbasedblob(), monitor_valid_userblob(), new_socket(), no_identities(), packet_init_compression(), packet_send2(), process_authentication_challenge1(), process_init(), process_request_identities(), process_sign_request2(), recv_rexec_state(), send_attrib(), send_data_or_handle(), send_names(), send_read_request(), send_rexec_state(), send_status(), send_string_attrs_request(), send_string_request(), server_loop(), sign_and_send_pubkey(), ssh_add_identity_constrained(), ssh_agent_sign(), ssh_decrypt_challenge(), ssh_dss_sign(), ssh_dss_verify(), ssh_get_authentication_connection(), ssh_get_num_identities(), ssh_keysign(), ssh_lock_agent(), ssh_remove_all_identities(), ssh_remove_identity(), ssh_rsa_sign(), ssh_rsa_verify(), ssh_update_card(), TAILQ_HEAD(), tty_make_modes(), userauth_hostbased(), userauth_pubkey(), and valid_request().

00025 {
00026         const u_int len = 4096;
00027 
00028         buffer->alloc = 0;
00029         buffer->buf = xmalloc(len);
00030         buffer->alloc = len;
00031         buffer->offset = 0;
00032         buffer->end = 0;
00033 }

u_int buffer_len Buffer  ) 
 

Definition at line 122 of file buffer.c.

References Buffer::end, and Buffer::offset.

Referenced by after_select(), auth_debug_send(), authmethods_get(), buffer_compress(), buffer_get_bignum_bits(), buffer_get_bignum_ret(), buffer_uncompress(), chan_ibuf_empty(), chan_is_dead(), chan_obuf_empty(), chan_rcvd_ieof(), channel_decode_socks4(), channel_decode_socks5(), channel_handle_efd(), channel_handle_wfd(), channel_input_ieof(), channel_not_very_much_buffered_data(), channel_open_message(), channel_output_poll(), channel_post_output_drain_13(), channel_pre_dynamic(), channel_pre_input_draining(), channel_pre_open(), channel_pre_open_13(), channel_pre_output_draining(), client_loop(), client_make_packets_from_stdin_data(), client_process_input(), client_process_output(), client_session2_setup(), client_suspend_self(), client_wait_until_can_do_something(), compat_cipher_proposal(), derive_key(), display_loginmsg(), do_authloop(), do_convert_private_ssh2_from_blob(), do_init(), drain_output(), kbdint_alloc(), kex_buf2prop(), kex_dh_hash(), kex_send_kexinit(), kexdh_client(), kexdh_server(), kexgex_client(), kexgex_hash(), kexgex_server(), key_from_blob(), key_load_private_rsa1(), key_save_private_rsa1(), key_to_blob(), list_hostkey_types(), load_server_config(), main(), make_packets_from_stderr_data(), make_packets_from_stdout_data(), mm_answer_pty(), mm_answer_sessid(), mm_append_debug(), mm_choose_dh(), mm_newkeys_from_blob(), mm_newkeys_to_blob(), mm_request_send(), mm_send_debug(), mm_send_kex(), mm_send_keystate(), monitor_valid_hostbasedblob(), monitor_valid_userblob(), no_identities(), packet_get_raw(), packet_have_data_to_write(), packet_not_very_much_data_to_write(), packet_read_poll1(), packet_read_poll2(), packet_remaining(), packet_send1(), packet_send2_wrapped(), packet_write_poll(), parse_server_config(), prepare_select(), process(), process_add_identity(), process_authentication_challenge1(), process_escapes(), process_message(), process_output(), process_request_identities(), process_sign_request2(), send_msg(), send_rexec_state(), server_loop(), sign_and_send_pubkey(), ssh_dss_sign(), ssh_dss_verify(), ssh_msg_send(), ssh_request_reply(), ssh_rsa_sign(), ssh_rsa_verify(), ssh_session(), ssh_subsystem_reply(), tty_make_modes(), userauth_finish(), userauth_hostbased(), userauth_pubkey(), valid_request(), wait_until_can_do_something(), and x11_open_helper().

00123 {
00124         return buffer->end - buffer->offset;
00125 }

void* buffer_ptr Buffer  ) 
 

Definition at line 190 of file buffer.c.

References Buffer::buf, and Buffer::offset.

Referenced by after_select(), authmethods_get(), buffer_compress(), buffer_get_bignum_bits(), buffer_get_bignum_ret(), buffer_uncompress(), channel_decode_socks4(), channel_decode_socks5(), channel_handle_efd(), channel_handle_wfd(), channel_open_message(), channel_output_poll(), channel_post_output_drain_13(), channel_pre_dynamic(), client_loop(), client_make_packets_from_stdin_data(), client_process_output(), client_session2_setup(), client_suspend_self(), compat_cipher_proposal(), control_client(), derive_key(), display_loginmsg(), do_authloop(), drain_output(), get_msg(), kbdint_alloc(), kex_buf2prop(), kex_dh_hash(), kex_send_kexinit(), kexdh_client(), kexdh_server(), kexgex_client(), kexgex_hash(), kexgex_server(), key_load_private_rsa1(), key_save_private_rsa1(), key_to_blob(), list_hostkey_types(), main(), make_packets_from_stderr_data(), make_packets_from_stdout_data(), mm_answer_pty(), mm_append_debug(), mm_newkeys_to_blob(), mm_request_receive(), mm_request_send(), mm_send_kex(), mm_send_keystate(), monitor_valid_userblob(), no_identities(), packet_get_raw(), packet_read_poll1(), packet_read_poll2(), packet_send1(), packet_send2(), packet_send2_wrapped(), packet_write_poll(), parse_server_config(), process(), process_authentication_challenge1(), process_message(), process_output(), process_request_identities(), process_sign_request2(), send_msg(), send_rexec_state(), sign_and_send_pubkey(), ssh_dss_sign(), ssh_msg_recv(), ssh_msg_send(), ssh_request_reply(), ssh_rsa_sign(), ssh_session(), ssh_subsystem_reply(), tty_make_modes(), userauth_finish(), userauth_hostbased(), userauth_pubkey(), and x11_open_helper().

00191 {
00192         return buffer->buf + buffer->offset;
00193 }


© sourcejam.com 2005-2008