// utf8 encoded data
Local<String> string = args[0]->ToString();
length = string->Utf8Length();
- buf = new char[length];
+ buf = static_cast<char*>(malloc(length));
string->WriteUtf8(buf, length);
} else if (args[0]->IsArray()) {
// binary data
Local<Array> array = Local<Array>::Cast(args[0]);
length = array->Length();
- buf = new char[length];
+ buf = static_cast<char*>(malloc(length));
for (int i = 0; i < length; i++) {
Local<Value> int_value = array->Get(Integer::New(i));
buf[i] = int_value->Int32Value();
{
File *file = static_cast<File*>(req->data);
- char *buf = static_cast<char*>(req->ptr2);
- delete buf;
+ //char *buf = static_cast<char*>(req->ptr2);
+ free(req->ptr2);
size_t written = req->result;
HandleScope scope;
static Persistent<FunctionTemplate> socket_template;
#define ON_CONNECT_SYMBOL String::NewSymbol("onConnect")
+#define ON_CONNECTION_SYMBOL String::NewSymbol("onConnection")
#define ON_READ_SYMBOL String::NewSymbol("onRead")
static const struct addrinfo tcp_hints =
Server::~Server ()
{
+ HandleScope scope;
oi_server_close(&server_);
oi_server_detach(&server_);
handle_.Dispose();
if (!args[callback_index]->IsFunction())
return ThrowException(String::New("Must supply onConnection callback"));
- server->handle_->Set(String::NewSymbol("onConnection"), args[callback_index]);
+ server->handle_->Set(ON_CONNECTION_SYMBOL, args[callback_index]);
r = oi_server_listen(&server->server_, address);
if (r != 0)
Handle<Value>
Server::Close (const Arguments& args)
{
+ HandleScope scope;
Server *server = Server::Unwrap(args.Holder());
-
oi_server_close(&server->server_);
-
return Undefined();
}
Server *server = static_cast<Server*> (s->data);
HandleScope scope;
- Socket *socket = new Socket(socket_template->GetFunction()->NewInstance(), 60.0);
+ printf("DEBUG: got connection\n");
+
+ Local<Object> socket_handle = socket_template->GetFunction()->NewInstance();
+ Socket *socket = new Socket(socket_handle, 60.0);
socket->handle_->Delete(String::NewSymbol("connectTCP"));
- Local<Value> callback_v = server->handle_->Get(String::NewSymbol("onConnection"));
+ Local<Value> callback_v = server->handle_->Get(ON_CONNECTION_SYMBOL);
if (!callback_v->IsFunction())
return NULL; // produce error?
*/
node_eio_warmup();
eio_req *req = eio_custom (Socket::Resolve, EIO_PRI_DEFAULT, Socket::AfterResolve, socket);
+
+ return Undefined();
}
/* This function is executed in the thread pool. It cannot touch anything! */
oi_socket_init(&socket_, timeout);
socket_.on_connect = Socket::OnConnect;
socket_.on_read = Socket::OnRead;
- socket_.on_drain = Socket::OnDrain;
- socket_.on_error = Socket::OnError;
+// socket_.on_drain = Socket::OnDrain;
+// socket_.on_error = Socket::OnError;
socket_.on_close = Socket::OnClose;
socket_.on_timeout = Socket::OnTimeout;
socket_.data = this;
Socket::~Socket ()
{
+ HandleScope scope;
oi_socket_close(&socket_);
oi_socket_detach(&socket_);
free(host_);
free(port_);
+
+ handle_->SetInternalField(0, Undefined());
+ handle_->Delete(String::NewSymbol("write"));
+ handle_->Delete(String::NewSymbol("close"));
+
handle_.Dispose();
handle_.Clear(); // necessary?
}
Handle<Value>
Socket::SetEncoding (const Arguments& args)
{
+ HandleScope scope;
Socket *socket = Socket::Unwrap(args.Holder());
socket->SetEncoding(args[0]);
return Undefined();
HandleScope scope;
Handle<Value> onclose_value = socket->handle_->Get( String::NewSymbol("onClose") );
- if (!onclose_value->IsFunction()) return;
+ if (!onclose_value->IsFunction()) {
+ delete socket;
+ return;
+ }
Handle<Function> onclose = Handle<Function>::Cast(onclose_value);
TryCatch try_catch;
if(try_catch.HasCaught())
node_fatal_exception(try_catch);
+
+ delete socket;
}
void