]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
REORG: split "protocols" files into protocol and listener
authorWilly Tarreau <w@1wt.eu>
Wed, 12 Sep 2012 20:58:11 +0000 (22:58 +0200)
committerWilly Tarreau <w@1wt.eu>
Sat, 15 Sep 2012 20:29:32 +0000 (22:29 +0200)
It was becoming confusing to have protocols and listeners in the same
files, split them.

26 files changed:
Makefile
Makefile.bsd
Makefile.osx
include/proto/connection.h
include/proto/listener.h [moved from include/proto/protocols.h with 68% similarity]
include/proto/protocol.h [new file with mode: 0644]
include/proto/proxy.h
include/proto/ssl_sock.h
include/types/connection.h
include/types/global.h
include/types/listener.h [moved from include/types/protocols.h with 74% similarity]
include/types/protocol.h [new file with mode: 0644]
include/types/proxy.h
src/backend.c
src/cfgparse.c
src/dumpstats.c
src/haproxy.c
src/listener.c [moved from src/protocols.c with 83% similarity]
src/peers.c
src/proto_tcp.c
src/proto_uxst.c
src/protocol.c [new file with mode: 0644]
src/proxy.c
src/raw_sock.c
src/session.c
src/ssl_sock.c

index e11f39abc9572a6d774f2258e81a3ac0120ab5d6..745319817b581e650e1e356c45837792b7da7586 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -560,9 +560,9 @@ else
 all: haproxy
 endif
 
-OBJS = src/haproxy.o src/sessionhash.o src/base64.o src/protocols.o \
+OBJS = src/haproxy.o src/sessionhash.o src/base64.o src/protocol.o \
        src/uri_auth.o src/standard.o src/buffer.o src/log.o src/task.o \
-       src/chunk.o src/channel.o \
+       src/chunk.o src/channel.o src/listener.o \
        src/time.o src/fd.o src/pipe.o src/regex.o src/cfgparse.o src/server.o \
        src/checks.o src/queue.o src/frontend.o src/proxy.o src/peers.o \
        src/arg.o src/stick_table.o src/proto_uxst.o src/connection.o \
index ca00c7b89caf7cc23f4f6593388edb4b749cc976..6fff29bb7cb80ccb8f634063b047ba73a0854cbf 100644 (file)
@@ -105,9 +105,9 @@ LIBS    = $(LIBS.$(TARGET)) $(LIBS.$(REGEX)) $(ADDLIB)
 CFLAGS  = -Wall $(COPTS) $(DEBUG)
 LDFLAGS = -g
 
-OBJS = src/haproxy.o src/sessionhash.o src/base64.o src/protocols.o \
+OBJS = src/haproxy.o src/sessionhash.o src/base64.o src/protocol.o \
        src/uri_auth.o src/standard.o src/buffer.o src/log.o src/task.o \
-       src/chunk.o src/channel.o \
+       src/chunk.o src/channel.o src/listener.o \
        src/time.o src/fd.o src/pipe.o src/regex.o src/cfgparse.o src/server.o \
        src/checks.o src/queue.o src/frontend.o src/proxy.o src/proto_uxst.o \
        src/proto_http.o src/raw_sock.o src/appsession.o src/backend.o \
index a251c4ffca185f908f8e809d6f5c13f7c109f12b..8201a6a7a4f4319df17a2c89c055051d5a1b6c4d 100644 (file)
@@ -102,9 +102,9 @@ LIBS    = $(LIBS.$(TARGET)) $(LIBS.$(REGEX)) $(ADDLIB)
 CFLAGS  = -Wall $(COPTS) $(DEBUG) -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -mmacosx-version-min=10.4
 LDFLAGS = -g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -mmacosx-version-min=10.4
 
-OBJS = src/haproxy.o src/sessionhash.o src/base64.o src/protocols.o \
+OBJS = src/haproxy.o src/sessionhash.o src/base64.o src/protocol.o \
        src/uri_auth.o src/standard.o src/buffer.o src/log.o src/task.o \
