Program Listing for OmniClient.h

↰ Return to documentation for OmniClient.h

// Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.
//
// NVIDIA CORPORATION and its licensors retain all intellectual property
// and proprietary rights in and to this software, related documentation
// and any modifications thereto.  Any use, reproduction, disclosure or
// distribution of this software and related documentation without an express
// license agreement from NVIDIA CORPORATION is strictly prohibited.
//
// clang-format off
#pragma once


#include "OmniClientAbi.h"
#include "OmniClientVersion.h"

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

const uint64_t kOmniClientVersion = (uint64_t)OMNICLIENT_VERSION_MAJOR << 48 |
                                    (uint64_t)OMNICLIENT_VERSION_MINOR << 32 |
                                    (uint64_t)OMNICLIENT_VERSION_PATCH;


typedef enum
{
    eOmniClientLogLevel_Debug,
    eOmniClientLogLevel_Verbose,
    eOmniClientLogLevel_Info,
    eOmniClientLogLevel_Warning,
    eOmniClientLogLevel_Error,

    Count_eOmniClientLogLevel
} OmniClientLogLevel;

typedef void(OMNICLIENT_ABI* OmniClientLogCallback)
    (char const* threadName, char const* component, OmniClientLogLevel level, char const* message)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientSetLogCallback(OmniClientLogCallback callback)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientSetLogLevel(OmniClientLogLevel level)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char const*)
    omniClientGetLogLevelString(OmniClientLogLevel level)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char)
    omniClientGetLogLevelChar(OmniClientLogLevel level)
    OMNICLIENT_NOEXCEPT;



OMNICLIENT_EXPORT(bool)
    omniClientInitialize(uint64_t version)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientShutdown()
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char const*)
    omniClientGetVersionString()
    OMNICLIENT_NOEXCEPT;



struct OmniClientContent
{
    void* buffer;
    size_t size;
    void (*free)(void* buffer);
};

OMNICLIENT_EXPORT(struct OmniClientContent) omniClientAllocContent(size_t size) OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(struct OmniClientContent) omniClientReferenceContent(void* buffer, size_t size) OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(struct OmniClientContent) omniClientMoveContent(struct OmniClientContent* content) OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(struct OmniClientContent) omniClientCopyContent(struct OmniClientContent const* content) OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void) omniClientFreeContent(struct OmniClientContent* content) OMNICLIENT_NOEXCEPT;

#ifdef __cplusplus
inline OmniClientContent omniClientMoveContent(OmniClientContent& content) noexcept
{
    return omniClientMoveContent(&content);
}
inline OmniClientContent omniClientCopyContent(OmniClientContent const& content) noexcept
{
    return omniClientCopyContent(&content);
}
inline void omniClientFreeContent(OmniClientContent& content) noexcept
{
    omniClientFreeContent(&content);
}
#endif



typedef enum
{
    eOmniClientConnectionStatus_Connecting,
    eOmniClientConnectionStatus_Connected,
    eOmniClientConnectionStatus_ConnectError,
    eOmniClientConnectionStatus_Disconnected,

    Count_eOmniClientConnectionStatus
} OmniClientConnectionStatus;

typedef void
    (OMNICLIENT_ABI* OmniClientConnectionStatusCallback)(void* userData, char const* url, OmniClientConnectionStatus status)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(uint32_t)
    omniClientRegisterConnectionStatusCallback(void* userData, OmniClientConnectionStatusCallback callback)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char const*)
    omniClientGetConnectionStatusString(OmniClientConnectionStatus connectionStatus)
    OMNICLIENT_NOEXCEPT;

typedef enum
{
    eOmniClientFileStatus_Reading,

    eOmniClientFileStatus_Writing,

    eOmniClientFileStatus_Copying,

    eOmniClientFileStatus_Moving,

    eOmniClientFileStatus_Deleting,

    eOmniClientFileStatus_LiveUpdateSending,

    eOmniClientFileStatus_LiveUpdateReceived,

    Count_eOmniClientFileStatus
} OmniClientFileStatus;

typedef void
    (OMNICLIENT_ABI* OmniClientFileStatusCallback)(void* userData, char const* url, OmniClientFileStatus status, int percentage)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(uint32_t)
    omniClientRegisterFileStatusCallback(void* userData, OmniClientFileStatusCallback callback)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char const*)
    omniClientGetFileStatusString(OmniClientFileStatus fileStatus)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientUnregisterCallback(uint32_t handle)
    OMNICLIENT_NOEXCEPT;



