From 6f07df7188fca31c0003549911515975ab573a26 Mon Sep 17 00:00:00 2001 From: Chad Sikorra Date: Sat, 6 Jun 2026 08:28:39 -0400 Subject: [PATCH 1/6] Clean up the server queue metric hooks. --- .../Ldap/Protocol/Queue/ServerQueue.php | 18 ++++++------------ .../Metrics/Snapshot/MetricsSnapshotTest.php | 10 ++++++++++ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/FreeDSx/Ldap/Protocol/Queue/ServerQueue.php b/src/FreeDSx/Ldap/Protocol/Queue/ServerQueue.php index e3c8e50e..6d76b50e 100644 --- a/src/FreeDSx/Ldap/Protocol/Queue/ServerQueue.php +++ b/src/FreeDSx/Ldap/Protocol/Queue/ServerQueue.php @@ -73,28 +73,22 @@ public function __construct( } /** - * Count the LDAP bytes received for a decoded request. - * - * @throws ProtocolException + * Count the LDAP bytes sent for each outgoing response. */ - protected function decode(string $bytes): Message + protected function onMessageEncoded(string $encoded): void { - $message = parent::decode($bytes); - $this->metricsRecorder->trafficObserved(new TrafficObservation( - bytesReceived: (int) $message->getLastPosition(), + bytesSent: strlen($encoded), )); - - return $message; } /** - * Count the LDAP bytes sent for each outgoing response. + * Count the LDAP bytes received for each decoded request. */ - protected function onMessageEncoded(string $encoded): void + protected function onMessageDecoded(Message $message): void { $this->metricsRecorder->trafficObserved(new TrafficObservation( - bytesSent: strlen($encoded), + bytesReceived: (int) $message->getLastPosition(), )); } diff --git a/tests/unit/Server/Metrics/Snapshot/MetricsSnapshotTest.php b/tests/unit/Server/Metrics/Snapshot/MetricsSnapshotTest.php index 24e064e6..fa57a103 100644 --- a/tests/unit/Server/Metrics/Snapshot/MetricsSnapshotTest.php +++ b/tests/unit/Server/Metrics/Snapshot/MetricsSnapshotTest.php @@ -17,6 +17,7 @@ use FreeDSx\Ldap\Server\Metrics\Snapshot\LifecycleMetrics; use FreeDSx\Ldap\Server\Metrics\Snapshot\MetricsSnapshot; use FreeDSx\Ldap\Server\Metrics\Snapshot\OperationMetrics; +use FreeDSx\Ldap\Server\Metrics\Snapshot\TrafficMetrics; use PHPUnit\Framework\TestCase; final class MetricsSnapshotTest extends TestCase @@ -37,12 +38,21 @@ protected function setUp(): void 2, 1, 0, + 5, ), new OperationMetrics( ['search' => 7], ['search' => 1], ['search' => 3.5], [0 => 6, 32 => 1], + ['simple' => 5, 'anonymous' => 2], + ['base' => 3, 'sub' => 4], + ), + ['search' => 2, 'bind' => 1], + new TrafficMetrics( + 4096, + 512, + 9, ), ); } From c9ba69cf59c19457b8cef1ba91d39f9e8b7afd46 Mon Sep 17 00:00:00 2001 From: Chad Sikorra Date: Sat, 6 Jun 2026 09:37:10 -0400 Subject: [PATCH 2/6] Add a dead code detector via phpstan. Mark the actual public api. --- composer.json | 3 +- phpstan.neon | 10 +++ phpstan.tests.neon | 8 +++ src/FreeDSx/Ldap/ClientOptions.php | 3 + .../Ldap/Control/Ad/DirSyncRequestControl.php | 2 + .../Control/Ad/DirSyncResponseControl.php | 2 + .../Control/Ad/ExpectedEntryCountControl.php | 2 + .../Ldap/Control/Ad/ExtendedDnControl.php | 2 + .../Ldap/Control/Ad/PolicyHintsControl.php | 2 + .../Ldap/Control/Ad/SdFlagsControl.php | 2 + .../Ldap/Control/Ad/SetOwnerControl.php | 2 + src/FreeDSx/Ldap/Control/AssertionControl.php | 2 + src/FreeDSx/Ldap/Control/Control.php | 2 + src/FreeDSx/Ldap/Control/ControlBag.php | 2 + src/FreeDSx/Ldap/Control/PagingControl.php | 2 + .../Control/ProxyAuthorizationControl.php | 2 + .../Ldap/Control/PwdPolicyResponseControl.php | 2 + .../ReadEntry/ReadEntryResponseControl.php | 2 + src/FreeDSx/Ldap/Control/Sorting/SortKey.php | 2 + .../Ldap/Control/Sorting/SortingControl.php | 2 + .../Sorting/SortingResponseControl.php | 2 + .../Ldap/Control/SubentriesControl.php | 2 + .../Ldap/Control/Sync/SyncDoneControl.php | 2 + .../Ldap/Control/Sync/SyncRequestControl.php | 2 + .../Ldap/Control/Sync/SyncStateControl.php | 2 + src/FreeDSx/Ldap/Control/Vlv/VlvControl.php | 2 + .../Ldap/Control/Vlv/VlvResponseControl.php | 2 + src/FreeDSx/Ldap/Controls.php | 2 + src/FreeDSx/Ldap/Entry/Attribute.php | 2 + src/FreeDSx/Ldap/Entry/Change.php | 2 + src/FreeDSx/Ldap/Entry/Changes.php | 2 + src/FreeDSx/Ldap/Entry/Entries.php | 2 + src/FreeDSx/Ldap/Entry/Entry.php | 2 + src/FreeDSx/Ldap/Entry/EscapeTrait.php | 4 ++ src/FreeDSx/Ldap/Entry/Option.php | 2 + src/FreeDSx/Ldap/Entry/Options.php | 2 + src/FreeDSx/Ldap/Entry/Rdn.php | 2 + .../Ldap/Exception/LdifParseException.php | 2 + .../Ldap/Exception/OperationException.php | 2 + .../Ldap/Exception/ReferralException.php | 2 + src/FreeDSx/Ldap/LdapClient.php | 2 + src/FreeDSx/Ldap/LdapServer.php | 2 + src/FreeDSx/Ldap/LdapUrl.php | 2 + src/FreeDSx/Ldap/LdapUrlExtension.php | 2 + src/FreeDSx/Ldap/Ldif/LdifChanges.php | 2 + src/FreeDSx/Ldap/Ldif/LdifOutputOptions.php | 2 + src/FreeDSx/Ldap/Ldif/LdifParser.php | 2 + src/FreeDSx/Ldap/Ldif/LdifWriter.php | 2 + .../Ldap/Ldif/Loader/FileLdifLoader.php | 2 + .../Ldap/Ldif/Output/FileLdifOutput.php | 2 + .../Ldap/Ldif/Output/StringLdifOutput.php | 2 + .../Ldap/Ldif/Parser/LdifLineCursor.php | 2 + src/FreeDSx/Ldap/Operation/LdapResult.php | 2 + .../Ldap/Operation/Request/AbandonRequest.php | 2 + .../Ldap/Operation/Request/AddRequest.php | 2 + .../Ldap/Operation/Request/BindRequest.php | 2 + .../Ldap/Operation/Request/CancelRequest.php | 2 + .../Ldap/Operation/Request/CompareRequest.php | 2 + .../Operation/Request/ExtendedRequest.php | 2 + .../Operation/Request/ModifyDnRequest.php | 2 + .../Ldap/Operation/Request/ModifyRequest.php | 2 + .../Request/PasswordModifyRequest.php | 2 + .../Ldap/Operation/Request/SearchRequest.php | 2 + .../Operation/Request/SimpleBindRequest.php | 2 + .../Response/IntermediateResponse.php | 2 + .../Response/PasswordModifyResponse.php | 2 + .../Operation/Response/SearchResponse.php | 2 + .../SyncInfo/SyncRefreshDoneTrait.php | 3 + src/FreeDSx/Ldap/Operations.php | 2 + .../Protocol/ProtocolElementInterface.php | 2 + src/FreeDSx/Ldap/ProxyOptions.php | 2 + .../Schema/Definition/AttributeTypeOid.php | 2 + .../Ldap/Schema/Definition/AttributeUsage.php | 3 + .../Schema/Definition/MatchingRuleOid.php | 2 + src/FreeDSx/Ldap/Schema/Schema.php | 2 + src/FreeDSx/Ldap/Search/DirSync.php | 2 + .../Filter/AttributeValueAssertionTrait.php | 5 ++ .../Search/Filter/FilterAttributeTrait.php | 5 ++ .../Filter/FilterContainerInterface.php | 2 + .../Search/Filter/FilterContainerTrait.php | 4 ++ .../Ldap/Search/Filter/MatchingRuleFilter.php | 2 + src/FreeDSx/Ldap/Search/Filter/NotFilter.php | 2 + .../Ldap/Search/Filter/PresentFilter.php | 2 + .../Ldap/Search/Filter/SubstringFilter.php | 2 + src/FreeDSx/Ldap/Search/Filters.php | 2 + src/FreeDSx/Ldap/Search/LdapQuery.php | 2 + src/FreeDSx/Ldap/Search/Paging.php | 2 + src/FreeDSx/Ldap/Search/RangeRetrieval.php | 2 + src/FreeDSx/Ldap/Search/Vlv.php | 2 + .../Ldap/Server/AccessControl/AclRules.php | 2 + .../AccessControl/Rule/AttributeRule.php | 2 + .../Server/AccessControl/Rule/ControlRule.php | 2 + .../AccessControl/Rule/OperationRule.php | 2 + .../Server/AccessControl/Subject/Subject.php | 2 + .../Server/AccessControl/Target/Target.php | 2 + .../Storage/Adapter/JsonFileStorage.php | 2 + .../Backend/Storage/Adapter/MysqlStorage.php | 2 + .../Pdo/PdoStorageFactoryInterface.php | 2 + .../Adapter/Pdo/PdoStorageFactoryTrait.php | 3 + .../Backend/Storage/Adapter/SqliteStorage.php | 2 + .../Backend/Storage/Export/DumpOptions.php | 2 + .../Server/Backend/Write/WriteContext.php | 2 + .../Ldap/Server/Logging/EventLogPolicy.php | 2 + .../Ldap/Server/Logging/EventLogger.php | 2 + .../Server/Operation/WriteOperationResult.php | 1 + .../Ldap/Server/Paging/PagingRequest.php | 2 + .../Decision/PasswordPolicyOutcome.php | 2 + .../Server/PasswordPolicy/PasswordPolicy.php | 2 + .../Rules/PasswordChangeRules.php | 2 + .../Rules/PasswordExpirationRules.php | 2 + .../Rules/PasswordLockoutRules.php | 2 + .../Rules/PasswordQualityRules.php | 2 + src/FreeDSx/Ldap/Server/RequestContext.php | 2 + src/FreeDSx/Ldap/Server/Token/AnonToken.php | 2 + src/FreeDSx/Ldap/Server/Token/BindToken.php | 2 + src/FreeDSx/Ldap/Server/Token/SystemToken.php | 2 + .../Ldap/Server/Token/TokenInterface.php | 2 + src/FreeDSx/Ldap/ServerOptions.php | 3 + .../Ldap/Sync/Result/SyncEntryResult.php | 3 + .../Ldap/Sync/Result/SyncIdSetResult.php | 2 + .../Ldap/Sync/Result/SyncReferralResult.php | 3 + .../Ldap/Sync/Result/SyncResultTrait.php | 17 +++++ src/FreeDSx/Ldap/Sync/Session.php | 3 + src/FreeDSx/Ldap/Sync/SyncRepl.php | 2 + .../PhpStan/ApiMemberUsageProvider.php | 65 +++++++++++++++++++ 125 files changed, 359 insertions(+), 1 deletion(-) create mode 100644 tests/support/PhpStan/ApiMemberUsageProvider.php diff --git a/composer.json b/composer.json index 29693707..cfa80c6f 100644 --- a/composer.json +++ b/composer.json @@ -31,7 +31,8 @@ "slevomat/coding-standard": "^7.2", "phpstan/phpstan-phpunit": "^2.0", "phpstan/extension-installer": "^1.4", - "swoole/ide-helper": "^6.0" + "swoole/ide-helper": "^6.0", + "shipmonk/dead-code-detector": "^1.2" }, "minimum-stability": "dev", "prefer-stable": true, diff --git a/phpstan.neon b/phpstan.neon index d23dec32..e26e37b8 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,3 +1,9 @@ +services: + - + class: Tests\Support\FreeDSx\Ldap\PhpStan\ApiMemberUsageProvider + tags: + - shipmonk.deadCode.memberUsageProvider + parameters: level: 9 paths: @@ -8,3 +14,7 @@ parameters: reportUnmatchedIgnoredErrors: false ignoreErrors: - '#Unsafe usage of new static\(\).#' + shipmonkDeadCode: + usageExcluders: + tests: + enabled: true diff --git a/phpstan.tests.neon b/phpstan.tests.neon index 09871428..8e72b96c 100644 --- a/phpstan.tests.neon +++ b/phpstan.tests.neon @@ -3,3 +3,11 @@ parameters: level: 10 paths: - %currentWorkingDirectory%/tests + reportUnmatchedIgnoredErrors: false + # Dead-code detection targets src; the test suite is intentionally exempt. + ignoreErrors: + - identifier: shipmonk.deadMethod + - identifier: shipmonk.deadConstant + - identifier: shipmonk.deadEnumCase + - identifier: shipmonk.deadProperty.neverRead + - identifier: shipmonk.deadProperty.neverWritten diff --git a/src/FreeDSx/Ldap/ClientOptions.php b/src/FreeDSx/Ldap/ClientOptions.php index a6561840..ab3d1b0d 100644 --- a/src/FreeDSx/Ldap/ClientOptions.php +++ b/src/FreeDSx/Ldap/ClientOptions.php @@ -15,6 +15,9 @@ use FreeDSx\Ldap\Control\ControlBag; +/** + * @api + */ final class ClientOptions { private int $version = 3; diff --git a/src/FreeDSx/Ldap/Control/Ad/DirSyncRequestControl.php b/src/FreeDSx/Ldap/Control/Ad/DirSyncRequestControl.php index 650ded33..c75da035 100644 --- a/src/FreeDSx/Ldap/Control/Ad/DirSyncRequestControl.php +++ b/src/FreeDSx/Ldap/Control/Ad/DirSyncRequestControl.php @@ -32,6 +32,8 @@ * Cookie OCTET STRING * } * + * @api + * * @see https://msdn.microsoft.com/en-us/library/cc223347.aspx * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Control/Ad/DirSyncResponseControl.php b/src/FreeDSx/Ldap/Control/Ad/DirSyncResponseControl.php index b4023e67..c15b83e1 100644 --- a/src/FreeDSx/Ldap/Control/Ad/DirSyncResponseControl.php +++ b/src/FreeDSx/Ldap/Control/Ad/DirSyncResponseControl.php @@ -32,6 +32,8 @@ * CookieServer OCTET STRING * } * + * @api + * * @see https://msdn.microsoft.com/en-us/library/cc223347.aspx * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Control/Ad/ExpectedEntryCountControl.php b/src/FreeDSx/Ldap/Control/Ad/ExpectedEntryCountControl.php index 8b53a709..76d41416 100644 --- a/src/FreeDSx/Ldap/Control/Ad/ExpectedEntryCountControl.php +++ b/src/FreeDSx/Ldap/Control/Ad/ExpectedEntryCountControl.php @@ -31,6 +31,8 @@ * searchEntriesMax INTEGER * } * + * @api + * * @see https://msdn.microsoft.com/en-us/library/jj216720.aspx * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Control/Ad/ExtendedDnControl.php b/src/FreeDSx/Ldap/Control/Ad/ExtendedDnControl.php index 163e95f2..f62cfcc1 100644 --- a/src/FreeDSx/Ldap/Control/Ad/ExtendedDnControl.php +++ b/src/FreeDSx/Ldap/Control/Ad/ExtendedDnControl.php @@ -27,6 +27,8 @@ /** * Used to represent the Extended DN control. * + * @api + * * @see https://msdn.microsoft.com/en-us/library/cc223349.aspx * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Control/Ad/PolicyHintsControl.php b/src/FreeDSx/Ldap/Control/Ad/PolicyHintsControl.php index 231ac7d7..93aa41e8 100644 --- a/src/FreeDSx/Ldap/Control/Ad/PolicyHintsControl.php +++ b/src/FreeDSx/Ldap/Control/Ad/PolicyHintsControl.php @@ -29,6 +29,8 @@ * Flags INTEGER * } * + * @api + * * @see https://msdn.microsoft.com/en-us/library/hh128228.aspx * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Control/Ad/SdFlagsControl.php b/src/FreeDSx/Ldap/Control/Ad/SdFlagsControl.php index 0d6a7f36..641f0181 100644 --- a/src/FreeDSx/Ldap/Control/Ad/SdFlagsControl.php +++ b/src/FreeDSx/Ldap/Control/Ad/SdFlagsControl.php @@ -24,6 +24,8 @@ * Flags INTEGER * } * + * @api + * * @see https://msdn.microsoft.com/en-us/library/cc223323.aspx * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Control/Ad/SetOwnerControl.php b/src/FreeDSx/Ldap/Control/Ad/SetOwnerControl.php index fe78b87d..092d7cbc 100644 --- a/src/FreeDSx/Ldap/Control/Ad/SetOwnerControl.php +++ b/src/FreeDSx/Ldap/Control/Ad/SetOwnerControl.php @@ -27,6 +27,8 @@ * * SID octetString * + * @api + * * https://msdn.microsoft.com/en-us/library/dn392490.aspx * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Control/AssertionControl.php b/src/FreeDSx/Ldap/Control/AssertionControl.php index f934e5e6..bd6e7271 100644 --- a/src/FreeDSx/Ldap/Control/AssertionControl.php +++ b/src/FreeDSx/Ldap/Control/AssertionControl.php @@ -23,6 +23,8 @@ * * The operation proceeds only if the filter matches the target entry. * + * @api + * * @author Chad Sikorra */ class AssertionControl extends Control diff --git a/src/FreeDSx/Ldap/Control/Control.php b/src/FreeDSx/Ldap/Control/Control.php index f27a829d..6a840832 100644 --- a/src/FreeDSx/Ldap/Control/Control.php +++ b/src/FreeDSx/Ldap/Control/Control.php @@ -35,6 +35,8 @@ * criticality BOOLEAN DEFAULT FALSE, * controlValue OCTET STRING OPTIONAL } * + * @api + * * @author Chad Sikorra */ class Control implements ProtocolElementInterface, Stringable diff --git a/src/FreeDSx/Ldap/Control/ControlBag.php b/src/FreeDSx/Ldap/Control/ControlBag.php index 59902318..49fcdd7f 100644 --- a/src/FreeDSx/Ldap/Control/ControlBag.php +++ b/src/FreeDSx/Ldap/Control/ControlBag.php @@ -26,6 +26,8 @@ /** * Represents a set of controls. * + * @api + * * @implements IteratorAggregate * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Control/PagingControl.php b/src/FreeDSx/Ldap/Control/PagingControl.php index cdae3b12..74bee15e 100644 --- a/src/FreeDSx/Ldap/Control/PagingControl.php +++ b/src/FreeDSx/Ldap/Control/PagingControl.php @@ -31,6 +31,8 @@ * -- result set size estimate from server * cookie OCTET STRING } * + * @api + * * @author Chad Sikorra */ class PagingControl extends Control diff --git a/src/FreeDSx/Ldap/Control/ProxyAuthorizationControl.php b/src/FreeDSx/Ldap/Control/ProxyAuthorizationControl.php index 6ec87eb8..2481eaf7 100644 --- a/src/FreeDSx/Ldap/Control/ProxyAuthorizationControl.php +++ b/src/FreeDSx/Ldap/Control/ProxyAuthorizationControl.php @@ -20,6 +20,8 @@ /** * Represents a proxied authorization control. RFC 4370. * + * @api + * * @author Chad Sikorra */ final class ProxyAuthorizationControl extends Control diff --git a/src/FreeDSx/Ldap/Control/PwdPolicyResponseControl.php b/src/FreeDSx/Ldap/Control/PwdPolicyResponseControl.php index 05228704..3870b432 100644 --- a/src/FreeDSx/Ldap/Control/PwdPolicyResponseControl.php +++ b/src/FreeDSx/Ldap/Control/PwdPolicyResponseControl.php @@ -40,6 +40,8 @@ * passwordTooYoung (7), * passwordInHistory (8) } OPTIONAL } * + * @api + * * @author Chad Sikorra */ class PwdPolicyResponseControl extends Control diff --git a/src/FreeDSx/Ldap/Control/ReadEntry/ReadEntryResponseControl.php b/src/FreeDSx/Ldap/Control/ReadEntry/ReadEntryResponseControl.php index 5af55d1c..36631eb9 100644 --- a/src/FreeDSx/Ldap/Control/ReadEntry/ReadEntryResponseControl.php +++ b/src/FreeDSx/Ldap/Control/ReadEntry/ReadEntryResponseControl.php @@ -24,6 +24,8 @@ * * Carries the entry state as a SearchResultEntry. * + * @api + * * @author Chad Sikorra */ abstract class ReadEntryResponseControl extends Control diff --git a/src/FreeDSx/Ldap/Control/Sorting/SortKey.php b/src/FreeDSx/Ldap/Control/Sorting/SortKey.php index ac53686c..d1ce2295 100644 --- a/src/FreeDSx/Ldap/Control/Sorting/SortKey.php +++ b/src/FreeDSx/Ldap/Control/Sorting/SortKey.php @@ -16,6 +16,8 @@ /** * Represents a server side sorting request SortKey. * + * @api + * * @author Chad Sikorra */ class SortKey diff --git a/src/FreeDSx/Ldap/Control/Sorting/SortingControl.php b/src/FreeDSx/Ldap/Control/Sorting/SortingControl.php index 4cf4381b..66c7a669 100644 --- a/src/FreeDSx/Ldap/Control/Sorting/SortingControl.php +++ b/src/FreeDSx/Ldap/Control/Sorting/SortingControl.php @@ -33,6 +33,8 @@ * orderingRule [0] MatchingRuleId OPTIONAL, * reverseOrder [1] BOOLEAN DEFAULT FALSE } * + * @api + * * @author Chad Sikorra */ class SortingControl extends Control diff --git a/src/FreeDSx/Ldap/Control/Sorting/SortingResponseControl.php b/src/FreeDSx/Ldap/Control/Sorting/SortingResponseControl.php index 4dc88c70..32913cec 100644 --- a/src/FreeDSx/Ldap/Control/Sorting/SortingResponseControl.php +++ b/src/FreeDSx/Ldap/Control/Sorting/SortingResponseControl.php @@ -49,6 +49,8 @@ * }, * attributeType [0] AttributeDescription OPTIONAL } * + * @api + * * @author Chad Sikorra */ class SortingResponseControl extends Control diff --git a/src/FreeDSx/Ldap/Control/SubentriesControl.php b/src/FreeDSx/Ldap/Control/SubentriesControl.php index 9f7a2452..80f78ffb 100644 --- a/src/FreeDSx/Ldap/Control/SubentriesControl.php +++ b/src/FreeDSx/Ldap/Control/SubentriesControl.php @@ -22,6 +22,8 @@ /** * Represents a subentries control. RFC 3672. * + * @api + * * @author Chad Sikorra */ class SubentriesControl extends Control diff --git a/src/FreeDSx/Ldap/Control/Sync/SyncDoneControl.php b/src/FreeDSx/Ldap/Control/Sync/SyncDoneControl.php index 5cfc30a5..3337b817 100644 --- a/src/FreeDSx/Ldap/Control/Sync/SyncDoneControl.php +++ b/src/FreeDSx/Ldap/Control/Sync/SyncDoneControl.php @@ -31,6 +31,8 @@ * refreshDeletes BOOLEAN DEFAULT FALSE * } * + * @api + * * @author Chad Sikorra */ class VlvControl extends Control diff --git a/src/FreeDSx/Ldap/Control/Vlv/VlvResponseControl.php b/src/FreeDSx/Ldap/Control/Vlv/VlvResponseControl.php index 6b673a82..59e72e5f 100644 --- a/src/FreeDSx/Ldap/Control/Vlv/VlvResponseControl.php +++ b/src/FreeDSx/Ldap/Control/Vlv/VlvResponseControl.php @@ -45,6 +45,8 @@ * ... }, * contextID OCTET STRING OPTIONAL } * + * @api + * * @author Chad Sikorra */ class VlvResponseControl extends Control diff --git a/src/FreeDSx/Ldap/Controls.php b/src/FreeDSx/Ldap/Controls.php index 832b92f4..a509374d 100644 --- a/src/FreeDSx/Ldap/Controls.php +++ b/src/FreeDSx/Ldap/Controls.php @@ -38,6 +38,8 @@ /** * Provides some simple factory methods for building controls. * + * @api + * * @author Chad Sikorra */ class Controls diff --git a/src/FreeDSx/Ldap/Entry/Attribute.php b/src/FreeDSx/Ldap/Entry/Attribute.php index e111c3fa..e68c0857 100644 --- a/src/FreeDSx/Ldap/Entry/Attribute.php +++ b/src/FreeDSx/Ldap/Entry/Attribute.php @@ -33,6 +33,8 @@ /** * Represents an entry attribute and any values. * + * @api + * * @implements IteratorAggregate * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Entry/Change.php b/src/FreeDSx/Ldap/Entry/Change.php index d6a25e69..3f730e8f 100644 --- a/src/FreeDSx/Ldap/Entry/Change.php +++ b/src/FreeDSx/Ldap/Entry/Change.php @@ -18,6 +18,8 @@ /** * Represents an entry change. * + * @api + * * @author Chad Sikorra */ class Change diff --git a/src/FreeDSx/Ldap/Entry/Changes.php b/src/FreeDSx/Ldap/Entry/Changes.php index aa8c5fdb..fba2b6c8 100644 --- a/src/FreeDSx/Ldap/Entry/Changes.php +++ b/src/FreeDSx/Ldap/Entry/Changes.php @@ -24,6 +24,8 @@ /** * Represents a set of change objects. * + * @api + * * @implements IteratorAggregate * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Entry/Entries.php b/src/FreeDSx/Ldap/Entry/Entries.php index 9dc4c5fa..5ced356e 100644 --- a/src/FreeDSx/Ldap/Entry/Entries.php +++ b/src/FreeDSx/Ldap/Entry/Entries.php @@ -29,6 +29,8 @@ /** * Represents a collection of entry objects. * + * @api + * * @author Chad Sikorra * * @implements IteratorAggregate diff --git a/src/FreeDSx/Ldap/Entry/Entry.php b/src/FreeDSx/Ldap/Entry/Entry.php index 5dcbdb7d..9f115938 100644 --- a/src/FreeDSx/Ldap/Entry/Entry.php +++ b/src/FreeDSx/Ldap/Entry/Entry.php @@ -26,6 +26,8 @@ /** * Represents an Entry in LDAP. * + * @api + * * @implements IteratorAggregate * @author Chad Sikorra */ diff --git a/src/FreeDSx/Ldap/Entry/EscapeTrait.php b/src/FreeDSx/Ldap/Entry/EscapeTrait.php index d5ebeca0..ba946357 100644 --- a/src/FreeDSx/Ldap/Entry/EscapeTrait.php +++ b/src/FreeDSx/Ldap/Entry/EscapeTrait.php @@ -22,12 +22,16 @@ /** * Some common methods around escaping attribute values and RDN values. * + * @api + * * @author Chad Sikorra */ trait EscapeTrait { /** * Escape all characters in a value. + * + * @api */ public static function escapeAll(string $value): string { diff --git a/src/FreeDSx/Ldap/Entry/Option.php b/src/FreeDSx/Ldap/Entry/Option.php index 830bdec3..f6394c73 100644 --- a/src/FreeDSx/Ldap/Entry/Option.php +++ b/src/FreeDSx/Ldap/Entry/Option.php @@ -22,6 +22,8 @@ /** * Represents an attribute option. Described in RFC 4512, Section 2.5.2. * + * @api + * * @author Chad Sikorra */ class Option implements Stringable diff --git a/src/FreeDSx/Ldap/Entry/Options.php b/src/FreeDSx/Ldap/Entry/Options.php index e00cac0a..8f432c84 100644 --- a/src/FreeDSx/Ldap/Entry/Options.php +++ b/src/FreeDSx/Ldap/Entry/Options.php @@ -25,6 +25,8 @@ /** * Represents a collection of attribute options. * + * @api + * * @implements IteratorAggregate