-       src/chunk.o src/channel.o \
+       src/chunk.o src/channel.o src/listener.o \
        src/time.o src/fd.o src/pipe.o src/regex.o src/cfgparse.o src/server.o \
        src/checks.o src/queue.o src/frontend.o src/proxy.o src/proto_uxst.o \
        src/proto_http.o src/raw_sock.o src/appsession.o src/backend.o \
index 3ed605ff0eceb56a4658c3be7a82d400a93df02c..32e77cf71a9a86b77a778f37d0f8850a14ac4e14 100644 (file)
@@ -24,7 +24,7 @@
 
 #include <common/config.h>
 #include <types/connection.h>
-#include <types/protocols.h>
+#include <types/listener.h>
 
 /* I/O callback for fd-based connections. It calls the read/write handlers
  * provided by the connection's sock_ops. Returns 0.
similarity index 68%
rename from include/proto/protocols.h
rename to include/proto/listener.h
index ec98e59ceb0ba2cd9ba035949bb63400ac1bbf60..415b913382cb1e500f2f2ae933b4e8ae01ccff9f 100644 (file)
@@ -1,28 +1,28 @@
 /*
 include/proto/protocols.h
 This file declares generic protocol primitives.
-
 Copyright (C) 2000-2007 Willy Tarreau - w@1wt.eu
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation, version 2.1
-  exclusively.
-
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-*/
-
-#ifndef _PROTO_PROTOCOLS_H
-#define _PROTO_PROTOCOLS_H
-
-#include <types/protocols.h>
* include/proto/listener.h
* This file declares listener management primitives.
+ *
* Copyright (C) 2000-2012 Willy Tarreau - w@1wt.eu
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, version 2.1
* exclusively.
+ *
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _PROTO_LISTENER_H
+#define _PROTO_LISTENER_H
+
+#include <types/listener.h>
 
 /* This function adds the specified listener's file descriptor to the polling
  * lists if it is in the LI_LISTEN state. The listener enters LI_READY or
@@ -105,35 +105,6 @@ void delete_listener(struct listener *listener);
  */
 int listener_accept(int fd);
 
-/* Registers the protocol <proto> */
-void protocol_register(struct protocol *proto);
-
-/* Unregisters the protocol <proto>. Note that all listeners must have
- * previously been unbound.
- */
-void protocol_unregister(struct protocol *proto);
-
-/* binds all listeneres of all registered protocols. Returns a composition
- * of ERR_NONE, ERR_RETRYABLE, ERR_FATAL.
- */
-int protocol_bind_all(char *errmsg, int errlen);
-
-/* unbinds all listeners of all registered protocols. They are also closed.
- * This must be performed before calling exit() in order to get a chance to
- * remove file-system based sockets and pipes.
- * Returns a composition of ERR_NONE, ERR_RETRYABLE, ERR_FATAL.
- */
-int protocol_unbind_all(void);
-
-/* enables all listeners of all registered protocols. This is intended to be
- * used after a fork() to enable reading on all file descriptors. Returns a
- * composition of ERR_NONE, ERR_RETRYABLE, ERR_FATAL.
- */
-int protocol_enable_all(void);
-
-/* returns the protocol associated to family <family> or NULL if not found */
-struct protocol *protocol_by_family(int family);
-
 /* allocate an ssl_conf struct for a bind line, and chain it to list head <lh>.
  * If <arg> is not NULL, it is duplicated into ->arg to store useful config
  * information for error reporting.
@@ -151,7 +122,7 @@ static inline struct ssl_conf *ssl_conf_alloc(struct list *lh, const char *file,
        return ssl_conf;
 }
 
-#endif /* _PROTO_PROTOCOLS_H */
+#endif /* _PROTO_LISTENER_H */
 
 /*
  * Local variables:
diff --git a/include/proto/protocol.h b/include/proto/protocol.h
new file mode 100644 (file)
index 0000000..1842faf
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * include/proto/protocol.h
+ * This file declares generic protocol management primitives.
+ *
+ * Copyright (C) 2000-2012 Willy Tarreau - w@1wt.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, version 2.1
+ * exclusively.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _PROTO_PROTOCOL_H
+#define _PROTO_PROTOCOL_H
+
+#include <types/protocol.h>
+
+/* Registers the protocol <proto> */
+void protocol_register(struct protocol *proto);
+
+/* Unregisters the protocol <proto>. Note that all listeners must have
+ * previously been unbound.
+ */
+void protocol_unregister(struct protocol *proto);
+
+/* binds all listeneres of all registered protocols. Returns a composition
+ * of ERR_NONE, ERR_RETRYABLE, ERR_FATAL.
+ */
+int protocol_bind_all(char *errmsg, int errlen);
+
+/* unbinds all listeners of all registered protocols. They are also closed.
+ * This must be performed before calling exit() in order to get a chance to
+ * remove file-system based sockets and pipes.
+ * Returns a composition of ERR_NONE, ERR_RETRYABLE, ERR_FATAL.
+ */
+int protocol_unbind_all(void);
+
+/* enables all listeners of all registered protocols. This is intended to be
+ * used after a fork() to enable reading on all file descriptors. Returns a
+ * composition of ERR_NONE, ERR_RETRYABLE, ERR_FATAL.
+ */
+int protocol_enable_all(void);
+
+/* returns the protocol associated to family <family> or NULL if not found */
+struct protocol *protocol_by_family(int family);
+
+#endif /* _PROTO_PROTOCOL_H */
+
+/*
+ * Local variables:
+ *  c-indent-level: 8
+ *  c-basic-offset: 8
+ * End:
+ */
index d5fd3e01ace8b01492edda41a13475092c47634c..4a4b2857f1b088abe18e86294327d2bcf98939c3 100644 (file)
@@ -27,6 +27,7 @@
 #include <common/time.h>
 #include <types/global.h>
 #include <types/proxy.h>
