Ohm-Management - Projektarbeit B-ME
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

server_side_sorting_request_control.js 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. var assert = require('assert-plus');
  2. var util = require('util');
  3. var asn1 = require('asn1');
  4. var Control = require('./control');
  5. ///--- Globals
  6. var BerReader = asn1.BerReader;
  7. var BerWriter = asn1.BerWriter;
  8. ///--- API
  9. function ServerSideSortingRequestControl(options) {
  10. assert.optionalObject(options);
  11. options = options || {};
  12. options.type = ServerSideSortingRequestControl.OID;
  13. if (options.value) {
  14. if (Buffer.isBuffer(options.value)) {
  15. this.parse(options.value);
  16. } else if (Array.isArray(options.value)) {
  17. assert.arrayOfObject(options.value, 'options.value must be Objects');
  18. for (var i = 0; i < options.value.length; i++) {
  19. if (!options.value[i].hasOwnProperty('attributeType')) {
  20. throw new Error('Missing required key: attributeType');
  21. }
  22. }
  23. this._value = options.value;
  24. } else if (typeof (options.value) === 'object') {
  25. if (!options.value.hasOwnProperty('attributeType')) {
  26. throw new Error('Missing required key: attributeType');
  27. }
  28. this._value = [options.value];
  29. } else {
  30. throw new TypeError('options.value must be a Buffer, Array or Object');
  31. }
  32. options.value = null;
  33. }
  34. Control.call(this, options);
  35. }
  36. util.inherits(ServerSideSortingRequestControl, Control);
  37. Object.defineProperties(ServerSideSortingRequestControl.prototype, {
  38. value: {
  39. get: function () { return this._value || []; },
  40. configurable: false
  41. }
  42. });
  43. ServerSideSortingRequestControl.prototype.parse = function parse(buffer) {
  44. assert.ok(buffer);
  45. var ber = new BerReader(buffer);
  46. var item;
  47. if (ber.readSequence(0x30)) {
  48. this._value = [];
  49. while (ber.readSequence(0x30)) {
  50. item = {};
  51. item.attributeType = ber.readString(asn1.Ber.OctetString);
  52. if (ber.peek() == 0x80) {
  53. item.orderingRule = ber.readString(0x80);
  54. }
  55. if (ber.peek() == 0x81) {
  56. item.reverseOrder = (ber._readTag(0x81) === 0 ? false : true);
  57. }
  58. this._value.push(item);
  59. }
  60. return true;
  61. }
  62. return false;
  63. };
  64. ServerSideSortingRequestControl.prototype._toBer = function (ber) {
  65. assert.ok(ber);
  66. if (!this._value || this.value.length === 0)
  67. return;
  68. var writer = new BerWriter();
  69. writer.startSequence(0x30);
  70. for (var i = 0; i < this.value.length; i++) {
  71. var item = this.value[i];
  72. writer.startSequence(0x30);
  73. if (item.attributeType) {
  74. writer.writeString(item.attributeType, asn1.Ber.OctetString);
  75. }
  76. if (item.orderingRule) {
  77. writer.writeString(item.orderingRule, 0x80);
  78. }
  79. if (item.reverseOrder) {
  80. writer.writeBoolean(item.reverseOrder, 0x81);
  81. }
  82. writer.endSequence();
  83. }
  84. writer.endSequence();
  85. ber.writeBuffer(writer.buffer, 0x04);
  86. };
  87. ServerSideSortingRequestControl.prototype._json = function (obj) {
  88. obj.controlValue = this.value;
  89. return obj;
  90. };
  91. ServerSideSortingRequestControl.OID = '1.2.840.113556.1.4.473';
  92. ///---Exports
  93. module.exports = ServerSideSortingRequestControl;