smtp_server_extensions.anubis
2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
*
* User: David RENE
* Date: 30/05/2008
* Time: 01:18
* (c) Calexium
*
*/
read tools/basis.anubis
read system/string.anubis
public type SMTP_Extension_verb:
smtp_extension_verb
(
String verb
).
public define SMTP_Extension_verb enhanced_status_codes = smtp_extension_verb("ENHANCEDSTATUSCODES").
public define SMTP_Extension_verb size = smtp_extension_verb("SIZE").
define Bool
has_smtp_extension
(
List(String) lines, //left lines given in ehlo stage
Int length,
String search_ext
)=
if lines is
{
[] then false,
[h . t] then
if sub_string(h, 4, length) is
{
failure then has_smtp_extension(t, length, search_ext),
success(s) then
if insensitive_equal(s, search_ext) then
true
else
has_smtp_extension(t, length, search_ext),
}
}.
public define Bool
has_smtp_extension
(
List(String) lines, //left lines given in ehlo stage
SMTP_Extension_verb search_ext
)=
has_smtp_extension(lines, length(search_ext.verb), search_ext.verb).
define Maybe(String)
get_smtp_extension_value
(
List(String) lines, //left lines given in ehlo stage
Int len,
String search_ext
)=
if lines is
{
[] then failure,
[h . t] then
if sub_string(h, 4, len) is
{
failure then get_smtp_extension_value(t, len, search_ext),
success(s) then
if insensitive_equal(s, search_ext) then
sub_string(h, 5+len, length(h)-(5+len))
else
get_smtp_extension_value(t, len, search_ext),
}
}.
/**
* return the value of wanted smtp extension name
* for "SIZE 10000" it return 10000.
* if the smtp verb doesn't exist, it return failure
*/
public define Maybe(String)
get_smtp_extension_value
(
List(String) lines, //left lines given in ehlo stage
SMTP_Extension_verb search_ext
)=
if has_smtp_extension(lines, length(search_ext.verb), search_ext.verb) then
get_smtp_extension_value(lines, length(search_ext.verb), search_ext.verb)
else
failure.