typedef uint64_t OmniClientRequestId;

static const OmniClientRequestId kInvalidRequestId = 0;

typedef enum
{
    eOmniClientResult_Ok,

    eOmniClientResult_OkLatest,

    eOmniClientResult_OkNotYetFound,

    eOmniClientResult_Error,

    eOmniClientResult_ErrorConnection,

    eOmniClientResult_ErrorNotSupported,

    eOmniClientResult_ErrorAccessDenied,

    eOmniClientResult_ErrorNotFound,

    eOmniClientResult_ErrorBadVersion,

    eOmniClientResult_ErrorAlreadyExists,

    eOmniClientResult_ErrorSourceIsDest,

    eOmniClientResult_ErrorAccessLost,

    eOmniClientResult_ErrorLocked,

    eOmniClientResult_ErrorBadRequest,

    Count_eOmniClientResult
} OmniClientResult;

OMNICLIENT_EXPORT(char const*)
    omniClientGetResultString(OmniClientResult result)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientStop(OmniClientRequestId requestId)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientWait(OmniClientRequestId requestId)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(bool)
    omniClientWaitFor(OmniClientRequestId requestId, uint64_t milliseconds)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientSetAlias(char const* src, char const* dst)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(struct OmniIDLCPPInitializerReactor*)
    omniClientGetReactor()
    OMNICLIENT_NOEXCEPT;



OMNICLIENT_EXPORT(void)
    omniClientAddBookmark(char const* name, char const* url)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientRemoveBookmark(char const* name)
    OMNICLIENT_NOEXCEPT;

struct OmniClientBookmark
{
    char const* name;
    char const* url;
};

typedef void
    (OMNICLIENT_ABI* OmniClientBookmarkCallback)(void* userData, struct OmniClientBookmark const* bookmarks, size_t numBookmarks)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientListBookmarks(void* userData, OmniClientBookmarkCallback callback)
    OMNICLIENT_NOEXCEPT;



struct OmniClientUrl
{
    char const* scheme;
    char const* user;
    char const* host;
    char const* port;
    char const* path;
    char const* query;
    char const* fragment;
    bool isRaw;
};

OMNICLIENT_EXPORT(struct OmniClientUrl*)
    omniClientBreakUrl(char const* url)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(struct OmniClientUrl*)
    omniClientBreakUrlAbsolute(char const* url)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientFreeUrl(struct OmniClientUrl* url)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char*)
    omniClientMakeUrl(struct OmniClientUrl const* url, char* buffer, size_t* bufferSize)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char*)
    omniClientMakeFileUrl(char const* path, char* buffer, size_t* bufferSize)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char*)
    omniClientNormalizeUrl(char const* url, char* buffer, size_t* bufferSize)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char*)
    omniClientCombineUrls(char const* baseUrl, char const* otherUrl, char* buffer, size_t* bufferSize)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char*)
    omniClientCombineWithBaseUrl(char const* otherUrl, char* buffer, size_t* bufferSize)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(struct OmniClientUrl*)
    omniClientCombineWithBaseUrl2(char const* otherUrl)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char*)
    omniClientMakeRelativeUrl(char const* baseUrl, char const* otherUrl, char* buffer, size_t* bufferSize)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char*)
    omniClientMakePrintable(char const* string, char* buffer, size_t* bufferSize)
    OMNICLIENT_NOEXCEPT;



struct OmniClientCredentials
{
    bool abort;
    struct OmniClientContent token;
    struct OmniClientContent username;
    struct OmniClientContent password;
};

typedef bool
    (OMNICLIENT_ABI* OmniClientAuthCallback)(void* userData, char const* prefix, struct OmniClientCredentials * credentials)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(uint32_t)
    omniClientRegisterAuthCallback(void* userData, OmniClientAuthCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientAuthenticationMessageBoxCallback)(void* userData, bool show, const char* server, uint32_t authHandle)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientSetAuthenticationMessageBoxCallback(void* userData, OmniClientAuthenticationMessageBoxCallback callback)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientAuthenticationCancel(uint32_t authHandle)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientSignOut(char const* url)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientReconnect(const char* url)
    OMNICLIENT_NOEXCEPT;



