Source: control-response.js

/**
 * Copyright (C) 2016 Regents of the University of California.
 * @author: Jeff Thompson <[email protected]>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * A copy of the GNU Lesser General Public License is in the file COPYING.
 */

/** @ignore */
var ControlParameters = require('./control-parameters.js').ControlParameters; /** @ignore */
var WireFormat = require('./encoding/wire-format.js').WireFormat; /** @ignore */
var Blob = require('./util/blob.js').Blob;

/**
 * A ControlResponse holds a status code, status text and other fields for a
 * ControlResponse which is used, for example, in the response from sending a
 * register prefix control command to a forwarder.
 * @see http://redmine.named-data.net/projects/nfd/wiki/ControlCommand
 * @constructor
 */
var ControlResponse = function ControlResponse(value)
{
  if (typeof value === 'object' && value instanceof ControlResponse) {
    // Make a deep copy.
    this.statusCode_ = value.statusCode_;
    this.statusText_ = value.statusText_;
    this.bodyAsControlParameters_ = value.bodyAsControlParameters_ == null ? null
      : new ControlParameters(value.bodyAsControlParameters_);
  }
  else {
    this.statusCode_ = null;
    this.statusText_ = "";
    this.bodyAsControlParameters_ = null;
  }
};

exports.ControlResponse = ControlResponse;

ControlResponse.prototype.clear = function()
{
  this.statusCode_ = null;
  this.statusText_ = "";
  this.bodyAsControlParameters_ = null;
};

/**
 * Encode this ControlResponse for a particular wire format.
 * @param {WireFormat} wireFormat (optional) A WireFormat object  used to encode
 * this object. If omitted, use WireFormat.getDefaultWireFormat().
 * @returns {Blob} The encoded buffer in a Blob object.
 */
ControlResponse.prototype.wireEncode = function(wireFormat)
{
  wireFormat = (wireFormat || WireFormat.getDefaultWireFormat());
  return wireFormat.encodeControlResponse(this);
};

/**
 * Decode the input using a particular wire format and update this
 * ControlResponse.
 * @param {Blob|Buffer} input The buffer with the bytes to decode.
 * @param {WireFormat} wireFormat (optional) A WireFormat object used to decode
 * this object. If omitted, use WireFormat.getDefaultWireFormat().
 */
ControlResponse.prototype.wireDecode = function(input, wireFormat)
{
  wireFormat = (wireFormat || WireFormat.getDefaultWireFormat());
  // If input is a blob, get its buf().
  var decodeBuffer = typeof input === 'object' && input instanceof Blob ?
                     input.buf() : input;
  wireFormat.decodeControlResponse(this, decodeBuffer);
};

/**
 * Get the status code.
 * @return {number} The status code. If not specified, return null.
 */
ControlResponse.prototype.getStatusCode = function()
{
  return this.statusCode_;
};

/**
 * Get the status text.
 * @return {string} The status text. If not specified, return "".
 */
ControlResponse.prototype.getStatusText = function()
{
  return this.statusText_;
};

/**
 * Get the control response body as a ControlParameters.
 * @return {ControlParameters} The ControlParameters, or null if the body is not
 * specified or if it is not a ControlParameters.
 */
ControlResponse.prototype.getBodyAsControlParameters = function()
{
  return this.bodyAsControlParameters_;
};

/**
 * Set the status code.
 * @param statusCode {number} The status code. If not specified, set to null.
 * @return {ControlResponse} This ControlResponse so that you can chain calls to
 * update values.
 */
ControlResponse.prototype.setStatusCode = function(statusCode)
{
  this.statusCode_ = statusCode;
  return this;
};

/**
 * Set the status text.
 * @param statusText {string} The status text. If not specified, set to "".
 * @return {ControlResponse} This ControlResponse so that you can chain calls to
 * update values.
 */
ControlResponse.prototype.setStatusText = function(statusText)
{
  this.statusText_ = statusText || "";
  return this;
};

/**
 * Set the control response body as a ControlParameters.
 * @param {ControlParameters} controlParameters The ControlParameters for the
 * body. This makes a copy of the ControlParameters. If not specified or if the
 * body is not a ControlParameters, set to null.
 * @return {ControlResponse} This ControlResponse so that you can chain calls to
 * update values.
 */
ControlResponse.prototype.setBodyAsControlParameters = function(controlParameters)
{
  this.bodyAsControlParameters_ =
    typeof controlParameters === 'object' && controlParameters instanceof ControlParameters ?
      new ControlParameters(controlParameters) : null;
  return this;
};