protected function getLdapControl($value)
    {
        $values = explode(' ', $value);

        // This should never happen, but it seems better to cover it in case...
        if (empty($values) || $values === false) {
            $this->throwException(sprintf('Expecting a LDAP control but got "%s"', $value));
        }
        // The first value should be an actual OID...
        if (!preg_match(LdapUtilities::MATCH_OID, $values[0])) {
            $this->throwException(sprintf('The control directive has an invalid OID format "%s"', $values[0]));
        }

        $control = new LdapControl($values[0]);
        if (isset($values[1])) {
            $control->setCriticality($this->getBoolFromStringBool($values[1]));
        }
        if (isset($values[2])) {
            $control->setValue($values[2]);
        }

        return $control;
    }