libmapi/emsmdb.c File Reference

EMSMDB stack functions. More...

#include <unistd.h>
#include <fcntl.h>
#include "libmapi/libmapi.h"
#include "libmapi/libmapi_private.h"

Functions

enum MAPISTATUS emsmdb_async_connect (struct emsmdb_context *emsmdb_ctx)
struct mapi_notify_ctx * emsmdb_bind_notification (struct mapi_context *mapi_ctx, TALLOC_CTX *mem_ctx)
struct emsmdb_context * emsmdb_connect (TALLOC_CTX *parent_mem_ctx, struct mapi_session *session, struct dcerpc_pipe *p, struct cli_credentials *cred, int *return_value)
struct emsmdb_context * emsmdb_connect_ex (TALLOC_CTX *mem_ctx, struct mapi_session *session, struct dcerpc_pipe *p, struct cli_credentials *cred, int *return_value)
enum MAPISTATUS emsmdb_disconnect (struct emsmdb_context *emsmdb_ctx)
int emsmdb_disconnect_dtor (void *data)
_PUBLIC_ struct emsmdb_info * emsmdb_get_info (struct mapi_session *session)
enum MAPISTATUS emsmdb_get_SPropValue (TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, DATA_BLOB *content, struct SPropTagArray *tags, struct SPropValue **propvals, uint32_t *cn_propvals, uint8_t flag)
void emsmdb_get_SRow (TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, struct SRow *aRow, struct SPropTagArray *proptags, uint16_t propcount, DATA_BLOB *content, uint8_t flag, uint8_t align)
_PUBLIC_ void emsmdb_get_SRowSet (TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, struct SRowSet *rowset, struct SPropTagArray *proptags, DATA_BLOB *content)
NTSTATUS emsmdb_register_notification (struct mapi_session *session, struct NOTIFKEY *notifkey, uint16_t ulEventMask)
_PUBLIC_ NTSTATUS emsmdb_transaction (struct emsmdb_context *emsmdb_ctx, TALLOC_CTX *mem_ctx, struct mapi_request *req, struct mapi_response **repl)
_PUBLIC_ NTSTATUS emsmdb_transaction_ext2 (struct emsmdb_context *emsmdb_ctx, TALLOC_CTX *mem_ctx, struct mapi_request *req, struct mapi_response **repl)
_PUBLIC_ NTSTATUS emsmdb_transaction_null (struct emsmdb_context *emsmdb_ctx, struct mapi_response **res)
void free_emsmdb_property (struct SPropValue *lpProp, void *data)
const void * pull_emsmdb_property (TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, uint32_t *offset, enum MAPITAGS tag, DATA_BLOB *data)

Detailed Description

EMSMDB stack functions.


Function Documentation

enum MAPISTATUS emsmdb_async_connect ( struct emsmdb_context *  emsmdb_ctx)

Get an async notification context handle

Parameters:
emsmdb_ctxpointer to the EMSMDB context
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI error
struct mapi_notify_ctx* emsmdb_bind_notification ( struct mapi_context *  mapi_ctx,
TALLOC_CTX *  mem_ctx 
) [read]

Initialize the notify context structure and bind a local UDP port to receive notifications from the server

Parameters:
mapi_ctxpointer to the MAPI context
mem_ctxpointer to the memory context
Returns:
an allocated mapi_notify_ctx structure on success, otherwise NULL

Referenced by RegisterNotification().

struct emsmdb_context* emsmdb_connect ( TALLOC_CTX *  parent_mem_ctx,
struct mapi_session *  session,
struct dcerpc_pipe *  p,
struct cli_credentials *  cred,
int *  return_value 
) [read]

Establishes a new Session Context with the server on the exchange_emsmdb pipe

Parameters:
parent_mem_ctxpointer to the memory context
sessionpointer to the MAPI session context
ppointer to the DCERPC pipe
credpointer to the user credentials
return_valuepointer on EcDoConnect MAPI return value
Returns:
an allocated emsmdb_context on success, otherwise NULL
struct emsmdb_context* emsmdb_connect_ex ( TALLOC_CTX *  mem_ctx,
struct mapi_session *  session,
struct dcerpc_pipe *  p,
struct cli_credentials *  cred,
int *  return_value 
) [read]

Establishes a new Session Context with the server on the exchange_emsmdb pipe using 0xA EcDoConnectEx opnum

Parameters:
mem_ctxpointer to the memory context
sessionpointer to the MAPI session context
ppointer to the DCERPC pipe
credpointer to the user credentials
return_valuepointer on EcDoConnectEx MAPI return value
Returns:
an allocated emsmdb_context structure on success, otherwise NULL
enum MAPISTATUS emsmdb_disconnect ( struct emsmdb_context *  emsmdb_ctx)

Destroy the EMSMDB context handle

Parameters:
emsmdb_ctxpointer to the EMSMDB context
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdb_disconnect_dtor().

int emsmdb_disconnect_dtor ( void *  data)

Destructor for the EMSMDB context. Call the EcDoDisconnect function.

Parameters:
datageneric pointer to data with mapi_provider information
Returns:
MAPI_E_SUCCESS on success, otherwise -1

References emsmdb_disconnect().

Referenced by MapiLogonProvider().

_PUBLIC_ struct emsmdb_info* emsmdb_get_info ( struct mapi_session *  session) [read]

Retrieves the EMSMDB context server information structure

Parameters:
sessionpointer to the MAPI session context
Returns:
the server info structure on success, otherwise NULL
enum MAPISTATUS emsmdb_get_SPropValue ( TALLOC_CTX *  mem_ctx,
struct loadparm_context *  lp_ctx,
DATA_BLOB *  content,
struct SPropTagArray *  tags,
struct SPropValue **  propvals,
uint32_t *  cn_propvals,
uint8_t  flag 
)

