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, 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 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 SRowSet *rowset, struct SPropTagArray *proptags, DATA_BLOB *content)
 
NTSTATUS emsmdb_register_notification (struct mapi_session *session, struct NOTIFKEY *notifkey)
 
_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, 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 
)

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 
)

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 
)

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)

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,
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
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 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
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 SRowSet *  rowset,
struct SPropTagArray *  proptags,
DATA_BLOB *  content 
)

Get a SRowSet from a DATA blob

Parameters
mem_ctxpointer on the memory 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 
)

Register for notifications on the server

Parameters
sessionPointer to the current MAPI session
notifkeyThe opaque client-generated context data
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,
uint32_t *  offset,
enum MAPITAGS  tag,
DATA_BLOB *  data 
)

Retrieves a property value from a DATA blob

Parameters
mem_ctxpointer to the memory 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/