summaryrefslogtreecommitdiff
path: root/sieve/sv.h
blob: 7ee83314261700c70bc806995471eae8f7d0ee9a (plain)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/* GNU mailutils - a suite of utilities for electronic mail
   Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Library Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU Library General Public License for more details.

   You should have received a copy of the GNU Library General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */

#ifndef SV_H
#define SV_H

#include <mailutils/types.h>

#include "sieve_interface.h"

#include "svfield.h"

#include "sieve.h"

/** sieve context structures

The object relationship diagram is this, with the names in ""
being the argument name when the contexts are provided as
arguments to callback functions.

  sieve_execute_script()  --> sv_msg_ctx_t, "mc"

       |
       |
       V

  sieve_script_t  --->  sv_script_ctx_t, "sc"

       |
       |
       V

  sieve_interp_t  --->  sv_interp_ctx_t, "ic"


*/

typedef struct sv_interp_ctx_t
{
  /* The sieve interpreter for our context. */
  sieve_interp_t *interp;

  /* Callback functions. */
  sv_parse_error_t   parse_error;
  sv_execute_error_t execute_error;
  sv_action_log_t    action_log;

} sv_interp_ctx_t;

typedef struct sv_script_ctx_t
{
  /* The file the script was parsed from. */
  char* file;

  /* The sieve script for our context. */
  sieve_script_t* script;

  /* The sieve interpreter context for our script. */
  sv_interp_ctx_t* ic;

} sv_script_ctx_t;

typedef struct sv_msg_ctx_t
{
  /* The mailutils return code - the real error. */
  int rc;

  /* The field cache. */
  int cache_filled;
  sv_field_cache_t cache;

  sv_script_ctx_t* sc;

  message_t msg;

  /* Ticket for use by mailbox URLs for implicit authentication. */
  ticket_t ticket;

  /* Debug used for debug output. */
  mu_debug_t debug;

  /* Mailer for redirecting messages. */
  mailer_t mailer;

  /* Flags controlling execution of script. */
  int svflags;

  /* The uid of the message, for debug output. */
  size_t uid;
} sv_msg_ctx_t;


/*
  svcb.c: sieve callbacks
*/

int sv_register_callbacks (sieve_interp_t * i);

/*
  sv?.c: sv print wrappers

  These should call print callbacks supplied by the user of the mailutils
  sieve implementation.
*/

extern void sv_printv (sv_interp_ctx_t* ic, int level, const char *fmt, va_list ap);
extern void sv_print (sv_interp_ctx_t* ic, int level, const char* fmt, ...);

/*
  svutil.c: utility functions and mailutil wrapper functions
*/

/* Converts a mailutils errno to the equivalent sieve return code. */

extern int sv_mu_errno_to_rc (int eno);

extern int sv_mu_debug_print (mu_debug_t d, const char *fmt, va_list ap);

extern int sv_mu_mark_deleted (message_t msg, int deleted);

extern int sv_mu_copy_debug_level (const mailbox_t from, mailbox_t to);

#endif

Return to:

Send suggestions and report system problems to the System administrator.