+#include <types/listener.h>
 #include <proto/freq_ctr.h>
 
 int start_proxies(int verbose);
index 9d04624427dc0ffb5e4c0a1424bba146f6188ac1..6192fe8e92132a134e01e17ab430342b5b0036e1 100644 (file)
@@ -23,7 +23,9 @@
 #define _PROTO_SSL_SOCK_H
 #include <openssl/ssl.h>
 
-#include <types/protocols.h>
+#include <types/connection.h>
+#include <types/listener.h>
+#include <types/proxy.h>
 #include <types/stream_interface.h>
 
 extern struct data_ops ssl_sock;
index 711abf002d324f0beec3b9f633218419fc068088..8a1b8ee5052b03acc2b2b655c0bd5d67394ba6ca 100644 (file)
 
 #include <common/config.h>
 
+#include <types/listener.h>
+#include <types/protocol.h>
+
 /* referenced below */
-struct protocol;
 struct connection;
 struct buffer;
 struct pipe;
@@ -36,7 +38,6 @@ struct server;
 struct proxy;
 struct si_applet;
 struct task;
-struct listener;
 
 /* Polling flags that are manipulated by I/O callbacks and handshake callbacks
  * indicate what they expect from a file descriptor at each layer. For each
index 5775e27dcf6c4d7c42f14300636b80259ddb237d..4c0e443cb49a7af4a47cd80dff27d5d9aeb0abb0 100644 (file)
@@ -26,8 +26,7 @@
 
 #include <common/config.h>
 #include <types/freq_ctr.h>
-#include <types/log.h>
-#include <types/protocols.h>
+#include <types/listener.h>
 #include <types/proxy.h>
 #include <types/task.h>
 
similarity index 74%
rename from include/types/protocols.h
rename to include/types/listener.h
index bd8b35515feee6843e11b6c01ad32ef21da560f0..78195ec30605a76c1f972ddd4e65488c363ed033 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * include/types/protocols.h
- * This file defines the structures used by generic network protocols.
+ * include/types/listener.h
+ * This file defines the structures needed to manage listeners.
  *
- * Copyright (C) 2000-2011 Willy Tarreau - w@1wt.eu
+ * Copyright (C) 2000-2012 Willy Tarreau - w@1wt.eu
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#ifndef _TYPES_PROTOCOLS_H
-#define _TYPES_PROTOCOLS_H
+#ifndef _TYPES_LISTENER_H
+#define _TYPES_LISTENER_H
 
 #include <sys/types.h>
 #include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/un.h>
 
 #ifdef USE_OPENSSL
 #include <openssl/ssl.h>
 #include <common/mini-clist.h>
 #include <eb32tree.h>
 
-#include <types/counters.h>
-#include <types/task.h>
-
-/* max length of a protcol name, including trailing zero */
-#define PROTO_NAME_LEN 16
+/* Some pointer types reference below */
+struct task;
+struct protocol;
+struct data_ops;
+struct proxy;
+struct licounters;
 
 /* listener state */
 enum {
@@ -159,38 +158,7 @@ struct listener {
        } conf;                         /* config information */
 };
 
