about summary refs log tree commit diff
path: root/src/rt/rust_uv.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/rust_uv.cpp')
-rw-r--r--src/rt/rust_uv.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/rt/rust_uv.cpp b/src/rt/rust_uv.cpp
index e6d6c2e52ba..2a575bd00e3 100644
--- a/src/rt/rust_uv.cpp
+++ b/src/rt/rust_uv.cpp
@@ -80,6 +80,10 @@ native_close_op_cb(uv_handle_t* op_handle) {
 }
 
 // native fns bound in rust
+extern "C" void
+rust_uv_free(void* ptr) {
+  current_kernel_free(ptr);
+}
 extern "C" void*
 rust_uv_loop_new() {
     return (void*)uv_loop_new();
@@ -195,3 +199,99 @@ rust_uv_timer_stop(uv_timer_t* the_timer) {
   uv_timer_stop(the_timer);
 }
 
+extern "C" int
+rust_uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle) {
+  return uv_tcp_init(loop, handle);
+}
+
+extern "C" size_t
+rust_uv_helper_uv_tcp_t_size() {
+  return sizeof(uv_tcp_t);
+}
+extern "C" size_t
+rust_uv_helper_uv_connect_t_size() {
+  return sizeof(uv_connect_t);
+}
+extern "C" size_t
+rust_uv_helper_uv_buf_t_size() {
+  return sizeof(uv_buf_t);
+}
+extern "C" size_t
+rust_uv_helper_uv_write_t_size() {
+  return sizeof(uv_write_t);
+}
+extern "C" size_t
+rust_uv_helper_uv_err_t_size() {
+  return sizeof(uv_err_t);
+}
+extern "C" size_t
+rust_uv_helper_sockaddr_in_size() {
+  return sizeof(sockaddr_in);
+}
+
+extern "C" uv_stream_t*
+rust_uv_get_stream_handle_for_connect(uv_connect_t* connect) {
+  return connect->handle;
+}
+
+extern "C" uv_buf_t
+rust_uv_buf_init(char* base, size_t len) {
+  return uv_buf_init(base, len);
+}
+
+extern "C" uv_loop_t*
+rust_uv_get_loop_for_uv_handle(uv_handle_t* handle) {
+  return handle->loop;
+}
+
+extern "C" void*
+rust_uv_get_data_for_uv_handle(uv_handle_t* handle) {
+  return handle->data;
+}
+
+extern "C" void
+rust_uv_set_data_for_uv_handle(uv_handle_t* handle,
+							   void* data) {
+  handle->data = data;
+}
+
+extern "C" void*
+rust_uv_get_data_for_req(uv_req_t* req) {
+  return req->data;
+}
+
+extern "C" void
+rust_uv_set_data_for_req(uv_req_t* req, void* data) {
+  req->data = data;
+}
+
+extern "C" uv_err_t
+rust_uv_last_error(uv_loop_t* loop) {
+  return uv_last_error(loop);
+}
+
+extern "C" int
+rust_uv_tcp_connect(uv_connect_t* connect_ptr,
+					uv_tcp_t* tcp_ptr,
+					void* addr_ptr,
+					uv_connect_cb cb) {
+  //return uv_tcp_connect(connect_ptr, tcp_ptr, addr, cb);
+  printf("inside rust_uv_tcp_connect\n");
+  sockaddr_in addr_tmp = *((sockaddr_in*)addr_ptr);
+  sockaddr_in addr = addr_tmp;
+  printf("before tcp_connect .. port: %d\n", addr.sin_port);
+  int result = uv_tcp_connect(connect_ptr, tcp_ptr, addr, cb);
+  printf ("leaving rust_uv_tcp_connect.. and result: %d\n", result);
+  return result;
+}
+
+extern "C" void*
+rust_uv_ip4_addr(const char* ip, int port) {
+  sockaddr_in* addr_ptr = (sockaddr_in*)current_kernel_malloc(
+							  sizeof(sockaddr_in),
+							  "sockaddr_in");
+  printf("before creating addr_ptr.. ip %s port %d\n", ip, port);
+  *addr_ptr = uv_ip4_addr("173.194.33.40", 80);
+  printf("after creating .. port: %d\n", addr_ptr->sin_port);
+  return (void*)addr_ptr;
+}