a91454f25dc66b53ff58fd5b455d300ef163e595
[m6w6/libmemcached] / libmemcached / memcached_server.h
1 /*
2 * Summary: String structure used for libmemcached.
3 *
4 * Copy: See Copyright for the status of this software.
5 *
6 * Author: Brian Aker
7 */
8
9 #ifndef LIBMEMCACHED_MEMCACHED_SERVER_H
10 #define LIBMEMCACHED_MEMCACHED_SERVER_H
11
12 #ifndef LIBMEMCACHED_MEMCACHED_H
13 #error "Please include <libmemcached/memcached.h> instead"
14 #endif
15
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19
20 struct memcached_server_st {
21 bool is_allocated;
22 bool sockaddr_inited;
23 uint16_t count;
24 unsigned int cursor_active;
25 unsigned int port;
26 int cached_errno;
27 int fd;
28 uint32_t io_bytes_sent; /* # bytes sent since last read */
29 uint32_t server_failure_counter;
30 uint32_t weight;
31 uint8_t major_version;
32 uint8_t micro_version;
33 uint8_t minor_version;
34 memcached_connection type;
35 char *read_ptr;
36 char *cached_server_error;
37 size_t read_buffer_length;
38 size_t read_data_length;
39 size_t write_buffer_offset;
40 struct addrinfo *address_info;
41 time_t next_retry;
42 memcached_st *root;
43 uint64_t limit_maxbytes;
44 char read_buffer[MEMCACHED_MAX_BUFFER];
45 char write_buffer[MEMCACHED_MAX_BUFFER];
46 char hostname[MEMCACHED_MAX_HOST_LENGTH];
47 };
48
49 #define memcached_server_count(A) (A)->number_of_hosts
50 #define memcached_server_name(A,B) (B).hostname
51 #define memcached_server_port(A,B) (B).port
52 #define memcached_server_list(A) (A)->hosts
53 #define memcached_server_response_count(A) (A)->cursor_active
54
55 LIBMEMCACHED_API
56 memcached_return memcached_server_cursor(memcached_st *ptr,
57 memcached_server_function *callback,
58 void *context,
59 unsigned int number_of_callbacks);
60
61 LIBMEMCACHED_API
62 memcached_server_st *memcached_server_by_key(memcached_st *ptr, const char *key,
63 size_t key_length, memcached_return *error);
64
65 LIBMEMCACHED_API
66 const char *memcached_server_error(memcached_server_st *ptr);
67
68 LIBMEMCACHED_API
69 void memcached_server_error_reset(memcached_server_st *ptr);
70
71 /* These should not currently be used by end users */
72 /* TODO: Is the above comment valid? If so, how can we unit test these if they
73 * aren't exported. If not, we should remove the comment */
74 LIBMEMCACHED_API
75 memcached_server_st *memcached_server_create(memcached_st *memc, memcached_server_st *ptr);
76
77 LIBMEMCACHED_API
78 memcached_server_st *memcached_server_create_with(memcached_st *memc, memcached_server_st *host,
79 const char *hostname, unsigned int port,
80 uint32_t weight, memcached_connection type);
81
82 LIBMEMCACHED_API
83 void memcached_server_free(memcached_server_st *ptr);
84 LIBMEMCACHED_API
85 memcached_server_st *memcached_server_clone(memcached_server_st *clone, memcached_server_st *ptr);
86 LIBMEMCACHED_API
87 memcached_analysis_st *memcached_analyze(memcached_st *memc, memcached_stat_st *memc_stat,
88 memcached_return *error);
89
90 LIBMEMCACHED_API
91 memcached_return memcached_server_remove(memcached_server_st *st_ptr);
92
93 /* Server Public functions */
94
95 LIBMEMCACHED_API
96 memcached_return memcached_server_add_udp(memcached_st *ptr,
97 const char *hostname,
98 unsigned int port);
99 LIBMEMCACHED_API
100 memcached_return memcached_server_add_unix_socket(memcached_st *ptr,
101 const char *filename);
102 LIBMEMCACHED_API
103 memcached_return memcached_server_add(memcached_st *ptr, const char *hostname,
104 unsigned int port);
105
106 LIBMEMCACHED_API
107 memcached_return memcached_server_add_udp_with_weight(memcached_st *ptr,
108 const char *hostname,
109 unsigned int port,
110 uint32_t weight);
111 LIBMEMCACHED_API
112 memcached_return memcached_server_add_unix_socket_with_weight(memcached_st *ptr,
113 const char *filename,
114 uint32_t weight);
115 LIBMEMCACHED_API
116 memcached_return memcached_server_add_with_weight(memcached_st *ptr, const char *hostname,
117 unsigned int port,
118 uint32_t weight);
119 LIBMEMCACHED_API
120 void memcached_server_list_free(memcached_server_st *ptr);
121 LIBMEMCACHED_API
122 memcached_return memcached_server_push(memcached_st *ptr, memcached_server_st *list);
123
124 LIBMEMCACHED_API
125 memcached_server_st *memcached_server_list_append(memcached_server_st *ptr,
126 const char *hostname,
127 unsigned int port,
128 memcached_return *error);
129 LIBMEMCACHED_API
130 memcached_server_st *memcached_server_list_append_with_weight(memcached_server_st *ptr,
131 const char *hostname,
132 unsigned int port,
133 uint32_t weight,
134 memcached_return *error);
135 LIBMEMCACHED_API
136 unsigned int memcached_server_list_count(memcached_server_st *ptr);
137 LIBMEMCACHED_API
138 memcached_server_st *memcached_servers_parse(const char *server_strings);
139
140
141 #ifdef __cplusplus
142 }
143 #endif
144
145 #endif /* LIBMEMCACHED_MEMCACHED_SERVER_H */