-struct connection;
-
-/* This structure contains all information needed to easily handle a protocol.
- * Its primary goal is to ease listeners maintenance. Specifically, the
- * bind_all() primitive must be used before any fork(), and the enable_all()
- * primitive must be called after the fork() to enable all fds. Last, the
- * unbind_all() primitive closes all listeners.
- */
-struct protocol {
-       char name[PROTO_NAME_LEN];                      /* protocol name, zero-terminated */
-       int sock_domain;                                /* socket domain, as passed to socket()   */
-       int sock_type;                                  /* socket type, as passed to socket()     */
-       int sock_prot;                                  /* socket protocol, as passed to socket() */
-       sa_family_t sock_family;                        /* socket family, for sockaddr */
-       socklen_t sock_addrlen;                         /* socket address length, used by bind() */
-       int l3_addrlen;                                 /* layer3 address length, used by hashes */
-       int (*accept)(int fd);                          /* generic accept function */
-       int (*bind)(struct listener *l, char *errmsg, int errlen); /* bind a listener */
-       int (*bind_all)(struct protocol *proto, char *errmsg, int errlen); /* bind all unbound listeners */
-       int (*unbind_all)(struct protocol *proto);      /* unbind all bound listeners */
-       int (*enable_all)(struct protocol *proto);      /* enable all bound listeners */
-       int (*disable_all)(struct protocol *proto);     /* disable all bound listeners */
-       int (*connect)(struct connection *, int data);  /* connect function if any */
-       int (*get_src)(int fd, struct sockaddr *, socklen_t, int dir); /* syscall used to retrieve src addr */
-       int (*get_dst)(int fd, struct sockaddr *, socklen_t, int dir); /* syscall used to retrieve dst addr */
-
-       struct list listeners;                          /* list of listeners using this protocol */
-       int nb_listeners;                               /* number of listeners */
-       struct list list;                               /* list of registered protocols */
-};
-
-#endif /* _TYPES_PROTOCOLS_H */
+#endif /* _TYPES_LISTENER_H */
 
 /*
  * Local variables:
diff --git a/include/types/protocol.h b/include/types/protocol.h
new file mode 100644 (file)
index 0000000..a8e020c
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * include/types/protocol.h
+ * This file defines the structures used by generic network protocols.
+ *
+ * Copyright (C) 2000-2012 Willy Tarreau - w@1wt.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, version 2.1
+ * exclusively.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _TYPES_PROTOCOL_H
+#define _TYPES_PROTOCOL_H
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <common/config.h>
+#include <common/mini-clist.h>
+#include <eb32tree.h>
+
+/* some pointer types referenced below */
+struct listener;
+struct connection;
+
+/* max length of a protcol name, including trailing zero */
+#define PROTO_NAME_LEN 16
+
+/* This structure contains all information needed to easily handle a protocol.
+ * Its primary goal is to ease listeners maintenance. Specifically, the
+ * bind_all() primitive must be used before any fork(), and the enable_all()
+ * primitive must be called after the fork() to enable all fds. Last, the
+ * unbind_all() primitive closes all listeners.
+ */
+struct protocol {
+       char name[PROTO_NAME_LEN];                      /* protocol name, zero-terminated */
+       int sock_domain;                                /* socket domain, as passed to socket()   */
+       int sock_type;                                  /* socket type, as passed to socket()     */
+       int sock_prot;                                  /* socket protocol, as passed to socket() */
+       sa_family_t sock_family;                        /* socket family, for sockaddr */
+       socklen_t sock_addrlen;                         /* socket address length, used by bind() */
+       int l3_addrlen;                                 /* layer3 address length, used by hashes */
+       int (*accept)(int fd);                          /* generic accept function */
+       int (*bind)(struct listener *l, char *errmsg, int errlen); /* bind a listener */
+       int (*bind_all)(struct protocol *proto, char *errmsg, int errlen); /* bind all unbound listeners */
+       int (*unbind_all)(struct protocol *proto);      /* unbind all bound listeners */
+       int (*enable_all)(struct protocol *proto);      /* enable all bound listeners */
+       int (*disable_all)(struct protocol *proto);     /* disable all bound listeners */
+       int (*connect)(struct connection *, int data);  /* connect function if any */
+       int (*get_src)(int fd, struct sockaddr *, socklen_t, int dir); /* syscall used to retrieve src addr */
+       int (*get_dst)(int fd, struct sockaddr *, socklen_t, int dir); /* syscall used to retrieve dst addr */
+
+       struct list listeners;                          /* list of listeners using this protocol */
+       int nb_listeners;                               /* number of listeners */
+       struct list list;                               /* list of registered protocols */
+};
+
+#endif /* _TYPES_PROTOCOL_H */
+
+/*
+ * Local variables:
+ *  c-indent-level: 8
+ *  c-basic-offset: 8
+ * End:
+ */
index 1080568d2ead2f56a5d13b8be342daefa293aa08..a2355d597fe3fc7454e60514602243bf93e17a39 100644 (file)
@@ -40,8 +40,8 @@
 #include <types/backend.h>
 #include <types/counters.h>
 #include <types/freq_ctr.h>
