示例#1
0
EXPORT UNSIGNED32 STDCALL TaggantInitializeLibrary(__in_opt TAGGANTFUNCTIONS *pFuncs, __out UNSIGNED64 *puVersion)
{
    /* Get the pointer to callbacks structure */
    TAGGANTFUNCTIONS* callbacks = get_callbacks();
    /* Initialize structure  */
    memset(callbacks, 0, sizeof(TAGGANTFUNCTIONS));
    if (pFuncs != NULL)
    {
        memcpy((char*)callbacks, (char*)pFuncs, get_min((unsigned long)pFuncs->size, sizeof(TAGGANTFUNCTIONS)));
    }
    callbacks->size = sizeof(TAGGANTFUNCTIONS);
    /* If any of memory callbacks are NULL then redirect them to internal callbacks */
    if (callbacks->MemoryAllocCallBack == NULL || callbacks->MemoryFreeCallBack == NULL || callbacks->MemoryReallocCallBack == NULL)
    {
        callbacks->MemoryAllocCallBack = (void* (__DECLARATION*)(size_t))&internal_alloc;
        callbacks->MemoryFreeCallBack = (void (__DECLARATION*)(void*))&internal_free;
        callbacks->MemoryReallocCallBack = (void* (__DECLARATION*)(void*, size_t))&internal_realloc;
    }
    CRYPTO_set_mem_functions(memory_alloc, memory_realloc, memory_free);
    ERR_load_crypto_strings();
    OpenSSL_add_all_algorithms();

    /* Return the maximim version number supported by the library */
    *puVersion = TAGGANT_LIBRARY_CURRENTVERSION;

    lib_initialized = 1;
    return TNOERR;
}
dmclt_session * omadmclient_session_init(bool useWbxml)
{
    internals_t *        internP;
    SmlInstanceOptions_t options;
    SmlCallbacksPtr_t    callbacksP;

    internP = (internals_t *)malloc(sizeof(internals_t));
    if (!internP)
    {
        return NULL;
    }

    memset(internP, 0, sizeof(internals_t));

    memset(&options, 0, sizeof(options));
    if (useWbxml)
    {
        options.encoding= SML_WBXML;
    }
    else
    {
        options.encoding= SML_XML;
    }
    options.workspaceSize= PRV_MAX_WORKSPACE_SIZE;

    callbacksP = get_callbacks();

    if (SML_ERR_OK != smlInitInstance(callbacksP, &options, NULL, &(internP->smlH)))
    {
        omadmclient_session_close((void**)internP);
        free(internP);
        internP = NULL;
    }

    if (OMADM_SYNCML_ERROR_NONE != dmtree_open(&(internP->dmtreeH)))
    {
        omadmclient_session_close((void**)internP);
        free(internP);
        internP = NULL;
    }
 
    return (dmclt_session)internP;
}