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_ctxemsmdb_bind_notification (struct mapi_context *mapi_ctx, TALLOC_CTX *mem_ctx)
struct emsmdb_contextemsmdb_connect (TALLOC_CTX *parent_mem_ctx, struct mapi_session *session, struct dcerpc_pipe *p, struct cli_credentials *cred, int *return_value)
struct emsmdb_contextemsmdb_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_infoemsmdb_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)
_PUBLIC_ NTSTATUS emsmdb_transaction_wrapper (struct mapi_session *session, TALLOC_CTX *mem_ctx, struct mapi_request *req, struct mapi_response **repl)
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)
bool server_version_at_least (struct emsmdb_context *ctx, uint16_t major_ver, uint16_t minor_ver, uint16_t major_build, uint16_t minor_build)

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_ctx pointer to the EMSMDB context
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI error

References emsmdb_context::async_handle, emsmdb_context::handle, emsmdb_context::mem_ctx, OPENCHANGE_RETVAL_IF, and emsmdb_context::rpc_connection.

Referenced by Logon().

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_ctx pointer to the MAPI context
mem_ctx pointer to the memory context
Returns:
an allocated mapi_notify_ctx structure on success, otherwise NULL

References DFLT_NOTIF_PORT, mapi_context::lp_ctx, mapi_notify_ctx::notifications, mapi_session::profile, mapi_profile::server, and mapi_context::session.

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_ctx pointer to the memory context
session pointer to the MAPI session context
p pointer to the DCERPC pipe
cred pointer to the user credentials
return_value pointer on EcDoConnect MAPI return value
Returns:
an allocated emsmdb_context on success, otherwise NULL

References emsmdb_context::cache_requests, mapi_profile::codepage, emsmdb_context::cred, emsmdb_context::handle, emsmdb_context::info, mapi_profile::language, mapi_profile::mailbox, mapi_errstr(), emsmdb_context::mem_ctx, mapi_profile::method, emsmdb_info::pcmsPollsMax, emsmdb_info::pcmsRetryDelay, emsmdb_info::pcRetry, emsmdb_info::picxr, mapi_session::profile, emsmdb_info::rgwServerVersion, emsmdb_context::rpc_connection, emsmdb_info::szDisplayName, and emsmdb_info::szDNPrefix.

Referenced by Logon().

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_ctx pointer to the memory context
session pointer to the MAPI session context
p pointer to the DCERPC pipe
cred pointer to the user credentials
return_value pointer on EcDoConnectEx MAPI return value
Returns:
an allocated emsmdb_context structure on success, otherwise NULL

References mapi_profile::codepage, emsmdb_context::cred, emsmdb_context::handle, emsmdb_context::info, mapi_profile::language, mapi_profile::mailbox, mapi_errstr(), emsmdb_context::mem_ctx, mapi_profile::method, emsmdb_info::pcmsPollsMax, emsmdb_info::pcmsRetryDelay, emsmdb_info::pcRetry, emsmdb_info::picxr, mapi_session::profile, emsmdb_info::rgwServerVersion, emsmdb_context::rpc_connection, emsmdb_info::szDisplayName, and emsmdb_info::szDNPrefix.

Referenced by Logon().

enum MAPISTATUS emsmdb_disconnect ( struct emsmdb_context emsmdb_ctx  ) 

Destroy the EMSMDB context handle

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

References emsmdb_context::handle, OPENCHANGE_RETVAL_IF, and emsmdb_context::rpc_connection.

Referenced by emsmdb_disconnect_dtor().

int emsmdb_disconnect_dtor ( void *  data  ) 

Destructor for the EMSMDB context. Call the EcDoDisconnect function.

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

References emsmdb_context::cache_requests, mapi_provider::ctx, emsmdb_disconnect(), emsmdb_context::info, emsmdb_info::szDisplayName, and emsmdb_info::szDNPrefix.

Referenced by MapiLogonProvider().

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

Retrieves the EMSMDB context server information structure

Parameters:
session pointer to the MAPI session context
Returns:
the server info structure on success, otherwise NULL

References mapi_provider::ctx, and mapi_session::emsmdb.

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_ctx pointer to the memory context
content pointer to the DATA blob content
tags pointer to a list of property tags to lookup
propvals pointer on pointer to the returned SPropValues
cn_propvals pointer to the number of propvals
flag describes the type data
Returns:
MAPI_E_SUCCESS on success

References free_emsmdb_property(), PT_ERROR, pull_emsmdb_property(), and set_SPropValue().

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_ctx pointer on the memory context
aRow pointer on the returned SRow
proptags pointer on a list of property tags to lookup
propcount number of SPropValue entries in aRow
content pointer on the DATA blob content
flag the type data
align alignment pad
Returns:
MAPI_E_SUCCESS on success
Note:
TODO: We shouldn't have any alignment pad here

References free_emsmdb_property(), PT_ERROR, pull_emsmdb_property(), and set_SPropValue().

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_ctx pointer on the memory context
rowset pointer on the returned SRowSe
proptags pointer on a list of property tags to lookup
content pointer 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(), PT_ERROR, pull_emsmdb_property(), and set_SPropValue().

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

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

Register for notifications on the server

Parameters:
session Pointer to the current MAPI session
notifkey The opaque client-generated context data
Returns:
NTSTATUS_OK on success, otherwise NT status error

