Skip to content

Commit 7b1e4b5

Browse files
committed
Add possibility to show rule ids in header
1 parent 20ea380 commit 7b1e4b5

File tree

3 files changed

+68
-11
lines changed

3 files changed

+68
-11
lines changed

src/mod_redirectionio.c

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,3 @@
1-
#include "httpd.h"
2-
#include "http_config.h"
3-
#include "http_log.h"
4-
#include "http_protocol.h"
5-
#include "http_request.h"
6-
#include "ap_config.h"
7-
#include "apr_network_io.h"
8-
#include "apr_strings.h"
9-
#include "apr_uri.h"
101
#include "mod_redirectionio.h"
112
#include "redirectionio_protocol.h"
123

@@ -41,6 +32,8 @@ static apr_status_t redirectionio_child_exit(void *resource);
4132
static const char *redirectionio_set_enable(cmd_parms *cmd, void *cfg, const char *arg);
4233
static const char *redirectionio_set_project_key(cmd_parms *cmd, void *cfg, const char *arg);
4334
static const char *redirectionio_set_logs_enable(cmd_parms *cmd, void *cfg, const char *arg);
35+
static const char *redirectionio_set_scheme(cmd_parms *cmd, void *cfg, const char *arg);
36+
static const char *redirectionio_set_show_rule_ids(cmd_parms *cmd, void *cfg, const char *arg);
4437
static const char *redirectionio_set_pass(cmd_parms *cmd, void *cfg, const char *arg);
4538
static void redirectionio_apache_log_callback(const char* log_str, const void* data, short level);
4639

@@ -49,6 +42,8 @@ static const command_rec redirectionio_directives[] = {
4942
AP_INIT_TAKE1("redirectionioPass", redirectionio_set_pass, NULL, OR_ALL, "Agent server location"),
5043
AP_INIT_TAKE1("redirectionioProjectKey", redirectionio_set_project_key, NULL, OR_ALL, "RedirectionIO project key"),
5144
AP_INIT_TAKE1("redirectionioLogs", redirectionio_set_logs_enable, NULL, OR_ALL, "Enable or disable logging for redirectionio"),
45+
AP_INIT_TAKE1("redirectionioScheme", redirectionio_set_scheme, NULL, OR_ALL, "Force scheme to use when matching request"),
46+
AP_INIT_TAKE1("redirectionioRuleIdsHeader", redirectionio_set_show_rule_ids, NULL, OR_ALL, "Show rule ids used on response header"),
5247
{ NULL }
5348
};
5449

@@ -509,11 +504,13 @@ static void *create_redirectionio_dir_conf(apr_pool_t *pool, char *context) {
509504
config->enable = -1;
510505
config->enable_logs = -1;
511506
config->project_key = NULL;
507+
config->scheme = NULL;
512508
config->protocol = TCP;
513509
config->port = 10301;
514510
config->server = "127.0.0.1";
515511
config->pass_set = -1;
516512
config->pool = pool;
513+
config->show_rule_ids = -1;
517514
}
518515

519516
return config;
@@ -537,12 +534,24 @@ static void *merge_redirectionio_dir_conf(apr_pool_t *pool, void *parent, void *
537534
conf->enable_logs = conf_current->enable_logs;
538535
}
539536

537+
if (conf_current->show_rule_ids == -1) {
538+
conf->show_rule_ids = conf_parent->show_rule_ids;
539+
} else {
540+
conf->show_rule_ids = conf_current->show_rule_ids;
541+
}
542+
540543
if (conf_current->project_key == NULL) {
541544
conf->project_key = conf_parent->project_key;
542545
} else {
543546
conf->project_key = conf_current->project_key;
544547
}
545548

