summaryrefslogtreecommitdiff
path: root/src/mimehooks.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mimehooks.c')
-rw-r--r--src/mimehooks.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/mimehooks.c b/src/mimehooks.c
index 8f1eb9db..5a1f0a9e 100644
--- a/src/mimehooks.c
+++ b/src/mimehooks.c
@@ -33,7 +33,8 @@ void setCommand_FilterHook(iFilterHook *d, const iString *command) {
33 set_String(&d->command, command); 33 set_String(&d->command, command);
34} 34}
35 35
36iBlock *run_FilterHook_(const iFilterHook *d, const iString *mime, const iBlock *body) { 36iBlock *run_FilterHook_(const iFilterHook *d, const iString *mime, const iBlock *body,
37 const iString *requestUrl) {
37 iProcess * proc = new_Process(); 38 iProcess * proc = new_Process();
38 iStringList *args = new_StringList(); 39 iStringList *args = new_StringList();
39 iRangecc seg = iNullRange; 40 iRangecc seg = iNullRange;
@@ -46,6 +47,12 @@ iBlock *run_FilterHook_(const iFilterHook *d, const iString *mime, const iBlock
46 } 47 }
47 setArguments_Process(proc, args); 48 setArguments_Process(proc, args);
48 iRelease(args); 49 iRelease(args);
50 if (!isEmpty_String(requestUrl)) {
51 setEnvironment_Process(
52 proc,
53 newStrings_StringList(
54 collectNewFormat_String("REQUEST_URL=%s", cstr_String(requestUrl)), NULL));
55 }
49 iBlock *output = NULL; 56 iBlock *output = NULL;
50 if (start_Process(proc)) { 57 if (start_Process(proc)) {
51 writeInput_Process(proc, body); 58 writeInput_Process(proc, body);
@@ -92,13 +99,14 @@ iBool willTryFilter_MimeHooks(const iMimeHooks *d, const iString *mime) {
92 return iFalse; 99 return iFalse;
93} 100}
94 101
95iBlock *tryFilter_MimeHooks(const iMimeHooks *d, const iString *mime, const iBlock *body) { 102iBlock *tryFilter_MimeHooks(const iMimeHooks *d, const iString *mime, const iBlock *body,
103 const iString *requestUrl) {
96 iRegExpMatch m; 104 iRegExpMatch m;
97 iConstForEach(PtrArray, i, &d->filters) { 105 iConstForEach(PtrArray, i, &d->filters) {
98 const iFilterHook *xc = i.ptr; 106 const iFilterHook *xc = i.ptr;
99 init_RegExpMatch(&m); 107 init_RegExpMatch(&m);
100 if (matchString_RegExp(xc->mimeRegex, mime, &m)) { 108 if (matchString_RegExp(xc->mimeRegex, mime, &m)) {
101 iBlock *result = run_FilterHook_(xc, mime, body); 109 iBlock *result = run_FilterHook_(xc, mime, body, requestUrl);
102 if (result) { 110 if (result) {
103 return result; 111 return result;
104 } 112 }