Clacks-Over-HTTP Gateway

Problem this snippet solves:

This iRule implements draft-1 of the Clacks-over-HTTP protocol specification as developed by the Clacks Overhead WG.

This is a partial implementation of the Internet of Roundworld portion of draft-1; it obeys the Accept-Clacks header in requests, but since all clients must accept Plain it ignores any Clacks-Encoding headers. Additionally, it is client-side only.

Communication with Discworld is not yet implemented, as current releases of iRules do not include a computational demonology extension. Instead, a fixed list of overhead values is included. By default this is the names of Terry Pratchett and John Dearheart, coded to remain in the Clacks overhead forever (GNU).

Posted in memory of Sir Terry Pratchett, OBE.

This IS an April 1 submission and should be taken with the implied grain of salt. That said, the iRule is functional and is a compliant implementation.

How to use this snippet:

Add to any virtual server with an HTTP profile.

Header values can be modified by changing static::clacks. The format is as follows:

set static::clacks "{message 1} {message 2}"
- each message must be wrapped in braces, then added to the quoted string.

It is recommended that memorial messages start with

GNU
to ensure proper return to the Clacks networks of Discworld via gateway Towers and continued transmission.

Code :

when RULE_INIT {
  # Man's not dead while his name is still spoken.
  set static::clacks "{GNU Terry Pratchett} {GNU John Dearheart}"
}
when CLIENT_ACCEPTED {
  set clacks_enabled 1
}
when HTTP_REQUEST {
  # Per spec, clients can refuse all Clacks responses with an Accept-Clacks header of "no".
  if {[HTTP::header Accept-Clacks] == "no"} {
    set clacks_enabled 0
  }
}
when HTTP_RESPONSE {
  if {$clacks_enabled} {
    foreach clack $static::clacks {
      HTTP::header insert Clacks $clack
    }
  }
}
Updated Jun 06, 2023
Version 2.0

Was this article helpful?

No CommentsBe the first to comment