Merge branch 'master' of f:psyc/psyced.org/psyced

This commit is contained in:
psyc://loupsycedyglgamf.onion/~lynX 2016-07-17 20:43:33 +02:00
commit 6627827c56
3 changed files with 130 additions and 0 deletions

18
place/nemesis.c Normal file
View File

@ -0,0 +1,18 @@
#include <net.h>
#define CONNECT_TELNET "nemesis.de", 2000
#define ON_CONNECT emit("guest\n");
#define ON_ANY NET_PATH "tn/outgoing"::msg(source, mc, data, vars);
#include <place.gen>
parse(all) {
// remove Nemesis' guest prompt.. why was i so funny
// back then to implement several prompt chars?
if (strlen(all) > 2 && all[1] == ' ' &&
(all[0] == '#' || all[0] == '>')) all = all[2 ..];
return ::parse(all);
}
#echo Nemesis gateway loaded.

View File

@ -177,6 +177,10 @@ inherit NET_PATH "place/intercept";
# endif
#endif
#ifdef CONNECT_TELNET
inherit NET_PATH "tn/outgoing";
#endif
#ifdef FETCH_TEXTDB
volatile object feed, tob;
@ -369,6 +373,9 @@ void create() {
#ifdef CONNECT_IRC
link(CONNECT_IRC);
#endif
#ifdef CONNECT_TELNET
link(CONNECT_TELNET);
#endif
#if defined(NEWSFEED_RSS) && defined(DEVELOPMENT)
// do not connect newsfeeds immediately if running in production mode
connect();

105
world/net/tn/outgoing.c Normal file
View File

@ -0,0 +1,105 @@
// vim:syntax=lpc
#include <net.h>
//#include <status.h>
#include <services.h>
#include <text.h>
//#include <uniform.h>
// message queueing and automatic reconnect mgmt
inherit NET_PATH "circuit";
//inherit NET_PATH "place/public";
#ifdef _flag_log_sockets_telnet_outgoing
emit(all, source) {
log_file("RAW_TN_OUT", "%d %O\t-> %s", time(), ME, all);
return ::emit(all);
}
#endif
parse(all) {
next_input_to(#'parse);
#ifdef _flag_log_sockets_telnet_outgoing
log_file("RAW_TN_OUT", "%d %O\t<- %s", time(), ME, all);
#endif
// assumes multicaster.. fix later
castmsg(ME, "_notice_telnet_verbatim", "[_text_verbatim]",
([ "_text_verbatim": all ]));
}
link(ho, po) {
sTextPath(0, 0, "tn");
return ::circuit(ho, po || TELNET_SERVICE);
}
logon(failure) {
int rc = ::logon(failure);
unless (rc) return 0;
next_input_to(#'parse);
parse("[connected]"); // hack to maintain logon ascii graphics intact
call_out(#'runQ, 3); // deliver the queue of messages in circuit.c
return rc;
}
msg(source, mc, data, mapping vars, showingLog, target) {
string t, ni, mca;
if (showingLog) return 1;
PT(("TNOUT(%O,%O,%O,%O,%O,%O)\n", source,mc,data,vars,
showingLog,target))
unless(interactive()) {
connect();
// special requirement for enqueue
unless (vars["_source"])
vars["_source"] = UNIFORM(source);
return enqueue(source, mc, data, vars, showingLog, target);
}
if (abbrev("_status_place",mc) || abbrev("_message_announcement",mc)) {
if (source && source != ME) {
monitor_report("_error_rejected_message_telnet",
S("Caught a %O from %O (%O)", mc, source, data));
return;
}
#if 0
tellChannel(source, mc, vars, data);
#endif
return 1;
}
#if 0
if (abbrev("_message_echo", mc)) return;
if (!data && stringp(vars["_action"]) && abbrev("_message", mc))
mca = mc +"_action";
else
mca = mc;
render(mca, data, vars, source);
return 1;
#else
if (abbrev("_message_public", mc)) {
// FIXME: should we handle the disconnect instead?
if (data == "quit") return 1;
return emit(data + "\n");
}
#endif
}
#if 0
disconnected(remaining) {
// circuit code would destruct this object
return NET_PATH "connect"::disconnected(remaining);
}
render(string mc, string data, mapping vars, mixed source) {
string template, output;
mixed t;
P3(("tn/out:render %O %O\n", ME, data));
template = T(mc, 0); // enable textdb inheritance
output = psyctext( template, vars, data, source);
if (!output || output=="") return D2(D("tn/out: empty output\n"));
if (template == "") output += "\n";
emit(output);
}
#endif