static void UI_ReportCompilerMessage(KonohaContext *kctx, kinfotag_t taglevel, kfileline_t pline, const char *msg) { const char *file = PLATAPI shortFilePath(getThisFileName(kctx)); char cid[64] = {0}; file2CId(file, cid); PLATAPI LoggerModule.syslog_i( 5/*LOG_NOTICE*/, "{\"Method\": \"DScriptCompilerMessage\", \"CId\": \"%s\", \"Body\": \"%s\"}", cid, msg); }
static char* InputUserPassword(KonohaContext *kctx, const char *message) { char buff[BUFSIZ] = {0}; const char *file = PLATAPI shortFilePath((getThisFileName(kctx))); char cid[64] = {0}; file2CId(file, cid); // char hostname[BUFSIZ] = {0}; // gethostname(hostname, BUFSIZ); // struct addrinfo *res; // struct in_Addr addr; // int err; // if((err = getaddrinfo(hostname, NULL, NULL, &res)) != 0) { // PLATAPI syslog_i(5/*LOG_NOTICE*/, "{\"Method\": \"DScriptError\", \"CId\": \"%s\", \"Body\": \"error %d\"}", cid, err); // exit(1); // } // addr.s_Addr = ((struct sockaddr_in *)(res->ai_Addr))->sin_Addr.s_Addr; // char host[16] = {0}; // memcpy(host, inet_ntoa(addr), 16); // freeaddrinfo(res); const char host[] = "127.0.0.1"; // TODO get localhost IP int port = 8090; // TODO random port scan PLATAPI LoggerModule.syslog_i(5/*LOG_NOTICE*/, "{\"Method\": \"DScriptPassword\", \"CId\": \"%s\", \"Body\": \"%s\", \"Ip\": \"%s:%d\"}" , cid, message, host, port); getUserInput(kctx, buff, cid, host, port); size_t len = strlen(buff) + 1; char *p = malloc(len); if(p != NULL) { memcpy(p, buff, len); } return p; }
static void UI_ReportUserMessage(KonohaContext *kctx, kinfotag_t level, kfileline_t pline, const char *msg, int isNewLine) { const char *beginTag = BeginTag(kctx, level); const char *endTag = EndTag(kctx, level); const char *kLF = isNewLine ? "\n" : ""; if(pline > 0) { const char *file = KFileLine_textFileName(pline); PLATAPI printf_i("%s - (%s:%d) %s%s%s" , beginTag, PLATAPI shortFilePath(file), (kushort_t)pline, msg, kLF, endTag); } else { PLATAPI printf_i("%s%s%s%s", beginTag, msg, kLF, endTag); } }
static void DumpOpArgument(KonohaContext *kctx, KBuffer *wb, KVirtualCodeType type, KVirtualCode *c, size_t i, KVirtualCode *vcode_start) { switch(type) { case VMT_VOID: break; case VMT_ADDR: KLIB KBuffer_printf(kctx, wb, " L%d", (int)((KVirtualCode *)c->p[i] - vcode_start)); break; case VMT_UL: { kfileline_t uline = (kfileline_t)c->data[i]; KLIB KBuffer_printf(kctx, wb, " (%s:%d)", PLATAPI shortFilePath(KFileLine_textFileName(uline)), (khalfword_t)uline); break; } case VMT_R: { KLIB KBuffer_printf(kctx, wb, " sfp[%d,r=%d]", (int)c->data[i]/2, (int)c->data[i]); break; } case VMT_FX: { khalfword_t index = (khalfword_t)c->data[i]; khalfword_t xindex = (khalfword_t)(c->data[i] >> (sizeof(khalfword_t)*8)); KLIB KBuffer_printf(kctx, wb, " sfp[%d,r=%d][%d]", (int)index/2, (int)index, (int)xindex); break; } case VMT_U: KLIB KBuffer_printf(kctx, wb, " i%ld", (long)c->data[i]); break; case VMT_C: case VMT_TY: KLIB KBuffer_printf(kctx, wb, "(%s)", KClass_text(c->ct[i])); break; case VMT_F: KLIB KBuffer_printf(kctx, wb, " function(%p)", c->p[i]); break; case VMT_Object: { kObject *o = c->o[i]; if(IS_Method(o)) { kMethod *mtd = (kMethod *)o; KLIB KBuffer_printf(kctx, wb, " %s.%s%s", KType_text(mtd->typeId), KMethodName_Fmt2(mtd->mn)); } else { KLIB KBuffer_printf(kctx, wb, " (%s)", KClass_text(kObject_class(o))); KLIB kObject_WriteToBuffer(kctx, o, 0, wb, NULL, 0); } break; } case VMT_HCACHE: break; }/*switch*/ }
static int InputUserApproval(KonohaContext *kctx, const char *message, const char *yes, const char *no, int defval) { char buff[BUFSIZ] = {0}; const char *ykey = defval ? "Y" : "y"; const char *nkey = defval ? "n" : "N"; if(message == NULL || message[0] == '\0') message = "Do you approve?"; if(yes == NULL || yes[0] == '\0') yes = "yes"; if(no == NULL || no[0] == '\0') no = "no"; const char *file = PLATAPI shortFilePath((getThisFileName(kctx))); char cid[64] = {0}; file2CId(file, cid); // char hostname[BUFSIZ] = {0}; // gethostname(hostname, BUFSIZ); // struct addrinfo *res; // struct in_Addr addr; // int err; // if((err = getaddrinfo(hostname, NULL, NULL, &res)) != 0) { // PLATAPI syslog_i(5/*LOG_NOTICE*/, "{\"Method\": \"DScriptError\", \"CId\": \"%s\", \"Body\": \"error %d\"}", cid, err); // exit(1); // } // addr.s_Addr = ((struct sockaddr_in *)(res->ai_Addr))->sin_Addr.s_Addr; // char host[16] = {0}; // memcpy(host, inet_ntoa(addr), 16); // freeaddrinfo(res); const char host[] = "127.0.0.1"; // TODO get localhost IP int port = 8090; // TODO random port scan PLATAPI LoggerModule.syslog_i(5/*LOG_NOTICE*/, "{\"Method\": \"DScriptApproval\", \"CId\": \"%s\", \"Body\": \"%s (%s %s, %s %s): \", \"Ip\": \"%s:%d\"}" , cid, message, yes, ykey, no, nkey, host, port); getUserInput(kctx, buff, cid, host, port); if(defval) { return ((buff[0] == 'N' || buff[0] == 'n') && buff[1] == 0) ? false : true; } else { return ((buff[0] == 'Y' || buff[0] == 'y') && buff[1] == 0) ? false : true; } }
static void kException_addStackTrace(KonohaContext *kctx, KonohaStack *sfp, kException *e) { kMethod *mtd = sfp[K_MTDIDX].mtdNC; KUtilsWriteBuffer wb; KLIB Kwb_init(&kctx->stack->cwb, &wb); kfileline_t uline = sfp[K_RTNIDX].uline; if(uline > 0) { const char *file = FileId_t(uline); KLIB Kwb_printf(kctx, &wb, "(%s:%d) %s.%s%s" , PLATAPI shortFilePath(file), (kushort_t)uline, Method_t(mtd)); } // int i = 0, psize = Method_paramsize(mtd); // kParam *pa = Method_param(mtd); // KonohaClass *thisClass = O_cid(sfp[0]); // for(i = 0; i < psize; i++) { // pa->paramtypeItems[0].ty; // if(i > 0) { // knh_putc(ctx, cwb->w, ','); // } // knh_write_fn(ctx, cwb->w, p->fn); // knh_putc(ctx, cwb->w, '='); // knh_write_sfp(ctx, cwb->w, type, &sfp[i+1], FMT_line); // } const char *msg = KLIB Kwb_top(kctx, &wb, 1); KLIB kArray_add(kctx, e->stackTraceList, KLIB new_kString(kctx, msg, strlen(msg), 0)); // if((mtd)->mn != MN_LAMBDA) { // knh_uline_t uline = knh_stack_uline(ctx, sfp); // knh_write_uline(ctx, cwb->w, uline); // knh_write_type(ctx, cwb->w, (mtd)->cid); // knh_putc(ctx, cwb->w, '.'); // knh_write_mn(ctx, cwb->w, (mtd)->mn); // knh_putc(ctx, cwb->w, '('); // knh_putc(ctx, cwb->w, ')'); // if(DP(e)->tracesNULL == NULL) { // KNH_INITv(DP(e)->tracesNULL, new_Array(ctx, CLASS_String, 0)); // } // knh_Array_add(ctx, DP(e)->tracesNULL, knh_cwb_newString(ctx, cwb)); // } }
static void kException_AddStackTrace(KonohaContext *kctx, KonohaStack *sfp, kException *e) { kMethod *mtd = sfp[K_MTDIDX].calledMethod; KBuffer wb; KLIB KBuffer_Init(&kctx->stack->cwb, &wb); kfileline_t uline = sfp[K_RTNIDX].calledFileLine; if(uline > 0) { const char *file = KFileLine_textFileName(uline); KLIB KBuffer_printf(kctx, &wb, "(%s:%d) %s.%s%s" , PLATAPI shortFilePath(file), (kushort_t)uline, kMethod_Fmt3(mtd)); } // int i = 0, psize = kMethod_ParamSize(mtd); // kParam *pa = kMethod_GetParam(mtd); // KClass *thisClass = O_cid(sfp[0]); // for(i = 0; i < psize; i++) { // pa->paramtypeItems[0].attrTypeId; // if(i > 0) { // knh_putc(ctx, cwb->w, ','); // } // knh_Write_fn(ctx, cwb->w, p->fn); // knh_putc(ctx, cwb->w, '='); // knh_Write_sfp(ctx, cwb->w, type, &sfp[i+1], FMT_line); // } const char *msg = KLIB KBuffer_text(kctx, &wb, EnsureZero); KLIB new_kString(kctx, e->StackTraceList, msg, strlen(msg), 0); // if((mtd)->mn != MN_LAMBDA) { // knh_uline_t uline = knh_stack_uline(ctx, sfp); // knh_Write_uline(ctx, cwb->w, uline); // knh_Write_type(ctx, cwb->w, (mtd)->cid); // knh_putc(ctx, cwb->w, '.'); // knh_Write_mn(ctx, cwb->w, (mtd)->mn); // knh_putc(ctx, cwb->w, '('); // knh_putc(ctx, cwb->w, ')'); // if(DP(e)->tracesNULL == NULL) { // KNH_INITv(DP(e)->tracesNULL, new_Array(ctx, CLASS_String, 0)); // } // knh_Array_Add(ctx, DP(e)->tracesNULL, knh_cwb_newString(ctx, cwb)); // } }