+#include <types/listener.h>
 #include <types/log.h>
-#include <types/protocols.h>
 #include <types/proto_http.h>
 #include <types/sample.h>
 #include <types/session.h>
index c2ecda82858d34422b7d2601abaad52609343a68..29d814599631625f000c7937dc97475654eb52b8 100644 (file)
@@ -38,7 +38,7 @@
 #include <proto/lb_fwlc.h>
 #include <proto/lb_fwrr.h>
 #include <proto/lb_map.h>
-#include <proto/protocols.h>
+#include <proto/protocol.h>
 #include <proto/proto_http.h>
 #include <proto/proto_tcp.h>
 #include <proto/queue.h>
index c91e996c8763a9b01d7b4eb0308d8d23b6b71447..f78f89665366e561fb3ed431d3855db9a4ae2518 100644 (file)
 #include <proto/lb_fwlc.h>
 #include <proto/lb_fwrr.h>
 #include <proto/lb_map.h>
+#include <proto/listener.h>
 #include <proto/log.h>
 #include <proto/port_range.h>
-#include <proto/protocols.h>
+#include <proto/protocol.h>
 #include <proto/proto_tcp.h>
 #include <proto/proto_uxst.h>
 #include <proto/proto_http.h>
index 2e775d945981d0425ce5732fef2f570d223b9b37..e28f808111b614eb21add16e56ac1a6a6d9ccab5 100644 (file)
@@ -47,7 +47,7 @@
 #include <proto/freq_ctr.h>
 #include <proto/log.h>
 #include <proto/pipe.h>
-#include <proto/protocols.h>
+#include <proto/listener.h>
 #include <proto/proto_uxst.h>
 #include <proto/proxy.h>
 #include <proto/session.h>
index 7fb0429711c5e2a4f20fc2369ff83182c80274e9..5edde4f1f525b40c8bd8ce9dab82ab776cfae4b7 100644 (file)
@@ -78,8 +78,9 @@
 #include <proto/checks.h>
 #include <proto/fd.h>
 #include <proto/hdr_idx.h>
