UNPKG

2.15 kBJavaScriptView Raw
1// Copyright 2011 Mark Cavage, Inc. All rights reserved.
2
3var assert = require('assert');
4var Ber = require('asn1').Ber;
5
6var Control = require('./control');
7var EntryChangeNotificationControl =
8 require('./entry_change_notification_control');
9var PersistentSearchControl = require('./persistent_search_control');
10var PagedResultsControl = require('./paged_results_control');
11var ServerSideSortingRequestControl =
12 require('./server_side_sorting_request_control.js');
13var ServerSideSortingResponseControl =
14 require('./server_side_sorting_response_control.js');
15
16
17
18///--- API
19
20module.exports = {
21
22 getControl: function getControl(ber) {
23 assert.ok(ber);
24
25 if (ber.readSequence() === null)
26 return null;
27
28 var type;
29 var opts = {
30 criticality: false,
31 value: null
32 };
33
34 if (ber.length) {
35 var end = ber.offset + ber.length;
36
37 type = ber.readString();
38 if (ber.offset < end) {
39 if (ber.peek() === Ber.Boolean)
40 opts.criticality = ber.readBoolean();
41 }
42
43 if (ber.offset < end)
44 opts.value = ber.readString(Ber.OctetString, true);
45 }
46
47 var control;
48 switch (type) {
49 case PersistentSearchControl.OID:
50 control = new PersistentSearchControl(opts);
51 break;
52 case EntryChangeNotificationControl.OID:
53 control = new EntryChangeNotificationControl(opts);
54 break;
55 case PagedResultsControl.OID:
56 control = new PagedResultsControl(opts);
57 break;
58 case ServerSideSortingRequestControl.OID:
59 control = new ServerSideSortingRequestControl(opts);
60 break;
61 case ServerSideSortingResponseControl.OID:
62 control = new ServerSideSortingResponseControl(opts);
63 break;
64 default:
65 opts.type = type;
66 control = new Control(opts);
67 break;
68 }
69
70 return control;
71 },
72
73 Control: Control,
74 EntryChangeNotificationControl: EntryChangeNotificationControl,
75 PagedResultsControl: PagedResultsControl,
76 PersistentSearchControl: PersistentSearchControl,
77 ServerSideSortingRequestControl: ServerSideSortingRequestControl,
78 ServerSideSortingResponseControl: ServerSideSortingResponseControl
79};