int NaClReverseThreadIfCtor_protected( struct NaClReverseCountingThreadInterface *self, void *factory_data, NaClThreadIfStartFunction fn_ptr, void *thread_data, size_t thread_stack_size) { struct NaClReverseService *nrsp = (struct NaClReverseService *) factory_data; NaClLog(3, "Entered NaClReverseThreadIfCtor_protected\n"); if (!NaClThreadInterfaceCtor_protected( (struct NaClThreadInterface *) self, NaClReverseThreadIfFactoryFn, NaClRefCountRef((struct NaClRefCount *) nrsp), fn_ptr, thread_data, thread_stack_size)) { NaClLog(4, "NaClThreadInterfaceCtor_protected failed\n"); NaClRefCountUnref((struct NaClRefCount *) nrsp); return 0; } self->reverse_service = nrsp; (*NACL_VTBL(NaClReverseService, nrsp)->ThreadCountIncr)(nrsp); NACL_VTBL(NaClRefCount, self) = (struct NaClRefCountVtbl *) &kNaClReverseThreadInterfaceVtbl; NaClLog(3, "Leaving NaClAddrSpSquattingThreadIfCtor_protected\n"); return 1; }
int NaClSimpleServiceConnectionCtor( struct NaClSimpleServiceConnection *self, struct NaClSimpleService *server, struct NaClDesc *conn, void *instance_data) { NaClLog(4, "NaClSimpleServiceConnectionCtor: self 0x%"NACL_PRIxPTR"\n", (uintptr_t) self); if (!NaClRefCountCtor((struct NaClRefCount *) self)) { return 0; } self->server = (struct NaClSimpleService *) NaClRefCountRef( (struct NaClRefCount *) server); self->connected_socket = (struct NaClDesc *) NaClRefCountRef( (struct NaClRefCount *) conn); self->instance_data = instance_data; self->thread = NULL; self->base.vtbl = (struct NaClRefCountVtbl const *) &kNaClSimpleServiceConnectionVtbl; return 1; }
int NaClDescPostMessageCtor(struct NaClDescPostMessage *self, struct NaClRuntimeHostInterface *runtime_host) { NaClLog(4, "Entered NaClDescPostMessageCtor\n"); NACL_VTBL(NaClRefCount, self) = (struct NaClRefCountVtbl const *) NULL; if (!NaClDescCtor(&self->base)) { NaClLog(4, "Leaving NaClDescPostMessageCtor: failed\n"); return 0; } self->runtime_host = (struct NaClRuntimeHostInterface *) NaClRefCountRef((struct NaClRefCount *) runtime_host); NACL_VTBL(NaClRefCount, self) = (struct NaClRefCountVtbl const *) &kNaClDescPostMessageVtbl; NaClLog(4, " Write vfptr = %"NACL_PRIxPTR"\n", (uintptr_t) NACL_VTBL(NaClDesc, self)->Write); NaClLog(4, "Leaving NaClDescPostMessageCtor: success\n"); return 1; }
int NaClReverseHostInterfaceCtor( struct NaClReverseHostInterface *self, struct NaClSecureService *server) { NaClLog(4, "NaClReverseHostInterfaceCtor:" "self 0x%"NACL_PRIxPTR", server 0x%"NACL_PRIxPTR"\n", (uintptr_t) self, (uintptr_t) server); if (!NaClRuntimeHostInterfaceCtor_protected(&self->base)) { NaClLog(3, "NaClReverseHostInterfaceCtor: " "NaClRuntimeHostInterfaceCtor base class ctor failed\n"); return 0; } self->server = (struct NaClSecureService *) NaClRefCountRef((struct NaClRefCount *) server); NACL_VTBL(NaClRefCount, self) = (struct NaClRefCountVtbl const *) &kNaClReverseHostInterfaceVtbl; return 1; }
int NaClSimpleServiceStartServiceThread(struct NaClSimpleService *server) { NaClLog(4, "NaClSimpleServiceStartServiceThread: spawning thread\n"); CHECK(server->acceptor == NULL); if (!NaClThreadInterfaceConstructAndStartThread( server->thread_factory_fn, server->thread_factory_data, AcceptThread, NaClRefCountRef(&server->base), NACL_KERN_STACK_SIZE, &server->acceptor)) { NaClLog(4, "NaClSimpleServiceStartServiceThread: no thread\n"); NaClRefCountUnref(&server->base); /* undo ref in Ctor call arglist */ return 0; } NaClLog(4, "NaClSimpleServiceStartServiceThread: success\n"); return 1; }
int NaClReverseServiceCtor(struct NaClReverseService *self, struct NaClReverseInterface *iface, struct NaClDesc *conn_cap) { int retval = 0; /* fail */ CHECK(iface != NULL); NaClLog(4, "Entered NaClReverseServiceCtor\n"); if (!NaClSimpleRevServiceCtor(&self->base, conn_cap, kNaClReverseServiceHandlers, NaClReverseThreadIfFactoryFn, (void *) self)) { NaClLog(4, "NaClReverseServiceCtor: NaClSimpleRevServiceCtor failed\n"); goto done; } NACL_VTBL(NaClRefCount, self) = (struct NaClRefCountVtbl *) &kNaClReverseServiceVtbl; if (!NaClMutexCtor(&self->mu)) { NaClLog(4, "NaClMutexCtor failed\n"); goto mutex_ctor_fail; } if (!NaClCondVarCtor(&self->cv)) { NaClLog(4, "NaClCondVar failed\n"); goto condvar_ctor_fail; } /* success return path */ self->iface = (struct NaClReverseInterface *) NaClRefCountRef( (struct NaClRefCount *) iface); self->thread_count = 0; retval = 1; goto done; /* cleanup unwind */ condvar_ctor_fail: NaClMutexDtor(&self->mu); mutex_ctor_fail: (*NACL_VTBL(NaClRefCount, self)->Dtor)((struct NaClRefCount *) self); done: return retval; }
int NaClManifestProxyCtor(struct NaClManifestProxy *self, NaClThreadIfFactoryFunction thread_factory_fn, void *thread_factory_data, struct NaClSecureService *server) { NaClLog(4, ("Entered NaClManifestProxyCtor: self 0x%"NACL_PRIxPTR ", client 0x%"NACL_PRIxPTR"\n"), (uintptr_t) self, (uintptr_t) server); if (!NaClSimpleServiceCtor(&self->base, kNaClManifestProxyHandlers, thread_factory_fn, thread_factory_data)) { return 0; } self->server = (struct NaClSecureService *) NaClRefCountRef((struct NaClRefCount *) server); NACL_VTBL(NaClRefCount, self) = (struct NaClRefCountVtbl *) &kNaClManifestProxyVtbl; return 1; }
int NaClKernelServiceCtor( struct NaClKernelService *self, NaClThreadIfFactoryFunction thread_factory_fn, void *thread_factory_data, struct NaClRuntimeHostInterface *runtime_host) { NaClLog(4, ("NaClKernelServiceCtor: self 0x%"NACL_PRIxPTR"," " runtime_host 0x%"NACL_PRIxPTR"\n"), (uintptr_t) self, (uintptr_t) runtime_host); if (!NaClSimpleServiceCtor(&self->base, kNaClKernelServiceHandlers, thread_factory_fn, thread_factory_data)) { return 0; } self->runtime_host = (struct NaClRuntimeHostInterface *) NaClRefCountRef((struct NaClRefCount *) runtime_host); NACL_VTBL(NaClRefCount, self) = (struct NaClRefCountVtbl *) &kNaClKernelServiceVtbl; return 1; }
struct NaClDesc *NaClDescRef(struct NaClDesc *ndp) { return (struct NaClDesc *) NaClRefCountRef(&ndp->base); }