static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface) { DispatchEx *This = DISPATCHEX_THIS(iface); LONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) ref=%d\n", This, ref); if(!ref) { dispex_prop_t *prop; for(prop = This->props; prop < This->props+This->prop_cnt; prop++) { if(prop->type == PROP_VARIANT) VariantClear(&prop->u.var); heap_free(prop->name); } heap_free(This->props); script_release(This->ctx); if(This->builtin_info->destructor) This->builtin_info->destructor(This); else heap_free(This); } return ref; }
static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface) { JScript *This = ASPARSE_THIS(iface); script_ctx_t *ctx; TRACE("(%p)\n", This); if(This->ctx) return E_UNEXPECTED; ctx = heap_alloc_zero(sizeof(script_ctx_t)); if(!ctx) return E_OUTOFMEMORY; ctx->ref = 1; ctx->state = SCRIPTSTATE_UNINITIALIZED; ctx->safeopt = This->safeopt; ctx->version = This->version; jsheap_init(&ctx->tmp_heap); ctx = InterlockedCompareExchangePointer((void**)&This->ctx, ctx, NULL); if(ctx) { script_release(ctx); return E_UNEXPECTED; } return This->site ? set_ctx_site(This) : S_OK; }
int main(int argc, char **argv) { int ret; pcap_wrapper *pw; char ch, filter[128], is_usage = 0, show_version = 0; while((ch = getopt(argc, argv, "s:p:i:S:Cd:l:hv")) != -1) { switch(ch) { case 's': opts.server = strdup(optarg); break; case 'p': opts.port= atoi(optarg); break; case 'i': opts.device = strdup(optarg); break; case 'S': opts.script = strdup(optarg); break; case 'C': opts.is_calc_mode = 1; break; case 'd': opts.duration = atoi(optarg); break; case 'l': opts.specified_addresses = 1; if (parse_addresses(optarg)) { logger(ERROR, "parsing local addresses\n"); return EXIT_FAILURE; } break; case 'f': opts.log_file = strdup(optarg); break; case 'h': is_usage = 1; break; case 'v': show_version= 1; break; } } if( is_usage ) { usage(argv[0]); exit(0); } if(show_version) { printf("%s version is %s\n", argv[0], VERSION); exit(0); } if(!opts.specified_addresses && get_addresses() != 0) { exit(0); } if (!opts.port) logger(ERROR, "port is required.\n"); if (!opts.device) logger(ERROR, "device is required.\n"); if (opts.log_file) set_log_file(opts.log_file); if (!(pw = pw_create(opts.device))) logger(ERROR, "start captrue packet failed.\n"); if(opts.server) { snprintf(filter, sizeof(filter), "host %s and tcp port %d", opts.server, opts.port); } else { snprintf(filter, sizeof(filter), "tcp port %d", opts.port); } check_lua_script(); // start capature loop. ret = core_loop(pw, filter, process_packet); if(ret == -1) logger(ERROR, "start core loop failed.\n"); pw_release(pw); script_release(L); return 0; }
static ULONG WINAPI JScript_Release(IActiveScript *iface) { JScript *This = ACTSCRIPT_THIS(iface); LONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) ref=%d\n", iface, ref); if(!ref) { if(This->ctx && This->ctx->state != SCRIPTSTATE_CLOSED) IActiveScript_Close(ACTSCRIPT(This)); if(This->ctx) script_release(This->ctx); heap_free(This); unlock_module(); } return ref; }
static ULONG WINAPI JScript_Release(IActiveScript *iface) { JScript *This = impl_from_IActiveScript(iface); LONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) ref=%d\n", iface, ref); if(!ref) { if(This->ctx && This->ctx->state != SCRIPTSTATE_CLOSED) IActiveScript_Close(&This->IActiveScript_iface); if(This->ctx) { This->ctx->active_script = NULL; script_release(This->ctx); } heap_free(This); unlock_module(); } return ref; }
static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface) { JScript *This = impl_from_IActiveScriptParse(iface); script_ctx_t *ctx; HRESULT hres; TRACE("(%p)\n", This); if(This->ctx) return E_UNEXPECTED; ctx = heap_alloc_zero(sizeof(script_ctx_t)); if(!ctx) return E_OUTOFMEMORY; ctx->ref = 1; ctx->state = SCRIPTSTATE_UNINITIALIZED; ctx->active_script = &This->IActiveScript_iface; ctx->safeopt = This->safeopt; ctx->version = This->version; ctx->html_mode = This->html_mode; ctx->ei.val = jsval_undefined(); ctx->acc = jsval_undefined(); heap_pool_init(&ctx->tmp_heap); hres = create_jscaller(ctx); if(FAILED(hres)) { heap_free(ctx); return hres; } ctx->last_match = jsstr_empty(); ctx = InterlockedCompareExchangePointer((void**)&This->ctx, ctx, NULL); if(ctx) { script_release(ctx); return E_UNEXPECTED; } return This->site ? set_ctx_site(This) : S_OK; }