'use strict';
+'require baseclass';
+'require request';
var rpcRequestID = 1,
rpcSessionID = L.env.sessionid || '00000000000000000000000000000000',
* The `LuCI.rpc` class provides high level ubus JSON-RPC abstractions
* and means for listing and invoking remove RPC methods.
*/
-return L.Class.extend(/** @lends LuCI.rpc.prototype */ {
+return baseclass.extend(/** @lends LuCI.rpc.prototype */ {
/* privates */
call: function(req, cb, nobatch) {
var q = '';
req[i].params[2]
);
}
- else if (req.params) {
- q += '/%s.%s'.format(req.params[1], req.params[2]);
- }
- return L.Request.post(rpcBaseURL + q, req, {
+ return request.post(rpcBaseURL + q, req, {
timeout: (L.env.rpctimeout || 20) * 1000,
nobatch: nobatch,
credentials: true
ret = msg.result;
}
else if (Array.isArray(msg.result)) {
+ if (req.raise && msg.result[0] !== 0)
+ L.raise('RPCError', 'RPC call to %s/%s failed with ubus code %d: %s',
+ req.object, req.method, msg.result[0], this.getStatusText(msg.result[0]));
+
ret = (msg.result.length > 1) ? msg.result[1] : msg.result[0];
}
* Specfies an optional filter function which is invoked to transform the
* received reply data before it is returned to the caller.
*
+ * @property {boolean} [reject=false]
+ * If set to `true`, non-zero ubus call status codes are treated as fatal
+ * error and lead to the rejection of the call promise. The default
+ * behaviour is to resolve with the call return code value instead.
*/
/**
params: params,
priv: priv,
object: options.object,
- method: options.method
+ method: options.method,
+ raise: options.reject
};
/* build message object */