549+
if (conf_current->scheme == NULL) {
550+
conf->scheme = conf_parent->scheme;
551+
} else {
552+
conf->scheme = conf_current->scheme;
553+
}
554+
546555
if (conf_current->pass_set == -1) {
547556
conf->port = conf_parent->port;
548557
conf->protocol = conf_parent->protocol;
@@ -621,6 +630,10 @@ static const char *redirectionio_set_enable(cmd_parms *cmd, void *cfg, const cha
621630
if (conf->enable_logs == -1) {
622631
conf->enable_logs = 1;
623632
}
633+
634+
if (conf->show_rule_ids == -1) {
635+
conf->show_rule_ids = 0;
636+
}
624637
} else {
625638
conf->enable = 0;
626639
}
@@ -647,6 +660,16 @@ static const char *redirectionio_set_project_key(cmd_parms *cmd, void *cfg, cons
647660
return NULL;
648661
}
649662

663+
static const char *redirectionio_set_scheme(cmd_parms *cmd, void *cfg, const char *arg) {
664+
redirectionio_config *conf = (redirectionio_config*)cfg;
665+
666+
if (conf) {
667+
conf->scheme = arg;
668+
}
669+
670+
return NULL;
671+
}
672+
650673
static const char *redirectionio_set_logs_enable(cmd_parms *cmd, void *cfg, const char *arg) {
651674
redirectionio_config *conf = (redirectionio_config*)cfg;
652675

@@ -661,6 +684,20 @@ static const char *redirectionio_set_logs_enable(cmd_parms *cmd, void *cfg, cons
661684
return NULL;
662685
}
663686

687+
static const char *redirectionio_set_show_rule_ids(cmd_parms *cmd, void *cfg, const char *arg) {
688+
redirectionio_config *conf = (redirectionio_config*)cfg;
689+
690+
if (conf) {
691+
if(!strcasecmp(arg, "on")) {
692+
conf->show_rule_ids = 1;
693+
} else {
694+
conf->show_rule_ids = 0;
695+
}
696+
}
697+
698+
return NULL;
699+
}
700+
664701
static const char *redirectionio_set_pass(cmd_parms *cmd, void *cfg, const char *arg) {
665702
apr_uri_t uri;
666703
redirectionio_config *conf = (redirectionio_config*)cfg;

src/mod_redirectionio.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@
33

44
#include "apr_network_io.h"
55
#include "apr_reslist.h"
6+
#include "httpd.h"
7+
#include "http_config.h"
8+
#include "http_log.h"
9+
#include "http_protocol.h"
10+
#include "http_request.h"
11+
#include "ap_config.h"
12+
#include "apr_network_io.h"
13+
#include "apr_strings.h"
14+
#include "apr_uri.h"
615
#include "redirectionio.h"
716

817
#ifndef APR_UNIX
@@ -34,12 +43,14 @@
3443

3544
typedef struct {
3645
const char* project_key;
46+
const char* scheme;
3747
char* server;
3848
int port;
3949
int protocol;
4050
int enable;
4151
int enable_logs;
4252
int pass_set;
53+
int show_rule_ids;
4354
apr_reslist_t *connection_pool;
4455
apr_pool_t *pool;
4556
} redirectionio_config;
@@ -56,4 +67,6 @@ typedef struct {
5667
struct REDIRECTIONIO_FilterBodyAction *body_filter;
5768
} redirectionio_context;
5869

70+
module AP_MODULE_DECLARE_DATA redirectionio_module;
71+
5972
#endif

src/redirectionio_protocol.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ apr_status_t redirectionio_protocol_match(redirectionio_connection *conn, redire
3636
const apr_array_header_t *tarr = apr_table_elts(r->headers_in);
3737
const apr_table_entry_t *telts = (const apr_table_entry_t*)tarr->elts;
3838
int i;
39+
redirectionio_config *config = (redirectionio_config*) ap_get_module_config(r->per_dir_config, &redirectionio_module);
3940

4041
// Create request header map
4142
for (i = 0; i < tarr->nelts; i++) {
@@ -53,7 +54,12 @@ apr_status_t redirectionio_protocol_match(redirectionio_connection *conn, redire
5354
}
5455

5556
// Create redirection io request
56-
scheme = r->parsed_uri.scheme ? r->parsed_uri.scheme : ap_http_scheme(r);
57+
scheme = config->scheme;
58+
59+
if (scheme == NULL) {
60+
scheme = r->parsed_uri.scheme ? r->parsed_uri.scheme : ap_http_scheme(r);
61+
}
62+
5763
ctx->request = (struct REDIRECTIONIO_Request *)redirectionio_request_create(r->unparsed_uri, r->hostname, scheme, r->method, first_header);
5864

5965
if (ctx->request == NULL) {
@@ -182,6 +188,7 @@ apr_status_t redirectionio_protocol_send_filter_headers(redirectionio_context *c
182188
int i;
183189
char *name_str, *value_str;
184190
struct REDIRECTIONIO_HeaderMap *first_header = NULL, *current_header = NULL;
191+
redirectionio_config *config = (redirectionio_config*) ap_get_module_config(r->per_dir_config, &redirectionio_module);
185192

186193
// Create request header map
187194
for (i = 0; i < tarr->nelts; i++) {
@@ -198,7 +205,7 @@ apr_status_t redirectionio_protocol_send_filter_headers(redirectionio_context *c
198205
first_header = current_header;
199206
}
200207

201-
first_header = (struct REDIRECTIONIO_HeaderMap *)redirectionio_action_header_filter_filter(ctx->action, first_header, r->status);
208+
first_header = (struct REDIRECTIONIO_HeaderMap *)redirectionio_action_header_filter_filter(ctx->action, first_header, r->status, config->show_rule_ids == 1);
202209
ctx->response_headers = first_header;
203210

204211
// Even if error returns success, as it does not affect anything

0 commit comments

Comments
 (0)