libssh  0.5.4
buffer.h
1 /*
2  * This file is part of the SSH Library
3  *
4  * Copyright (c) 2009 by Aris Adamantiadis
5  *
6  * The SSH Library is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation; either version 2.1 of the License, or (at your
9  * option) any later version.
10  *
11  * The SSH Library is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14  * License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with the SSH Library; see the file COPYING. If not, write to
18  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
19  * MA 02111-1307, USA.
20  */
21 
22 #ifndef BUFFER_H_
23 #define BUFFER_H_
24 
25 #include "libssh/libssh.h"
26 /*
27  * Describes a buffer state
28  * [XXXXXXXXXXXXDATA PAYLOAD XXXXXXXXXXXXXXXXXXXXXXXX]
29  * ^ ^ ^ ^]
30  * \_data points\_pos points here \_used points here | /
31  * here Allocated
32  */
33 struct ssh_buffer_struct {
34  char *data;
35  uint32_t used;
36  uint32_t allocated;
37  uint32_t pos;
38 };
39 
40 LIBSSH_API void ssh_buffer_free(ssh_buffer buffer);
41 LIBSSH_API void *ssh_buffer_get_begin(ssh_buffer buffer);
42 LIBSSH_API uint32_t ssh_buffer_get_len(ssh_buffer buffer);
43 LIBSSH_API ssh_buffer ssh_buffer_new(void);
44 int buffer_add_ssh_string(ssh_buffer buffer, ssh_string string);
45 int buffer_add_u8(ssh_buffer buffer, uint8_t data);
46 int buffer_add_u16(ssh_buffer buffer, uint16_t data);
47 int buffer_add_u32(ssh_buffer buffer, uint32_t data);
48 int buffer_add_u64(ssh_buffer buffer, uint64_t data);
49 int buffer_add_data(ssh_buffer buffer, const void *data, uint32_t len);
50 int buffer_prepend_data(ssh_buffer buffer, const void *data, uint32_t len);
51 int buffer_add_buffer(ssh_buffer buffer, ssh_buffer source);
52 int buffer_reinit(ssh_buffer buffer);
53 
54 /* buffer_get_rest returns a pointer to the current position into the buffer */
55 void *buffer_get_rest(ssh_buffer buffer);
56 /* buffer_get_rest_len returns the number of bytes which can be read */
57 uint32_t buffer_get_rest_len(ssh_buffer buffer);
58 
59 /* buffer_read_*() returns the number of bytes read, except for ssh strings */
60 int buffer_get_u8(ssh_buffer buffer, uint8_t *data);
61 int buffer_get_u32(ssh_buffer buffer, uint32_t *data);
62 int buffer_get_u64(ssh_buffer buffer, uint64_t *data);
63 
64 uint32_t buffer_get_data(ssh_buffer buffer, void *data, uint32_t requestedlen);
65 /* buffer_get_ssh_string() is an exception. if the String read is too large or invalid, it will answer NULL. */
66 ssh_string buffer_get_ssh_string(ssh_buffer buffer);
67 /* gets a string out of a SSH-1 mpint */
68 ssh_string buffer_get_mpint(ssh_buffer buffer);
69 /* buffer_pass_bytes acts as if len bytes have been read (used for padding) */
70 uint32_t buffer_pass_bytes_end(ssh_buffer buffer, uint32_t len);
71 uint32_t buffer_pass_bytes(ssh_buffer buffer, uint32_t len);
72 
73 #endif /* BUFFER_H_ */