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

Side by Side Diff: runtime/bin/main.cc

Issue 284313011: Add IO service object handler, with initial implementation for HTTP server. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « runtime/bin/io_sources.gypi ('k') | sdk/lib/io/http_impl.dart » ('j') | 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 #include <stdlib.h> 5 #include <stdlib.h>
6 #include <string.h> 6 #include <string.h>
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include "include/dart_api.h" 9 #include "include/dart_api.h"
10 #include "include/dart_debugger_api.h" 10 #include "include/dart_debugger_api.h"
(...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 result = Dart_StringToCString(result, &script_source); 838 result = Dart_StringToCString(result, &script_source);
839 if (Dart_IsError(result)) { 839 if (Dart_IsError(result)) {
840 return result; 840 return result;
841 } 841 }
842 Log::Print("%s\n", script_source); 842 Log::Print("%s\n", script_source);
843 } 843 }
844 return Dart_True(); 844 return Dart_True();
845 } 845 }
846 846
847 847
848 static const char* ServiceRequestError(const char* message) {
849 TextBuffer buffer(128);
850 buffer.Printf("{\"type\":\"Error\",\"text\":\"%s\"}", message);
851 return buffer.Steal();
852 }
853
854
855 static const char* ServiceRequestError(Dart_Handle error) { 848 static const char* ServiceRequestError(Dart_Handle error) {
856 TextBuffer buffer(128); 849 TextBuffer buffer(128);
857 buffer.Printf("{\"type\":\"Error\",\"text\":\"Internal error %s\"}", 850 buffer.Printf("{\"type\":\"Error\",\"text\":\"Internal error %s\"}",
858 Dart_GetError(error)); 851 Dart_GetError(error));
859 return buffer.Steal(); 852 return buffer.Steal();
860 } 853 }
861 854
862 855
863 class DartScope { 856 class DartScope {
864 public: 857 public:
865 DartScope() { Dart_EnterScope(); } 858 DartScope() { Dart_EnterScope(); }
866 ~DartScope() { Dart_ExitScope(); } 859 ~DartScope() { Dart_ExitScope(); }
867 }; 860 };
868 861
869 862
870 static const char* ServiceRequestHandler( 863 static const char* ServiceRequestHandler(
871 const char* name, 864 const char* name,
872 const char** arguments, 865 const char** arguments,
873 intptr_t num_arguments, 866 intptr_t num_arguments,
874 const char** option_keys, 867 const char** option_keys,
875 const char** option_values, 868 const char** option_values,
876 intptr_t num_options, 869 intptr_t num_options,
877 void* user_data) { 870 void* user_data) {
878 DartScope scope; 871 DartScope scope;
879 const char* kSockets = "sockets"; 872 ASSERT(num_arguments > 0);
880 if (num_arguments == 2 && 873 ASSERT(strncmp(arguments[0], "io", 2) == 0);
881 strncmp(arguments[1], kSockets, strlen(kSockets)) == 0) { 874 // TODO(ajohnsen): Store the library/function in isolate data or user_data.
882 Dart_Handle dart_io_str = Dart_NewStringFromCString("dart:io"); 875 Dart_Handle dart_io_str = Dart_NewStringFromCString("dart:io");
883 if (Dart_IsError(dart_io_str)) return ServiceRequestError(dart_io_str); 876 if (Dart_IsError(dart_io_str)) return ServiceRequestError(dart_io_str);
884 Dart_Handle io_lib = Dart_LookupLibrary(dart_io_str); 877 Dart_Handle io_lib = Dart_LookupLibrary(dart_io_str);
885 if (Dart_IsError(io_lib)) return ServiceRequestError(io_lib); 878 if (Dart_IsError(io_lib)) return ServiceRequestError(io_lib);
886 Dart_Handle handler_function_name = 879 Dart_Handle handler_function_name =
887 Dart_NewStringFromCString("_socketsStats"); 880 Dart_NewStringFromCString("_serviceObjectHandler");
888 if (Dart_IsError(handler_function_name)) { 881 if (Dart_IsError(handler_function_name)) {
889 return ServiceRequestError(handler_function_name); 882 return ServiceRequestError(handler_function_name);
890 }
891 Dart_Handle result = Dart_Invoke(io_lib, handler_function_name, 0, NULL);
892 if (Dart_IsError(result)) return ServiceRequestError(result);
893 const char *json;
894 result = Dart_StringToCString(result, &json);
895 if (Dart_IsError(result)) return ServiceRequestError(result);
896 return strdup(json);
897 } else {
898 return ServiceRequestError("Unrecognized path");
899 } 883 }
884 Dart_Handle paths = Dart_NewList(num_arguments - 1);
885 for (int i = 0; i < num_arguments - 1; i++) {
886 Dart_ListSetAt(paths, i, Dart_NewStringFromCString(arguments[i + 1]));
887 }
888 Dart_Handle keys = Dart_NewList(num_options);
889 Dart_Handle values = Dart_NewList(num_options);
890 for (int i = 0; i < num_options; i++) {
891 Dart_ListSetAt(keys, i, Dart_NewStringFromCString(option_keys[i]));
892 Dart_ListSetAt(values, i, Dart_NewStringFromCString(option_values[i]));
893 }
894 Dart_Handle args[] = {paths, keys, values};
895 Dart_Handle result = Dart_Invoke(io_lib, handler_function_name, 3, args);
896 if (Dart_IsError(result)) return ServiceRequestError(result);
897 const char *json;
898 result = Dart_StringToCString(result, &json);
899 if (Dart_IsError(result)) return ServiceRequestError(result);
900 return strdup(json);
900 } 901 }
901 902
902 903
903 void main(int argc, char** argv) { 904 void main(int argc, char** argv) {
904 char* script_name; 905 char* script_name;
905 CommandLineOptions vm_options(argc); 906 CommandLineOptions vm_options(argc);
906 CommandLineOptions dart_options(argc); 907 CommandLineOptions dart_options(argc);
907 bool print_flags_seen = false; 908 bool print_flags_seen = false;
908 bool verbose_debug_seen = false; 909 bool verbose_debug_seen = false;
909 910
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 exit(Process::GlobalExitCode()); 1136 exit(Process::GlobalExitCode());
1136 } 1137 }
1137 1138
1138 } // namespace bin 1139 } // namespace bin
1139 } // namespace dart 1140 } // namespace dart
1140 1141
1141 int main(int argc, char** argv) { 1142 int main(int argc, char** argv) {
1142 dart::bin::main(argc, argv); 1143 dart::bin::main(argc, argv);
1143 UNREACHABLE(); 1144 UNREACHABLE();
1144 } 1145 }
OLDNEW
« no previous file with comments | « runtime/bin/io_sources.gypi ('k') | sdk/lib/io/http_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698