mirror of
https://github.com/espressif/openthread.git
synced 2026-08-14 14:47:46 +00:00
Configure PSKd as part of starting the commissioner/joiner role. (#547)
This commit is contained in:
@@ -49,8 +49,13 @@ extern "C" {
|
||||
/**
|
||||
* This function enables the Thread Commissioner role.
|
||||
*
|
||||
* @param[in] aPSKd A pointer to the PSKd.
|
||||
*
|
||||
* @retval kThreadError_None Successfully started the Commissioner role.
|
||||
* @retval kThreadError_InvalidArgs @p aPSKd is invalid.
|
||||
*
|
||||
*/
|
||||
ThreadError otCommissionerStart(void);
|
||||
ThreadError otCommissionerStart(const char *aPSKd);
|
||||
|
||||
/**
|
||||
* This function disables the Thread Commissioner role.
|
||||
|
||||
@@ -49,8 +49,13 @@ extern "C" {
|
||||
/**
|
||||
* This function enables the Thread Joiner role.
|
||||
*
|
||||
* @param[in] aPSKd A pointer to the PSKd.
|
||||
*
|
||||
* @retval kThreadError_None Successfully started the Commissioner role.
|
||||
* @retval kThreadError_InvalidArgs @p aPSKd is invalid.
|
||||
*
|
||||
*/
|
||||
ThreadError otJoinerStart(void);
|
||||
ThreadError otJoinerStart(const char *aPSKd);
|
||||
|
||||
/**
|
||||
* This function disables the Thread Joiner role.
|
||||
|
||||
+4
-2
@@ -1848,7 +1848,8 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
|
||||
if (strcmp(argv[0], "start") == 0)
|
||||
{
|
||||
otCommissionerStart();
|
||||
VerifyOrExit(argc > 1, error = kThreadError_Parse);
|
||||
otCommissionerStart(argv[1]);
|
||||
}
|
||||
else if (strcmp(argv[0], "stop") == 0)
|
||||
{
|
||||
@@ -1871,7 +1872,8 @@ void Interpreter::ProcessJoiner(int argc, char *argv[])
|
||||
|
||||
if (strcmp(argv[0], "start") == 0)
|
||||
{
|
||||
otJoinerStart();
|
||||
VerifyOrExit(argc > 1, error = kThreadError_Parse);
|
||||
otJoinerStart(argv[1]);
|
||||
}
|
||||
else if (strcmp(argv[0], "stop") == 0)
|
||||
{
|
||||
|
||||
@@ -59,12 +59,14 @@ Commissioner::Commissioner(ThreadNetif &aThreadNetif):
|
||||
aThreadNetif.GetCoapServer().AddResource(mRelayReceive);
|
||||
}
|
||||
|
||||
ThreadError Commissioner::Start(void)
|
||||
ThreadError Commissioner::Start(const char *aPSKd)
|
||||
{
|
||||
ThreadError error = kThreadError_None;
|
||||
|
||||
VerifyOrExit(mState == kStateDisabled, error = kThreadError_InvalidState);
|
||||
|
||||
SuccessOrExit(error = mNetif.GetDtls().SetPsk(reinterpret_cast<const uint8_t *>(aPSKd),
|
||||
static_cast<uint8_t>(strlen(aPSKd))));
|
||||
SuccessOrExit(error = mSocket.Open(HandleUdpReceive, this));
|
||||
mState = kStatePetition;
|
||||
SendPetition();
|
||||
|
||||
@@ -59,10 +59,12 @@ public:
|
||||
/**
|
||||
* This method starts the Commissioner service.
|
||||
*
|
||||
* @param[in] aPSKd A pointer to the PSKd.
|
||||
*
|
||||
* @retval kThreadError_None Successfully started the Commissioner service.
|
||||
*
|
||||
*/
|
||||
ThreadError Start(void);
|
||||
ThreadError Start(const char *aPSKd);
|
||||
|
||||
/**
|
||||
* This method stops the Commissioner service.
|
||||
|
||||
@@ -105,7 +105,7 @@ ThreadError Dtls::Start(bool aClient, ReceiveHandler aReceiveHandler, SendHandle
|
||||
mbedtls_ssl_set_bio(&mSsl, this, &HandleMbedtlsTransmit, HandleMbedtlsReceive, NULL);
|
||||
mbedtls_ssl_set_timer_cb(&mSsl, this, &HandleMbedtlsSetTimer, HandleMbedtlsGetTimer);
|
||||
|
||||
rval = mbedtls_ssl_set_hs_ecjpake_password(&mSsl, (const unsigned char *)"threadjpaketest", 15);
|
||||
rval = mbedtls_ssl_set_hs_ecjpake_password(&mSsl, mPsk, mPskLength);
|
||||
VerifyOrExit(rval == 0, ;);
|
||||
|
||||
mStarted = true;
|
||||
@@ -129,6 +129,19 @@ ThreadError Dtls::Stop(void)
|
||||
return kThreadError_None;
|
||||
}
|
||||
|
||||
ThreadError Dtls::SetPsk(const uint8_t *aPsk, uint8_t aPskLength)
|
||||
{
|
||||
ThreadError error = kThreadError_None;
|
||||
|
||||
VerifyOrExit(aPskLength <= sizeof(mPsk), error = kThreadError_InvalidArgs);
|
||||
|
||||
memcpy(mPsk, aPsk, aPskLength);
|
||||
mPskLength = aPskLength;
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
ThreadError Dtls::SetClientId(const uint8_t *aClientId, uint8_t aLength)
|
||||
{
|
||||
int rval = mbedtls_ssl_set_client_transport_id(&mSsl, aClientId, aLength);
|
||||
@@ -330,7 +343,7 @@ void Dtls::Process(void)
|
||||
else
|
||||
{
|
||||
mbedtls_ssl_session_reset(&mSsl);
|
||||
mbedtls_ssl_set_hs_ecjpake_password(&mSsl, (const unsigned char *)"threadjpaketest", 15);
|
||||
mbedtls_ssl_set_hs_ecjpake_password(&mSsl, mPsk, mPskLength);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,6 +104,17 @@ public:
|
||||
*/
|
||||
ThreadError Stop(void);
|
||||
|
||||
/**
|
||||
* This method sets the PSK.
|
||||
*
|
||||
* @param[in] aPSK A pointer to the PSK.
|
||||
*
|
||||
* @retval kThreadError_None Successfully set the PSK.
|
||||
* @retval kThreadError_InvalidArgs The PSK is invalid.
|
||||
*
|
||||
*/
|
||||
ThreadError SetPsk(const uint8_t *aPsk, uint8_t aPskLength);
|
||||
|
||||
/**
|
||||
* This method sets the Client ID used for generating the Hello Cookie.
|
||||
*
|
||||
@@ -148,6 +159,11 @@ public:
|
||||
ThreadError Receive(Message &aMessage, uint16_t aOffset, uint16_t aLength);
|
||||
|
||||
private:
|
||||
enum
|
||||
{
|
||||
kPskMaxLength = 32,
|
||||
};
|
||||
|
||||
static ThreadError MapError(int rval);
|
||||
|
||||
static void HandleMbedtlsDebug(void *ctx, int level, const char *file, int line, const char *str);
|
||||
@@ -175,6 +191,9 @@ private:
|
||||
|
||||
void Process(void);
|
||||
|
||||
uint8_t mPsk[kPskMaxLength];
|
||||
uint8_t mPskLength;
|
||||
|
||||
mbedtls_entropy_context mEntropy;
|
||||
mbedtls_ctr_drbg_context mCtrDrbg;
|
||||
mbedtls_ssl_context mSsl;
|
||||
|
||||
@@ -58,9 +58,16 @@ Joiner::Joiner(ThreadNetif &aNetif):
|
||||
mNetif.GetCoapServer().AddResource(mJoinerEntrust);
|
||||
}
|
||||
|
||||
ThreadError Joiner::Start(void)
|
||||
ThreadError Joiner::Start(const char *aPSKd)
|
||||
{
|
||||
return mNetif.GetMle().Discover(0, 0, OT_PANID_BROADCAST, HandleDiscoverResult, this);
|
||||
ThreadError error;
|
||||
|
||||
SuccessOrExit(error = mNetif.GetDtls().SetPsk(reinterpret_cast<const uint8_t *>(aPSKd),
|
||||
static_cast<uint8_t>(strlen(aPSKd))));
|
||||
SuccessOrExit(error = mNetif.GetMle().Discover(0, 0, OT_PANID_BROADCAST, HandleDiscoverResult, this));
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
void Joiner::HandleDiscoverResult(otActiveScanResult *aResult, void *aContext)
|
||||
|
||||
@@ -63,10 +63,12 @@ public:
|
||||
/**
|
||||
* This method starts the Joiner service.
|
||||
*
|
||||
* @param[in] aPSKd A pointer to the PSKd.
|
||||
*
|
||||
* @retval kThreadError_None Successfully started the Joiner service.
|
||||
*
|
||||
*/
|
||||
ThreadError Start(void);
|
||||
ThreadError Start(const char *aPSKd);
|
||||
|
||||
/**
|
||||
* This method stops the Joiner service.
|
||||
|
||||
@@ -1241,9 +1241,9 @@ ThreadError otSendPendingSet(const otOperationalDataset *aDataset, const uint8_t
|
||||
}
|
||||
|
||||
#if OPENTHREAD_ENABLE_COMMISSIONER
|
||||
ThreadError otCommissionerStart(void)
|
||||
ThreadError otCommissionerStart(const char *aPSKd)
|
||||
{
|
||||
return sThreadNetif->GetCommissioner().Start();
|
||||
return sThreadNetif->GetCommissioner().Start(aPSKd);
|
||||
}
|
||||
|
||||
ThreadError otCommissionerStop(void)
|
||||
@@ -1253,9 +1253,9 @@ ThreadError otCommissionerStop(void)
|
||||
#endif // OPENTHREAD_ENABLE_COMMISSIONER
|
||||
|
||||
#if OPENTHREAD_ENABLE_JOINER
|
||||
ThreadError otJoinerStart(void)
|
||||
ThreadError otJoinerStart(const char *aPSKd)
|
||||
{
|
||||
return sThreadNetif->GetJoiner().Start();
|
||||
return sThreadNetif->GetJoiner().Start(aPSKd);
|
||||
}
|
||||
|
||||
ThreadError otJoinerStop(void)
|
||||
|
||||
Reference in New Issue
Block a user