Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: runtime/vm/service/vmservice.dart

Issue 1297313005: Fix the error response for bad isolate ids, etc. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/service/running_isolates.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library vmservice; 5 library vmservice;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:isolate'; 9 import 'dart:isolate';
10 import 'dart:typed_data'; 10 import 'dart:typed_data';
11 11
12 part 'client.dart'; 12 part 'client.dart';
13 part 'constants.dart'; 13 part 'constants.dart';
14 part 'running_isolate.dart'; 14 part 'running_isolate.dart';
15 part 'running_isolates.dart'; 15 part 'running_isolates.dart';
16 part 'message.dart'; 16 part 'message.dart';
17 part 'message_router.dart'; 17 part 'message_router.dart';
18 18
19 final RawReceivePort isolateLifecyclePort = new RawReceivePort(); 19 final RawReceivePort isolateLifecyclePort = new RawReceivePort();
20 final RawReceivePort scriptLoadPort = new RawReceivePort(); 20 final RawReceivePort scriptLoadPort = new RawReceivePort();
21 21
22 typedef ShutdownCallback(); 22 typedef ShutdownCallback();
23 23
24 // These must be kept in sync with the declarations in vm/json_stream.h.
25 const kInvalidParams = -32602;
26 const kInternalError = -32603;
27 const kStreamAlreadySubscribed = 103;
28 const kStreamNotSubscribed = 104;
29
30 var _errorMessages = {
31 kInvalidParams: 'Invalid params',
32 kInternalError: 'Internal error',
33 kStreamAlreadySubscribed: 'Stream already subscribed',
34 kStreamNotSubscribed: 'Stream not subscribed',
35 };
36
37 String encodeRpcError(Message message, int code, {String details}) {
38 var response = {
39 'jsonrpc': '2.0',
40 'id' : message.serial,
41 'error' : {
42 'code': code,
43 'message': _errorMessages[code],
44 },
45 };
46 if (details != null) {
47 response['error']['data'] = {
48 'details': details,
49 };
50 }
51 return JSON.encode(response);
52 }
53
24 class VMService extends MessageRouter { 54 class VMService extends MessageRouter {
25 static VMService _instance; 55 static VMService _instance;
26 56
27 /// Collection of currently connected clients. 57 /// Collection of currently connected clients.
28 final Set<Client> clients = new Set<Client>(); 58 final Set<Client> clients = new Set<Client>();
29 59
30 /// Collection of currently running isolates. 60 /// Collection of currently running isolates.
31 RunningIsolates runningIsolates = new RunningIsolates(); 61 RunningIsolates runningIsolates = new RunningIsolates();
32 62
33 /// A port used to receive events from the VM. 63 /// A port used to receive events from the VM.
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 var members = []; 166 var members = [];
137 var result = {}; 167 var result = {};
138 clients.forEach((client) { 168 clients.forEach((client) {
139 members.add(client.toJson()); 169 members.add(client.toJson());
140 }); 170 });
141 result['type'] = 'ClientList'; 171 result['type'] = 'ClientList';
142 result['members'] = members; 172 result['members'] = members;
143 message.setResponse(JSON.encode(result)); 173 message.setResponse(JSON.encode(result));
144 } 174 }
145 175
146 // These must be kept in sync with the declarations in vm/json_stream.h.
147 static const _kInvalidParams = -32602;
148 static const _kStreamAlreadySubscribed = 103;
149 static const _kStreamNotSubscribed = 104;
150
151 var _errorMessages = {
152 _kInvalidParams: 'Invalid params"',
153 _kStreamAlreadySubscribed: 'Stream already subscribed',
154 _kStreamNotSubscribed: 'Stream not subscribed',
155 };
156
157 String _encodeError(Message message, int code, {String details}) {
158 var response = {
159 'jsonrpc': '2.0',
160 'id' : message.serial,
161 'error' : {
162 'code': code,
163 'message': _errorMessages[code],
164 },
165 };
166 if (details != null) {
167 response['error']['data'] = {
168 'details': details,
169 };
170 }
171 return JSON.encode(response);
172 }
173
174 String _encodeResult(Message message, Map result) { 176 String _encodeResult(Message message, Map result) {
175 var response = { 177 var response = {
176 'jsonrpc': '2.0', 178 'jsonrpc': '2.0',
177 'id' : message.serial, 179 'id' : message.serial,
178 'result' : result, 180 'result' : result,
179 }; 181 };
180 return JSON.encode(response); 182 return JSON.encode(response);
181 } 183 }
182 184
183 bool _isAnyClientSubscribed(String streamId) { 185 bool _isAnyClientSubscribed(String streamId) {
184 for (var client in clients) { 186 for (var client in clients) {
185 if (client.streams.contains(streamId)) { 187 if (client.streams.contains(streamId)) {
186 return true; 188 return true;
187 } 189 }
188 } 190 }
189 return false; 191 return false;
190 } 192 }
191 193
192 Future<String> _streamListen(Message message) async { 194 Future<String> _streamListen(Message message) async {
193 var client = message.client; 195 var client = message.client;
194 var streamId = message.params['streamId']; 196 var streamId = message.params['streamId'];
195 197
196 if (client.streams.contains(streamId)) { 198 if (client.streams.contains(streamId)) {
197 return _encodeError(message, _kStreamAlreadySubscribed); 199 return encodeRpcError(message, kStreamAlreadySubscribed);
198 } 200 }
199 if (!_isAnyClientSubscribed(streamId)) { 201 if (!_isAnyClientSubscribed(streamId)) {
200 if (!_vmListenStream(streamId)) { 202 if (!_vmListenStream(streamId)) {
201 return _encodeError( 203 return encodeRpcError(
202 message, _kInvalidParams, 204 message, kInvalidParams,
203 details:"streamListen: invalid 'streamId' parameter: ${streamId}"); 205 details:"streamListen: invalid 'streamId' parameter: ${streamId}");
204 } 206 }
205 } 207 }
206 client.streams.add(streamId); 208 client.streams.add(streamId);
207 209
208 var result = { 'type' : 'Success' }; 210 var result = { 'type' : 'Success' };
209 return _encodeResult(message, result); 211 return _encodeResult(message, result);
210 } 212 }
211 213
212 Future<String> _streamCancel(Message message) async { 214 Future<String> _streamCancel(Message message) async {
213 var client = message.client; 215 var client = message.client;
214 var streamId = message.params['streamId']; 216 var streamId = message.params['streamId'];
215 217
216 if (!client.streams.contains(streamId)) { 218 if (!client.streams.contains(streamId)) {
217 return _encodeError(message, _kStreamNotSubscribed); 219 return encodeRpcError(message, kStreamNotSubscribed);
218 } 220 }
219 client.streams.remove(streamId); 221 client.streams.remove(streamId);
220 if (!_isAnyClientSubscribed(streamId)) { 222 if (!_isAnyClientSubscribed(streamId)) {
221 _vmCancelStream(streamId); 223 _vmCancelStream(streamId);
222 } 224 }
223 225
224 var result = { 'type' : 'Success' }; 226 var result = { 'type' : 'Success' };
225 return _encodeResult(message, result); 227 return _encodeResult(message, result);
226 } 228 }
227 229
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 service.runningIsolates.isolateStartup(port_id, sp, name); 320 service.runningIsolates.isolateStartup(port_id, sp, name);
319 } 321 }
320 322
321 void _onStart() native "VMService_OnStart"; 323 void _onStart() native "VMService_OnStart";
322 324
323 void _onExit() native "VMService_OnExit"; 325 void _onExit() native "VMService_OnExit";
324 326
325 bool _vmListenStream(String streamId) native "VMService_ListenStream"; 327 bool _vmListenStream(String streamId) native "VMService_ListenStream";
326 328
327 void _vmCancelStream(String streamId) native "VMService_CancelStream"; 329 void _vmCancelStream(String streamId) native "VMService_CancelStream";
OLDNEW
« no previous file with comments | « runtime/vm/service/running_isolates.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698