/* * * 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.