Skip to content

Commit

Permalink
Add utility to get user default values for configurable parameters fo… (
Browse files Browse the repository at this point in the history
project-chip#33056)

* Add utility to get user default values for configurable parameters for darwin

- Add support for getting a user default value for the SRP resolve timeout for DNS-SD. If user default
  value exists, ovveride the timeout.

- Update the SRP resolve timeout to 3 secs

The default can be set by using `defaults write org.csa-iot.matter.darwindefaults SRPTimeoutOverride <timeoutinMsecs>`

* Restyled by whitespace

* Restyled by clang-format

* Restyled by gn

* Address review comments

* Restyled by clang-format

* Add a check for filtering negative values and returning 0

* Apply suggestions from code review

Co-authored-by: Boris Zbarsky <[email protected]>

* Return an optional uint16_t value from GetUserDefaultDnssdSRPTimeoutInMSecs

* Restyled by clang-format

* Move the inclusion of optional header file in UserDefaults.h

* Include UserDefaults.h header in UserDefaults.mm file

* Include header cstdint from UserDefaults.h

---------

Co-authored-by: Restyled.io <[email protected]>
Co-authored-by: Boris Zbarsky <[email protected]>
  • Loading branch information
3 people authored Apr 20, 2024
1 parent b008715 commit b4650b9
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/platform/Darwin/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ static_library("Darwin") {
"PosixConfig.h",
"SystemPlatformConfig.h",
"SystemTimeSupport.cpp",
"UserDefaults.h",
"UserDefaults.mm",
]

if (chip_enable_wifi) {
Expand Down
10 changes: 9 additions & 1 deletion src/platform/Darwin/DnssdImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "DnssdImpl.h"
#include "DnssdType.h"
#include "MdnsError.h"
#include "UserDefaults.h"

#include <cstdio>

Expand All @@ -29,6 +30,7 @@

using namespace chip::Dnssd;
using namespace chip::Dnssd::Internal;
using namespace chip::Platform;

namespace {

Expand Down Expand Up @@ -76,8 +78,14 @@ void LogOnFailure(const char * name, DNSServiceErrorType err)
*/
CHIP_ERROR StartSRPTimer(uint16_t timeoutInMSecs, ResolveContext * ctx)
{
// Check to see if a user default value exists for the SRP timeout. If it does, override the timeoutInMSecs with user default
// value. To override the timeout value, use ` defaults write org.csa-iot.matter.darwin SRPTimeoutInMSecsOverride
// <timeoutinMsecs>` See UserDefaults.mm for details.
timeoutInMSecs = GetUserDefaultDnssdSRPTimeoutInMSecs().value_or(timeoutInMSecs);

VerifyOrReturnValue(ctx != nullptr, CHIP_ERROR_INCORRECT_STATE);
ChipLogProgress(Discovery, "Starting timer to wait for possible SRP resolve results for %s", ctx->instanceName.c_str());
ChipLogProgress(Discovery, "Starting timer to wait for %d milliseconds for possible SRP resolve results for %s", timeoutInMSecs,
ctx->instanceName.c_str());
return chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Milliseconds16(timeoutInMSecs),
ResolveContext::SRPTimerExpiredCallback, static_cast<void *>(ctx));
}
Expand Down
4 changes: 2 additions & 2 deletions src/platform/Darwin/DnssdImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -262,8 +262,8 @@ struct ResolveContext : public GenericContext
std::shared_ptr<uint32_t> consumerCounter;
BrowseContext * const browseThatCausedResolve; // Can be null

// Indicates whether the timer for 250 msecs should be started
// to give the resolve on SRP domain some extra time to complete.
// Indicates whether the timer should be started to give the resolve
// on SRP domain some extra time to complete.
bool shouldStartSRPTimerForResolve = false;
bool isSRPTimerRunning = false;

Expand Down
28 changes: 28 additions & 0 deletions src/platform/Darwin/UserDefaults.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright (c) 2024 Project CHIP Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#pragma once

#include <cstdint>
#include <optional>

namespace chip {
namespace Platform {

std::optional<uint16_t> GetUserDefaultDnssdSRPTimeoutInMSecs();

} // namespace Platform
} // namespace chip
43 changes: 43 additions & 0 deletions src/platform/Darwin/UserDefaults.mm
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
*
* Copyright (c) 2024 Project CHIP Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include "UserDefaults.h"
#include <lib/support/SafeInt.h>
#include <lib/support/logging/CHIPLogging.h>

#import <Foundation/Foundation.h>

static NSString * const kUserDefaultDomain = @"org.csa-iot.matter.darwin";
static NSString * const kSRPTimeoutInMsecsUserDefaultKey = @"SRPTimeoutInMSecsOverride";

namespace chip {
namespace Platform {

std::optional<uint16_t> GetUserDefaultDnssdSRPTimeoutInMSecs()
{
NSUserDefaults * defaults = [[NSUserDefaults alloc] initWithSuiteName:kUserDefaultDomain];
NSInteger srpTimeoutValue = [defaults integerForKey:kSRPTimeoutInMsecsUserDefaultKey];
if (CanCastTo<uint16_t>(srpTimeoutValue)) {
uint16_t timeoutinMsecs = static_cast<uint16_t>(srpTimeoutValue);
ChipLogProgress(Discovery, "Got a user default value for Dnssd SRP timeout - %d msecs", timeoutinMsecs);
return std::make_optional(timeoutinMsecs);
}
return std::nullopt;
}

} // namespace Platform
} // namespace chip

0 comments on commit b4650b9

Please sign in to comment.