mirror of
git://git.psyced.org/git/psyced
synced 2024-08-15 03:25:10 +00:00
Merge remote-tracking branch 'fly/master'
This commit is contained in:
commit
e784af81aa
4 changed files with 91 additions and 15 deletions
|
@ -1,11 +1,17 @@
|
|||
#include <net.h>
|
||||
|
||||
#define CONNECT_TELNET "nemesis.de", 2000
|
||||
//#ifdef BRAIN
|
||||
# define CONNECT_TELNET "nemesis.de", 2000
|
||||
//#else
|
||||
//# define CONNECT_TELNET "nemesis.de", 2001 // NemTest
|
||||
//#endif
|
||||
|
||||
#define ON_CONNECT emit("guest\n");
|
||||
#define ON_ANY NET_PATH "tn/outgoing"::msg(source, mc, data, vars);
|
||||
|
||||
#include <place.gen>
|
||||
|
||||
// to do this properly, we need a systematic way to redo prompts FIXME
|
||||
parse(all) {
|
||||
// remove Nemesis' guest prompt.. why was i so funny
|
||||
// back then to implement several prompt chars?
|
||||
|
|
|
@ -363,6 +363,11 @@ _notice_typing_active
|
|||
_notice_typing_gone
|
||||
|<message to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><gone xmlns='http://jabber.org/protocol/chatstates'/></message>
|
||||
|
||||
_notice_telnet_verbatim
|
||||
|<message from='[_INTERNAL_source_jabber_bare]' to='[_INTERNAL_target_jabber]' type='groupchat'>
|
||||
| <body>[_text_verbatim]</body>
|
||||
|</message>
|
||||
|
||||
_notice_place
|
||||
|<message from='[_INTERNAL_source_jabber_bare]' to='[_INTERNAL_target_jabber]' type='groupchat'>
|
||||
| <body>[_data]</body>
|
||||
|
|
|
@ -1,43 +1,73 @@
|
|||
// vim:syntax=lpc
|
||||
|
||||
// DEBUG: FIXME
|
||||
#define _flag_log_sockets_telnet_outgoing
|
||||
|
||||
#include <net.h>
|
||||
//#include <status.h>
|
||||
#include <services.h>
|
||||
#include <text.h>
|
||||
//#include <uniform.h>
|
||||
//#include <text.h>
|
||||
|
||||
// this outgoing "telnet" socket thing implements both '/set mudlink'
|
||||
// for users as MUD chatrooms such as @nemesis. would be cool if it
|
||||
// actually was capable of handling telnet protocol, but the mud in
|
||||
// question isn't, either.
|
||||
//
|
||||
// for a tighter integration between psyced and MUD it would also be
|
||||
// cool to either have a native PSYC side channel, or to embed crypto-
|
||||
// graphically signed PSYC packets (using a shared secret hash) into
|
||||
// this stream.
|
||||
|
||||
// message queueing and automatic reconnect mgmt
|
||||
inherit NET_PATH "circuit";
|
||||
|
||||
//inherit NET_PATH "place/public";
|
||||
virtual inherit NET_PATH "output";
|
||||
|
||||
static string connectstring;
|
||||
static object owner;
|
||||
|
||||
send(all) {
|
||||
// if this doesn't work, then maybe you just forgot
|
||||
// to /set charset in your test user
|
||||
iconv(all, SYSTEM_CHARSET, "ASCII//TRANSLIT"); // should be configurable
|
||||
#ifdef _flag_log_sockets_telnet_outgoing
|
||||
emit(all, source) {
|
||||
log_file("RAW_TN_OUT", "%d %O\t-> %s", time(), ME, all);
|
||||
return ::emit(all);
|
||||
}
|
||||
log_file("RAW_TN_OUT", "%O > %O\n", ME, all);
|
||||
#endif
|
||||
//if (function_exists("emit")) return emit(all);
|
||||
return emit(all);
|
||||
}
|
||||
|
||||
parse(all) {
|
||||
next_input_to(#'parse);
|
||||
#ifdef _flag_log_sockets_telnet_outgoing
|
||||
log_file("RAW_TN_OUT", "%d %O\t<- %s", time(), ME, all);
|
||||
log_file("RAW_TN_OUT", "%O < %O\n", ME, all);
|
||||
#endif
|
||||
// assumes multicaster.. fix later
|
||||
castmsg(ME, "_notice_telnet_verbatim", "[_text_verbatim]",
|
||||
if (all && all != "") iconv(all, "ASCII//TRANSLIT", SYSTEM_CHARSET);
|
||||
if (owner) sendmsg(owner,
|
||||
"_notice_telnet_verbatim", "[_text_verbatim]",
|
||||
([ "_text_verbatim": all ]));
|
||||
else if (function_exists("castmsg")) castmsg(ME,
|
||||
"_notice_telnet_verbatim", "[_text_verbatim]",
|
||||
([ "_text_verbatim": all ]));
|
||||
}
|
||||
|
||||
link(ho, po) {
|
||||
sTextPath(0, 0, "tn");
|
||||
//sTextPath(0, 0, "tn");
|
||||
return ::circuit(ho, po || TELNET_SERVICE);
|
||||
}
|
||||
|
||||
config(host, port, justdoit) {
|
||||
connectstring = replace(justdoit, " ", "\n") + "\n";
|
||||
owner = previous_object();
|
||||
link(host, port);
|
||||
}
|
||||
|
||||
logon(failure) {
|
||||
int rc = ::logon(failure);
|
||||
unless (rc) return 0;
|
||||
next_input_to(#'parse);
|
||||
parse("[connected]"); // hack to maintain logon ascii graphics intact
|
||||
// could have queued this instead:
|
||||
if (connectstring) call_out(#'send, 1, connectstring);
|
||||
call_out(#'runQ, 3); // deliver the queue of messages in circuit.c
|
||||
return rc;
|
||||
}
|
||||
|
@ -78,7 +108,7 @@ msg(source, mc, data, mapping vars, showingLog, target) {
|
|||
if (abbrev("_message_public", mc)) {
|
||||
// FIXME: should we handle the disconnect instead?
|
||||
if (data == "quit") return 1;
|
||||
return emit(data + "\n");
|
||||
return send(data + "\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -99,7 +129,7 @@ render(string mc, string data, mapping vars, mixed source) {
|
|||
output = psyctext( template, vars, data, source);
|
||||
if (!output || output=="") return D2(D("tn/out: empty output\n"));
|
||||
if (template == "") output += "\n";
|
||||
emit(output);
|
||||
send(output);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -143,6 +143,27 @@ input(a, dest) {
|
|||
#endif
|
||||
}
|
||||
|
||||
#define MUDLINK //FIXME
|
||||
|
||||
#ifdef MUDLINK
|
||||
object mudlink;
|
||||
|
||||
mudlink(config) {
|
||||
string connectstring, host; int port;
|
||||
// should have mud nicknames instead, so that charsets, prompts
|
||||
// and login procedures can be automated..
|
||||
if (sscanf(config, "%s %d %s", host, port, connectstring)) {
|
||||
// FIXME L8R:
|
||||
//unless (objectp(mudlink)) mudlink = named_clone(NET_PATH "tn/outgoing", MYNICK);
|
||||
unless (objectp(mudlink)) mudlink = clone_object(NET_PATH "tn/outgoing");
|
||||
if (objectp(mudlink)) mudlink -> config(host, port, connectstring);
|
||||
return 1;
|
||||
}
|
||||
// could produce a dedicated syntax warning here.. default is okay
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
parsecmd(command, dest) {
|
||||
array(string) args;
|
||||
string a;
|
||||
|
@ -2011,6 +2032,13 @@ tell(pal, what, palo, how, mc, tv) {
|
|||
return;
|
||||
}
|
||||
#endif
|
||||
#ifdef MUDLINK
|
||||
if (pal == "$mud") {
|
||||
unless (objectp(mudlink) && interactive(mudlink)) mudlink(v("mudlink"));
|
||||
if (objectp(mudlink)) mudlink -> send(what +"\n");
|
||||
return;
|
||||
}
|
||||
#endif // MUDLINK
|
||||
#ifdef ALIASES
|
||||
// this also allows for /alias MEP MunichElectropunk
|
||||
deaPal = aliases[lower_case(pal)] || pal;
|
||||
|
@ -2664,6 +2692,7 @@ checkVar(key, value) {
|
|||
string a, b;
|
||||
array(string) t;
|
||||
|
||||
P3(("%O checkVar(%O, %O)\n", ME, key, value))
|
||||
// aliases for variable names
|
||||
switch(key) {
|
||||
case "befehlszeichen":
|
||||
|
@ -2969,6 +2998,12 @@ checkVar(key, value) {
|
|||
// case "popstarfave":
|
||||
// case "musicfave":
|
||||
break; // always valid
|
||||
#ifdef MUDLINK
|
||||
case "mudlink":
|
||||
P0(("mudlink %O\n", value))
|
||||
if (value && !mudlink(value)) value = 0;
|
||||
break;
|
||||
#endif
|
||||
case "encoding":
|
||||
key = "charset"; // fall thru
|
||||
case "charset":
|
||||
|
|
Loading…
Reference in a new issue