+#include <proto/listener.h>
 #include <proto/log.h>
-#include <proto/protocols.h>
+#include <proto/protocol.h>
 #include <proto/proto_http.h>
 #include <proto/proxy.h>
 #include <proto/queue.h>
similarity index 83%
rename from src/protocols.c
rename to src/listener.c
index 377c985d4eb2955770cf1cc7fbce8743872f7685..0e864b2aa2cc9ef192553e17b81fbdf5e837958b 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * Protocol registration and listener management functions.
+ * Listener management functions.
  *
- * Copyright 2000-2010 Willy Tarreau <w@1wt.eu>
+ * Copyright 2000-2012 Willy Tarreau <w@1wt.eu>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -21,6 +21,7 @@
 #include <common/time.h>
 
 #include <types/global.h>
+#include <types/protocol.h>
 
 #include <proto/acl.h>
 #include <proto/fd.h>
@@ -28,9 +29,6 @@
 #include <proto/log.h>
 #include <proto/task.h>
 
-/* List head of all registered protocols */
-static struct list protocols = LIST_HEAD_INIT(protocols);
-
 /* This function adds the specified listener's file descriptor to the polling
  * lists if it is in the LI_LISTEN state. The listener enters LI_READY or
  * LI_FULL state depending on its number of connections.
@@ -411,107 +409,6 @@ void listener_accept(int fd)
        return;
 }
 
-/* Registers the protocol <proto> */
-void protocol_register(struct protocol *proto)
-{
-       LIST_ADDQ(&protocols, &proto->list);
-}
-
-/* Unregisters the protocol <proto>. Note that all listeners must have
- * previously been unbound.
- */
-void protocol_unregister(struct protocol *proto)
-{
-       LIST_DEL(&proto->list);
-       LIST_INIT(&proto->list);
-}
-
-/* binds all listeners of all registered protocols. Returns a composition
- * of ERR_NONE, ERR_RETRYABLE, ERR_FATAL.
- */
-int protocol_bind_all(char *errmsg, int errlen)
-{
-       struct protocol *proto;
-       int err;
-
-       err = 0;
-       list_for_each_entry(proto, &protocols, list) {
-               if (proto->bind_all) {
-                       err |= proto->bind_all(proto, errmsg, errlen);
-                       if ( err & ERR_ABORT )
-                               break;
-               }
-       }
-       return err;
-}
-
-/* unbinds all listeners of all registered protocols. They are also closed.
- * This must be performed before calling exit() in order to get a chance to
- * remove file-system based sockets and pipes.
- * Returns a composition of ERR_NONE, ERR_RETRYABLE, ERR_FATAL, ERR_ABORT.
- */
-int protocol_unbind_all(void)
-{
-       struct protocol *proto;
-       int err;
-
-       err = 0;
-       list_for_each_entry(proto, &protocols, list) {
-               if (proto->unbind_all) {
-                       err |= proto->unbind_all(proto);
-               }
-       }
-       return err;
-}
-
-/* enables all listeners of all registered protocols. This is intended to be
- * used after a fork() to enable reading on all file descriptors. Returns a
- * composition of ERR_NONE, ERR_RETRYABLE, ERR_FATAL.
- */
-int protocol_enable_all(void)
-{
-       struct protocol *proto;
-       int err;
-
-       err = 0;
-       list_for_each_entry(proto, &protocols, list) {
-               if (proto->enable_all) {
-                       err |= proto->enable_all(proto);
-               }
-       }
-       return err;
-}
-
-/* disables all listeners of all registered protocols. This may be used before
- * a fork() to avoid duplicating poll lists. Returns a composition of ERR_NONE,
- * ERR_RETRYABLE, ERR_FATAL.
- */
-int protocol_disable_all(void)
-{
-       struct protocol *proto;
-       int err;
-
-       err = 0;
-       list_for_each_entry(proto, &protocols, list) {
-               if (proto->disable_all) {
-                       err |= proto->disable_all(proto);
-               }
-       }
-       return err;
-}
-
-/* Returns the protocol handler for socket family <family> or NULL if not found */
-struct protocol *protocol_by_family(int family)
-{
-       struct protocol *proto;
-
-       list_for_each_entry(proto, &protocols, list) {
-               if (proto->sock_domain == family)
-                       return proto;
-       }
-       return NULL;
-}
-
 /************************************************************************/
 /*           All supported ACL keywords must be declared here.          */
 /************************************************************************/
