From 227638bac135051ed22fe07f3c2e87452d5ecd02 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sat, 12 Sep 2009 14:18:42 +0200 Subject: [PATCH] Lint --- src/child_process.cc | 118 ++++++++++----------------- src/child_process.h | 49 +++++------ src/constants.cc | 13 ++- src/constants.h | 11 +-- src/dns.cc | 84 ++++++++----------- src/dns.h | 10 ++- src/events.cc | 80 +++++++----------- src/events.h | 48 +++++------ src/net.cc | 190 +++++++++++++++++-------------------------- src/net.h | 173 +++++++++++++++++++++------------------ src/node.cc | 2 +- 11 files changed, 344 insertions(+), 434 deletions(-) diff --git a/src/child_process.cc b/src/child_process.cc index e46c71385a..acdb043ccd 100644 --- a/src/child_process.cc +++ b/src/child_process.cc @@ -1,5 +1,5 @@ -#include "node.h" -#include "child_process.h" +// Copyright 2009 Ryan Dahl +#include #include #include @@ -8,16 +8,15 @@ #include #include +namespace node { + using namespace v8; -using namespace node; #define PID_SYMBOL String::NewSymbol("pid") Persistent ChildProcess::constructor_template; -void -ChildProcess::Initialize (Handle target) -{ +void ChildProcess::Initialize(Handle target) { HandleScope scope; Local t = FunctionTemplate::New(ChildProcess::New); @@ -30,12 +29,11 @@ ChildProcess::Initialize (Handle target) NODE_SET_PROTOTYPE_METHOD(constructor_template, "close", ChildProcess::Close); NODE_SET_PROTOTYPE_METHOD(constructor_template, "kill", ChildProcess::Kill); - target->Set(String::NewSymbol("ChildProcess"), constructor_template->GetFunction()); + target->Set(String::NewSymbol("ChildProcess"), + constructor_template->GetFunction()); } -Handle -ChildProcess::New (const Arguments& args) -{ +Handle ChildProcess::New(const Arguments& args) { HandleScope scope; ChildProcess *p = new ChildProcess(); @@ -44,9 +42,7 @@ ChildProcess::New (const Arguments& args) return args.This(); } -Handle -ChildProcess::Spawn (const Arguments& args) -{ +Handle ChildProcess::Spawn(const Arguments& args) { if (args.Length() == 0 || !args[0]->IsString()) { return ThrowException(Exception::Error(String::New("Bad argument."))); } @@ -66,9 +62,7 @@ ChildProcess::Spawn (const Arguments& args) return Undefined(); } -Handle -ChildProcess::Write (const Arguments& args) -{ +Handle ChildProcess::Write(const Arguments& args) { HandleScope scope; ChildProcess *child = ObjectWrap::Unwrap(args.Holder()); assert(child); @@ -81,17 +75,16 @@ ChildProcess::Write (const Arguments& args) return ThrowException(exception); } - char buf[len]; + char * buf = new char[len]; ssize_t written = DecodeWrite(buf, len, args[0], enc); - assert(written == len); + int r = child->Write(buf, len); + delete buf; - return child->Write(buf, len) == 0 ? True() : False(); + return r == 0 ? True() : False(); } -Handle -ChildProcess::Kill (const Arguments& args) -{ +Handle ChildProcess::Kill(const Arguments& args) { HandleScope scope; ChildProcess *child = ObjectWrap::Unwrap(args.Holder()); assert(child); @@ -100,25 +93,22 @@ ChildProcess::Kill (const Arguments& args) if (args[0]->IsInt32()) sig = args[0]->Int32Value(); if (child->Kill(sig) != 0) { - return ThrowException(Exception::Error(String::New("ChildProcess already dead"))); + return ThrowException(Exception::Error( + String::New("ChildProcess already dead"))); } return Undefined(); } -Handle -ChildProcess::Close (const Arguments& args) -{ +Handle ChildProcess::Close(const Arguments& args) { HandleScope scope; ChildProcess *child = ObjectWrap::Unwrap(args.Holder()); assert(child); return child->Close() == 0 ? True() : False(); } -void -ChildProcess::reader_closed (evcom_reader *r) -{ - ChildProcess *child = static_cast (r->data); +void ChildProcess::reader_closed(evcom_reader *r) { + ChildProcess *child = static_cast(r->data); if (r == &child->stdout_reader_) { child->stdout_fd_ = -1; } else { @@ -129,33 +119,28 @@ ChildProcess::reader_closed (evcom_reader *r) child->MaybeShutdown(); } -void -ChildProcess::stdin_closed (evcom_writer *w) -{ - ChildProcess *child = static_cast (w->data); +void ChildProcess::stdin_closed(evcom_writer *w) { + ChildProcess *child = static_cast(w->data); assert(w == &child->stdin_writer_); child->stdin_fd_ = -1; evcom_writer_detach(w); child->MaybeShutdown(); } -void -ChildProcess::on_read (evcom_reader *r, const void *buf, size_t len) -{ - ChildProcess *child = static_cast (r->data); +void ChildProcess::on_read(evcom_reader *r, const void *buf, size_t len) { + ChildProcess *child = static_cast(r->data); HandleScope scope; bool isSTDOUT = (r == &child->stdout_reader_); - enum encoding encoding = isSTDOUT ? child->stdout_encoding_ : child->stderr_encoding_; + enum encoding encoding = isSTDOUT ? + child->stdout_encoding_ : child->stderr_encoding_; Local data = Encode(buf, len, encoding); child->Emit(isSTDOUT ? "output" : "error", 1, &data); child->MaybeShutdown(); } -ChildProcess::ChildProcess () - : EventEmitter() -{ +ChildProcess::ChildProcess() : EventEmitter() { evcom_reader_init(&stdout_reader_); stdout_reader_.data = this; stdout_reader_.on_read = on_read; @@ -186,14 +171,11 @@ ChildProcess::ChildProcess () pid_ = 0; } -ChildProcess::~ChildProcess () -{ +ChildProcess::~ChildProcess() { Shutdown(); } -void -ChildProcess::Shutdown () -{ +void ChildProcess::Shutdown() { if (stdin_fd_ >= 0) { evcom_writer_close(&stdin_writer_); } @@ -216,9 +198,7 @@ ChildProcess::Shutdown () pid_ = 0; } -static inline int -SetNonBlocking (int fd) -{ +static inline int SetNonBlocking(int fd) { int flags = fcntl(fd, F_GETFL, 0); int r = fcntl(fd, F_SETFL, flags | O_NONBLOCK); if (r != 0) { @@ -227,9 +207,7 @@ SetNonBlocking (int fd) return r; } -int -ChildProcess::Spawn (const char *command) -{ +int ChildProcess::Spawn(const char *command) { assert(pid_ == 0); assert(stdout_fd_ == -1); assert(stderr_fd_ == -1); @@ -254,21 +232,21 @@ ChildProcess::Spawn (const char *command) } switch (pid_ = vfork()) { - case -1: // Error. + case -1: // Error. Shutdown(); return -4; - case 0: // Child. - close(stdout_pipe[0]); // close read end + case 0: // Child. + close(stdout_pipe[0]); // close read end dup2(stdout_pipe[1], STDOUT_FILENO); - close(stderr_pipe[0]); // close read end + close(stderr_pipe[0]); // close read end dup2(stderr_pipe[1], STDERR_FILENO); - close(stdin_pipe[1]); // close write end + close(stdin_pipe[1]); // close write end dup2(stdin_pipe[0], STDIN_FILENO); - execl("/bin/sh", "sh", "-c", command, (char *)NULL); + execl("/bin/sh", "sh", "-c", command, NULL); _exit(127); } @@ -303,9 +281,7 @@ ChildProcess::Spawn (const char *command) return 0; } -void -ChildProcess::OnCHLD (EV_P_ ev_child *watcher, int revents) -{ +void ChildProcess::OnCHLD(EV_P_ ev_child *watcher, int revents) { ev_child_stop(EV_A_ watcher); ChildProcess *child = static_cast(watcher->data); @@ -321,32 +297,24 @@ ChildProcess::OnCHLD (EV_P_ ev_child *watcher, int revents) child->MaybeShutdown(); } -int -ChildProcess::Write (const char *str, size_t len) -{ +int ChildProcess::Write(const char *str, size_t len) { if (stdin_fd_ < 0 || got_chld_) return -1; evcom_writer_write(&stdin_writer_, str, len); return 0; } -int -ChildProcess::Close (void) -{ +int ChildProcess::Close(void) { if (stdin_fd_ < 0 || got_chld_) return -1; evcom_writer_close(EV_DEFAULT_UC_ &stdin_writer_); return 0; } -int -ChildProcess::Kill (int sig) -{ +int ChildProcess::Kill(int sig) { if (got_chld_ || pid_ == 0) return -1; return kill(pid_, sig); } -void -ChildProcess::MaybeShutdown (void) -{ +void ChildProcess::MaybeShutdown(void) { if (stdout_fd_ < 0 && stderr_fd_ < 0 && got_chld_) { HandleScope scope; Handle argv[1] = { Integer::New(exit_code_) }; @@ -355,3 +323,5 @@ ChildProcess::MaybeShutdown (void) Detach(); } } + +} // namespace node diff --git a/src/child_process.h b/src/child_process.h index c756e45c7d..d3f78cdb2a 100644 --- a/src/child_process.h +++ b/src/child_process.h @@ -1,8 +1,10 @@ -#ifndef node_child_process_h -#define node_child_process_h +// Copyright 2009 Ryan Dahl +#ifndef SRC_CHILD_PROCESS_H_ +#define SRC_CHILD_PROCESS_H_ + +#include +#include -#include "node.h" -#include "events.h" #include #include #include @@ -11,33 +13,34 @@ namespace node { class ChildProcess : EventEmitter { public: - static void Initialize (v8::Handle target); + static void Initialize(v8::Handle target); protected: static v8::Persistent constructor_template; - static v8::Handle New (const v8::Arguments& args); - static v8::Handle Spawn (const v8::Arguments& args); - static v8::Handle Write (const v8::Arguments& args); - static v8::Handle Close (const v8::Arguments& args); - static v8::Handle Kill (const v8::Arguments& args); - static v8::Handle PIDGetter (v8::Local _, const v8::AccessorInfo& info); + static v8::Handle New(const v8::Arguments& args); + static v8::Handle Spawn(const v8::Arguments& args); + static v8::Handle Write(const v8::Arguments& args); + static v8::Handle Close(const v8::Arguments& args); + static v8::Handle Kill(const v8::Arguments& args); + static v8::Handle PIDGetter(v8::Local _, + const v8::AccessorInfo& info); ChildProcess(); ~ChildProcess(); - int Spawn (const char *command); - int Write (const char *str, size_t len); - int Close (void); - int Kill (int sig); + int Spawn(const char *command); + int Write(const char *str, size_t len); + int Close(void); + int Kill(int sig); private: - static void on_read (evcom_reader *r, const void *buf, size_t len); - static void reader_closed (evcom_reader *r); - static void stdin_closed (evcom_writer *w); - static void OnCHLD (EV_P_ ev_child *watcher, int revents); + static void on_read(evcom_reader *r, const void *buf, size_t len); + static void reader_closed(evcom_reader *r); + static void stdin_closed(evcom_writer *w); + static void OnCHLD(EV_P_ ev_child *watcher, int revents); - void MaybeShutdown (void); - void Shutdown (void); + void MaybeShutdown(void); + void Shutdown(void); evcom_reader stdout_reader_; evcom_reader stderr_reader_; @@ -58,5 +61,5 @@ class ChildProcess : EventEmitter { int exit_code_; }; -} // namespace node -#endif // node_child_process_h +} // namespace node +#endif // SRC_CHILD_PROCESS_H_ diff --git a/src/constants.cc b/src/constants.cc index 2c6bb8a1b6..38ece60722 100644 --- a/src/constants.cc +++ b/src/constants.cc @@ -1,5 +1,5 @@ -#include "node.h" -#include "constants.h" +// Copyright 2009 Ryan Dahl +#include #include #include @@ -8,12 +8,11 @@ #include #include +namespace node { + using namespace v8; -using namespace node; -void -node::DefineConstants (Handle target) -{ +void DefineConstants(Handle target) { NODE_DEFINE_CONSTANT(target, RAW); NODE_DEFINE_CONSTANT(target, UTF8); NODE_DEFINE_CONSTANT(target, ASCII); @@ -571,6 +570,6 @@ node::DefineConstants (Handle target) #ifdef SIGUNUSED NODE_DEFINE_CONSTANT(target, SIGUNUSED); #endif - } +} // namespace node diff --git a/src/constants.h b/src/constants.h index f11514fe9b..1f02c51beb 100644 --- a/src/constants.h +++ b/src/constants.h @@ -1,11 +1,12 @@ -#ifndef node_constants_h -#define node_constants_h +// Copyright 2009 Ryan Dahl +#ifndef SRC_CONSTANTS_H_ +#define SRC_CONSTANTS_H_ +#include #include namespace node { - void DefineConstants(v8::Handle target); +} // namespace node -} // namespace node -#endif // node_constants_h +#endif // SRC_CONSTANTS_H_ diff --git a/src/dns.cc b/src/dns.cc index a26a587bc6..7c4ccef3fa 100644 --- a/src/dns.cc +++ b/src/dns.cc @@ -1,26 +1,27 @@ -#include "node.h" -#include "dns.h" -#include "events.h" +// Copyright 2009 Ryan Dahl +#include #include /* exit() */ #include #include #include #include +#include + +#include #include #include #include +namespace node { + using namespace v8; -using namespace node; static ev_io io_watcher; static ev_timer timer_watcher; -static inline void -set_timeout () -{ +static inline void set_timeout() { int maxwait = 20; int wait = dns_timeouts(NULL, maxwait, ev_now(EV_DEFAULT_UC)); @@ -29,21 +30,17 @@ set_timeout () if (!dns_active(NULL)) return; if (wait >= 0) { - ev_timer_set(&timer_watcher, (double)wait, 0.0); + ev_timer_set(&timer_watcher, static_cast(wait), 0.0); ev_timer_start(EV_DEFAULT_UC_ &timer_watcher); } } -static inline void -maybe_start () -{ +static inline void maybe_start() { ev_io_start(EV_DEFAULT_UC_ &io_watcher); set_timeout(); } -static void -ioevent (EV_P_ ev_io *_watcher, int revents) -{ +static void ioevent(EV_P_ ev_io *_watcher, int revents) { assert(revents == EV_READ); assert(_watcher == &io_watcher); dns_ioevent(NULL, ev_now(EV_DEFAULT_UC)); @@ -51,17 +48,13 @@ ioevent (EV_P_ ev_io *_watcher, int revents) set_timeout(); } -static void -timeout (EV_P_ ev_timer *_watcher, int revents) -{ +static void timeout(EV_P_ ev_timer *_watcher, int revents) { assert(revents == EV_TIMEOUT); assert(_watcher == &timer_watcher); set_timeout(); } -static void -ResolveError (Promise *promise) -{ +static void ResolveError(Promise *promise) { HandleScope scope; int status = dns_status(NULL); assert(status < 0); @@ -72,9 +65,9 @@ ResolveError (Promise *promise) promise->EmitError(2, argv); } -static void -AfterResolveA4 (struct dns_ctx *ctx, struct dns_rr_a4 *result, void *data) -{ +static void AfterResolveA4(struct dns_ctx *ctx, + struct dns_rr_a4 *result, + void *data) { assert(ctx == &dns_defctx); HandleScope scope; @@ -108,9 +101,9 @@ AfterResolveA4 (struct dns_ctx *ctx, struct dns_rr_a4 *result, void *data) promise->EmitSuccess(3, argv); } -static void -AfterResolveA6 (struct dns_ctx *ctx, struct dns_rr_a6 *result, void *data) -{ +static void AfterResolveA6(struct dns_ctx *ctx, + struct dns_rr_a6 *result, + void *data) { assert(ctx == &dns_defctx); HandleScope scope; @@ -144,14 +137,12 @@ AfterResolveA6 (struct dns_ctx *ctx, struct dns_rr_a6 *result, void *data) promise->EmitSuccess(3, argv); } - -static Handle -ResolveA (int type, const Arguments& args) -{ +static Handle ResolveA(int type, const Arguments& args) { HandleScope scope; if (args.Length() == 0 || !args[0]->IsString()) { - return ThrowException(Exception::Error(String::New("Argument must be a string."))); + return ThrowException(Exception::Error( + String::New("Argument must be a string."))); } String::Utf8Value name(args[0]->ToString()); @@ -171,28 +162,24 @@ ResolveA (int type, const Arguments& args) return ThrowException(Exception::Error(String::New("Unsupported type"))); } - assert(query); // TODO better error handling. + assert(query); // TODO(ry) better error handling. maybe_start(); return scope.Close(promise->Handle()); } -static Handle -ResolveA4 (const Arguments& args) -{ +static Handle ResolveA4(const Arguments& args) { return ResolveA(DNS_T_A, args); } -static Handle -ResolveA6 (const Arguments& args) -{ +static Handle ResolveA6(const Arguments& args) { return ResolveA(DNS_T_AAAA, args); } -static void -AfterReverse (struct dns_ctx *ctx, struct dns_rr_ptr *result, void *data) -{ +static void AfterReverse(struct dns_ctx *ctx, + struct dns_rr_ptr *result, + void *data) { assert(ctx == &dns_defctx); HandleScope scope; @@ -224,13 +211,12 @@ AfterReverse (struct dns_ctx *ctx, struct dns_rr_ptr *result, void *data) promise->EmitSuccess(3, argv); } -static Handle -Reverse (const Arguments& args) -{ +static Handle Reverse(const Arguments& args) { HandleScope scope; if (args.Length() == 0 || !args[0]->IsString()) { - return ThrowException(Exception::Error(String::New("Argument must be a string."))); + return ThrowException(Exception::Error( + String::New("Argument must be a string."))); } String::Utf8Value ip_address(args[0]->ToString()); @@ -260,16 +246,14 @@ Reverse (const Arguments& args) query = dns_submit_a6ptr(NULL, &a.addr6, AfterReverse, promise); } - assert(query); // TODO better error handling. + assert(query); // TODO(ry) better error handling. maybe_start(); return scope.Close(promise->Handle()); } -void -DNS::Initialize (Handle target) -{ +void DNS::Initialize(Handle target) { if (dns_init(NULL, 0) < 0) { fprintf(stderr, "Error initializing UDNS context\n"); exit(-2); @@ -298,3 +282,5 @@ DNS::Initialize (Handle target) Local reverse = FunctionTemplate::New(Reverse); target->Set(String::NewSymbol("reverse"), reverse->GetFunction()); } + +} // namespace node diff --git a/src/dns.h b/src/dns.h index b1ebfc3934..d0da0c9a87 100644 --- a/src/dns.h +++ b/src/dns.h @@ -1,6 +1,8 @@ -#ifndef node_dns_h -#define node_dns_h +// Copyright 2009 Ryan Dahl +#ifndef SRC_DNS_H_ +#define SRC_DNS_H_ +#include #include namespace node { @@ -10,5 +12,5 @@ class DNS { static void Initialize(v8::Handle target); }; -} // namespace node -#endif // node_dns_h +} // namespace node +#endif // SRC_DNS_H_ diff --git a/src/events.cc b/src/events.cc index 41cef7ab2d..2c46bdd6f3 100644 --- a/src/events.cc +++ b/src/events.cc @@ -1,6 +1,5 @@ -#include "events.h" -#include -#include +// Copyright 2009 Ryan Dahl +#include #include #include @@ -13,36 +12,41 @@ #include /* inet_ntop */ #include /* sockaddr_in, sockaddr_in6 */ +#include +#include +#include + +namespace node { + #ifndef RAMP # define RAMP(x) ((x) > 0 ? (x) : 0) #endif using namespace v8; -using namespace node; Persistent EventEmitter::constructor_template; /* Poor Man's coroutines */ static Promise *coroutine_top; -void -EventEmitter::Initialize (Local ctemplate) -{ +void EventEmitter::Initialize(Local ctemplate) { HandleScope scope; constructor_template = Persistent::New(ctemplate); Local __emit = FunctionTemplate::New(Emit); - constructor_template->PrototypeTemplate()->Set(String::NewSymbol("emit"), __emit); + constructor_template->PrototypeTemplate()->Set(String::NewSymbol("emit"), + __emit); // All other prototype methods are defined in events.js coroutine_top = NULL; } -static bool -ReallyEmit (Handle self, Handle event, int argc, Handle argv[]) -{ +static bool ReallyEmit(Handle self, + Handle event, + int argc, + Handle argv[]) { HandleScope scope; Local events_v = self->Get(String::NewSymbol("_events")); @@ -73,9 +77,7 @@ ReallyEmit (Handle self, Handle event, int argc, Handle a return true; } -Handle -EventEmitter::Emit (const Arguments& args) -{ +Handle EventEmitter::Emit(const Arguments& args) { HandleScope scope; if (args.Length() == 0) { @@ -97,9 +99,7 @@ EventEmitter::Emit (const Arguments& args) return scope.Close(r ? True() : False()); } -bool -EventEmitter::Emit (const char *event_s, int argc, Handle argv[]) -{ +bool EventEmitter::Emit(const char *event_s, int argc, Handle argv[]) { HandleScope scope; Local event = String::NewSymbol(event_s); return ReallyEmit(handle_, event, argc, argv); @@ -107,9 +107,7 @@ EventEmitter::Emit (const char *event_s, int argc, Handle argv[]) Persistent Promise::constructor_template; -void -Promise::Initialize (v8::Handle target) -{ +void Promise::Initialize(v8::Handle target) { HandleScope scope; Local t = FunctionTemplate::New(New); @@ -125,9 +123,7 @@ Promise::Initialize (v8::Handle target) constructor_template->GetFunction()); } -v8::Handle -Promise::New (const v8::Arguments& args) -{ +v8::Handle Promise::New(const v8::Arguments& args) { HandleScope scope; Promise *promise = new Promise(); @@ -137,18 +133,14 @@ Promise::New (const v8::Arguments& args) return args.This(); } -Handle -Promise::Block (const Arguments& args) -{ +Handle Promise::Block(const Arguments& args) { HandleScope scope; Promise *promise = ObjectWrap::Unwrap(args.Holder()); promise->Block(); return Undefined(); } -v8::Handle -Promise::EmitSuccess (const v8::Arguments& args) -{ +v8::Handle Promise::EmitSuccess(const v8::Arguments& args) { HandleScope scope; Promise *promise = ObjectWrap::Unwrap(args.Holder()); @@ -163,9 +155,7 @@ Promise::EmitSuccess (const v8::Arguments& args) return r ? True() : False(); } -v8::Handle -Promise::EmitError (const v8::Arguments& args) -{ +v8::Handle Promise::EmitError(const v8::Arguments& args) { HandleScope scope; Promise *promise = ObjectWrap::Unwrap(args.Holder()); @@ -180,9 +170,7 @@ Promise::EmitError (const v8::Arguments& args) return r ? True() : False(); } -void -Promise::Block (void) -{ +void Promise::Block(void) { blocking_ = true; assert(prev_ == NULL); @@ -194,18 +182,14 @@ Promise::Block (void) assert(!blocking_); } -void -Promise::Destack () -{ +void Promise::Destack() { assert(coroutine_top == this); ev_unloop(EV_DEFAULT_ EVUNLOOP_ONE); coroutine_top = prev_; prev_ = NULL; } -void -Promise::Detach (void) -{ +void Promise::Detach(void) { /* Poor Man's coroutines */ blocking_ = false; while (coroutine_top && !coroutine_top->blocking_) { @@ -215,9 +199,7 @@ Promise::Detach (void) ObjectWrap::Detach(); } -bool -Promise::EmitSuccess (int argc, v8::Handle argv[]) -{ +bool Promise::EmitSuccess(int argc, v8::Handle argv[]) { bool r = Emit("success", argc, argv); Detach(); @@ -225,9 +207,7 @@ Promise::EmitSuccess (int argc, v8::Handle argv[]) return r; } -bool -Promise::EmitError (int argc, v8::Handle argv[]) -{ +bool Promise::EmitError(int argc, v8::Handle argv[]) { bool r = Emit("error", argc, argv); Detach(); @@ -235,9 +215,7 @@ Promise::EmitError (int argc, v8::Handle argv[]) return r; } -Promise* -Promise::Create (void) -{ +Promise* Promise::Create(void) { HandleScope scope; Local handle = @@ -249,3 +227,5 @@ Promise::Create (void) return promise; } + +} // namespace node diff --git a/src/events.h b/src/events.h index 0e44c8f69d..8009d0f567 100644 --- a/src/events.h +++ b/src/events.h @@ -1,57 +1,57 @@ -#ifndef node_events_h -#define node_events_h +// Copyright 2009 Ryan Dahl +#ifndef SRC_EVENTS_H_ +#define SRC_EVENTS_H_ -#include "node.h" +#include #include namespace node { class EventEmitter : public ObjectWrap { public: - static void Initialize (v8::Local ctemplate); + static void Initialize(v8::Local ctemplate); static v8::Persistent constructor_template; - bool Emit (const char *event, int argc, v8::Handle argv[]); + bool Emit(const char *event, int argc, v8::Handle argv[]); protected: - static v8::Handle Emit (const v8::Arguments& args); + static v8::Handle Emit(const v8::Arguments& args); - EventEmitter () : ObjectWrap () { } + EventEmitter() : ObjectWrap () { } }; class Promise : public EventEmitter { public: - static void Initialize (v8::Handle target); + static void Initialize(v8::Handle target); static v8::Persistent constructor_template; - static Promise* Create (void); + static Promise* Create(void); - bool EmitSuccess (int argc, v8::Handle argv[]); - bool EmitError (int argc, v8::Handle argv[]); - void Block (); + bool EmitSuccess(int argc, v8::Handle argv[]); + bool EmitError(int argc, v8::Handle argv[]); + void Block(); - v8::Handle Handle () - { + v8::Handle Handle() { return handle_; } protected: - static v8::Handle New (const v8::Arguments& args); - static v8::Handle Block (const v8::Arguments& args); - static v8::Handle EmitSuccess (const v8::Arguments& args); - static v8::Handle EmitError (const v8::Arguments& args); + static v8::Handle New(const v8::Arguments& args); + static v8::Handle Block(const v8::Arguments& args); + static v8::Handle EmitSuccess(const v8::Arguments& args); + static v8::Handle EmitError(const v8::Arguments& args); - virtual void Detach (void); + virtual void Detach(void); bool blocking_; Promise *prev_; /* for the prev in the Poor Man's coroutine stack */ - void Destack (); + void Destack(); - Promise () : EventEmitter() - { + Promise() : EventEmitter() { blocking_ = false; prev_ = NULL; } }; -} // namespace node -#endif + +} // namespace node +#endif // SRC_EVENTS_H_ diff --git a/src/net.cc b/src/net.cc index 762cee3e62..bf4f574e29 100644 --- a/src/net.cc +++ b/src/net.cc @@ -1,7 +1,5 @@ -#include "net.h" -#include "events.h" - -#include +// Copyright 2009 Ryan Dahl +#include #include #include @@ -15,7 +13,8 @@ #include /* sockaddr_in, sockaddr_in6 */ using namespace v8; -using namespace node; + +namespace node { #define UTF8_SYMBOL String::NewSymbol("utf8") #define RAW_SYMBOL String::NewSymbol("raw") @@ -49,9 +48,7 @@ static const struct addrinfo client_tcp_hints = Persistent Connection::constructor_template; -void -Connection::Initialize (v8::Handle target) -{ +void Connection::Initialize(v8::Handle target) { HandleScope scope; Local t = FunctionTemplate::New(New); @@ -73,12 +70,12 @@ Connection::Initialize (v8::Handle target) READY_STATE_SYMBOL, ReadyStateGetter); - target->Set(String::NewSymbol("Connection"), constructor_template->GetFunction()); + target->Set(String::NewSymbol("Connection"), + constructor_template->GetFunction()); } -Handle -Connection::ReadyStateGetter (Local property, const AccessorInfo& info) -{ +Handle Connection::ReadyStateGetter(Local property, + const AccessorInfo& info) { Connection *connection = ObjectWrap::Unwrap(info.This()); assert(connection); @@ -99,12 +96,11 @@ Connection::ReadyStateGetter (Local property, const AccessorInfo& info) } assert(0 && "This shouldnt happen"); - return ThrowException(Exception::Error(String::New("This shouldn't happen."))); + return ThrowException(Exception::Error( + String::New("This shouldn't happen."))); } -void -Connection::Init (void) -{ +void Connection::Init() { resolving_ = false; evcom_stream_init(&stream_); stream_.on_connect = Connection::on_connect; @@ -114,15 +110,12 @@ Connection::Init (void) stream_.data = this; } -Connection::~Connection () -{ +Connection::~Connection() { assert(stream_.recvfd < 0 && "garbage collecting open Connection"); assert(stream_.sendfd < 0 && "garbage collecting open Connection"); } -Handle -Connection::New (const Arguments& args) -{ +Handle Connection::New(const Arguments& args) { HandleScope scope; Connection *connection = new Connection(); @@ -131,9 +124,7 @@ Connection::New (const Arguments& args) return args.This(); } -Handle -Connection::Connect (const Arguments& args) -{ +Handle Connection::Connect(const Arguments& args) { Connection *connection = ObjectWrap::Unwrap(args.Holder()); assert(connection); @@ -141,12 +132,13 @@ Connection::Connect (const Arguments& args) HandleScope scope; if (connection->ReadyState() == EVCOM_CLOSED) { - connection->Init(); // in case we're reusing the socket + connection->Init(); // in case we're reusing the socket assert(connection->ReadyState() == EVCOM_INITIALIZED); } if (connection->ReadyState() != EVCOM_INITIALIZED) { - Local exception = Exception::Error(String::New("Socket is not in CLOSED state.")); + Local exception = Exception::Error( + String::New("Socket is not in CLOSED state.")); return ThrowException(exception); } @@ -154,7 +146,8 @@ Connection::Connect (const Arguments& args) assert(connection->stream_.sendfd < 0); if (args.Length() == 0) { - Local exception = Exception::TypeError(String::New("First argument must be a port number")); + Local exception = Exception::TypeError( + String::New("First argument must be a port number")); return ThrowException(exception); } @@ -179,18 +172,13 @@ Connection::Connect (const Arguments& args) * In the future I will move to a system using adns or udns: * http://lists.schmorp.de/pipermail/libev/2009q1/000632.html */ - eio_custom( Connection::Resolve - , EIO_PRI_DEFAULT - , Connection::AfterResolve - , connection - ); + eio_custom(Connection::Resolve, EIO_PRI_DEFAULT, Connection::AfterResolve, + connection); return Undefined(); } -int -Connection::Resolve (eio_req *req) -{ +int Connection::Resolve(eio_req *req) { Connection *connection = static_cast (req->data); struct addrinfo *address = NULL; @@ -210,9 +198,7 @@ Connection::Resolve (eio_req *req) return 0; } -static struct addrinfo * -AddressDefaultToIPv4 (struct addrinfo *address_list) -{ +static struct addrinfo * AddressDefaultToIPv4(struct addrinfo *address_list) { struct addrinfo *address = NULL; for (address = address_list; address != NULL; address = address->ai_next) { @@ -222,9 +208,7 @@ AddressDefaultToIPv4 (struct addrinfo *address_list) return address == NULL ? address_list : address; } -int -Connection::AfterResolve (eio_req *req) -{ +int Connection::AfterResolve(eio_req *req) { ev_unref(EV_DEFAULT_UC); Connection *connection = static_cast (req->data); @@ -246,7 +230,7 @@ Connection::AfterResolve (eio_req *req) // no error. return. if (req->result == 0) { - evcom_stream_attach (EV_DEFAULT_UC_ &connection->stream_); + evcom_stream_attach(EV_DEFAULT_UC_ &connection->stream_); goto out; } @@ -262,13 +246,11 @@ Connection::AfterResolve (eio_req *req) connection->Detach(); -out: + out: return 0; } -Handle -Connection::SetEncoding (const Arguments& args) -{ +Handle Connection::SetEncoding(const Arguments& args) { HandleScope scope; Connection *connection = ObjectWrap::Unwrap(args.This()); @@ -296,11 +278,12 @@ Connection::SetEncoding (const Arguments& args) connection->encoding_ = RAWS; return scope.Close(RAWS_SYMBOL); } + assert(0 && "this shouldn't happen"); + return ThrowException(Exception::Error( + String::New("Could not parse encoding. This is a Node bug."))); } -Handle -Connection::ReadPause (const Arguments& args) -{ +Handle Connection::ReadPause(const Arguments& args) { HandleScope scope; Connection *connection = ObjectWrap::Unwrap(args.This()); @@ -311,9 +294,7 @@ Connection::ReadPause (const Arguments& args) return Undefined(); } -Handle -Connection::ReadResume (const Arguments& args) -{ +Handle Connection::ReadResume(const Arguments& args) { HandleScope scope; Connection *connection = ObjectWrap::Unwrap(args.This()); @@ -324,9 +305,7 @@ Connection::ReadResume (const Arguments& args) return Undefined(); } -Handle -Connection::SetTimeout (const Arguments& args) -{ +Handle Connection::SetTimeout(const Arguments& args) { HandleScope scope; Connection *connection = ObjectWrap::Unwrap(args.This()); @@ -339,9 +318,7 @@ Connection::SetTimeout (const Arguments& args) return Undefined(); } -Handle -Connection::Close (const Arguments& args) -{ +Handle Connection::Close(const Arguments& args) { HandleScope scope; Connection *connection = ObjectWrap::Unwrap(args.Holder()); assert(connection); @@ -350,9 +327,7 @@ Connection::Close (const Arguments& args) return Undefined(); } -Handle -Connection::ForceClose (const Arguments& args) -{ +Handle Connection::ForceClose(const Arguments& args) { HandleScope scope; Connection *connection = ObjectWrap::Unwrap(args.Holder()); assert(connection); @@ -362,19 +337,15 @@ Connection::ForceClose (const Arguments& args) return Undefined(); } - -Handle -Connection::Send (const Arguments& args) -{ +Handle Connection::Send(const Arguments& args) { HandleScope scope; Connection *connection = ObjectWrap::Unwrap(args.Holder()); assert(connection); - if ( connection->ReadyState() != EVCOM_CONNECTED_RW - && connection->ReadyState() != EVCOM_CONNECTED_WO - ) - { - Local exception = Exception::Error(String::New("Socket is not open for writing")); + if (connection->ReadyState() != EVCOM_CONNECTED_RW && + connection->ReadyState() != EVCOM_CONNECTED_WO) { + Local exception = Exception::Error( + String::New("Socket is not open for writing")); return ThrowException(exception); } @@ -386,27 +357,22 @@ Connection::Send (const Arguments& args) return ThrowException(exception); } - char buf[len]; + char * buf = new char[len]; ssize_t written = DecodeWrite(buf, len, args[0], enc); - assert(written == len); - connection->Send(buf, written); + delete buf; return scope.Close(Integer::New(written)); } -void -Connection::OnReceive (const void *buf, size_t len) -{ +void Connection::OnReceive(const void *buf, size_t len) { HandleScope scope; Local data = Encode(buf, len, encoding_); Emit("receive", 1, &data); } -void -Connection::OnClose () -{ +void Connection::OnClose() { HandleScope scope; Handle argv[1]; @@ -416,10 +382,10 @@ Connection::OnClose () } #define DEFINE_SIMPLE_CALLBACK(name, type) \ -void name () \ +void name() \ { \ HandleScope scope; \ - Emit (type, 0, NULL); \ + Emit(type, 0, NULL); \ } DEFINE_SIMPLE_CALLBACK(Connection::OnConnect, "connect") @@ -428,9 +394,7 @@ DEFINE_SIMPLE_CALLBACK(Connection::OnEOF, "eof") Persistent Server::constructor_template; -void -Server::Initialize (Handle target) -{ +void Server::Initialize(Handle target) { HandleScope scope; Local t = FunctionTemplate::New(New); @@ -444,10 +408,7 @@ Server::Initialize (Handle target) target->Set(String::NewSymbol("Server"), constructor_template->GetFunction()); } - -static Local -GetAddressString (struct sockaddr *addr) -{ +static Local GetAddressString(struct sockaddr *addr) { HandleScope scope; char ip[INET6_ADDRSTRLEN]; Local remote_address; @@ -462,27 +423,23 @@ GetAddressString (struct sockaddr *addr) inet_ntop(AF_INET6, &(sa6->sin6_addr), ip, INET6_ADDRSTRLEN); remote_address = String::New(ip); - } else assert(0 && "received a bad sa_family"); + } else { + assert(0 && "received a bad sa_family"); + } return scope.Close(remote_address); } -Handle -Server::GetConnectionTemplate (void) -{ +Handle Server::GetConnectionTemplate() { return Connection::constructor_template; } -Connection* -Server::UnwrapConnection (Local connection) -{ +Connection* Server::UnwrapConnection(Local connection) { HandleScope scope; return ObjectWrap::Unwrap(connection); } -Connection* -Server::OnConnection (struct sockaddr *addr) -{ +Connection* Server::OnConnection(struct sockaddr *addr) { HandleScope scope; TryCatch try_catch; @@ -511,9 +468,7 @@ Server::OnConnection (struct sockaddr *addr) return connection; } -void -Server::OnClose (int errorno) -{ +void Server::OnClose(int errorno) { HandleScope scope; Handle argv[1] = { Integer::New(errorno) }; @@ -521,12 +476,7 @@ Server::OnClose (int errorno) Emit("close", 1, argv); } -// TODO Server->SetOptions -// TODO Server -> Server rename - -Handle -Server::New (const Arguments& args) -{ +Handle Server::New(const Arguments& args) { HandleScope scope; Server *server = new Server(); @@ -535,21 +485,24 @@ Server::New (const Arguments& args) return args.This(); } -Handle -Server::Listen (const Arguments& args) -{ +Handle Server::Listen(const Arguments& args) { Server *server = ObjectWrap::Unwrap(args.Holder()); assert(server); HandleScope scope; if (args.Length() == 0) { - Local exception = Exception::TypeError(String::New("First argument must be a port number")); + Local exception = Exception::TypeError( + String::New("First argument must be a port number")); return ThrowException(exception); } String::AsciiValue port(args[0]->ToString()); +#ifndef DNS_MAXNAME +# define DNS_MAXNAME 1024 +#endif + char host[DNS_MAXNAME+1] = "\0"; int backlog = 1024; @@ -575,9 +528,12 @@ Server::Listen (const Arguments& args) // For servers call getaddrinfo inline. This is blocking but it shouldn't // matter much. If someone actually complains then simply swap it out // with a libeio call. - struct addrinfo *address = NULL, - *address_list = NULL; - int r = getaddrinfo(strlen(host) ? host : NULL, *port, &server_tcp_hints, &address_list); + struct addrinfo * address = NULL, + * address_list = NULL; + + int r = getaddrinfo(strlen(host) ? + host : NULL, *port, &server_tcp_hints, &address_list); + if (r != 0) { Local exception = Exception::Error(String::New(strerror(errno))); return ThrowException(exception); @@ -592,12 +548,12 @@ Server::Listen (const Arguments& args) return Undefined(); } -Handle -Server::Close (const Arguments& args) -{ +Handle Server::Close(const Arguments& args) { Server *server = ObjectWrap::Unwrap(args.Holder()); assert(server); server->Close(); return Undefined(); } + +} // namespace node diff --git a/src/net.h b/src/net.h index 1c587f973c..a450d33016 100644 --- a/src/net.h +++ b/src/net.h @@ -1,40 +1,38 @@ -#ifndef node_net_h -#define node_net_h +// Copyright 2009 Ryan Dahl +#ifndef SRC_NET_H_ +#define SRC_NET_H_ -#include "node.h" -#include "events.h" +#include +#include #include #include -#include - namespace node { class Server; class Connection : public EventEmitter { -public: - static void Initialize (v8::Handle target); + public: + static void Initialize(v8::Handle target); -protected: + protected: /* v8 interface */ static v8::Persistent constructor_template; - static v8::Handle New (const v8::Arguments& args); - static v8::Handle Connect (const v8::Arguments& args); - static v8::Handle Send (const v8::Arguments& args); - static v8::Handle SendUtf8 (const v8::Arguments& args); - static v8::Handle Close (const v8::Arguments& args); - static v8::Handle ForceClose (const v8::Arguments& args); - static v8::Handle SetEncoding (const v8::Arguments& args); - static v8::Handle ReadPause (const v8::Arguments& args); - static v8::Handle ReadResume (const v8::Arguments& args); - static v8::Handle SetTimeout (const v8::Arguments& args); - - static v8::Handle ReadyStateGetter (v8::Local _, + static v8::Handle New(const v8::Arguments& args); + static v8::Handle Connect(const v8::Arguments& args); + static v8::Handle Send(const v8::Arguments& args); + static v8::Handle SendUtf8(const v8::Arguments& args); + static v8::Handle Close(const v8::Arguments& args); + static v8::Handle ForceClose(const v8::Arguments& args); + static v8::Handle SetEncoding(const v8::Arguments& args); + static v8::Handle ReadPause(const v8::Arguments& args); + static v8::Handle ReadResume(const v8::Arguments& args); + static v8::Handle SetTimeout(const v8::Arguments& args); + + static v8::Handle ReadyStateGetter(v8::Local _, const v8::AccessorInfo& info); - Connection (void) : EventEmitter() - { + Connection() : EventEmitter() { encoding_ = RAW; host_ = NULL; @@ -42,47 +40,61 @@ protected: Init(); } - virtual ~Connection (void); + virtual ~Connection(); + + int Connect(struct sockaddr *address) { + return evcom_stream_connect(&stream_, address); + } + + void Send(const char *buf, size_t len) { + evcom_stream_write(&stream_, buf, len); + } + + void Close() { + evcom_stream_close(&stream_); + } - int Connect (struct sockaddr *address) { - return evcom_stream_connect (&stream_, address); + void ForceClose() { + evcom_stream_force_close(&stream_); } - void Send (const char *buf, size_t len) { evcom_stream_write(&stream_, buf, len); } - void Close (void) { evcom_stream_close(&stream_); } - void ForceClose (void) { evcom_stream_force_close(&stream_); } - void ReadPause (void) { evcom_stream_read_pause(&stream_); } - void ReadResume (void) { evcom_stream_read_resume(&stream_); } - void SetTimeout (float timeout) - { + + void ReadPause() { + evcom_stream_read_pause(&stream_); + } + + void ReadResume() { + evcom_stream_read_resume(&stream_); + } + + void SetTimeout(float timeout) { evcom_stream_reset_timeout(&stream_, timeout); } - virtual void OnConnect (void); - virtual void OnReceive (const void *buf, size_t len); - virtual void OnEOF (void); - virtual void OnClose (void); - virtual void OnTimeout (void); + virtual void OnConnect(); + virtual void OnReceive(const void *buf, size_t len); + virtual void OnEOF(); + virtual void OnClose(); + virtual void OnTimeout(); - v8::Local GetProtocol (void); + v8::Local GetProtocol(); - enum evcom_stream_state ReadyState ( ) { + enum evcom_stream_state ReadyState() { return evcom_stream_state(&stream_); } enum encoding encoding_; - bool resolving_; -private: + private: /* liboi callbacks */ - static void on_connect (evcom_stream *s) { - Connection *connection = static_cast (s->data); + static void on_connect(evcom_stream *s) { + Connection *connection = static_cast(s->data); connection->OnConnect(); } - static void on_read (evcom_stream *s, const void *buf, size_t len) { - Connection *connection = static_cast (s->data); + static void on_read(evcom_stream *s, const void *buf, size_t len) { + Connection *connection = static_cast(s->data); assert(connection->attached_); if (len == 0) connection->OnEOF(); @@ -90,8 +102,8 @@ private: connection->OnReceive(buf, len); } - static void on_close (evcom_stream *s) { - Connection *connection = static_cast (s->data); + static void on_close(evcom_stream *s) { + Connection *connection = static_cast(s->data); evcom_stream_detach(s); @@ -105,15 +117,15 @@ private: connection->Detach(); } - static void on_timeout (evcom_stream *s) { - Connection *connection = static_cast (s->data); + static void on_timeout(evcom_stream *s) { + Connection *connection = static_cast(s->data); connection->OnTimeout(); } - void Init (void); // constructor helper. + void Init(); // constructor helper. - static int Resolve (eio_req *req); - static int AfterResolve (eio_req *req); + static int Resolve(eio_req *req); + static int AfterResolve(eio_req *req); char *host_; char *port_; evcom_stream stream_; @@ -122,53 +134,54 @@ private: }; class Server : public EventEmitter { -public: - static void Initialize (v8::Handle target); + public: + static void Initialize(v8::Handle target); -protected: + protected: static v8::Persistent constructor_template; - static v8::Handle New (const v8::Arguments& args); - static v8::Handle Listen (const v8::Arguments& args); - static v8::Handle Close (const v8::Arguments& args); + static v8::Handle New(const v8::Arguments& args); + static v8::Handle Listen(const v8::Arguments& args); + static v8::Handle Close(const v8::Arguments& args); - Server (void) : EventEmitter() - { + Server() : EventEmitter() { evcom_server_init(&server_); server_.on_connection = Server::on_connection; server_.on_close = Server::on_close; server_.data = this; } - virtual ~Server () { + virtual ~Server() { assert(server_.fd >= 0); } - int Listen (struct sockaddr *address, int backlog) { - int r = evcom_server_listen (&server_, address, backlog); - if(r != 0) return r; - evcom_server_attach (EV_DEFAULT_ &server_); + int Listen(struct sockaddr *address, int backlog) { + int r = evcom_server_listen(&server_, address, backlog); + if (r != 0) return r; + evcom_server_attach(EV_DEFAULT_ &server_); Attach(); return 0; } - void Close ( ) { - evcom_server_close (&server_); + void Close() { + evcom_server_close(&server_); } - virtual v8::Handle GetConnectionTemplate (void); - virtual Connection* UnwrapConnection (v8::Local connection); + virtual v8::Handle GetConnectionTemplate(); + virtual Connection* UnwrapConnection(v8::Local connection); + + private: + Connection* OnConnection(struct sockaddr *addr); -private: - Connection* OnConnection (struct sockaddr *addr); - static evcom_stream* on_connection (evcom_server *s, struct sockaddr *addr) { - Server *server = static_cast (s->data); - Connection *connection = server->OnConnection (addr); + static evcom_stream* on_connection(evcom_server *s, struct sockaddr *addr) { + Server *server = static_cast(s->data); + Connection *connection = server->OnConnection(addr); return &connection->stream_; } - void OnClose (int errorno); - static void on_close (evcom_server *s) { - Server *server = static_cast (s->data); + void OnClose(int errorno); + + static void on_close(evcom_server *s) { + Server *server = static_cast(s->data); evcom_server_detach(s); server->OnClose(s->errorno); server->Detach(); @@ -177,5 +190,5 @@ private: evcom_server server_; }; -} // namespace node -#endif +} // namespace node +#endif // SRC_NET_H_ diff --git a/src/node.cc b/src/node.cc index cc83490079..41e06f8828 100644 --- a/src/node.cc +++ b/src/node.cc @@ -3,7 +3,7 @@ #include #include -#include +#include #include /* PATH_MAX */ #include #include