Fixes TIVI-2570 - Unencrypted WiFi connection fails
[profile/ivi/SettingsApp.git] / js / api-connman.js
1 /*
2  * Copyright (c) 2013, Intel Corporation.
3  *
4  * This program is licensed under the terms and conditions of the
5  * Apache License, version 2.0.  The full text of the Apache License is at
6  * http://www.apache.org/licenses/LICENSE-2.0
7  *
8  */
9
10 /* Namespace */
11 var settings = settings || {};
12 settings.connman = settings.connman || {};
13
14 /* Module */
15 settings.connman = (function() {
16
17     var default_adapter = null;
18
19     /* Technology class */
20     var ConnmanTechnology = function(technology_path, technology_properties) {
21             this.id = technology_path;
22             this.prop = technology_properties;
23         };
24
25     ConnmanTechnology.prototype.setPowered = function(powered, success_cb, error_cb) {
26         if (wsAPI === undefined) return;
27         if (this.setPowerInProgress) {
28             console.log('Enabling/disabling technology in progress');
29             return;
30         }
31
32         var me = this;
33         this.setPowerInProgress = true;
34         setTimeout(function() {
35             wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_TECHNOLOGY, 'enable', [me.id, powered], function() {
36                 me.setPowerInProgress = false;
37                 success_cb();
38             }, function(e) {
39                 if (e.indexOf('Already enabled') >= 0) {
40                     console.log('connman ' + me.prop.Type + ' already enabled');
41                     me.setPowerInProgress = false;
42                     success_cb();
43                 } else if (e.indexOf('Already disabled') >= 0) {
44                     console.log('connman ' + me.prop.Type + ' already disabled');
45                     me.setPowerInProgress = false;
46                     success_cb();
47                 } else {
48                     me.setPowerInProgress = false;
49                     error_cb(e);
50                 }
51             })
52         }, 2000);
53     };
54
55     ConnmanTechnology.prototype.getPowered = function(success_cb, error_cb) {
56         if (wsAPI === undefined) return;
57         var me = this;
58         wsAPI.sendRequest(this.prop.Type, 'is_enabled', null, function(isEnabled) {
59             if (isEnabled === undefined) {
60                 console.log('Badly formed json message: ' + json_msg);
61             }
62             me.powered = isEnabled;
63             success_cb(me.powered);
64         }, error_cb);
65     };
66
67     /* Service class */
68     ConnmanService = function(service_path, service_properties) {
69         this.id = service_path;
70         this.prop = service_properties;
71     };
72
73     ConnmanService.prototype.connect = function(passphrase, success_cb, error_cb) {
74         if (wsAPI === undefined) return;
75
76         var info = [this.id,
77         {
78             'Name': this.prop.Name,
79             'Type': this.prop.EncryptionMode,
80         }]
81
82         if (passphrase) {
83             info[1].Passphrase = passphrase;
84         }
85
86         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_SERVICE, 'connect', info, success_cb, error_cb);
87     };
88
89     ConnmanService.prototype.disconnect = function(success_cb, error_cb) {
90         if (wsAPI === undefined) return;
91         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_SERVICE, 'disconnect', [this.id, null], success_cb, error_cb);
92     };
93
94     function getTechnologies(success_cb, error_cb) {
95         if (wsAPI === undefined) return;
96         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_MANAGER, 'get_technologies', null, function(results) {
97             if (results.length >= 0 && results[0].length >= 0 && results[0][0][0] === undefined) {
98                 error_cb('Cannot parse technologies');
99                 return;
100             }
101
102             var technologies_list = results[0];
103
104             try {
105                 var technologies = [];
106                 for (var i = 0; i < technologies_list.length; i++) {
107                     if (technologies_list[i][0] === undefined || technologies_list[i][1] === undefined) {
108                         console.log('Badly form json message: ' + json_msg);
109                     }
110
111                     var technology = new settings.connman.ConnmanTechnology(technologies_list[i][0], technologies_list[i][1]);
112                     technologies.push(technology);
113                 }
114             } catch (e) {
115                 error_cb(e);
116             }
117             success_cb(technologies);
118         }, error_cb);
119     }
120
121     function getServices(success_cb, error_cb) {
122         if (wsAPI === undefined) return;
123         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_MANAGER, 'get_services', null, function(results) {
124             if (results.length >= 0 && results[0].length >= 0 && results[0][0][0] === undefined) {
125                 error_cb('Cannot parse get_services results');
126                 return;
127             }
128
129             var services_list = results[0];
130
131             try {
132                 var results = [];
133                 for (var i = 0; i < services_list.length; i++) {
134                     if (services_list[i][0] === undefined || services_list[i][1] === undefined) {
135                         console.log('Badly form json message: ' + json_msg);
136                     }
137
138                     var service = new settings.connman.ConnmanService(services_list[i][0], services_list[i][1]);
139                     results.push(service);
140                 }
141             } catch (e) {
142                 error_cb(e);
143             }
144             success_cb(results);
145         }, error_cb);
146     }
147
148     function scan(technology, success_cb, error_cb) {
149         if (wsAPI === undefined) return;
150         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_TECHNOLOGY, 'scan', [technology, null], function(results) {
151             if (results.length >= 0 && results[0].length >= 0 && results[0][0][0] === undefined) {
152                 error_cb('Cannot parse scan results');
153                 return;
154             }
155
156             var services_list = results[0];
157
158             try {
159                 var services = [];
160                 for (var i = 0; i < services_list.length; i++) {
161                     if (services_list[i][0] === undefined || services_list[i][1] === undefined) {
162                         console.log('Badly form json message: ' + json_msg);
163                     }
164
165                     var service = new settings.connman.ConnmanService(services_list[i][0], services_list[i][1]);
166                     services.push(service);
167                 }
168             } catch (e) {
169                 error_cb(e);
170             }
171             success_cb(services);
172         }, error_cb);
173     };
174
175     return {
176         ConnmanTechnology: ConnmanTechnology,
177         ConnmanService: ConnmanService,
178         getTechnologies: getTechnologies,
179         getServices: getServices,
180         scan: scan
181     };
182 })();