1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
/*
** Zabbix
** Copyright (C) 2001-2019 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 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 General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
var RPC = {
'_rpcurl': 'jsrpc.php?output=json-rpc', // rpc url
'_callid': 0, // rpc request id
callid: function() {
this._callid++;
return this._callid;
},
rpcurl: function(rpcurl_) {
if ('undefined' == typeof(rpcurl_)) {
return this._rpcurl;
}
else {
this._rpcurl = rpcurl_;
}
}
};
RPC.Base = Class.create({
'userParams': {}, // user OPtions
'callid': 0, // rpc request id
initialize: function(userParams) {
this.userParams = {
'method': null,
'params': {},
'notification': 0,
'request': {},
'onSuccess': function() {},
'onFailure': function() {}
};
Object.extend(this.userParams, userParams || {});
this.callid = RPC.callid();
}
});
RPC.Call = Class.create(RPC.Base, {
initialize: function($super, userParams) {
$super(userParams);
this.call();
},
call: function() {
var header = {
'Content-type': 'application/json-rpc'
};
var body = {
'jsonrpc': '2.0',
'method': this.userParams.method,
'params': this.userParams.params
};
var request = {
'requestHeaders': header
};
if (this.userParams.notification == 0) {
body.id = this.callid;
request.onSuccess = this.processRespond.bind(this);
request.onFailure = this.processError.bind(this);
}
Object.extend(request, this.userParams.request);
request.postBody = Object.toJSON(body),
new Ajax.Request(RPC.rpcurl(), request);
},
processRespond: function(resp){
var isError = this.processError(resp);
if (isError) {
return false;
}
if (isset('onSuccess', this.userParams)) {
this.userParams.onSuccess(resp.responseJSON.result);
}
return true;
},
processError: function(resp) {
// json request failed or server responded with incorrect json
if (is_null(resp) || !isset('responseJSON', resp)) {
throw('RPC call [' + this.userParams.method + '] request failed');
}
// json have wrong header or no respond at all
if (empty(resp.responseJSON)) {
throw('RPC: Server call [' + this.userParams.method + '] responded with incorrect JSON.');
}
// rpc responded with error || with incorrect json
if (isset('error', resp.responseJSON) && isset('onFailure', this.userParams)) {
this.userParams.onFailure(resp.responseJSON.error);
return true;
}
else if (!isset('result', resp.responseJSON)) {
throw('RPC: Server call [' + this.userParams.method + '] responded with incorrect JSON.');
}
return false;
}
});
|