Get a SPropValue array from a DATA blob

Parameters:
mem_ctxpointer to the memory context
lp_ctxpointer to the loadparm context
contentpointer to the DATA blob content
tagspointer to a list of property tags to lookup
propvalspointer on pointer to the returned SPropValues
cn_propvalspointer to the number of propvals
flagdescribes the type data
Returns:
MAPI_E_SUCCESS on success

References free_emsmdb_property(), and pull_emsmdb_property().

Referenced by GetProps().

void emsmdb_get_SRow ( TALLOC_CTX *  mem_ctx,
struct loadparm_context *  lp_ctx,
struct SRow *  aRow,
struct SPropTagArray *  proptags,
uint16_t  propcount,
DATA_BLOB *  content,
uint8_t  flag,
uint8_t  align 
)

Get a SRow from a DATA blob

Parameters:
mem_ctxpointer on the memory context
lp_ctxpointer on the loadparm context
aRowpointer on the returned SRow
proptagspointer on a list of property tags to lookup
propcountnumber of SPropValue entries in aRow
contentpointer on the DATA blob content
flagthe type data
alignalignment pad
Returns:
MAPI_E_SUCCESS on success
Note:
TODO: We shouldn't have any alignment pad here

References free_emsmdb_property(), and pull_emsmdb_property().

Referenced by OpenEmbeddedMessage(), OpenMessage(), and ReloadCachedInformation().

_PUBLIC_ void emsmdb_get_SRowSet ( TALLOC_CTX *  mem_ctx,
struct loadparm_context *  lp_ctx,
struct SRowSet *  rowset,
struct SPropTagArray *  proptags,
DATA_BLOB *  content 
)

Get a SRowSet from a DATA blob

Parameters:
mem_ctxpointer on the memory context
lp_ctxpointer on the loadparm context
rowsetpointer on the returned SRowSe
proptagspointer on a list of property tags to lookup
contentpointer on the DATA blob content
Returns:
MAPI_E_SUCCESS on success
Note:
TODO: this doesn't yet handle the TypedPropertyValue and FlaggedPropertyValueWithTypeSpecified variants

References free_emsmdb_property(), and pull_emsmdb_property().

Referenced by ExpandRow(), FindRow(), and QueryRows().

NTSTATUS emsmdb_register_notification ( struct mapi_session *  session,
struct NOTIFKEY *  notifkey,
uint16_t  ulEventMask 
)

Register for notifications on the server

Parameters:
sessionPointer to the current MAPI session
notifkeyThe opaque client-generated context data
ulEventMaskNotification flags. Exchange completely ignores this value and it should be set to 0
Returns:
NTSTATUS_OK on success, otherwise NT status error

Referenced by RegisterNotification().

_PUBLIC_ NTSTATUS emsmdb_transaction ( struct emsmdb_context *  emsmdb_ctx,
TALLOC_CTX *  mem_ctx,
struct mapi_request *  req,
struct mapi_response **  repl 
)

Make a EMSMDB transaction.

Parameters:
emsmdb_ctxpointer to the EMSMDB connection context
mem_ctxpointer to the memory context
reqpointer to the MAPI request to send
replpointer on pointer to the MAPI reply returned by the server
Returns:
NT_STATUS_OK on success, otherwise NT status error
_PUBLIC_ NTSTATUS emsmdb_transaction_ext2 ( struct emsmdb_context *  emsmdb_ctx,
TALLOC_CTX *  mem_ctx,
struct mapi_request *  req,
struct mapi_response **  repl 
)

Make a EMSMDB EXT2 transaction.

Parameters:
emsmdb_ctxpointer to the EMSMDB connection context
mem_ctxpointer to the memory context
reqpointer to the MAPI request to send
replpointer on pointer to the MAPI reply returned by the server
Returns:
NT_STATUS_OK on success, otherwise NT status error
_PUBLIC_ NTSTATUS emsmdb_transaction_null ( struct emsmdb_context *  emsmdb_ctx,
struct mapi_response **  res 
)

Send an empty MAPI packet - useful to keep connection up or force notifications.

Parameters:
emsmdb_ctxpointer to the EMSMDB connection context
respointer on pointer to a MAPI response structure
Returns:
NT_STATUS_OK on success, otherwise NT status error

Referenced by DispatchNotifications(), and MonitorNotification().

void free_emsmdb_property ( struct SPropValue *  lpProp,
void *  data 
)

Free property values retrieved with pull_emsmdb_property

Parameters:
lpProppointer to SPropValue structure
datageneric pointer to associated lpProp data

Referenced by emsmdb_get_SPropValue(), emsmdb_get_SRow(), and emsmdb_get_SRowSet().

const void* pull_emsmdb_property ( TALLOC_CTX *  mem_ctx,
struct loadparm_context *  lp_ctx,
uint32_t *  offset,
enum MAPITAGS  tag,
DATA_BLOB *  data 
)

Retrieves a property value from a DATA blob

Parameters:
mem_ctxpointer to the memory context
lp_ctxpointer to the loadparm context
offsetpointer on pointer to the current offset
tagthe property tag which value is to be retrieved
datapointer to the data
Returns:
pointer on constant generic data on success, otherwise NULL

Referenced by emsmdb_get_SPropValue(), emsmdb_get_SRow(), and emsmdb_get_SRowSet().


Creative Commons License
Creative Commons Attribution icon Creative Commons Share Alike icon
This content is licensed under the Creative Commons
Attribution ShareAlike License v. 3.0:
http://creativecommons.org/licenses/by-sa/3.0/