/* * NAME: dgdfuns.c * DESCRIPTION: builtin dgd_* functions */ # ifdef FUNCDEF FUNCDEF(0, "dgd_server_version", 0, 0) # else /* * NAME: bfun->dgd_server_version() * DESCRIPTION: return the current running version of DGD */ varargs MOOVAL b_dgd_server_version(mixed *info) { return STR(status()[ST_VERSION]); } # endif # ifdef FUNCDEF FUNCDEF(0, "dgd_lpmoo_version", 0, 0) # else /* * NAME: bfun->dgd_lpmoo_version() * DESCRIPTION: return the current running version of LPMOO */ varargs MOOVAL b_dgd_lpmoo_version(mixed *info) { return STR(CONFIG->query(CF_LPMOO_VERSION)); } # endif # ifdef FUNCDEF FUNCDEF(0, "dgd_status", 0, 2) # else /* * NAME: bfun->dgd_status() * DESCRIPTION: return statistics about the state of DGD */ varargs MOOVAL b_dgd_status(mixed *info, MOOVAL args...) { object ob; mixed *status; if (sizeof(args)) { ASSERT(args[0], OBJ); GET_VALID_OBJ(ob, OBJVAL(args[0])); if (sizeof(args) > 1) { ASSERT(args[1], STR); if (! (ob = ob->get_verb_obj(STRVAL(args[1])))) return RAISE(E_INVARG); } } if (ob) { status = status(ob); return LST( ({ NUM(status[O_COMPILETIME]), NUM(status[O_PROGSIZE]), NUM(status[O_DATASIZE]), NUM(status[O_NSECTORS]), }) ); } else { status = status(); return LST( ({ NUM(status[ST_STARTTIME]), NUM(status[ST_BOOTTIME]), NUM(status[ST_UPTIME]), NUM(status[ST_SWAPSIZE]), NUM(status[ST_SWAPUSED]), NUM(status[ST_SECTORSIZE]), NUM(status[ST_SWAPRATE1]), NUM(status[ST_SWAPRATE5]), NUM(status[ST_SMEMSIZE]), NUM(status[ST_SMEMUSED]), NUM(status[ST_DMEMSIZE]), NUM(status[ST_DMEMUSED]), NUM(status[ST_OTABSIZE]), NUM(status[ST_NOBJECTS]), NUM(status[ST_COTABSIZE]), NUM(status[ST_NCOSHORT] + status[ST_NCOLONG]), NUM(status[ST_UTABSIZE]), NUM(sizeof(users())), NUM(DRIVER->query_net() != 0), NUM(CONFIG->query(CF_OUTBOUND_NET) != 0), NUM(CONFIG->query(CF_MPORT_LISTENING) != 0), NUM(CONFIG->query(CF_SERVER_MSGS) != 0), NUM(CONFIG->query(CF_TELNET_PORT)), NUM(CONFIG->query(CF_BINARY_PORT)), LST(DRIVER->query_ports()), }) ); } } # endif # ifdef FUNCDEF FUNCDEF(0, "dgd_object_name", 1, 2) # else /* * NAME: bfun->dgd_object_name() * DESCRIPTION: return the DGD object name for a MOO object or verb */ varargs MOOVAL b_dgd_object_name(mixed *info, MOOVAL arg1, MOOVAL etc...) { object ob; ASSERT(arg1, OBJ); GET_VALID_OBJ(ob, OBJVAL(arg1)); if (sizeof(etc)) { ASSERT(etc[0], STR); if (! (ob = ob->get_verb_obj(STRVAL(etc[0])))) return RAISE(E_INVARG); } return STR(object_name(ob)); } # endif # ifdef FUNCDEF FUNCDEF(0, "dgd_checkpoint_db", 0, 0) # else /* * NAME: bfun->dgd_checkpoint_db() * DESCRIPTION: write a text dump (obsolete) */ varargs MOOVAL b_dgd_checkpoint_db(mixed *info) { if (! WIZARDP(info)) return RAISE(E_PERM); DRIVER->log("Warning: call to deprecated dgd_checkpoint_db()"); global->dump_database(1); return NUM(0); } # endif # ifdef FUNCDEF FUNCDEF(0, "dgd_swapout", 0, 0) # else /* * NAME: bfun->dgd_swapout() * DESCRIPTION: swap out all DGD objects */ varargs MOOVAL b_dgd_swapout(mixed *info) { if (! WIZARDP(info)) return RAISE(E_PERM); swapout(); return NUM(0); } # endif # ifdef FUNCDEF FUNCDEF(0, "dgd_set_prompt", 2, 2) # else /* * NAME: bfun->dgd_set_prompt() * DESCRIPTION: change a connection's input prompt */ varargs MOOVAL b_dgd_set_prompt(mixed *info, MOOVAL arg1, MOOVAL arg2) { object ob; int id; ASSERT(arg1, OBJ); ASSERT(arg2, STR); id = OBJVAL(arg1); if (PROGRAMMER(info) != id && ! WIZARDP(info)) return RAISE(E_PERM); if (ob = MOOOBJ(id)) ob = global->get_connection_obj(ob); else ob = global->get_unlogged_in(id); if (! ob) return RAISE(E_INVARG); ob->set_prompt(STRVAL(arg2)); return NUM(0); } # endif # ifdef FUNCDEF FUNCDEF(0, "dgd_get_prompt", 1, 1) # else /* * NAME: bfun->dgd_get_prompt() * DESCRIPTION: return the connection's current input prompt */ varargs MOOVAL b_dgd_get_prompt(mixed *info, MOOVAL arg) { object ob; int id; ASSERT(arg, OBJ); id = OBJVAL(arg); if (PROGRAMMER(info) != id && ! WIZARDP(info)) return RAISE(E_PERM); if (ob = MOOOBJ(id)) ob = global->get_connection_obj(ob); else ob = global->get_unlogged_in(id); return ob ? STR(ob->get_prompt()) : RAISE(E_INVARG); } # endif # ifdef FUNCDEF FUNCDEF(0, "dgd_set_noecho", 1, 1) # else /* * NAME: bfun->dgd_set_noecho() * DESCRIPTION: make a connection not echo the next line of input */ varargs MOOVAL b_dgd_set_noecho(mixed *info, MOOVAL arg) { object ob; int ret, id; ASSERT(arg, OBJ); id = OBJVAL(arg); if (PROGRAMMER(info) != id && ! WIZARDP(info)) return RAISE(E_PERM); if (ob = MOOOBJ(id)) ob = global->get_connection_obj(ob); else ob = global->get_unlogged_in(id); if (! ob) return RAISE(E_INVARG); ret = ob->set_noecho(); return (ret == E_NONE) ? NUM(0) : RAISE(ret); } # endif # ifdef FUNCDEF FUNCDEF(0, "dgd_ip_number", 1, 1) # else /* * NAME: bfun->dgd_ip_number() * DESCRIPTION: return a connection's remote IP address */ varargs MOOVAL b_dgd_ip_number(mixed *info, MOOVAL arg) { object ob; int id; ASSERT(arg, OBJ); id = OBJVAL(arg); if (PROGRAMMER(info) != id && ! WIZARDP(info)) return RAISE(E_PERM); if (ob = MOOOBJ(id)) ob = global->get_connection_obj(ob); else ob = global->get_unlogged_in(id); return ob ? STR(query_ip_number(ob)) : RAISE(E_INVARG); } # endif # ifdef FUNCDEF FUNCDEF(0, "dgd_port_number", 1, 1) # else /* * NAME: bfun->dgd_port_number() * DESCRIPTION: return a connection's remote port number */ varargs MOOVAL b_dgd_port_number(mixed *info, MOOVAL arg) { object ob; int id, port; ASSERT(arg, OBJ); id = OBJVAL(arg); if (PROGRAMMER(info) != id && ! WIZARDP(info)) return RAISE(E_PERM); if (ob = MOOOBJ(id)) ob = global->get_connection_obj(ob); else ob = global->get_unlogged_in(id); if (! ob) return RAISE(E_INVARG); port = ob->get_port_number(); return port ? NUM(port) : RAISE(E_PERM); } # endif