1 /******************************************************************************
2 * Copyright 2012 - 2013 Intel Corporation.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *****************************************************************************/
19 /*****************************************************************************/
21 var dbus = { // hook object for dbus types not translated by python-json
22 Double: function(value, level) {
29 /*****************************************************************************/
31 var cloudeebus = window.cloudeebus = {
36 cloudeebus.reset = function() {
37 cloudeebus.sessionBus = null;
38 cloudeebus.systemBus = null;
39 cloudeebus.wampSession = null;
40 cloudeebus.uri = null;
44 cloudeebus.log = function(msg) {
47 cloudeebus.getError = function(error) {
48 if (error.desc && error.uri)
49 return error.desc + " : " + error.uri; // Python exception (cloudeebus.py)
54 if (error.name && error.message)
55 return error.name + " : " + error.message; // Javascript exception
60 return error; // Autobahn error
63 cloudeebus.versionCheck = function(version) {
64 var ver = version.split(".");
65 var min = cloudeebus.minVersion.split(".");
66 for (var i=0; i<ver.length; i++) {
67 if (Number(ver[i]) > Number(min[i]))
69 if (Number(ver[i]) < Number(min[i]))
76 cloudeebus.connect = function(uri, manifest, successCB, errorCB) {
80 function onCloudeebusVersionCheckCB(version) {
81 if (cloudeebus.versionCheck(version)) {
82 cloudeebus.log("Connected to " + cloudeebus.uri);
86 var errorMsg = "Cloudeebus server version " + version + " unsupported, need version " + cloudeebus.minVersion + " or superior";
87 cloudeebus.log(errorMsg);
93 function onWAMPSessionAuthErrorCB(error) {
94 var errorStr = cloudeebus.getError(error);
95 cloudeebus.log("Authentication error: " + errorStr);
100 function onWAMPSessionAuthenticatedCB(permissions) {
101 cloudeebus.sessionBus = new cloudeebus.BusConnection("session", cloudeebus.wampSession);
102 cloudeebus.systemBus = new cloudeebus.BusConnection("system", cloudeebus.wampSession);
103 cloudeebus.wampSession.call("getVersion").then(onCloudeebusVersionCheckCB, errorCB);
106 function onWAMPSessionChallengedCB(challenge) {
107 var signature = cloudeebus.wampSession.authsign(challenge, manifest.key);
108 cloudeebus.wampSession.auth(signature).then(onWAMPSessionAuthenticatedCB, onWAMPSessionAuthErrorCB);
111 function onWAMPSessionConnectedCB(session) {
112 cloudeebus.wampSession = session;
114 cloudeebus.wampSession.authreq(
116 {permissions: manifest.permissions,
117 services: manifest.services}
118 ).then(onWAMPSessionChallengedCB, onWAMPSessionAuthErrorCB);
120 cloudeebus.wampSession.authreq().then(function() {
121 cloudeebus.wampSession.auth().then(onWAMPSessionAuthenticatedCB, onWAMPSessionAuthErrorCB);
122 }, onWAMPSessionAuthErrorCB);
125 function onWAMPSessionErrorCB(code, reason) {
126 if (code == ab.CONNECTION_UNSUPPORTED) {
127 cloudeebus.log("Browser is not supported");
130 cloudeebus.log("Failed to open session, code = " + code + ", reason = " + reason);
136 return ab.connect(cloudeebus.uri, onWAMPSessionConnectedCB, onWAMPSessionErrorCB);
140 cloudeebus.SessionBus = function() {
141 return cloudeebus.sessionBus;
145 cloudeebus.SystemBus = function() {
146 return cloudeebus.systemBus;
151 /*****************************************************************************/
153 cloudeebus.BusConnection = function(name, session) {
155 this.wampSession = session;
160 cloudeebus.BusConnection.prototype.getObject = function(busName, objectPath, introspectCB, errorCB) {
161 var proxy = new cloudeebus.ProxyObject(this.wampSession, this, busName, objectPath);
163 proxy._introspect(introspectCB, errorCB);
168 cloudeebus.BusConnection.prototype.addService = function(serviceName) {
171 var promise = new cloudeebus.Promise(function (resolver) {
172 var cloudeebusService = new cloudeebus.Service(self.wampSession, self, serviceName);
174 function ServiceAddedSuccessCB(serviceName) {
175 cloudeebusService.isCreated = true;
176 resolver.fulfill(cloudeebusService, true);
179 function ServiceAddedErrorCB(error) {
180 var errorStr = cloudeebus.getError(error);
181 cloudeebus.log("Error adding service method: " + self.name + ", error: " + errorStr);
182 resolver.reject(errorStr, true);
190 // call dbusSend with bus type, destination, object, message and arguments
191 self.wampSession.call("serviceAdd", arglist).then(ServiceAddedSuccessCB, ServiceAddedErrorCB);