struct OmniClientServerInfo
{
    char const* version;
    char const* username;
    char const* authToken;
    bool cacheEnabled;
    bool omniObjectsEnabled;
    bool checkpointsEnabled;
};

typedef void
    (OMNICLIENT_ABI* OmniClientGetServerInfoCallback)(void* userData, OmniClientResult result, struct OmniClientServerInfo const * info)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientGetServerInfo(char const* url, void* userData, OmniClientGetServerInfoCallback callback)
    OMNICLIENT_NOEXCEPT;



#define BIT(x) (1 << (x - 1))

typedef enum
{
    fOmniClientAccess_Read = BIT(1),

    fOmniClientAccess_Write = BIT(2),

    fOmniClientAccess_Admin = BIT(3),

    fOmniClientAccess_Full = fOmniClientAccess_Admin | fOmniClientAccess_Write | fOmniClientAccess_Read

} OmniClientAccessFlags;

typedef enum
{
    fOmniClientItem_ReadableFile = BIT(1),

    fOmniClientItem_WriteableFile = BIT(2),

    fOmniClientItem_CanHaveChildren = BIT(3),

    fOmniClientItem_DoesNotHaveChildren = BIT(4),

    fOmniClientItem_IsMount = BIT(5),

    fOmniClientItem_IsInsideMount = BIT(6),

    fOmniClientItem_CanLiveUpdate = BIT(7),

    fOmniClientItem_IsOmniObject = BIT(8),

    fOmniClientItem_IsChannel = BIT(9),

    fOmniClientItem_IsCheckpointed = BIT(10)
} OmniClientItemFlags;

#undef BIT

struct OmniClientListEntry
{
    const char* relativePath;

    uint32_t access;

    uint32_t flags;

    uint64_t size;

    uint64_t modifiedTimeNs;

    uint64_t createdTimeNs;

    const char* modifiedBy;
    const char* createdBy;
    const char* version;
    const char* hash;
    const char* comment;
};

typedef void
    (OMNICLIENT_ABI* OmniClientStatCallback)(void* userData, OmniClientResult result, struct OmniClientListEntry const* entry)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientStat(char const* url, void* userData, OmniClientStatCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef enum
{
    eOmniClientListEvent_Unknown,
    eOmniClientListEvent_Created,
    eOmniClientListEvent_Updated,
    eOmniClientListEvent_Deleted,
    eOmniClientListEvent_Metadata,
    eOmniClientListEvent_Locked,
    eOmniClientListEvent_Unlocked,

    Count_eOmniClientListEvent
} OmniClientListEvent;

typedef void
    (OMNICLIENT_ABI* OmniClientStatSubscribeCallback)(void* userData, OmniClientResult result, OmniClientListEvent listEvent, struct OmniClientListEntry const* entry)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientStatSubscribe(char const* url, void* userData, OmniClientStatCallback callback, OmniClientStatSubscribeCallback subscribeCallback)
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientResolveCallback)(void* userData, OmniClientResult result, struct OmniClientListEntry const* entry, char const* url)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientResolve(char const* relativePath, char const* const* searchPaths, uint32_t numSearchPaths, void* userData, OmniClientResolveCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientResolveSubscribeCallback)(void* userData, OmniClientResult result, OmniClientListEvent listEvent, struct OmniClientListEntry const* entry, char const* url)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientResolveSubscribe(char const* relativePath, char const* const* searchPaths, uint32_t numSearchPaths, void* userData, OmniClientResolveCallback callback, OmniClientResolveSubscribeCallback subscribeCallback)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientAddDefaultSearchPath(char const* searchPath)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientRemoveDefaultSearchPath(char const* searchPath)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(uint32_t)
    omniClientGetDefaultSearchPaths(char const** searchPaths, uint32_t maxSearchPaths)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientPushBaseUrl(char const* baseUrl)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(bool)
    omniClientPopBaseUrl(char const* baseUrl)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char const*)
    omniClientGetBaseUrl()
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientListCallback)(void* userData, OmniClientResult result, uint32_t numEntries, struct OmniClientListEntry const* entries)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientList(char const* url, void* userData, OmniClientListCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientListSubscribeCallback)(void* userData, OmniClientResult result, OmniClientListEvent listEvent, struct OmniClientListEntry const* entry)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientListSubscribe(char const* url, void* userData, OmniClientListCallback callback, OmniClientListSubscribeCallback subscribeCallback)
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientDeleteCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientDelete(char const* url, void* userData, OmniClientDeleteCallback callback)
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientCopyCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

