|The scripting language is documented in the HSL reference manual.|
The language itself implements a set of standard library functions. In addition to that, there are contexts (or extensions) that are implemented by the different daemon processes; most importantly the e-mail oriented flows that maps to SMTP commands; CONNECT, AUTH (SASL), MAIL FROM, RCPT TO, DATA and queue processing pre and post- delivery, but also the API and IP firewall context (used to control access to HTTP, SNMP, SSH and FTP - not SMTP, for that use the CONNECT context). The contexts define additional functions, as well as pre-defined variables.
Although the syntax and function names in HSL are very much similar to PHP, Python, Perl and C, it's important to remember that HSL is a completely different language. There are syntax differences, and the performance characteristics of different coding styles are not comparable between these languages.
Functions and contexts
Standard library functions are recognized by their lowercase names, and can be used in any context. Most functions are indeed standard library functions, for re-usability. The other (context) functions, such as Reject($msg) (giving a 500 SMTP error), have capitalized names.
Below is a table relating functions and SMTP commands to HSL contexts
|Standard library||all processes||Shared among all contexts|
|CONNECT||smtpd||Handling IP packets, like a scripted firewall|
|AUTH||smtpd||Handling SMTP AUTH (SASL) requests|
|MAIL FROM||smtpd||Handling the SMTP MAIL FROM commands|
|RCPT TO||smtpd||Handling the SMTP RCPT TO commands|
|DATA||smtpd||Handling the SMTP DATA command; in other words "the mail message"|
|Pre-delivery||mailqueued||Decides what is to be done before a delivery is attempted|
|Post-delivery||mailqueued||Decides what is to be done when a delivery attempt is done|
|API authentication||backend||Handling administration (SOAP API) sign-ins, suitable for RADIUS/TACACS+ integration|
|IP Firewall||(http, snmp, ssh, ftp)||Firewall processing for services (not SMTP related)|