milter 1.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/envelope.cc DELETED
@@ -1,592 +0,0 @@
1
- /**
2
- *
3
- */
4
- #include <stdlib.h>
5
- #include <assert.h>
6
- #include <node.h>
7
- #include <v8.h>
8
- #include "envelope.h"
9
-
10
- using namespace v8;
11
- using namespace node;
12
-
13
-
14
- Persistent<Function> Envelope::constructor;
15
-
16
-
17
- /**
18
- */
19
- Envelope::Envelope ()
20
- { }
21
-
22
- /**
23
- */
24
- Envelope::~Envelope ()
25
- { }
26
-
27
-
28
- /**
29
- */
30
- void Envelope::Init (Handle<Object> target)
31
- {
32
- Isolate *isolate = Isolate::GetCurrent();
33
- Local<FunctionTemplate> tmpl = FunctionTemplate::New(isolate, New);
34
- tmpl->SetClassName(String::NewFromUtf8(isolate, "Envelope"));
35
- tmpl->InstanceTemplate()->SetInternalFieldCount(2);
36
-
37
- NODE_SET_PROTOTYPE_METHOD(tmpl, "done", Done);
38
- NODE_SET_PROTOTYPE_METHOD(tmpl, "negotiate", Negotiate);
39
-
40
- NODE_SET_PROTOTYPE_METHOD(tmpl, "getsymval", SMFI_GetSymbol);
41
- NODE_SET_PROTOTYPE_METHOD(tmpl, "setsymlist", SMFI_SetSymbolList);
42
-
43
- NODE_SET_PROTOTYPE_METHOD(tmpl, "setreply", SMFI_SetReply);
44
- NODE_SET_PROTOTYPE_METHOD(tmpl, "setmlreply", SMFI_SetMultilineReply);
45
-
46
- NODE_SET_PROTOTYPE_METHOD(tmpl, "progress", SMFI_Progress);
47
- NODE_SET_PROTOTYPE_METHOD(tmpl, "quarantine", SMFI_Quarantine);
48
-
49
- NODE_SET_PROTOTYPE_METHOD(tmpl, "addheader", SMFI_AddHeader);
50
- NODE_SET_PROTOTYPE_METHOD(tmpl, "chgheader", SMFI_ChangeHeader);
51
- NODE_SET_PROTOTYPE_METHOD(tmpl, "insheader", SMFI_InsertHeader);
52
- NODE_SET_PROTOTYPE_METHOD(tmpl, "replacebody", SMFI_ReplaceBody);
53
- NODE_SET_PROTOTYPE_METHOD(tmpl, "addrcpt", SMFI_AddRecipient);
54
- NODE_SET_PROTOTYPE_METHOD(tmpl, "addrcpt_par", SMFI_AddRecipientExtended);
55
- NODE_SET_PROTOTYPE_METHOD(tmpl, "delrcpt", SMFI_DelRecipient);
56
- NODE_SET_PROTOTYPE_METHOD(tmpl, "chgfrom", SMFI_ChangeFrom);
57
-
58
- constructor.Reset(isolate, tmpl->GetFunction());
59
- }
60
-
61
-
62
- /**
63
- */
64
- Local<Object> Envelope::NewInstance (Isolate *isolate, HandleScope &scope)
65
- {
66
- Handle<Value> argv[0] = { };
67
- Local<Function> cons = Local<Function>::New(isolate, constructor);
68
- Local<Object> envelope = cons->NewInstance(0, argv);
69
- envelope->Set(String::NewFromUtf8(isolate, "local", String::kInternalizedString), Object::New(isolate));
70
- //envelope->Ref();
71
- return envelope;
72
- }
73
-
74
-
75
- /**
76
- */
77
- void Envelope::New (const FunctionCallbackInfo<Value> &args)
78
- {
79
- Isolate *isolate = Isolate::GetCurrent();
80
- HandleScope scope (isolate);
81
-
82
- if (args.IsConstructCall())
83
- {
84
- Envelope *envelope = new Envelope;
85
- envelope->Wrap(args.This());
86
- args.GetReturnValue().Set(args.This());
87
- }
88
- else
89
- {
90
- const unsigned int argc = 0;
91
- Local<Value> argv[argc] = { };
92
- Local<Function> cons = Local<Function>::New(isolate, constructor);
93
- args.GetReturnValue().Set(cons->NewInstance(argc, argv));
94
- }
95
- }
96
-
97
-
98
- /**
99
- */
100
- void Envelope::SetCurrentEvent (MilterEvent *event)
101
- {
102
- assert (event != NULL);
103
- this->current_event = event;
104
- }
105
-
106
- /**
107
- */
108
- void Envelope::SetMilterContext (SMFICTX *context)
109
- {
110
- assert (context != NULL);
111
- this->smfi_context = context;
112
- }
113
-
114
-
115
-
116
- /**
117
- */
118
- void Envelope::Done (const FunctionCallbackInfo<Value> &args)
119
- {
120
- Isolate *isolate = Isolate::GetCurrent();
121
- HandleScope scope (isolate);
122
- Envelope *envelope = ObjectWrap::Unwrap<Envelope>(args.Holder());
123
-
124
- if (NULL == envelope)
125
- {
126
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Done unwrap failed")));
127
- return;
128
- }
129
- MilterEvent *event = envelope->current_event;
130
- if (NULL == event)
131
- {
132
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope done method called outside event context")));
133
- return;
134
- }
135
-
136
- if (args.Length() < 1)
137
- {
138
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Wrong number of arguments")));
139
- return;
140
- }
141
-
142
- if (!args[0]->IsNumber())
143
- {
144
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "First argument: expected number")));
145
- return;
146
- }
147
-
148
- event->Done(isolate, args[0]->ToNumber()->IntegerValue());
149
- }
150
-
151
-
152
- /**
153
- */
154
- void Envelope::Negotiate (const FunctionCallbackInfo<Value> &args)
155
- {
156
- Isolate *isolate = Isolate::GetCurrent();
157
- HandleScope scope (isolate);
158
- Envelope *envelope = ObjectWrap::Unwrap<Envelope>(args.Holder());
159
-
160
- if (NULL == envelope)
161
- {
162
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Negotiate unwrap failed")));
163
- return;
164
- }
165
- MilterEvent *event = envelope->current_event;
166
-
167
- if (NULL == event || !event->IsNegotiate())
168
- {
169
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope negotiate method called outside event context")));
170
- return;
171
- }
172
-
173
-
174
- if (args.Length() < 4)
175
- {
176
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Wrong number of arguments")));
177
- return;
178
- }
179
-
180
- for (int i = 0; i < 4; i++)
181
- if (!args[i]->IsNumber())
182
- {
183
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Invalid argument: expected number")));
184
- return;
185
- }
186
-
187
- unsigned long f0 = args[0]->ToNumber()->Uint32Value();
188
- unsigned long f1 = args[1]->ToNumber()->Uint32Value();
189
- unsigned long f2 = args[2]->ToNumber()->Uint32Value();
190
- unsigned long f3 = args[3]->ToNumber()->Uint32Value();
191
-
192
- MilterNegotiate *ev = (MilterNegotiate *)event;
193
- ev->Negotiate(f0, f1, f2, f3);
194
- }
195
-
196
-
197
- /**
198
- */
199
- void Envelope::SMFI_GetSymbol (const FunctionCallbackInfo<Value> &args)
200
- {
201
- Isolate *isolate = Isolate::GetCurrent();
202
- HandleScope scope (isolate);
203
- Envelope *envelope = ObjectWrap::Unwrap<Envelope>(args.Holder());
204
-
205
- if (NULL == envelope)
206
- {
207
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "SMFI_GetSymbol unwrap failed")));
208
- return;
209
- }
210
-
211
- Local<String> symname = args[0]->ToString();
212
- char *c_symname = new char[symname->Utf8Length()+1];
213
- symname->WriteUtf8(c_symname);
214
-
215
- char *c_symval = smfi_getsymval(envelope->smfi_context, c_symname);
216
- delete [] c_symname;
217
-
218
- args.GetReturnValue().Set(String::NewFromUtf8(isolate, c_symval ? c_symval : ""));
219
-
220
- // TODO: either segfault or memory leak here, probably
221
- if (c_symval)
222
- free(c_symval);
223
- }
224
-
225
-
226
- /**
227
- */
228
- void Envelope::SMFI_SetSymbolList (const FunctionCallbackInfo<Value> &args)
229
- {
230
- Isolate *isolate = Isolate::GetCurrent();
231
- HandleScope scope (isolate);
232
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Not yet implemented")));
233
-
234
- // TODO: smfi_setsymlist
235
- }
236
-
237
-
238
- /**
239
- */
240
- void Envelope::SMFI_SetReply (const FunctionCallbackInfo<Value> &args)
241
- {
242
- Isolate *isolate = Isolate::GetCurrent();
243
- HandleScope scope (isolate);
244
- Envelope *envelope = ObjectWrap::Unwrap<Envelope>(args.Holder());
245
-
246
- if (NULL == envelope)
247
- {
248
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "SMFI_SetReply unwrap failed")));
249
- return;
250
- }
251
- MilterEvent *event = envelope->current_event;
252
- if (NULL == event)
253
- {
254
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope method called out of event context")));
255
- return;
256
- }
257
- if (event->IsNegotiate() /*|| event->IsConnect()*/)
258
- {
259
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope method called from prohibited event context")));
260
- return;
261
- }
262
-
263
-
264
- if (args.Length() < 1)
265
- {
266
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Wrong number of arguments")));
267
- return;
268
- }
269
-
270
- if (!args[0]->IsString() && !args[0]->IsNumber())
271
- {
272
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "First argument: expected number or string")));
273
- return;
274
- }
275
-
276
- if (args.Length() > 1)
277
- {
278
- if (!args[1]->IsString() && !args[1]->IsNull() && !args[1]->IsUndefined())
279
- {
280
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Second argument: expected string, null, or undefined")));
281
- return;
282
- }
283
- if (args.Length() > 2)
284
- {
285
- if (!args[2]->IsString() && !args[2]->IsNull() && !args[1]->IsUndefined())
286
- {
287
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Third argument: expected string, null, or undefined")));
288
- return;
289
- }
290
- }
291
- }
292
-
293
- Local<String> rcode = args[0]->ToString();
294
- char *c_rcode = new char[rcode->Utf8Length()+1];
295
- rcode->WriteUtf8(c_rcode);
296
-
297
- char *c_xcode = NULL;
298
- char *c_message = NULL;
299
-
300
- if (args.Length() > 1 && args[1]->IsString())
301
- {
302
- Local<String> xcode = args[1]->ToString();
303
- c_xcode = new char[xcode->Utf8Length()+1];
304
- xcode->WriteUtf8(c_xcode);
305
- }
306
-
307
- if (args.Length() > 2 && args[2]->IsString())
308
- {
309
- Local<String> message = args[2]->ToString();
310
- c_message = new char[message->Utf8Length()+1];
311
- message->WriteUtf8(c_message);
312
- }
313
-
314
- int r = smfi_setreply(envelope->smfi_context, c_rcode, c_xcode, c_message);
315
-
316
- delete [] c_rcode;
317
- if (c_xcode)
318
- delete [] c_xcode;
319
- if (c_message)
320
- delete [] c_message;
321
-
322
- args.GetReturnValue().Set(Number::New(isolate, r));
323
- }
324
-
325
-
326
- /**
327
- */
328
- void Envelope::SMFI_SetMultilineReply (const FunctionCallbackInfo<Value> &args)
329
- {
330
- Isolate *isolate = Isolate::GetCurrent();
331
- HandleScope scope (isolate);
332
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Not yet implemented")));
333
-
334
- // TODO: implement with variable arguments somehow. smfi_setmlreply(rcode,xcode,vaargs)
335
- }
336
-
337
-
338
- /**
339
- */
340
- void Envelope::SMFI_Progress (const FunctionCallbackInfo<Value> &args)
341
- {
342
- Isolate *isolate = Isolate::GetCurrent();
343
- HandleScope scope (isolate);
344
- Envelope *envelope = ObjectWrap::Unwrap<Envelope>(args.Holder());
345
-
346
- if (NULL == envelope)
347
- {
348
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "SMFI_Progress unwrap failed")));
349
- return;
350
- }
351
- MilterEvent *event = envelope->current_event;
352
- if (NULL == event)
353
- {
354
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope method called outside event context")));
355
- return;
356
- }
357
-
358
- if (!event->IsEndMessage())
359
- {
360
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope method called from prohibited event context")));
361
- return;
362
- }
363
- int r = smfi_progress(envelope->smfi_context);
364
- args.GetReturnValue().Set(Number::New(isolate, r));
365
- }
366
-
367
-
368
- /**
369
- */
370
- void Envelope::SMFI_AddHeader (const FunctionCallbackInfo<Value> &args)
371
- {
372
- Isolate *isolate = Isolate::GetCurrent();
373
- HandleScope scope (isolate);
374
- Envelope *envelope = ObjectWrap::Unwrap<Envelope>(args.Holder());
375
-
376
- if (NULL == envelope)
377
- {
378
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "SMFI_AddHeader unwrap failed")));
379
- return;
380
- }
381
- MilterEvent *event = envelope->current_event;
382
- if (NULL == event)
383
- {
384
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope method called outside event context")));
385
- return;
386
- }
387
- if (!event->IsEndMessage())
388
- {
389
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope method called from prohibited event context")));
390
- return;
391
- }
392
-
393
- if (args.Length() < 2)
394
- {
395
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Wrong number of arguments")));
396
- return;
397
- }
398
-
399
- if (!args[0]->IsString())
400
- {
401
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "First argument: expected string")));
402
- return;
403
- }
404
-
405
- if (!args[1]->IsString())
406
- {
407
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Second argument: expected string")));
408
- return;
409
- }
410
-
411
- Local<String> headerf = args[0]->ToString();
412
- Local<String> headerv = args[1]->ToString();
413
- char *c_name = new char[headerf->Utf8Length()+1];
414
- char *c_value = new char[headerv->Utf8Length()+1];
415
-
416
- headerf->WriteUtf8(c_name);
417
- headerv->WriteUtf8(c_value);
418
-
419
- int r = smfi_addheader(envelope->smfi_context, c_name, c_value);
420
-
421
- delete [] c_name;
422
- delete [] c_value;
423
-
424
- args.GetReturnValue().Set(Number::New(isolate, r));
425
- }
426
-
427
-
428
- /**
429
- */
430
- void Envelope::SMFI_ChangeHeader (const FunctionCallbackInfo<Value> &args)
431
- {
432
- // TODO: smfi_chgheader(envelope->smfi_context, name, index, value)
433
- }
434
-
435
-
436
- /**
437
- */
438
- void Envelope::SMFI_InsertHeader (const FunctionCallbackInfo<Value> &args)
439
- {
440
- // TODO: smfi_insheader(envelope->smfi_context, index, name, value)
441
- }
442
-
443
-
444
- /**
445
- * who would ever do this? implement later when actually needed
446
- */
447
- void Envelope::SMFI_ReplaceBody (const FunctionCallbackInfo<Value> &args)
448
- {
449
- // TODO: smfi_replacebody
450
- }
451
-
452
-
453
- /**
454
- */
455
- void Envelope::SMFI_AddRecipient (const FunctionCallbackInfo<Value> &args)
456
- {
457
- // TODO: smfi_addrcpt
458
- }
459
-
460
-
461
- /**
462
- */
463
- void Envelope::SMFI_AddRecipientExtended (const FunctionCallbackInfo<Value> &args)
464
- {
465
- // TODO: smfi_addrcpt_par
466
- }
467
-
468
-
469
- /**
470
- */
471
- void Envelope::SMFI_DelRecipient (const FunctionCallbackInfo<Value> &args)
472
- {
473
- // TODO: smfi_delrcpt
474
- }
475
-
476
-
477
- /**
478
- */
479
- void Envelope::SMFI_Quarantine (const FunctionCallbackInfo<Value> &args)
480
- {
481
- Isolate *isolate = Isolate::GetCurrent();
482
- HandleScope scope (isolate);
483
- Envelope *envelope = ObjectWrap::Unwrap<Envelope>(args.Holder());
484
-
485
- if (NULL == envelope)
486
- {
487
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "SMFI_Quarantine unwrap failed")));
488
- return;
489
- }
490
- MilterEvent *event = envelope->current_event;
491
- if (NULL == event)
492
- {
493
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope method called outside event context")));
494
- return;
495
- }
496
- if (!event->IsEndMessage())
497
- {
498
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Envelope method called from prohibited event context")));
499
- return;
500
- }
501
-
502
-
503
- if (args.Length() < 1)
504
- {
505
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Wrong number of arguments")));
506
- return;
507
- }
508
- if (!args[0]->IsString())
509
- {
510
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "First argument: expected string")));
511
- return;
512
- }
513
-
514
- Local<String> reason = args[0]->ToString();
515
- size_t len = reason->Utf8Length();
516
- if (len < 1)
517
- {
518
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "First argument: expected non-empty string")));
519
- return;
520
- }
521
-
522
- char *c_reason = new char[len+1];
523
- reason->WriteUtf8(c_reason);
524
- int r = smfi_quarantine(envelope->smfi_context, c_reason);
525
- delete [] c_reason;
526
-
527
- args.GetReturnValue().Set(Number::New(isolate, r));
528
- }
529
-
530
-
531
- /**
532
- */
533
- void Envelope::SMFI_ChangeFrom (const FunctionCallbackInfo<Value> &args)
534
- {
535
- Isolate *isolate = Isolate::GetCurrent();
536
- HandleScope scope (isolate);
537
- Envelope *envelope = ObjectWrap::Unwrap<Envelope>(args.Holder());
538
-
539
- if (NULL == envelope)
540
- {
541
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "SMFI_ChangeFrom unwrap failed")));
542
- return;
543
- }
544
- MilterEvent *event = envelope->current_event;
545
- if (NULL == event)
546
- {
547
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope method called outside event context")));
548
- return;
549
- }
550
- if (!event->IsEndMessage())
551
- {
552
- isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, "Envelope method called from prohibited event context")));
553
- return;
554
- }
555
-
556
- if (args.Length() < 1)
557
- {
558
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Wrong number of arguments")));
559
- return;
560
- }
561
-
562
- if (!args[0]->IsString())
563
- {
564
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "First argument: expected string")));
565
- return;
566
- }
567
- if (args.Length() > 1 && !args[1]->IsString())
568
- {
569
- isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Second argument: expected string")));
570
- return;
571
- }
572
-
573
-
574
- Local<String> address = args[0]->ToString();
575
- char *c_address = new char[address->Utf8Length()+1];
576
- char *c_esmtp_args = NULL;
577
- address->WriteUtf8(c_address);
578
- if (args.Length() > 1)
579
- {
580
- Local<String> esmtp_args = args[1]->ToString();
581
- c_esmtp_args = new char[esmtp_args->Utf8Length()+1];
582
- esmtp_args->WriteUtf8(c_esmtp_args);
583
- }
584
-
585
- int r = smfi_chgfrom(envelope->smfi_context, c_address, c_esmtp_args);
586
-
587
- delete [] c_address;
588
- if (c_esmtp_args)
589
- delete [] c_esmtp_args;
590
-
591
- args.GetReturnValue().Set(Number::New(isolate, r));
592
- }
package/src/envelope.h DELETED
@@ -1,92 +0,0 @@
1
- /**
2
- * mail session envelope
3
- *
4
- */
5
-
6
- #ifndef MILTER_ENVELOPE_H
7
- #define MILTER_ENVELOPE_H
8
-
9
- #include <node.h>
10
- #include <node_object_wrap.h>
11
- #include <v8.h>
12
- #include "libmilter/mfapi.h"
13
- #include "events.h"
14
-
15
- using namespace v8;
16
- using namespace node;
17
-
18
-
19
- /**
20
- */
21
- class Envelope : public ObjectWrap
22
- {
23
- public:
24
- static void Init (Handle<Object> target);
25
-
26
- static Local<Object> NewInstance (Isolate *isolate, HandleScope &scope);
27
-
28
- void SetCurrentEvent (MilterEvent *event);
29
- void SetMilterContext (SMFICTX *context);
30
-
31
- private:
32
- explicit Envelope ();
33
- ~Envelope ();
34
-
35
- static Persistent<Function> constructor;
36
-
37
- static void New (const FunctionCallbackInfo<Value> &args);
38
-
39
- /**
40
- * the completion callback provided to each event callback, via the latter's
41
- * first argument. all js funcs have the signature:
42
- * function eventname (envelope, ...)
43
- *
44
- * and all of them continue a libmilter thread by calling
45
- * envelope.done(retval);
46
- *
47
- * where retval is an SMFIS_* filter status code.
48
- */
49
- static void Done (const FunctionCallbackInfo<Value> &args);
50
-
51
- /**
52
- * during negotiate, just before continuation, the implementor needs to let
53
- * us know what to store in the pointers to config values f0-f3.
54
- */
55
- static void Negotiate (const FunctionCallbackInfo<Value> &args);
56
-
57
- /**
58
- * allowed whenever.
59
- */
60
- static void SMFI_GetSymbol (const FunctionCallbackInfo<Value> &args);
61
-
62
- /**
63
- * allowed during negotiate.
64
- */
65
- static void SMFI_SetSymbolList (const FunctionCallbackInfo<Value> &args);
66
-
67
- /**
68
- * allowed in events other than connect (and negotiate, i suspect.)
69
- */
70
- static void SMFI_SetReply (const FunctionCallbackInfo<Value> &args);
71
- static void SMFI_SetMultilineReply (const FunctionCallbackInfo<Value> &args);
72
-
73
- /**
74
- * these modifiers are allowed during EOM.
75
- */
76
- static void SMFI_Progress (const FunctionCallbackInfo<Value> &args);
77
- static void SMFI_Quarantine (const FunctionCallbackInfo<Value> &args);
78
-
79
- static void SMFI_AddHeader (const FunctionCallbackInfo<Value> &args);
80
- static void SMFI_ChangeHeader (const FunctionCallbackInfo<Value> &args);
81
- static void SMFI_InsertHeader (const FunctionCallbackInfo<Value> &args);
82
- static void SMFI_ReplaceBody (const FunctionCallbackInfo<Value> &args);
83
- static void SMFI_AddRecipient (const FunctionCallbackInfo<Value> &args);
84
- static void SMFI_AddRecipientExtended (const FunctionCallbackInfo<Value> &args);
85
- static void SMFI_DelRecipient (const FunctionCallbackInfo<Value> &args);
86
- static void SMFI_ChangeFrom (const FunctionCallbackInfo<Value> &args);
87
-
88
- MilterEvent *current_event;
89
- SMFICTX *smfi_context;
90
- };
91
-
92
- #endif