@@ -546,7 +443,7 @@ static struct acl_kw_list acl_kws = {{ },{
 }};
 
 __attribute__((constructor))
-static void __protocols_init(void)
+static void __listener_init(void)
 {
        acl_register_keywords(&acl_kws);
 }
index 6af5d9cb1a9d38bb9a439874108cc34aca2dedbb..09e45f7331a147c20ebee9e7780eb1cfd1855756 100644 (file)
@@ -25,6 +25,7 @@
 #include <common/time.h>
 
 #include <types/global.h>
+#include <proto/listener.h>
 #include <types/peers.h>
 
 #include <proto/acl.h>
@@ -32,7 +33,6 @@
 #include <proto/fd.h>
 #include <proto/log.h>
 #include <proto/hdr_idx.h>
-#include <proto/protocols.h>
 #include <proto/proto_tcp.h>
 #include <proto/proto_http.h>
 #include <proto/proxy.h>
index f819147820e637fdd770f3c4a4acbd967b3ac46e..092db6918ec094ad1edeb0234dc5a01fc6a4a341 100644 (file)
 #include <proto/channel.h>
 #include <proto/connection.h>
 #include <proto/fd.h>
+#include <proto/listener.h>
 #include <proto/log.h>
 #include <proto/port_range.h>
-#include <proto/protocols.h>
+#include <proto/protocol.h>
 #include <proto/proto_tcp.h>
 #include <proto/proxy.h>
 #include <proto/sample.h>
index e4aaeedfeb4f814d78415e32893a08b92c4eb671..ed05e0251b0eee409ec25eed6388da638b7fe0fe 100644 (file)
@@ -36,8 +36,9 @@
 #include <types/global.h>
 
 #include <proto/fd.h>
+#include <proto/listener.h>
 #include <proto/log.h>
-#include <proto/protocols.h>
+#include <proto/protocol.h>
 #include <proto/proto_uxst.h>
 #include <proto/task.h>
 
