V7_PRIVATE enum v7_err Obj_toString(struct v7_c_func_arg *cfa) { char *p, buf[500]; p = v7_stringify(cfa->this_obj, buf, sizeof(buf)); v7_push_string(cfa->v7, p, strlen(p), 1); if (p != buf) free(p); return V7_OK; }
/* JS signature: listen(addr, [options]) */ SJ_PRIVATE enum v7_err Http_Server_listen(struct v7 *v7, v7_val_t *res) { enum v7_err rcode = V7_OK; char buf[50], *p = buf; const char *ca_cert = NULL, *cert = NULL; v7_val_t this_obj = v7_get_this(v7); v7_val_t arg0 = v7_arg(v7, 0); v7_val_t opts = v7_arg(v7, 1); if (!v7_is_number(arg0) && !v7_is_string(arg0)) { rcode = v7_throwf(v7, "TypeError", "Function expected"); goto clean; } if (!v7_is_undefined(opts) && !v7_is_object(opts)) { rcode = v7_throwf(v7, "TypeError", "Options must be an object"); goto clean; } if (!v7_is_undefined(opts)) { v7_val_t ca_cert_v = v7_get(v7, opts, "ssl_ca_cert", ~0); v7_val_t cert_v = v7_get(v7, opts, "ssl_cert", ~0); if (!v7_is_undefined(ca_cert_v) && !v7_is_string(ca_cert_v)) { rcode = v7_throwf(v7, "TypeError", "ca_cert must be a string"); goto clean; } if (!v7_is_undefined(cert_v) && !v7_is_string(cert_v)) { rcode = v7_throwf(v7, "TypeError", "cert must be a string"); goto clean; } if (!v7_is_undefined(ca_cert_v)) { ca_cert = v7_to_cstring(v7, &ca_cert_v); } if (!v7_is_undefined(cert_v)) { cert = v7_to_cstring(v7, &cert_v); } } p = v7_stringify(v7, arg0, buf, sizeof(buf), 0); rcode = start_http_server(v7, p, this_obj, ca_cert, cert); if (rcode != V7_OK) { goto clean; } *res = this_obj; clean: if (p != buf) { free(p); } return rcode; }
static void Http_write_data(struct v7 *v7, struct mg_connection *c) { v7_val_t arg0 = v7_arg(v7, 0); if (!v7_is_undefined(arg0)) { char buf[50], *p = buf; p = v7_stringify(v7, arg0, buf, sizeof(buf), 0); mg_send_http_chunk(c, p, strlen(p)); if (p != buf) { free(p); } } }
MG_PRIVATE enum v7_err Console_log(struct v7 *v7, v7_val_t *res) { int argc = v7_argc(v7); /* Put everything into one message */ for (int i = 0; i < argc; i++) { v7_val_t arg = v7_arg(v7, i); if (v7_is_string(arg)) { size_t len; const char *str = v7_get_string(v7, &arg, &len); miot_console_puts_n(str, len); } else { char buf[100], *p; p = v7_stringify(v7, arg, buf, sizeof(buf), V7_STRINGIFY_DEBUG); miot_console_puts_n(p, strlen(p)); if (p != buf) free(p); } if (i != argc - 1) { miot_console_putc(' '); } } miot_console_putc('\n'); *res = V7_UNDEFINED; /* like JS print */ return V7_OK; }