1
/* Copyright (c) 2002-2009 Dovecot Sieve authors, see the included COPYING file
7
#include "sieve-common.h"
8
#include "sieve-code.h"
10
#include "sieve-ext-variables.h"
12
#include "ext-enotify-common.h"
18
bool mod_encodeurl_modify(string_t *in, string_t **result);
20
const struct sieve_variables_modifier encodeurl_modifier = {
21
SIEVE_OBJECT("encodeurl", &encodeurl_operand, 0),
30
static const struct sieve_extension_objects ext_enotify_modifiers =
31
SIEVE_VARIABLES_DEFINE_MODIFIER(encodeurl_modifier);
33
const struct sieve_operand encodeurl_operand = {
37
&sieve_variables_modifier_operand_class,
38
&ext_enotify_modifiers
42
* Modifier implementation
45
static const char _uri_reserved_lookup[256] = {
46
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 00
47
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 10
48
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, // 20
49
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, // 30
50
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40
51
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, // 50
52
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60
53
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, // 70
55
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 80
56
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 90
57
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A0
58
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B0
59
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C0
60
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D0
61
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E0
62
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // F0
65
bool mod_encodeurl_modify(string_t *in, string_t **result)
68
const unsigned char *c;
70
*result = t_str_new(2*str_len(in));
73
for ( i = 0; i < str_len(in); i++, c++ ) {
74
if ( _uri_reserved_lookup[*c] ) {
75
str_printfa(*result, "%%%02X", *c);
77
str_append_c(*result, *c);