commit 7184b10a0b08fd0cb7c5148be23898d38138f04e Author: Zack Weinberg zackw@panix.com Date: Mon Jul 25 16:26:55 2011 -0700
Hoist (nearly-)ubiquitous includes and forward declarations to util.h. --- src/container.h | 2 -- src/crypt.c | 3 --- src/crypt.h | 2 -- src/main.c | 2 -- src/network.c | 7 ------- src/network.h | 37 ++++--------------------------------- src/protocol.c | 4 ---- src/protocol.h | 33 ++++++++++++++------------------- src/protocols/dummy.c | 2 -- src/protocols/dummy.h | 3 +-- src/protocols/obfs2.c | 2 -- src/protocols/obfs2.h | 3 +-- src/sha256.c | 1 - src/sha256.h | 2 -- src/socks.c | 6 ------ src/socks.h | 4 ---- src/test/tinytest.c | 4 ---- src/util.c | 8 -------- src/util.h | 44 +++++++++++++++++++++++++++++++++++++++++--- 19 files changed, 61 insertions(+), 108 deletions(-)
diff --git a/src/container.h b/src/container.h index e1c1a07..129e4f9 100644 --- a/src/container.h +++ b/src/container.h @@ -6,8 +6,6 @@ #ifndef CONTAINER_H #define CONTAINER_H
-#include <stdlib.h> -#include <string.h> #include <time.h>
/** A resizeable list of pointers, with associated helpful functionality. diff --git a/src/crypt.c b/src/crypt.c index 9019fc9..62d99fe 100644 --- a/src/crypt.c +++ b/src/crypt.c @@ -8,9 +8,6 @@ #include "crypt.h"
#include <fcntl.h> -#include <limits.h> -#include <stdlib.h> -#include <string.h> #include <unistd.h>
#include <openssl/opensslv.h> diff --git a/src/crypt.h b/src/crypt.h index beccda6..51bbc57 100644 --- a/src/crypt.h +++ b/src/crypt.h @@ -5,8 +5,6 @@ #ifndef CRYPT_H #define CRYPT_H
-#include <stddef.h> /* for size_t */ - #define SHA256_LENGTH 32
/* Stream cipher state */ diff --git a/src/main.c b/src/main.c index cc69805..f6280c2 100644 --- a/src/main.c +++ b/src/main.c @@ -11,8 +11,6 @@ #include <errno.h> #include <signal.h> #include <stdio.h> -#include <stdlib.h> -#include <string.h>
#include <event2/event.h> #include <event2/dns.h> diff --git a/src/network.c b/src/network.c index c4cf0c7..f7a94d3 100644 --- a/src/network.c +++ b/src/network.c @@ -13,18 +13,11 @@ #include "protocol.h"
#include <errno.h> -#include <stdlib.h> -#include <string.h>
#include <event2/buffer.h> #include <event2/bufferevent.h> #include <event2/bufferevent_struct.h> #include <event2/listener.h> -#include <event2/util.h> - -#ifdef _WIN32 -#include <ws2tcpip.h> /* socklen_t */ -#endif
/* Terminology used in this file:
diff --git a/src/network.h b/src/network.h index b6aa410..c5ef69e 100644 --- a/src/network.h +++ b/src/network.h @@ -5,51 +5,22 @@ #ifndef NETWORK_H #define NETWORK_H
-struct event_base; -struct protocol_params_t; - -#define LSN_SIMPLE_CLIENT 1 -#define LSN_SIMPLE_SERVER 2 -#define LSN_SOCKS_CLIENT 3 - -enum recv_ret { - /* Everything went fine. */ - RECV_GOOD=0, - /* Something went bad. */ - RECV_BAD, - /* ...need...more...data... */ - RECV_INCOMPLETE, - - /* Originally needed by the obfs2 protocol but it might get other - users in the future. - It means: - "We have pending data that we have to send. You should do that by - calling proto_send() immediately." */ - RECV_SEND_PENDING -}; - /* returns 1 on success, 0 on failure */ -int create_listener(struct event_base *base, struct protocol_params_t *params); +int create_listener(struct event_base *base, protocol_params_t *params); void free_all_listeners(void);
void start_shutdown(int barbaric);
#ifdef NETWORK_PRIVATE
-struct bufferevent; -struct evconnlistener; -struct socks_state_t; -struct protocol_t; -struct protocol_params_t; - typedef struct listener_t { + protocol_params_t *proto_params; struct evconnlistener *listener; - struct protocol_params_t *proto_params; } listener_t;
typedef struct conn_t { - struct protocol_t *proto; - struct socks_state_t *socks_state; + protocol_t *proto; + socks_state_t *socks_state; struct bufferevent *upstream; struct bufferevent *downstream; unsigned int mode : 30; diff --git a/src/protocol.c b/src/protocol.c index a010d16..2966e06 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -8,10 +8,6 @@ #include "protocols/obfs2.h" #include "protocols/dummy.h"
-#include <stdlib.h> -#include <string.h> - - /** All supported protocols should be put in this array. It's used by main.c. diff --git a/src/protocol.h b/src/protocol.h index c023720..246ad1c 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -5,11 +5,6 @@ #ifndef PROTOCOL_H #define PROTOCOL_H
-#include "network.h" /* for recv_ret */ -#include <event2/util.h> /* for evutil_addrinfo */ - -struct evbuffer; - /** This struct defines the protocol-specific state for all connections opened from a particular listener. Each protocol may extend this @@ -17,12 +12,12 @@ struct evbuffer; member of a larger structure (standard fake-inheritance-in-C technique). */ -typedef struct protocol_params_t { - const struct protocol_vtable *vtable; +struct protocol_params_t { + const protocol_vtable *vtable; struct evutil_addrinfo *target_addr; struct evutil_addrinfo *listen_addr; int mode; -} protocol_params_t; +};
/** This struct defines the protocol-specific state for a particular @@ -30,9 +25,9 @@ typedef struct protocol_params_t { additional private data by embedding it as the first member of a larger structure. */ -typedef struct protocol_t { - const struct protocol_vtable *vtable; -} protocol_t; +struct protocol_t { + const protocol_vtable *vtable; +};
/** This struct defines a protocol and its methods; note that not all @@ -42,7 +37,7 @@ typedef struct protocol_t { principal interface between each individual protocol and generic code. At present there is a static list of these objects in protocol.c. */ -typedef struct protocol_vtable +struct protocol_vtable { /** The short name of this protocol. */ const char *name; @@ -78,19 +73,19 @@ typedef struct protocol_vtable struct evbuffer *source, struct evbuffer *dest);
-} protocol_vtable; +};
/** Use this macro to define protocol_vtable objects; it ensures all the methods are in the correct order and enforces a consistent naming convention on protocol implementations. */ -#define DEFINE_PROTOCOL_VTABLE(name) \ - const struct protocol_vtable name##_vtable = { \ - #name, \ - name##_init, name##_fini, \ - name##_create, name##_destroy, \ - name##_handshake, name##_send, name##_recv \ +#define DEFINE_PROTOCOL_VTABLE(name) \ + const protocol_vtable name##_vtable = { \ + #name, \ + name##_init, name##_fini, \ + name##_create, name##_destroy, \ + name##_handshake, name##_send, name##_recv \ }
protocol_params_t *proto_params_init(int n_options, diff --git a/src/protocols/dummy.c b/src/protocols/dummy.c index e6c4ca5..8ecce8f 100644 --- a/src/protocols/dummy.c +++ b/src/protocols/dummy.c @@ -7,8 +7,6 @@ #define PROTOCOL_DUMMY_PRIVATE #include "dummy.h"
-#include <stdlib.h> -#include <string.h> #include <event2/buffer.h>
/* type-safe downcast wrappers */ diff --git a/src/protocols/dummy.h b/src/protocols/dummy.h index 944fe1b..308c4f0 100644 --- a/src/protocols/dummy.h +++ b/src/protocols/dummy.h @@ -4,8 +4,7 @@ #ifndef PROTOCOL_DUMMY_H #define PROTOCOL_DUMMY_H
-struct protocol_vtable; -extern const struct protocol_vtable dummy_vtable; +extern const protocol_vtable dummy_vtable;
#ifdef PROTOCOL_DUMMY_PRIVATE
diff --git a/src/protocols/obfs2.c b/src/protocols/obfs2.c index 166c54a..6a6a975 100644 --- a/src/protocols/obfs2.c +++ b/src/protocols/obfs2.c @@ -7,8 +7,6 @@ #define PROTOCOL_OBFS2_PRIVATE #include "obfs2.h"
-#include <stdlib.h> -#include <string.h> #include <event2/buffer.h>
/* type-safe downcast wrappers */ diff --git a/src/protocols/obfs2.h b/src/protocols/obfs2.h index 107d15a..ce28217 100644 --- a/src/protocols/obfs2.h +++ b/src/protocols/obfs2.h @@ -5,8 +5,7 @@ #ifndef PROTOCOL_OBFS2_H #define PROTOCOL_OBFS2_H
-struct protocol_vtable; -extern const struct protocol_vtable obfs2_vtable; +extern const protocol_vtable obfs2_vtable;
#ifdef PROTOCOL_OBFS2_PRIVATE
diff --git a/src/sha256.c b/src/sha256.c index 7d273ae..fccbde6 100644 --- a/src/sha256.c +++ b/src/sha256.c @@ -7,7 +7,6 @@ #include "util.h"
#include "sha256.h" -#include <string.h> #include <arpa/inet.h> /* for htonl/ntohl */
#define STMT_BEGIN do { diff --git a/src/sha256.h b/src/sha256.h index b6a75be..6afdbfe 100644 --- a/src/sha256.h +++ b/src/sha256.h @@ -2,8 +2,6 @@ #ifndef SHA256_H #define SHA256_H
-#include <stdint.h> - typedef struct sha256_state { uint64_t length; uint32_t state[8], curlen; diff --git a/src/socks.c b/src/socks.c index f1eada4..9941005 100644 --- a/src/socks.c +++ b/src/socks.c @@ -8,15 +8,9 @@ #include "socks.h"
#include <errno.h> -#include <stdlib.h> -#include <string.h>
#include <event2/buffer.h>
-#ifdef _WIN32 -#include <ws2tcpip.h> /* sockaddr_in6 */ -#endif - /** General SOCKS5 idea:
diff --git a/src/socks.h b/src/socks.h index db10cb5..a06a11e 100644 --- a/src/socks.h +++ b/src/socks.h @@ -5,10 +5,6 @@ #ifndef SOCKS_H #define SOCKS_H
-typedef struct socks_state_t socks_state_t; -struct evbuffer; -struct sockaddr; - enum socks_status_t { /* Waiting for initial socks4 or socks5 message */ ST_WAITING, diff --git a/src/test/tinytest.c b/src/test/tinytest.c index 5151bcb..32e7b76 100644 --- a/src/test/tinytest.c +++ b/src/test/tinytest.c @@ -23,13 +23,9 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
-#include "tinytest.h" #include "tinytest_macros.h"
#include <assert.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h>
#ifdef _WIN32 #define WIN32_LEAN_AND_MEAN diff --git a/src/util.c b/src/util.c index 8e63944..167e867 100644 --- a/src/util.c +++ b/src/util.c @@ -6,18 +6,10 @@
#include <errno.h> #include <fcntl.h> -#include <limits.h> #include <stdio.h> -#include <stdlib.h> -#include <string.h> #include <unistd.h>
#include <event2/dns.h> -#include <event2/util.h> - -#ifdef _WIN32 -#include <ws2tcpip.h> /* addrinfo */ -#endif
/** Any size_t larger than this amount is likely to be an underflow. */ #define SIZE_T_CEILING (SIZE_MAX/2 - 16) diff --git a/src/util.h b/src/util.h index cb98fbd..ede23e4 100644 --- a/src/util.h +++ b/src/util.h @@ -6,14 +6,25 @@ #define UTIL_H
#include "config.h" + +#include <limits.h> #include <stdarg.h> /* va_list */ #include <stddef.h> /* size_t, ptrdiff_t, offsetof, NULL */ #include <stdint.h> /* intN_t, uintN_t */ +#include <stdlib.h> +#include <string.h> + #include <event2/util.h> /* evutil_addrinfo */ +#ifdef _WIN32 +#include <ws2tcpip.h> /* addrinfo (event2/util.h should do this, + but it doesn't) */ +#endif
-struct sockaddr; -struct event_base; +struct bufferevent; +struct evconnlistener; +struct evbuffer; struct evdns_base; +struct event_base;
/***** Type annotations. *****/
@@ -49,7 +60,34 @@ char *xstrndup(const char *s, size_t maxsize) ATTR_MALLOC;
unsigned int ui64_log2(uint64_t u64);
-/***** Network functions. *****/ +/***** Network types and functions. *****/ + +typedef struct protocol_t protocol_t; +typedef struct protocol_params_t protocol_params_t; +typedef struct protocol_vtable protocol_vtable; +typedef struct socks_state_t socks_state_t; + +enum recv_ret { + /* Everything went fine. */ + RECV_GOOD=0, + /* Something went bad. */ + RECV_BAD, + /* ...need...more...data... */ + RECV_INCOMPLETE, + + /* Originally needed by the obfs2 protocol but it might get other + users in the future. + It means: + "We have pending data that we have to send. You should do that by + calling proto_send() immediately." */ + RECV_SEND_PENDING +}; + +enum listen_mode { + LSN_SIMPLE_CLIENT = 1, + LSN_SIMPLE_SERVER, + LSN_SOCKS_CLIENT +};
struct evutil_addrinfo *resolve_address_port(const char *address, int nodns, int passive,