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) |
|
|
Definition at line 26 of file buffer.h. Referenced by buffer_append_space(), and channel_pre_open(). |
|
|
Definition at line 27 of file buffer.h. Referenced by buffer_append_space(), and channel_pre_open(). |
|
||||||||||||||||
|
||||||||||||
|
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 }
|
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
|
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 }
|
|
|
||||||||||||||||
|
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 }
|
|
||||||||||||||||
|
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 }
|
|
|
|