typedef enum
{
    eOmniClientCopy_ErrorIfExists,
    eOmniClientCopy_Overwrite,
} OmniClientCopyBehavior;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientCopy(char const* srcUrl, char const* dstUrl, void* userData, OmniClientCopyCallback callback, OmniClientCopyBehavior behavior OMNICLIENT_DEFAULT(eOmniClientCopy_ErrorIfExists), const char* message OMNICLIENT_DEFAULT(nullptr))
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientMoveCallback)(void* userData, OmniClientResult result, bool copied)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientMove(char const* srcUrl, char const* dstUrl, void* userData, OmniClientMoveCallback callback, OmniClientCopyBehavior behavior OMNICLIENT_DEFAULT(eOmniClientCopy_ErrorIfExists), const char* message OMNICLIENT_DEFAULT(nullptr))
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientCreateFolderCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientCreateFolder(char const* url, void* userData, OmniClientCreateFolderCallback callback)
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientWriteFileCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientWriteFile(char const* url, struct OmniClientContent* content, void* userData, OmniClientWriteFileCallback callback, const char* message OMNICLIENT_DEFAULT(nullptr))
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientReadFileCallback)(void* userData, OmniClientResult result, char const* version, struct OmniClientContent* content)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientReadFile(char const* url, void* userData, OmniClientReadFileCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientGetLocalFileCallback)(void* userData, OmniClientResult result, char const* localFilePath)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientGetLocalFile(char const* url, void* userData, OmniClientGetLocalFileCallback callback)
    OMNICLIENT_NOEXCEPT;



typedef enum
{
    eOmniClientChannelEvent_Error, //< An unknown error occured
    eOmniClientChannelEvent_Message, //< Someone sent a message
    eOmniClientChannelEvent_Hello, //< You joined a channel that someone else was already in, and they said hello.
    eOmniClientChannelEvent_Join, //< Someone joined the channel
    eOmniClientChannelEvent_Left, //< Someone left the channel (as of Nucleus 114, the server does not appear to send these)
    eOmniClientChannelEvent_Deleted, //< Someone deleted the channel or changed ACLs so you no longer have access.

    Count_eOmniClientChannelEvent
} OmniClientChannelEvent;

