Cyrus::Annotator::Daemon - framework for writing annotator daemons
    for Cyrus
  use warnings;
  use strict;
  package MyAnnotatorDaemon;
  use Cyrus::Annotator::Daemon;
  our @ISA = qw(Cyrus::Annotator::Daemon);
  sub annotate_message
  {
      my ($self, $message) = @_;
      $message->set_flag('\Flagged');
      $message->set_shared_annotation('/comment', 'Hello!!');
  }
  MyAnnotatorDaemon->run();
This module provides a framework for writing daemons which can be
    used to add annotations or flags to messages which are delivered into the
    Cyrus mail server.
To use Cyrus::Annotator::Daemon, write a Perl script which creates
    an object derived from it; see the Synopsis above. Run this script as root,
    and it will daemonize itself. Then add this line to the imapd.conf file
  annotation_callout: /var/run/annotatord.socket
and restart Cyrus.
Cyrus::Annotator::Daemon has the following methods.
  - run(...options...)
- This class method can be used to create an instance of
      Cyrus::Annotator::Daemon and to run it's main loop. Note that
      Cyrus::Annotator::Daemon derives from Net::Server, and any of that
      module's options can be used.
    For example:   MyAnnotatorDaemon->run(personality => 'Fork');
    Cyrus::Annotator::Daemon changes some of the Net::Server
        defaults, including: 
  - Logging is to syslog using facility local6.
- The network socket is a SOCK_STREAM UNIX domain socket bound to
      /var/run/annotatord.socket.
- A PID file is written to /var/run/annotatord.pid.
- The daemon runs in the background, as user cyrus and group
      mail.
 
  - annotate_message($message)
- You need to provide a method of this name. It will be called whenever
      Cyrus notifies the annotator daemon that a new message is available, and
      may set or clear any flags (system or user flags) or annotations. Note
      that to set any annotations which aren't builtin to Cyrus, you will first
      need to configure them using annotation_definitions option in the
      imapd.conf file.
    The $message object is a
        Cyrus::Annotator::Message which can be examined, and on which flags and
        annotations can be set. 
Net::Server, imapd.conf(5), RFC3501,
    RFC5257.
Greg Banks <gnb@fastmail.fm>.