References mapi_notify_ctx::addr, mapi_provider::ctx, mapi_session::emsmdb, emsmdb_context::handle, emsmdb_context::mem_ctx, mapi_session::notify_ctx, and emsmdb_context::rpc_connection.

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_ctx pointer to the EMSMDB connection context
mem_ctx pointer to the memory context
req pointer to the MAPI request to send
repl pointer on pointer to the MAPI reply returned by the server
Returns:
NT_STATUS_OK on success, otherwise NT status error

References emsmdb_context::cache_count, emsmdb_context::cache_requests, emsmdb_context::cache_size, emsmdb_context::handle, emsmdb_context::mem_ctx, and emsmdb_context::rpc_connection.

Referenced by emsmdb_transaction_wrapper().

_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_ctx pointer to the EMSMDB connection context
mem_ctx pointer to the memory context
req pointer to the MAPI request to send
repl pointer on pointer to the MAPI reply returned by the server
Returns:
NT_STATUS_OK on success, otherwise NT status error

References emsmdb_context::handle, and emsmdb_context::rpc_connection.

Referenced by emsmdb_transaction_wrapper().

_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_ctx pointer to the EMSMDB connection context
res pointer on pointer to a MAPI response structure
Returns:
NT_STATUS_OK on success, otherwise NT status error

References emsmdb_context::handle, MAPI_STATUS_IS_OK, emsmdb_context::mem_ctx, and emsmdb_context::rpc_connection.

Referenced by DispatchNotifications(), and MonitorNotification().

_PUBLIC_ NTSTATUS emsmdb_transaction_wrapper ( struct mapi_session session,
TALLOC_CTX *  mem_ctx,
struct mapi_request *  req,
struct mapi_response **  repl 
)

References mapi_provider::ctx, mapi_session::emsmdb, emsmdb_transaction(), emsmdb_transaction_ext2(), mapi_profile::exchange_version, and mapi_session::profile.

Referenced by Abort(), AbortSubmit(), AddressTypes(), CloneStream(), CollapseRow(), CommitStream(), CopyFolder(), CopyProps(), CopyTo(), CopyToStream(), CreateAttach(), CreateBookmark(), CreateFolder(), CreateMessage(), DeleteAttach(), DeleteFolder(), DeleteMessage(), DeletePropertiesNoReplicate(), DeleteProps(), EmptyFolder(), ExpandRow(), FindRow(), FreeBookmark(), FXCopyFolder(), FXCopyMessages(), FXCopyProperties(), FXCopyTo(), FXDestConfigure(), FXGetBuffer(), FXPutBuffer(), GetAttachmentTable(), GetCollapseState(), GetContentsTable(), GetHierarchyTable(), GetIdFromLongTermId(), GetIDsFromNames(), GetLocalReplicaIds(), GetLongTermIdFromId(), GetMessageStatus(), GetNamesFromIDs(), GetOwningServers(), GetPermissionsTable(), GetPropList(), GetProps(), GetPropsAll(), GetReceiveFolder(), GetReceiveFolderTable(), GetRulesTable(), GetSearchCriteria(), GetStatus(), GetStoreState(), GetStreamSize(), GetTransportFolder(), GetValidAttach(), HardDeleteMessage(), HardDeleteMessagesAndSubfolders(), ICSSyncConfigure(), ICSSyncGetTransferState(), ICSSyncOpenCollector(), ICSSyncUploadStateBegin(), ICSSyncUploadStateContinue(), ICSSyncUploadStateEnd(), LockRegionStream(), ModifyPermissions(), ModifyRecipients(), MoveCopyMessages(), MoveFolder(), OpenAttach(), OpenEmbeddedMessage(), OpenFolder(), OpenMessage(), OpenPublicFolder(), OpenPublicFolderByName(), OpenStream(), OpenUserMailbox(), OptionsData(), PublicFolderIsGhosted(), QueryColumns(), QueryNamedProperties(), QueryPosition(), QueryRows(), ReadRecipients(), ReadStream(), Release(), ReloadCachedInformation(), RemoveAllRecipients(), Reset(), Restrict(), SaveChangesAttachment(), SaveChangesMessage(), SeekRow(), SeekRowApprox(), SeekRowBookmark(), SeekStream(), SetCollapseState(), SetColumns(), SetLocalReplicaMidsetDeleted(), SetMessageReadFlag(), SetMessageStatus(), SetPropertiesNoReplicate(), SetProps(), SetReadFlags(), SetReceiveFolder(), SetSearchCriteria(), SetSpooler(), SetStreamSize(), SetSyncNotificationGuid(), SortTable(), SpoolerLockMessage(), SubmitMessage(), Subscribe(), SyncOpenAdvisor(), TellVersion(), TransportNewMail(), TransportSend(), UnlockRegionStream(), WriteAndCommitStream(), and WriteStream().

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

Free property values retrieved with pull_emsmdb_property

Parameters:
lpProp pointer to SPropValue structure
data generic pointer to associated lpProp data

References PT_BOOLEAN, PT_ERROR, PT_I2, PT_I8, and PT_LONG.

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_ctx pointer to the memory context
offset pointer on pointer to the current offset
tag the property tag which value is to be retrieved
data pointer to the data
Returns:
pointer on constant generic data on success, otherwise NULL

References PT_BINARY, PT_BOOLEAN, PT_CLSID, PT_DOUBLE, PT_ERROR, PT_I2, PT_I8, PT_LONG, PT_MV_BINARY, PT_MV_LONG, PT_MV_STRING8, PT_MV_UNICODE, PT_STRING8, PT_SYSTIME, and PT_UNICODE.

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

bool server_version_at_least ( struct emsmdb_context ctx,
uint16_t  major_ver,
uint16_t  minor_ver,
uint16_t  major_build,
uint16_t  minor_build 
)

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/