// Copyright 2011 Mark Cavage, Inc. All rights reserved. var assert = require('assert'); var Ber = require('asn1').Ber; var Control = require('./control'); var EntryChangeNotificationControl = require('./entry_change_notification_control'); var PersistentSearchControl = require('./persistent_search_control'); var PagedResultsControl = require('./paged_results_control'); var ServerSideSortingRequestControl = require('./server_side_sorting_request_control.js'); var ServerSideSortingResponseControl = require('./server_side_sorting_response_control.js'); ///--- API module.exports = { getControl: function getControl(ber) { assert.ok(ber); if (ber.readSequence() === null) return null; var type; var opts = { criticality: false, value: null }; if (ber.length) { var end = ber.offset + ber.length; type = ber.readString(); if (ber.offset < end) { if (ber.peek() === Ber.Boolean) opts.criticality = ber.readBoolean(); } if (ber.offset < end) opts.value = ber.readString(Ber.OctetString, true); } var control; switch (type) { case PersistentSearchControl.OID: control = new PersistentSearchControl(opts); break; case EntryChangeNotificationControl.OID: control = new EntryChangeNotificationControl(opts); break; case PagedResultsControl.OID: control = new PagedResultsControl(opts); break; case ServerSideSortingRequestControl.OID: control = new ServerSideSortingRequestControl(opts); break; case ServerSideSortingResponseControl.OID: control = new ServerSideSortingResponseControl(opts); break; default: opts.type = type; control = new Control(opts); break; } return control; }, Control: Control, EntryChangeNotificationControl: EntryChangeNotificationControl, PagedResultsControl: PagedResultsControl, PersistentSearchControl: PersistentSearchControl, ServerSideSortingRequestControl: ServerSideSortingRequestControl, ServerSideSortingResponseControl: ServerSideSortingResponseControl };