summaryrefslogtreecommitdiff
path: root/plugins/LotusNotify/src/cnotesapi/include/extmgr.h
blob: dee76c8b650a181384b41aba0c9266c50a7c8d94 (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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492

#if defined(OS400) && (__OS400_TGTVRM__ >= 510)
#pragma datamodel(P128)
#endif

/*********************************************************************/
/*                                                                   */
/* Licensed Materials - Property of IBM                              */
/*                                                                   */
/* L-GHUS-5VMPGW, L-GHUS-5S3PEE                                      */
/* (C) Copyright IBM Corp. 1995, 2005  All Rights Reserved           */
/*                                                                   */
/* US Government Users Restricted Rights - Use, duplication or       */
/* disclosure restricted by GSA ADP Schedule Contract with           */
/* IBM Corp.                                                         */
/*                                                                   */
/*********************************************************************/



/* Extension Manager for Notes */

#ifndef EXMGR_DEFS
#define EXMGR_DEFS

#ifndef NSF_DATA_DEFS
#include "nsfdata.h"					/* We need DBHANDLE */
#endif

#ifndef NIF_DEFS
#include "nif.h"						/* We need HCOLLECTION */
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* Extension identifier */

typedef WORD EID;

/* handle passed back to identify registration */

typedef DWORD HEMREGISTRATION;

/* extension record; this data structure is passed to the callback routine */

typedef struct
	{
	EID			EId;					/* identifier */
	WORD		NotificationType;		/* EM_BEFORE or EM_AFTER */
	STATUS		Status;					/* core error code */
	VARARG_PTR	Ap;						/* ptr to args */
	} EMRECORD; 

/* the callback; takes one argument */

typedef STATUS (LNCALLBACKPTR EMHANDLER)(EMRECORD far *);

/*	Constants used in NotificationType */

#define EM_BEFORE	0
#define EM_AFTER	1

/*	Flags which can be passed to EMRegister */

#define EM_REG_BEFORE		0x0001
#define EM_REG_AFTER		0x0002

/* prototypes */

STATUS LNPUBLIC	EMRegister(EID EmID, DWORD Flags, EMHANDLER Proc, WORD RecursionID, HEMREGISTRATION far *rethRegistration);
STATUS LNPUBLIC	EMDeregister(HEMREGISTRATION hRegistration);
STATUS LNPUBLIC	EMCreateRecursionID(WORD far *retRecursionID);


#define EM_NSFDBCLOSESESSION				1
#define EM_NSFDBCLOSE						2
#define EM_NSFDBCREATE						3
#define EM_NSFDBDELETE						4
#define EM_NSFNOTEOPEN						5
#define EM_NSFNOTECLOSE						6
#define EM_NSFNOTECREATE					7
#define EM_NSFNOTEDELETE					8
#define EM_NSFNOTEOPENBYUNID				10
#define EM_FTGETLASTINDEXTIME				11
#define EM_FTINDEX							12
#define EM_FTSEARCH							13
#define EM_NIFFINDBYKEY						14
#define EM_NIFFINDBYNAME					15
#define EM_NIFOPENNOTE						17
#define EM_NIFREADENTRIES					18
#define EM_NIFUPDATECOLLECTION				20
#define EM_NSFDBALLOCOBJECT					22
#define EM_NSFDBCOMPACT						23
#define EM_NSFDBDELETENOTES					24
#define EM_NSFDBFREEOBJECT					25
#define EM_NSFDBGETMODIFIEDNOTETABLE		26
#define EM_NSFDBGETNOTEINFO					29
#define EM_NSFDBGETNOTEINFOBYUNID			30
#define EM_NSFDBGETOBJECTSIZE				31
#define EM_NSFDBGETSPECIALNOTEID			32
#define EM_NSFDBINFOGET						33
#define EM_NSFDBINFOSET						34
#define EM_NSFDBLOCATEBYREPLICAID			35
#define EM_NSFDBMODIFIEDTIME				36
#define EM_NSFDBREADOBJECT					37
#define EM_NSFDBREALLOCOBJECT				39
#define EM_NSFDBREPLICAINFOGET				40
#define EM_NSFDBREPLICAINFOSET				41
#define EM_NSFDBSPACEUSAGE					42
#define EM_NSFDBSTAMPNOTES					43
#define EM_NSFDBWRITEOBJECT					45
#define EM_NSFNOTEUPDATE					47
#define EM_NIFOPENCOLLECTION				50
#define EM_NIFCLOSECOLLECTION				51
#define EM_NSFDBGETBUILDVERSION				52
#define EM_NSFDBRENAME						54
#define EM_NSFDBITEMDEFTABLE				56
#define EM_NSFDBREOPEN						59
#define EM_NSFDBOPENEXTENDED				63	
#define EM_NSFNOTEOPENEXTENDED				64
#define EM_TERMINATENSF						69
#define EM_NSFNOTEDECRYPT					70
#define EM_GETPASSWORD						73
#define EM_SETPASSWORD						74
#define EM_NSFCONFLICTHANDLER				75	
#define EM_MAILSENDNOTE						83
#define EM_CLEARPASSWORD					90
#define EM_NSFNOTEUPDATEXTENDED				102
#define EM_SCHFREETIMESEARCH				105
#define EM_SCHRETRIEVE						106
#define EM_SCHSRVRETRIEVE					107
#define EM_NSFDBCOMPACTEXTENDED				121
#define EM_ADMINPPROCESSREQUEST				124
#define EM_NIFGETCOLLECTIONDATA				126
#define EM_NSFDBCOPYNOTE					127
#define EM_NSFNOTECOPY						128
#define EM_NSFNOTEATTACHFILE				129
#define EM_NSFNOTEDETACHFILE				130
#define EM_NSFNOTEEXTRACTFILE				131
#define EM_NSFNOTEATTACHOLE2OBJECT			132
#define EM_NSFNOTEDELETEOLE2OBJECT			133
#define EM_NSFNOTEEXTRACTOLE2OBJECT			134
#define EM_NSGETSERVERLIST					135
#define EM_NSFDBCOPY						136
#define EM_NSFDBCREATEANDCOPY				137
#define EM_NSFDBCOPYACL						138
#define EM_NSFDBCOPYTEMPLATEACL				139
#define EM_NSFDBCREATEACLFROMTEMPLATE		140
#define EM_NSFDBREADACL						141
#define EM_NSFDBSTOREACL					142
#define EM_NSFDBFILTER						143
#define EM_FTDELETEINDEX					144
#define EM_NSFNOTEGETINFO					145
#define EM_NSFNOTESETINFO					146
#define EM_NSFNOTECOMPUTEWITHFORM			147
#define EM_NIFFINDDESIGNNOTE				148
#define EM_NIFFINDPRIVATEDESIGNNOTE			149
#define EM_NIFGETLASTMODIFIEDTIME			150
#define EM_FTSEARCHEXT						160
#define EM_NAMELOOKUP						161
#define EM_NSFNOTEUPDATEMAILBOX				164
#define EM_NIFFINDDESIGNNOTEEXT         167
#define EM_AGENTOPEN                    170
#define EM_AGENTRUN                     171
#define EM_AGENTCLOSE                   172
#define EM_AGENTISENABLED               173
#define EM_AGENTCREATERUNCONTEXT        175
#define EM_AGENTDESTROYRUNCONTEXT       176
#define EM_AGENTSETDOCUMENTCONTEXT      177
#define EM_AGENTSETTIMEEXECUTIONLIMIT   178
#define EM_AGENTQUERYSTDOUTBUFFER       179
#define EM_AGENTREDIRECTSTDOUT          180
#define EM_SECAUTHENTICATION				184
#define EM_NAMELOOKUP2						185
#define EM_NSFDBHASPROFILENOTECHANGED		198
#define EM_NSFMARKREAD						208
#define EM_NSFADDTOFOLDER					209
#define	EM_NSFDBSPACEUSAGESCALED			210		/* V6 */
#define EM_NSFDBGETMAJMINVERSION			222		/* V5.09 */
#define EM_ROUTERJOURNALMESSAGE				223     /* V6 */

/* V6 SMTP hooks */
#define EM_SMTPCONNECT					224		
#define EM_SMTPCOMMAND					225
#define EM_SMTPMESSAGEACCEPT				226
#define EM_SMTPDISCONNECT				227
#define	EM_NSFARCHIVECOPYNOTES				228
#define	EM_NSFARCHIVEDELETENOTES		 	229
#define EM_NSFNOTEEXTRACTWITHCALLBACK		235
#define EM_NSFDBSTAMPNOTESMULTIITEM 		239
#define	EM_MEDIARECOVERY_NOTE				244

/*	These functions are not actually defined (thus their declarations are only
	in comments) but illustrate the arguments for the corresponding extension
	manager callouts.

	EM_ROUTERJOURNALMESSAGE occurs when the router has received a message that has been 
	marked to be journalled.

	STATUS LNPUBLIC JournalMessage(DBHANDLE hMailBoxHandle,
								   NOTEID   NoteID);

	EM_SETPASSWORD occurs when an ID file password is being set, either by
	a user or by administrator action.

	STATUS LNPUBLIC SetPassword (
						DWORD MaxPwdLen,	 Longest password you may supply 
						DWORD far *retLength, Return the length of the password
						char far *retPassword, Return the password here 

						char far *FileName,	 The name of the ID file 
						char far *OwnerName, The name of the owner of the ID file 

						DWORD DataLen,		 The old length of the extra ID info 
						BYTE far *Data,		 The old value of the extra ID info 

						DWORD MaxNewData,	 The max amount of extra ID info you may supply 
						DWORD far *retNewDataLen, Return the length of the new ID info 
						BYTE far *retNewData); Return the new ID info 

	EM_GETPASSWORD occurs when a user is about to be prompted for a password
	to decrypt and ID file.

	STATUS LNPUBLIC GetPassword (
						DWORD MaxPwdLen,	 Longest password you may supply 
						DWORD far *retLength, Return the length of the password here 
						char far *retPassword, Return the password here 

						char far *FileName,	 The name of the ID file 
						char far *OwnerName, The name of the owner of the ID file 

						DWORD DataLen,		 The length of the extra ID info 
						BYTE far *Data);	 The extra ID info 

	EM_CLEARPASSWORD occurs when a password is to be "cleared" either due to
	a timeout or because the user has pressed F5.

	STATUS LNPUBLIC ClearPassword ();


	STATUS LNPUBLIC ConflictHandler ( 
						HANDLE hDb,			Database Handle
						HANDLE hOldNote,	Original Note Handle
						HANDLE hNewNote,	New Note Handle
						DWORD  *pAction);	Conflict Action to take	

			*pAction returns:
				CONFLICT_ACTION_MERGE	- Have Notes try to merge
				CONFLICT_ACTION_HANDLE	- User handled the conflict	
				(zero)					- Proceed with Conflict in normal manner


	EM_ADMINPPROCESSREQUEST occurs prior to and after the Administration Process has
	processed a request on a server.

	STATUS LNPUBLIC ProcessRequest (
						NOTEHANDLE nhRequest, The handle of the Admin Request note 
						NOTEHANDLE nhResponse); The handle of the Admin Log note  


	EM_TERMINATENSF occurs when NSF service terminates for the process.

	void LNPUBLIC TerminateNSF (void *unused_params);


	EM_NSFNOTEUPDATEMAILBOX occurs when a NSFNoteUpdate is performed on 
	any and all mailbox databases (e.g. mail.box).  This is true even if
	multiple mailboxes are enabled in the server configuration document.
	The arguments are identical to those used for EM_NSFNOTEUPDATE.
	

	EM_NIFOPENNOTE opens a note by index position and optionally navigates.
	It is used by the Notes Editor.

	STATUS LNPUBLIC NIFOpenNote (
						HCOLLECTION hCollection,
						COLLECTIONPOSITION far *IndexPos,
						WORD Navigator,
						WORD FallbackNavigator,
						NOTEID NoteID,
						DWORD OpenFlags,
						INDEXSPECIALINFO far *retIndexInfo,
						HANDLE far *rethNote);


	EM_NSFNOTEOPENEXTENDED is a Notes internal, extended form of NSFNoteOpen.

	STATUS LNPUBLIC NSFNoteOpenExtended (
						DBHANDLE hDB,
						NOTEID NoteID,
						DWORD flags, 
						DWORD SinceSeqNum,
						BYTE *pKey,
						HANDLE *rtn);


	EM_MAILSENDNOTE is called when the Mailer sends an open note to recipients
	listed in the note's header items.

	STATUS LNPUBLIC MailSendNote (
						HANDLE			hNote,
						void			*internalViewDesc, 
						WORD			Flags, 
						BOOL			*Modified,
						void			*SendNoteCtx);


	EM_NSFMARKREAD is called when a note is opened by the Notes client and marked READ.
	Note that this does not include other mechanisms that could result in a note being
	marked read, such as being read by the client on another replica.

	STATUS LNPUBLIC NSFMarkRead(
							DBHANDLE	hDB,			- Handle of database containing note being marked
							HANDLE		hNote,			- Handle to note being marked read
							NOTEID		NoteID);		- NoteID of the note being marked read


	EM_NSFADDTOFOLDER is called when a note is being added or removed 
	from a folder.  The IsAddOperation flag should be checked to determine
	if this note is being added or removed from the folder.

	STATUS LNPUBLIC NSFAddToFolder( 
							DBHANDLE	hViewDB,		- Handle of database containing folder
							DBHANDLE	hDataDB,		- Handle of database containing notes being added to folder
							NOTEID		FolderNoteID,	- NoteID of the folder note
							NOTEID		NoteID,			- NoteID of the note being added to (removed from) the folder
							UNID		*NoteUNID,		- UNID of the note being added to (removed from) the folder
							BOOL		IsAddOperation,	- TRUE if note being added to the folder, FALSE if note being removed
							TIMEDATE	*RevisionTime);	- Time of original folder addition (OPTIONAL - may be NULL)

	EM_SMTPCONNECT is called when an inbound SMTP connection has been detected.
	
	The Extension Manager EM_BEFORE notification type for the EM_SMTPCONNECT event occurs when an 
	inbound SMTP connection has been detected and prior to the execution of the internal Domino SMTP 
	restriction controls.  Callback routine can implement their own anti-relay checks and bypass 
	Domino related checks through the use of PossibleRelay BOOL and return status of value NOERROR.  
	Return STATUS other than ERR_EM_CONTINUE or NOERROR sets AccessDenied flag which causes subsequent 
	commands to be rejected.  

	The Extension Manager EM_AFTER notification type for the EM_SMTPCONNECT event occurs after the SMTP 
	listener task has accepted the connection but prior to sending the SMTP greeting to the connecting host.

	STATUS LNPUBLIC SMTPConnect(
							DWORD	SessionID,			- Unique session identifier
							char	*RemoteIP,			- NULL terminated string containing IP address of connecting host
							char	*RemoteHost,		- NULL terminated string containing host name of connecting host if reverse DNS 
														lookup was successful.  If lookup was unsuccessful, the string length will be zero.
							BOOL	&PossibleRelay, 	- Indicator whether connecting host should be treated as possible relay or not
							char	*Greeting,			- Greeting that will be returned to the connecting host
														- Greeting is NULL during EM_BEFORE notification
							DWORD	MaxGreetingLength);	- Size of buffer allocated to modify Greeting

	EM_SMTPCOMMAND is called whenever a SMTP command has been received by the SMTP task.
	
	The Extension Manager EM_BEFORE notification type for the EM_SMTPCOMMAND event occurs whenever a SMTP 
	command has been received by the SMTP listener task but prior to the parsing of the command. 
	
	Domino allocates a buffer that can be used by callback routines for the EM_BEFORE notification to modify 
	the command and thus change internal Domino processing.  NOERROR return status indicates to skip parsing 
	and execution of command.  The default reply when STATUS is NOERROR is "250 OK".  Return STATUS values 
	other than ERR_EM_CONTINUE and NOERROR from the EM_BEFORE notification results in the command being 
	rejected.  A default error message will be generated by the Domino SMTP server, which can be modified by 
	the callback routine for the EM_AFTER notification.  STATUS of ERR_EM_CONTINUE will continue normal Domino 
	processing.
	
	SMTP response to the command entered can be modified during the callback routine of EM_AFTER notification.  
	Care must be taken not to change the reply code from success to failure or vice-versa as this will cause 
	the sender-SMTP and receiver-SMTP servers to be out of synch.  Domino supplies a buffer that can 
	be used by the callback routine to change the SMTP response.

	STATUS LNPUBLIC SMTPCommand(
							DWORD	SessionID,			- Unique session identifier
							char	*Command,			- NULL terminated string containing SMTP command and arguments received
							DWORD	MaxCommandLength,	- Size of buffer allocated to modify Command
							char	*SMTPReply,			- SMTP response that will be returned to the connecting host
														- SMTPReply is NULL during EM_BEFORE notification
							DWORD 	SMTPReplyLength);	- Size of buffer allocated to modify SMTPReply

	EM_SMTPMESSAGEACCEPT is called following the receipt of "end of mail data indicator", a line containing a single
	period, and itemization of the MIME stream into an in-memory note.

	Following the receipt of the "end of mail data indicator", the resulting stream is itemized to an 
	in-memory note.  The Extension Manager EM_BEFORE notification type for the EM_SMTPMESSAGEACCEPT event 
	occurs following itemization but prior to adding the note to the mailbox.  If the callback routine 
	returns STATUS of NOERROR, the Domino SMTP server will stop further processing of the message.  By default
	a success response is generated by core Domino code when NOERROR STATUS has been returned. It is also 
	possible for the callback routine to intercept the message and deposit to database where scans can be 
	performed.  The Callback routine can make changes to the note in the EM_BEFORE event but should not 
	attempt to close the note as this is done by the core code.  

	The Extension Manager EM_AFTER notification type for the EM_SMTPMESSAGEACCEPT event occurs after the SMTP 
	listener task attempted to submit the message to the mailbox but prior to sending a reply.  The Callback 
	routines for the EM_AFTER notification can change the reply returned to the connecting host however, care 
	must be taken not to change the reply code from success to error or vice-versa as this would cause the 
	sender-SMTP and receiver-SMTP servers to be out of synch.

	STATUS LNPUBLIC SMTPMessageAccept(
							DWORD	SessionID,			- Unique session identifier
							NOTEHANDLE	Note,			- Note containing the itemized message
							char	*SMTPReply,			- SMTP Response that will be returned to the connecting host
														- SMTPReply is NULL during EM_BEFORE notification
							DWORD	SMTPReplyLength);	- Size of buffer allocated to modify SMTPReply

	EM_SMTPDISCONNECT is called when a SMTP connection is being torn down.  This includes normal and abnormal disconnects,
	such as when the QUIT command is issued or when a session times out.

	STATUS LNPUBLIC SMTPDisconnect(
							DWORD	SessionID);			- Unique session identifier


	The following 2 archive calls are NOT defined

	EM_NSFARCHIVEDELETENOTES is called after documents have been selected and copied to
	the destination db if desired. It is time for archiving to delete the archived notes
	that qualify from the source database 

   	STATUS LNPUBLIC NSFArchiveDeleteNotes( 
			DBHANDLE 	hDB, 			- handle of the source db where notes will be deleted from
			HANDLE 		hTempIDTable, 	- handle of the id table containing the notes ids to be deleted
			DWORD 		dwFlags ); 		- none at this time
			

	EM_NSFARCHIVECOPYNOTES is called after documents have been selected  for archiving and
	copies them from the source db to the specified destination db  

 	STATUS LNPUBLIC NSFArchiveCopyNotes(
 		DBHANDLE hSrcDB,  		  - dbhandle of the source db
 		DBHANDLE hDestDB, 		  - dbhandle of the destination db
 		HANDLE   hIdTable, 		  - handle to the id table containing the note ids to be copied to the dest
 		DWORD    dwFlags, 		  - none at this time
 		TIMEDATE *ptdSrcMod, 	  - pointer to a timedate for last modified time of source db
 		REPLFILESTATS *pStats);   - pointer to a REPLFILESTATS strcuture containing the stats of the copy


	The following functions ARE defined, but their extension manager callouts
	have slightly different signatures than the standard mechanism because of
	the fact that the function returns something other than STATUS.  The
	extension manager callout has an added argument which allows the callout
	to write the return value of the API routine.  For purposes of the callout,
	it is as if the function signatures were as follows.

	STATUS LNPUBLIC AgentIsEnabled(HAGENT hAgent, BOOL *return_value);
  
	EM_SECAUTHENTICATION is called on the server after the Notes Authentication
	succeeds but before the session is opened. 

	STATUS LNPUBLIC Authentication  (WORD		wEvent
									,SESSIONID	SessionId
									,char		far * pRemoteName
									,DWORD		dwFlags
									,WORD		wNetProtocol
									,char		far * NetAddress
									,void 		far * vpNull
									)



	This function is called every time a note is encountered during database media recovery.  The database being recovered can
		not be changed in any way but the note can be, for example, copied off to a different database.  This can be used, for example,
		for salavaging the content of notes which are going to be deleted at a later point in the media recovery process.

	STATUS LNPUBLIC NSFDbMediaRecoveryNote(DBHANDLE hDB, HANDLE hNote, BOOL IsInsert, BOOL IsUpdate, BOOL IsDelete)

*/
/* Authentication Extension Manager flags
*/
#define fAuthRoleServer					((DWORD) 0x00000001)
#define fAuthRolePassthruServer			((DWORD) 0x00000002)
#define fAuthClientViaPassthruServer	((DWORD) 0x00000004)

/* Authentication Extension Manager events
*/
#define AUTHEM_StartAuthentication		((WORD) 0x0000)
#define AUTHEM_Poll						((WORD) 0x0001)
#define AUTHEM_Identify					((WORD) 0x0002)
#define AUTHEM_Terminate				((WORD) 0x0003)

#define MAXAUTHEMNAMELENGTH	1024

#ifdef __cplusplus
}
#endif

#endif /* EXMGR_DEFS */


#if defined(OS400) && (__OS400_TGTVRM__ >= 510)
#pragma datamodel(pop)
#endif