exchange_emsmdb(4gx) — http(8gx) processing plugin for the Wire Format Protocol (Outlook/Exchange RPCs).
exchange_emsmdb is a processing plugin for http(8gx) which handles the remote procedure calls for the EMSMDB v1 and AsyncEMSMDB v1 RPC interfaces, as well as OXCROPS as issued by the EcDoRpcExt2 call or the MAPIHTTP EXECUTE call.
EMSMDB is a DCE/RPC interface with just a few RPC calls (6 are still used today). ecDoRpcExt2, a call offered by that interface, takes an opaque byte buffer argument not interpreted by DCE/RPC. That byte buffer contains another protocol, "Remote Operation(s) Encoding Protocol" [OXCROPS]. No reason for this wrapping is given in the OXCRPC spec. MAPIHTTP runs OXCROPS directly without the extra EMSMDB framing.
OXCROPS consists of 130 calls that make up the mailbox protocol.
The following
directives are recognized when they appear in
/etc/gromox/gromox.cfg.
emsmdb_compress_threshold
When a ROP response buffer has
at least this many bytes, attempt to compress with LZXpress.
(Use -1 to disable compression.) This format/implementation
is underperforming in modern contexts: the rate is just
about 60 MB/s on a 5950X CPU, which is a tenth of what
zstd-1.5.7 achieves, and the compression ratio is somewhere
between Unix compress(1) and gzip level 1.
Default: 0
outgoing_smtp_url
See gromox.cfg(5):outgoing_smtp_url.
The following
directives are recognized when they appear in
/etc/gromox/exchange_emsmdb.cfg.
async_threads_num
Default: 4
ems_max_active_notifh
Maximum number of concurrently
active notify handles.
Default: (unlimited)
ems_max_active_sessions
Maximum number of concurrently
active EMSMDB sessions. The special value 0 indicates
unlimited. The special value 0 indicates unlimited. EMSMDB
sessions are not tied to any particular TCP connection;
sessions terminate by means of an explicit
"ecDoDisconnect" request, or by an inactivity
timer (currently 2000 seconds). MFCMAPI sends
ecDoDisconnect, but Outlook just breaks off TCP connections,
so sessions can pile up.
Default: (unlimited)
ems_max_active_users
Maximum number of concurrently
active EMSMDB session owners (users). The special value 0
indicates unlimited.
Default: (unlimited)
ems_max_pending_sesnotif
Maximum number of pending
notifications for an EMSMDB session. [Content tables on
search folders can rack up enormous amounts of
notifications, so worry not upon seeing W-2305 warnings in
the log.]
Default: 1K
emsmdb_max_cxh_per_user
The maximum number of EMSMDB
sessions (CXH = RPC context handle) for one user. The
special value 0 indicates unlimited. EMSMDB sessions are not
tied to any particular TCP connection; sessions terminate by
means of an explicit "ecDoDisconnect" request, or
by an inactivity timer (currently 2000 seconds). Outlook
does not send ecDoDisconnect (MFCMAPI does), so sessions can
pile up.
Default: 100
emsmdb_max_obh_per_session
The maximum number of object
handles (e.g. folders/messages/etc.) each ROP logon
(contrary to the name, not EMSMDB session) can have at any
one time concurrently. Use 0 to indicate unlimited. On
average, Outlook creates six ROP logons per mailbox that it
opens.
Default: 500
emsmdb_private_folder_softdelete
Enables soft-delete support for
folders in private stores. (This feature is experimental.)
Public folders always have this on. (Take note that
exmdb_provider.cfg:exmdb_private_folder_softdelete also need
to be enabled.)
Default: no
emsmdb_rop_chaining
0: Deactivate ROP chaining. 1:
Enable ROP chaining for OL < 15 and OL >= 16.0.10000
(OL2019, OL2021, OLM365). 2: Enabled for all clients.
Default: 1
mailbox_ping_interval
Default: 5 minutes
mail_max_length
The maximum size for any
individual attachment and message. Attempts to store objects
larger than this are rejected. The upper limit is 2G,
imposed by Exchange protocols.
Default: 64M
max_ext_rule_length
Default: 510K
max_rcpt_num
The maximum number of
recipients that an e-mail is allowed to have.
Default: 256
rop_debug
Log every incoming OXCROP call
and the return code of the operation in a minimal fashion.
Level 1 emits ROPs with a failure return code, level 2 emits
all ROPs. Note the daemon log level needs to be
"debug" (6), too.
Default: 0
submit_command
Default: /usr/bin/php /usr/share/gromox/sa/submit.php
x500_org_name
Default: (unspecified)
|
• |
data_file_path/notify_bounce/: templates for read/nonread notification mails sent to originators | ||
|
• |
data_file_path/msgchg_grouping/*.txt |
Outlook can be started with the /rpcinfo command-line parameter to display a status table about the RPC connections it has open. Alternatively, one can Ctrl-MouseBtn3 (right button) on the status tray icon to call up a context menu, from which "Connection status..." can be selected for the same.
When SIGUSR1 is received by this module, it will dump an overview of current EMSMDB sessions to the configured log device (stderr/journal by default). EMSMDB sessions are not linked to any one HTTP connection in particular, and multiple HTTP connections may exercise one session.
|
• |
DCERPC / C706: Technical Standard DCE 1.1: Remote Procedure Call by The Open Group, 1997 | ||
|
• |
MS-OXCRPC: Wire Format Protocol. This is the document for the EMSMDB RPC interface. | ||
|
• |
MS-OXCROPS: Remote Operations List and Encoding Protocol. |
gromox(7), http(8gx)