From 635d95f5b0a4646d2d12e898979d841c7694f01d Mon Sep 17 00:00:00 2001
From: Andrey Kulikov <amdeich@gmail.com>
Date: Sun, 24 Sep 2023 14:04:41 +0300
Subject: [PATCH] Expose Stream proxy module structures for module developers.

---
 auto/modules                         |  1 +
 src/stream/ngx_stream_proxy_module.c | 54 +----------------------
 src/stream/ngx_stream_proxy_module.h | 66 ++++++++++++++++++++++++++++
 3 files changed, 68 insertions(+), 53 deletions(-)
 create mode 100644 src/stream/ngx_stream_proxy_module.h

diff --git a/auto/modules b/auto/modules
index 300d07c..a4f08f1 100644
--- a/auto/modules
+++ b/auto/modules
@@ -1056,6 +1056,7 @@ if [ $STREAM != NO ]; then
     ngx_module_deps="src/stream/ngx_stream.h \
                      src/stream/ngx_stream_variables.h \
                      src/stream/ngx_stream_script.h \
+                     src/stream/ngx_stream_proxy_module.h \
                      src/stream/ngx_stream_upstream.h \
                      src/stream/ngx_stream_upstream_round_robin.h"
     ngx_module_srcs="src/stream/ngx_stream.c \
diff --git a/src/stream/ngx_stream_proxy_module.c b/src/stream/ngx_stream_proxy_module.c
index ed275c0..9110a04 100644
--- a/src/stream/ngx_stream_proxy_module.c
+++ b/src/stream/ngx_stream_proxy_module.c
@@ -5,59 +5,7 @@
  */
 
 
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_stream.h>
-
-
-typedef struct {
-    ngx_addr_t                      *addr;
-    ngx_stream_complex_value_t      *value;
-#if (NGX_HAVE_TRANSPARENT_PROXY)
-    ngx_uint_t                       transparent; /* unsigned  transparent:1; */
-#endif
-} ngx_stream_upstream_local_t;
-
-
-typedef struct {
-    ngx_msec_t                       connect_timeout;
-    ngx_msec_t                       timeout;
-    ngx_msec_t                       next_upstream_timeout;
-    size_t                           buffer_size;
-    ngx_stream_complex_value_t      *upload_rate;
-    ngx_stream_complex_value_t      *download_rate;
-    ngx_uint_t                       requests;
-    ngx_uint_t                       responses;
-    ngx_uint_t                       next_upstream_tries;
-    ngx_flag_t                       next_upstream;
-    ngx_flag_t                       proxy_protocol;
-    ngx_flag_t                       half_close;
-    ngx_stream_upstream_local_t     *local;
-    ngx_flag_t                       socket_keepalive;
-
-#if (NGX_STREAM_SSL)
-    ngx_flag_t                       ssl_enable;
-    ngx_flag_t                       ssl_session_reuse;
-    ngx_uint_t                       ssl_protocols;
-    ngx_str_t                        ssl_ciphers;
-    ngx_stream_complex_value_t      *ssl_name;
-    ngx_flag_t                       ssl_server_name;
-
-    ngx_flag_t                       ssl_verify;
-    ngx_uint_t                       ssl_verify_depth;
-    ngx_str_t                        ssl_trusted_certificate;
-    ngx_str_t                        ssl_crl;
-    ngx_stream_complex_value_t      *ssl_certificate;
-    ngx_stream_complex_value_t      *ssl_certificate_key;
-    ngx_array_t                     *ssl_passwords;
-    ngx_array_t                     *ssl_conf_commands;
-
-    ngx_ssl_t                       *ssl;
-#endif
-
-    ngx_stream_upstream_srv_conf_t  *upstream;
-    ngx_stream_complex_value_t      *upstream_value;
-} ngx_stream_proxy_srv_conf_t;
+#include <ngx_stream_proxy_module.h>
 
 
 static void ngx_stream_proxy_handler(ngx_stream_session_t *s);
diff --git a/src/stream/ngx_stream_proxy_module.h b/src/stream/ngx_stream_proxy_module.h
new file mode 100644
index 0000000..e829cb2
--- /dev/null
+++ b/src/stream/ngx_stream_proxy_module.h
@@ -0,0 +1,66 @@
+
+/*
+ * Copyright (C) Roman Arutyunyan
+ * Copyright (C) Nginx, Inc.
+ */
+
+
+#ifndef _NGX_STREAM_PROXY_MODULE_H_INCLUDED_
+#define _NGX_STREAM_PROXY_MODULE_H_INCLUDED_
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+#include <ngx_stream.h>
+
+
+typedef struct {
+    ngx_addr_t                      *addr;
+    ngx_stream_complex_value_t      *value;
+#if (NGX_HAVE_TRANSPARENT_PROXY)
+    ngx_uint_t                       transparent; /* unsigned  transparent:1; */
+#endif
+} ngx_stream_upstream_local_t;
+
+
+typedef struct {
+    ngx_msec_t                       connect_timeout;
+    ngx_msec_t                       timeout;
+    ngx_msec_t                       next_upstream_timeout;
+    size_t                           buffer_size;
+    ngx_stream_complex_value_t      *upload_rate;
+    ngx_stream_complex_value_t      *download_rate;
+    ngx_uint_t                       requests;
+    ngx_uint_t                       responses;
+    ngx_uint_t                       next_upstream_tries;
+    ngx_flag_t                       next_upstream;
+    ngx_flag_t                       proxy_protocol;
+    ngx_flag_t                       half_close;
+    ngx_stream_upstream_local_t     *local;
+    ngx_flag_t                       socket_keepalive;
+
+#if (NGX_STREAM_SSL)
+    ngx_flag_t                       ssl_enable;
+    ngx_flag_t                       ssl_session_reuse;
+    ngx_uint_t                       ssl_protocols;
+    ngx_str_t                        ssl_ciphers;
+    ngx_stream_complex_value_t      *ssl_name;
+    ngx_flag_t                       ssl_server_name;
+
+    ngx_flag_t                       ssl_verify;
+    ngx_uint_t                       ssl_verify_depth;
+    ngx_str_t                        ssl_trusted_certificate;
+    ngx_str_t                        ssl_crl;
+    ngx_stream_complex_value_t      *ssl_certificate;
+    ngx_stream_complex_value_t      *ssl_certificate_key;
+    ngx_array_t                     *ssl_passwords;
+    ngx_array_t                     *ssl_conf_commands;
+
+    ngx_ssl_t                       *ssl;
+#endif
+
+    ngx_stream_upstream_srv_conf_t  *upstream;
+    ngx_stream_complex_value_t      *upstream_value;
+} ngx_stream_proxy_srv_conf_t;
+
+
+#endif /* _NGX_STREAM_PROXY_MODULE_H_INCLUDED_ */
-- 
2.30.2