diff --git a/src/protocol.c b/src/protocol.c
new file mode 100644 (file)
index 0000000..84d23da
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * Protocol registration functions.
+ *
+ * Copyright 2000-2012 Willy Tarreau <w@1wt.eu>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ */
+
+#include <common/config.h>
+#include <common/errors.h>
+#include <common/mini-clist.h>
+#include <common/standard.h>
+
+#include <types/protocol.h>
+
+/* List head of all registered protocols */
+static struct list protocols = LIST_HEAD_INIT(protocols);
+
+/* Registers the protocol <proto> */
+void protocol_register(struct protocol *proto)
+{
+       LIST_ADDQ(&protocols, &proto->list);
+}
+
+/* Unregisters the protocol <proto>. Note that all listeners must have
+ * previously been unbound.
+ */
+void protocol_unregister(struct protocol *proto)
+{
+       LIST_DEL(&proto->list);
+       LIST_INIT(&proto->list);
+}
+
+/* binds all listeners of all registered protocols. Returns a composition
+ * of ERR_NONE, ERR_RETRYABLE, ERR_FATAL.
+ */
+int protocol_bind_all(char *errmsg, int errlen)
+{
+       struct protocol *proto;
+       int err;
+
+       err = 0;
+       list_for_each_entry(proto, &protocols, list) {
+               if (proto->bind_all) {
+                       err |= proto->bind_all(proto, errmsg, errlen);
+                       if ( err & ERR_ABORT )
+                               break;
+               }
+       }
+       return err;
+}
+
+/* unbinds all listeners of all registered protocols. They are also closed.
+ * This must be performed before calling exit() in order to get a chance to
+ * remove file-system based sockets and pipes.
+ * Returns a composition of ERR_NONE, ERR_RETRYABLE, ERR_FATAL, ERR_ABORT.
+ */
+int protocol_unbind_all(void)
+{
+       struct protocol *proto;
+       int err;
+
+       err = 0;
+       list_for_each_entry(proto, &protocols, list) {
+               if (proto->unbind_all) {
+                       err |= proto->unbind_all(proto);
+               }
+       }
+       return err;
+}
+
+/* enables all listeners of all registered protocols. This is intended to be
+ * used after a fork() to enable reading on all file descriptors. Returns a
+ * composition of ERR_NONE, ERR_RETRYABLE, ERR_FATAL.
+ */
+int protocol_enable_all(void)
+{
+       struct protocol *proto;
+       int err;
+
+       err = 0;
+       list_for_each_entry(proto, &protocols, list) {
+               if (proto->enable_all) {
+                       err |= proto->enable_all(proto);
+               }
+       }
+       return err;
+}
+
+/* disables all listeners of all registered protocols. This may be used before
+ * a fork() to avoid duplicating poll lists. Returns a composition of ERR_NONE,
+ * ERR_RETRYABLE, ERR_FATAL.
+ */
+int protocol_disable_all(void)
+{
+       struct protocol *proto;
+       int err;
+
+       err = 0;
+       list_for_each_entry(proto, &protocols, list) {
+               if (proto->disable_all) {
+                       err |= proto->disable_all(proto);
+               }
+       }
+       return err;
+}
+
+/* Returns the protocol handler for socket family <family> or NULL if not found */
+struct protocol *protocol_by_family(int family)
+{
+       struct protocol *proto;
+
+       list_for_each_entry(proto, &protocols, list) {
+               if (proto->sock_domain == family)
+                       return proto;
+       }
+       return NULL;
+}
+
+/*
+ * Local variables:
+ *  c-indent-level: 8
+ *  c-basic-offset: 8
+ * End:
+ */
index 07e863c6c0e9458fdb0bf0689ebdc64d49a226e5..56d343eebc7a111e0bbe78f63d6f5325bd9691ea 100644 (file)
@@ -31,8 +31,8 @@
 #include <proto/backend.h>
 #include <proto/fd.h>
 #include <proto/hdr_idx.h>
+#include <proto/listener.h>
 #include <proto/log.h>
-#include <proto/protocols.h>
 #include <proto/proto_tcp.h>
 #include <proto/proto_http.h>
 #include <proto/proxy.h>
index ea2fa6684646a956ab3647ac3ae40138ca63dda8..37bea724b151053c6b1f73a75427c5ef93b53486 100644 (file)
@@ -35,7 +35,6 @@
 #include <proto/freq_ctr.h>
 #include <proto/log.h>
 #include <proto/pipe.h>
-#include <proto/protocols.h>
 #include <proto/raw_sock.h>
 #include <proto/stream_interface.h>
 #include <proto/task.h>
index 4503b41fa134a4b69f1f5ecf4871e0433f9827b2..6fb79e3f254714d60586a2e6bbcd1057f96b6107 100644 (file)
 #include <proto/freq_ctr.h>
 #include <proto/frontend.h>
 #include <proto/hdr_idx.h>
+#include <proto/listener.h>
 #include <proto/log.h>
 #include <proto/raw_sock.h>
 #include <proto/session.h>
 #include <proto/pipe.h>
-#include <proto/protocols.h>
 #include <proto/proto_http.h>
 #include <proto/proto_tcp.h>
 #include <proto/proxy.h>
index 41983394ec9177193a55258791a1b88a57374002..5f259f3a2857917c0f91426edc18507edbd2651d 100644 (file)
@@ -64,7 +64,6 @@
 #include <proto/freq_ctr.h>
 #include <proto/frontend.h>
 #include <proto/log.h>
-#include <proto/protocols.h>
 #include <proto/shctx.h>
 #include <proto/ssl_sock.h>
 #include <proto/task.h>