static njs_ret_t ngx_http_js_ext_log(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, njs_index_t unused) { nxt_str_t msg; ngx_connection_t *c; ngx_log_handler_pt handler; ngx_http_request_t *r; r = njs_value_data(njs_argument(args, 0)); c = r->connection; if (njs_value_to_ext_string(vm, &msg, njs_argument(args, 1)) == NJS_ERROR) { return NJS_ERROR; } handler = c->log->handler; c->log->handler = NULL; ngx_log_error(NGX_LOG_INFO, c->log, 0, "js: %*s", msg.length, msg.start); c->log->handler = handler; return NJS_OK; }
static njs_ret_t ngx_http_js_ext_finish(njs_vm_t *vm, njs_param_t *param) { ngx_http_request_t *r; r = njs_value_data(param->object); if (ngx_http_send_special(r, NGX_HTTP_LAST) == NGX_ERROR) { return NJS_ERROR; } return NJS_OK; }
static njs_ret_t ngx_http_js_ext_send_header(njs_vm_t *vm, njs_param_t *param) { ngx_http_request_t *r; r = njs_value_data(param->object); if (ngx_http_send_header(r) == NGX_ERROR) { return NJS_ERROR; } return NJS_OK; }
static njs_ret_t ngx_http_js_ext_finish(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, njs_index_t unused) { ngx_http_request_t *r; r = njs_value_data(njs_argument(args, 0)); if (ngx_http_send_special(r, NGX_HTTP_LAST) == NGX_ERROR) { return NJS_ERROR; } return NJS_OK; }
static njs_ret_t ngx_http_js_ext_send_header(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, njs_index_t unused) { ngx_http_request_t *r; r = njs_value_data(njs_argument(args, 0)); if (ngx_http_send_header(r) == NGX_ERROR) { return NJS_ERROR; } return NJS_OK; }
static njs_ret_t ngx_http_js_ext_send(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, njs_index_t unused) { nxt_int_t ret; nxt_str_t s; ngx_buf_t *b; uintptr_t next; ngx_uint_t n; ngx_chain_t *out, *cl, **ll; ngx_http_request_t *r; r = njs_value_data(njs_argument(args, 0)); out = NULL; ll = &out; for (n = 1; n < nargs; n++) { next = 0; for ( ;; ) { ret = njs_value_string_copy(vm, &s, njs_argument(args, n), &next); if (ret == NJS_DECLINED) { break; } if (ret == NJS_ERROR) { return NJS_ERROR; } /* TODO: njs_value_release(vm, value) in buf completion */ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "http js send: \"%*s\"", s.length, s.start); b = ngx_calloc_buf(r->pool); if (b == NULL) { return NJS_ERROR; } b->start = s.start; b->pos = b->start; b->end = s.start + s.length; b->last = b->end; b->memory = 1; cl = ngx_alloc_chain_link(r->pool); if (cl == NULL) { return NJS_ERROR; } cl->buf = b; *ll = cl; ll = &cl->next; } } *ll = NULL; if (ngx_http_output_filter(r, out) == NGX_ERROR) { return NJS_ERROR; } return NJS_OK; }