typedef void
    (OMNICLIENT_ABI* OmniClientJoinChannelCallback)(void* userData, OmniClientResult result, OmniClientChannelEvent eventType, char const* from, struct OmniClientContent* content)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientJoinChannel(char const* url, void* userData, OmniClientJoinChannelCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientSendMessageCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientSendMessage(OmniClientRequestId joinRequestId, struct OmniClientContent* content, void* userData, OmniClientSendMessageCallback callback)
    OMNICLIENT_NOEXCEPT;



struct OmniClientAclEntry
{
    const char* name;
    uint32_t access;
};

typedef void
    (OMNICLIENT_ABI* OmniClientGetAclsCallback)(void* userData, OmniClientResult result, uint32_t numEntries, struct OmniClientAclEntry* entries)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientGetAcls(char const* url, void* userData, OmniClientGetAclsCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientSetAclsCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientSetAcls(char const* url, uint32_t numEntries, struct OmniClientAclEntry* entries, void* userData, OmniClientSetAclsCallback callback)
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientLockCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientLock(char const* url, void* userData, OmniClientLockCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientUnlockCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientUnlock(char const* url, void* userData, OmniClientUnlockCallback callback)
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientCreateCheckpointCallback)(void* userData, OmniClientResult result, char const * checkpointQuery)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientCreateCheckpoint(char const* url, char const* comment, bool force, void* userData, OmniClientCreateCheckpointCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientListCheckpointsCallback)(void* userData, OmniClientResult result, uint32_t numEntries, struct OmniClientListEntry const* entries)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientListCheckpoints(char const* url, void* userData, OmniClientListCheckpointsCallback callback)
    OMNICLIENT_NOEXCEPT;

struct OmniClientBranchAndCheckpoint
{
    char const* branch;
    uint64_t checkpoint;
};

OMNICLIENT_EXPORT(struct OmniClientBranchAndCheckpoint *)
    omniClientGetBranchAndCheckpointFromQuery(const char* query)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientFreeBranchAndCheckpoint(struct OmniClientBranchAndCheckpoint *)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(char*)
    omniClientMakeQueryFromBranchAndCheckpoint(char const* branch, uint64_t checkpoint, char* buffer, size_t* bufferSize)
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientGetGroupsCallback)(void* userData, OmniClientResult result, uint64_t count, const char** groups)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientGetGroups(char const* url, void* userData, OmniClientGetGroupsCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientGetGroupUsersCallback)(void* userData, OmniClientResult result, uint64_t count, const char** users)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientGetGroupUsers(char const* url, const char* group, void* userData, OmniClientGetGroupUsersCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientCreateGroupCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientCreateGroup(char const* url, const char* group, void* userData, OmniClientCreateGroupCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientRenameGroupCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientRenameGroup(char const* url, const char* group, const char* newGroup, void* userData, OmniClientRenameGroupCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientRemoveGroupCallback)(void* userData, OmniClientResult result, uint64_t changeCount)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientRemoveGroup(char const* url, const char* group, void* userData, OmniClientRemoveGroupCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientGetUsersCallback)(void* userData, OmniClientResult result, uint64_t count, const char** users)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientGetUsers(char const* url, void* userData, OmniClientGetUsersCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientGetUserGroupsCallback)(void* userData, OmniClientResult result, uint64_t count, const char** groups)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientGetUserGroups(char const* url, const char *user, void* userData, OmniClientGetUserGroupsCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientAddUserToGroupCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientAddUserToGroup(char const* url, const char* user, const char* group, void* userData, OmniClientAddUserToGroupCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientRemoveUserFromGroupCallback)(void* userData, OmniClientResult result)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientRemoveUserFromGroup(char const* url, const char* user, const char* group, void* userData, OmniClientRemoveUserFromGroupCallback callback)
    OMNICLIENT_NOEXCEPT;



typedef void
    (OMNICLIENT_ABI* OmniClientLiveQueuedCallback)()
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientLiveSetQueuedCallback(OmniClientLiveQueuedCallback callback)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientLiveProcess()
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientLiveProcessUpTo(const char* url, uint64_t serverTime)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(uint64_t)
    omniClientLiveGetLatestServerTime(const char* url)
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientLiveWaitForPendingUpdates()
    OMNICLIENT_NOEXCEPT;

OMNICLIENT_EXPORT(void)
    omniClientLiveConfigureJitterReduction(uint32_t delayConstantMilliseconds, uint32_t delayMultiple, uint32_t delayMaximumMilliseconds)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientLiveProcessUpdatesCallback)(void* userData)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(uint32_t)
    omniClientLiveRegisterProcessUpdatesCallback(void* userData, OmniClientLiveProcessUpdatesCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientLiveReadCallback)(void* userData, OmniClientResult result, uint64_t objectId, uint64_t sequenceNum, struct OmniClientContent* content)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientLiveRead(char const* url, uint64_t haveObjectId, uint64_t haveSequenceNum, void* userData, OmniClientLiveReadCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientLiveCreateCallback)(void * userData, OmniClientResult result, uint64_t objectId, uint64_t sequenceNum)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientLiveCreate(char const* url, struct OmniClientContent* content, void* userData, OmniClientLiveCreateCallback callback)
    OMNICLIENT_NOEXCEPT;

typedef void
    (OMNICLIENT_ABI* OmniClientLiveUpdateCallback)(void* userData, OmniClientResult result, uint64_t sequenceNum, uint64_t requestId)
    OMNICLIENT_CALLBACK_NOEXCEPT;

OMNICLIENT_EXPORT(OmniClientRequestId)
    omniClientLiveUpdate(char const* url, uint64_t objectId, struct OmniClientContent* content, void* userData, OmniClientLiveUpdateCallback callback)
    OMNICLIENT_NOEXCEPT;



OMNICLIENT_EXPORT(OmniClientResult)
    omniClientSetS3Configuration(char const* url, char const* bucket, char const* region,
        char const* accessKeyId, char const* secretAccessKey, char const* cloudfrontUrl, bool cloudfrontForList, bool writeConfig)
    OMNICLIENT_NOEXCEPT;