OCStackResult OCSecure::setOwnerTransferCallbackData(OicSecOxm_t oxm,
            OTMCallbackData_t* callbackData, InputPinCallback inputPin)
    {
        if(NULL == callbackData || oxm >= OIC_OXM_COUNT)
        {
            oclog() <<"Invalid callbackData or OXM type";
            return OC_STACK_INVALID_PARAM;
        }

        if((OIC_RANDOM_DEVICE_PIN == oxm) && !inputPin)
        {
            oclog() <<"for OXM type DEVICE_PIN, inputPin callback can't be null";
            return OC_STACK_INVALID_PARAM;
        }

        OCStackResult result;
        auto cLock = OCPlatform_impl::Instance().csdkLock().lock();

        if(cLock)
        {
            std::lock_guard<std::recursive_mutex> lock(*cLock);
            result = OCSetOwnerTransferCallbackData(oxm, callbackData);
            if(result == OC_STACK_OK && (OIC_RANDOM_DEVICE_PIN == oxm))
            {
                SetInputPinCB(inputPin);
            }
        }
        else
        {
            oclog() <<"Mutex not found";
            result = OC_STACK_ERROR;
        }

        return result;

    }
Exemplo n.º 2
0
// function(s) for provisioning client using C-level provisioning API
static int initProvisionClient(void)
{
    // initialize persistent storage for SVR DB
    static OCPersistentStorage pstStr =
    {
        .open = fopen_prvnMng,
        .read = fread,
        .write = fwrite,
        .close = fclose,
        .unlink = unlink
    };
    if(OC_STACK_OK != OCRegisterPersistentStorageHandler(&pstStr))
    {
        OIC_LOG(ERROR, TAG, "OCRegisterPersistentStorageHandler error");
        return -1;
    }

    // initialize OC stack and provisioning manager
    if(OC_STACK_OK != OCInit(NULL, 0, OC_CLIENT_SERVER))
    {
        OIC_LOG(ERROR, TAG, "OCStack init error");
        return -1;
    }

    if (access(PRVN_DB_FILE_NAME, F_OK) != -1)
    {
        printf("************************************************************\n");
        printf("************Provisioning DB file already exists.************\n");
        printf("************************************************************\n");
    }
    else
    {
        printf("*************************************************************\n");
        printf("************No provisioning DB file, creating new************\n");
        printf("*************************************************************\n");
    }

    if(OC_STACK_OK != OCInitPM(PRVN_DB_FILE_NAME))
    {
        OIC_LOG(ERROR, TAG, "OC_PM init error");
        return -1;
    }

    // register callback function(s) to each OxM
    OTMCallbackData_t otmcb =
    {
        .loadSecretCB = LoadSecretJustWorksCallback,
        .createSecureSessionCB = CreateSecureSessionJustWorksCallback,
        .createSelectOxmPayloadCB = CreateJustWorksSelectOxmPayload,
        .createOwnerTransferPayloadCB = CreateJustWorksOwnerTransferPayload
    };
    if(OC_STACK_OK != OCSetOwnerTransferCallbackData(OIC_JUST_WORKS, &otmcb))
    {
        OIC_LOG(ERROR, TAG, "OCSetOwnerTransferCallbackData error: OIC_JUST_WORKS");
        return -1;
    }
    otmcb.loadSecretCB = InputPinCodeCallback;
    otmcb.createSecureSessionCB = CreateSecureSessionRandomPinCallback;
    otmcb.createSelectOxmPayloadCB = CreatePinBasedSelectOxmPayload;
    otmcb.createOwnerTransferPayloadCB = CreatePinBasedOwnerTransferPayload;
    if(OC_STACK_OK != OCSetOwnerTransferCallbackData(OIC_RANDOM_DEVICE_PIN, &otmcb))
    {
        OIC_LOG(ERROR, TAG, "OCSetOwnerTransferCallbackData error: OIC_RANDOM_DEVICE_PIN");
        return -1;
    }
    SetInputPinCB(inputPinCB);

    return 0;
}