From a4e16cd2c432b896aa8a13a6e9cdf578c5b3b144 Mon Sep 17 00:00:00 2001
From: "psyc://psyced.org/~lynX" <@>
Date: Tue, 3 Mar 2009 16:28:17 +0100
Subject: [PATCH] net/spyc is not looking good :-(
---
CHANGESTODO | 73 +++++------------------------
world/drivers/ldmud/master/accept.c | 5 ++
world/net/psyc/active.c | 9 ++++
world/net/psyc/parse.i | 2 +-
world/net/spyc/circuit.c | 57 ++++++++++++++--------
world/net/spyc/dispatch.i | 8 ++--
6 files changed, 70 insertions(+), 84 deletions(-)
diff --git a/CHANGESTODO b/CHANGESTODO
index 7bc39cb..2201658 100644
--- a/CHANGESTODO
+++ b/CHANGESTODO
@@ -4,6 +4,10 @@ This file contains TODO and CHANGES (at EOF) rolled into one.
Essentially: whenever you fix something, move that line to the end of file.
- marks bugs & fixes, + marks new features, ? marks issues, * marks big stuff
________________________________________________________________________
+== NEXT RELEASE ========================================================
+¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
+? support tls multiplexing on all suitable ports
+________________________________________________________________________
== currently being inspected ===========================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- remote IRC place does not send names listing on /join
@@ -60,22 +64,18 @@ ________________________________________________________________________
- REGISTERED_USERS_ONLY does not behave properly on IRC port
(see also NO_NEWBIES ... clean up and rename?)
-- still UTF8 problems, once a day typically:
- [Thu Jul 31 22:10:57 2008] C:xmpp:somewhere "*regexp: bad UTF-8 data
-" "/me würde auf '96 tippen
-
? tg reports inconsistent display of availability states in friend contextes
so far unable to reproduce
________________________________________________________________________
-== NEXT RELEASE ========================================================
-¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
-+ before doing an announced new release, psyced should accept old psyc
- syntax but send new psyc syntax by default!
-
-? support tls multiplexing on all suitable ports
-________________________________________________________________________
== psyced 1.0 ==========================================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
+SPYC (implementation of http://about.psyc.eu/Specification)
+* to activate spyc support, defined USE_SPYC
+ it will attempt to use new syntax on outgoing links by default
+* to debug verification, define USE_VERIFICATION
+* to spend an extra round trip time negotiating, define USE_FEATURES
+- net/spyc is buggy and incomplete
+
INVITE ISSUES
- remote /invite is shown without uniform, just #nick_place
remote invite thus doesn't work for ircers..
@@ -173,16 +173,10 @@ see also http://about.psyc.eu/subscription
________________________________________________________________________
== TOP DELEGATES for 1.0 ===============================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
-- bartman sagt: psyconf erkennt keine absoluten pfade bei _path_PEM_key und _path_PEM_certificate
-
- world/static/index.html should be generated to contain applet port
- fix member list in applet
* see also APPLET, ANNOUNCEMENT, JABBER, FILE TRANSFER
-- el: und irc bekommt keinen join fuer den raum
- welche? bei newsräumen ist das richtig so
- .. obwohl? überhaupt keine bestätigung!?
-
+ login message that tells you about amount of pending/offered friendships etc.
+ Fix the /surf HTML code, see http://about.psyc.eu/Talk:Style
@@ -1030,6 +1024,7 @@ ________________________________________________________________________
+ elmex says: ./install.sh -d(efault)/-l(astrun) to skip all the questions?
just ask? "Would you like to skip the questions and use last run's inputs?"
+? but why? you shouldn't need to run install.sh more than once!
+ rpms! debs! ebuilds fertig machen und submitten!
- psyced.ebuild: saga meint wir sollten conf.d verwenden statt
@@ -2029,11 +2024,6 @@ thoughts from buddy-heggy.txt:
+ /set speakactionpossessive Meinung ist
Jemandens Meinung ist: ach leck mich doch
-== INTEGRATION OF VIDEO/TELEPHONY ======================================
-+ support launch of video chat apps using infos provided by UNLs
-das ding hier wollte ich einfach mal aufschreiben..
-is natürlich politisch inkorrekt: www.telwell.de
-
== OPTIONAL PERFORMANCE IMPROVEMENTS ===================================
- replace(args[2], "%", "@"); would probably be faster if done as
i = index(str, '%'); if (i >= 0) str[i] = '@';
@@ -2099,49 +2089,10 @@ MISCELLANEOUS STUFF:
was ich mir wünschen würde wäre eine if-ueberpruefung, ob ne var
gesetzt ist
-? befehl zum (re)starten/stoppen des muves (kill -1 ..)..
- wird von psyconf nach etc/init.d erzeugt
- könnte aber auch nach bin.. aber dann braucht er einen anderen namen
-
-? nei suggests we should pass encrypted jabber messages on to other protocols.
- irc clients may be able to decrypt them. i think the problem only exists
- for PGP while OTR should work.
- this is currently blocked by the ldmud which has problems handling large tcp
- packets
-
? fippo findet, psyc sollte zumindest das nodeprep von xmpp übernehmen
am besten auch noch saslprep benutzen, nameprep sowies.
Bahnhof? http://about.psyc.eu/Stringprep
-== LDMUD ISSUES ========================================================
-... normally belong into http://mantis.bearnip.com - but it isn't always
-up and running. and maybe we should keep a list of _our_ issues with it
-ourselves, anyway
-
-- #define MAX_OUTCONN 5 /* TODO: Move this into config.h */
-- minor: these defines in pkg-tls.h should go into ./configure & settings
- #define TLS_DEFAULT_KEYFILE "key.pem"
- #define TLS_DEFAULT_CERTFILE "cert.pem"
- #define TLS_DEFAULT_TRUSTDIRECTORY "/etc/ssl/certs"
-
-== XML ISSUES ==========================================================
-Ein kleines Parser-Issue:
-» C:xmpp:amessage.de
-
-C:xmpp:amessage.de active for "amessage.de". opening with
- ([ /* #1 */
- "stream": "http://etherx.jabber.org/streams",
- "version": "1.0",
- "id": "49f73b6a6b16a12d45af52be2b48444757d88b5a",
- "xmlns": "jabber:server",
- "db": "jabber:server:dialback"
- ])
-Wie kommt er hier an das "db" im Parameter-Mapping?
-
== MOBILE APPS / GPRS / PSYCobile ======================================
Similar Projexx:
http://freshmeat.net/projects/jimm/
diff --git a/world/drivers/ldmud/master/accept.c b/world/drivers/ldmud/master/accept.c
index 0ac3534..00fff09 100644
--- a/world/drivers/ldmud/master/accept.c
+++ b/world/drivers/ldmud/master/accept.c
@@ -346,7 +346,12 @@ object compile_object(string file) {
return rob;
}
if (abbrev("psyc:", file)) {
+# ifdef USE_SPYC
+# echo Using SPYC by default! Yeeha!
+ rob = clone_object(SPYC_PATH "active");
+# else
rob = clone_object(PSYC_PATH "active");
+# endif
D2(if (rob) PP(("NAMED CLONE: %O => %s\n", rob, file));)
return rob;
}
diff --git a/world/net/psyc/active.c b/world/net/psyc/active.c
index 5a98006..80d2d1e 100644
--- a/world/net/psyc/active.c
+++ b/world/net/psyc/active.c
@@ -5,7 +5,12 @@
#include
#include
+#ifdef SPYC
+inherit SPYC_PATH "circuit";
+#else
inherit PSYC_PATH "circuit";
+#endif
+
inherit NET_PATH "circuit";
volatile object super;
@@ -37,7 +42,11 @@ int logon(int failure) {
if (port && port != PSYC_SERVICE) peeraddr += ":"+port;
// circuit::logon now also implies a full greeting
// therefore it needs peeraddr, and the emit is redundant
+# ifdef SPYC
+ SPYC_PATH "circuit"::logon(failure);
+# else
PSYC_PATH "circuit"::logon(failure);
+# endif
#endif
return 1;
}
diff --git a/world/net/psyc/parse.i b/world/net/psyc/parse.i
index fe0642c..ceb65e4 100644
--- a/world/net/psyc/parse.i
+++ b/world/net/psyc/parse.i
@@ -1127,7 +1127,7 @@ vamixed startParse(string a) {
restart();
if (isServer()) greet();
}
-# ifdef SPYC_PATH
+# if defined(SPYC_PATH) && defined(USE_SPYC)
else if (a == "|") { // new S_GLYPH_PACKET_DELIMITER
object o = clone_object(SPYC_PATH "server");
unless (o && exec(o, ME) && o->logon(0)) {
diff --git a/world/net/spyc/circuit.c b/world/net/spyc/circuit.c
index 48966ce..de149d0 100644
--- a/world/net/spyc/circuit.c
+++ b/world/net/spyc/circuit.c
@@ -25,7 +25,7 @@ volatile string netloc;
// this is completely anti-psyc. it should take mcs as arguments
// and look up the actual message from textdb.. FIXME
-#define CIRCUITERROR(reason) { debug_message("PSYC CIRCUIT ERROR: " reason); \
+#define CIRCUITERROR(reason) { debug_message("SPYC CIRCUIT: " reason "\n"); \
croak("_error_circuit", "circuit error: " \
reason); \
return 0; \
@@ -61,6 +61,25 @@ varargs mixed croak(string mc, string data, vamapping vars, vamixed source) {
return 0;
}
+#ifdef USE_VERIFICATION
+// request sender authentication and/or target acknowledgement
+// from the remote side
+void sender_verification(array(string) sourcehosts, array(string) targethosts)
+{
+ // FIXME: wrong variables here
+ mapping vars = ([ "_list_sources_hosts" : sourcehosts,
+ "_list_targets_hosts" : targethosts,
+ "_tag" : RANDHEXSTRING ]);
+ // assumption: we have already resolved all targethosts and
+ // they point to the remote ip
+ foreach(string ho : targethosts) {
+ sAuthenticated(ho);
+ }
+
+ msg(0, "_request_verification", 0, vars);
+}
+#endif
+
// gets called during socket logon
int logon(int failure) {
sAuthHosts(([ ])); // reset authhosts
@@ -134,7 +153,20 @@ int logon(int failure) {
// FIXME
unless(isServer()) {
emit("|\n"); // initial greeting
+#ifdef USE_FEATURES
+ // we have no features to request or offer
msg(0, "_request_features", 0);
+#else
+# ifdef USE_VERIFICATION
+ // start hostname verification
+ // rather: look at Q and look for the hostnames we need
+ sender_verification(({ SERVER_HOST }), ({ peerhost }));
+# else
+ if (function_exists("runQ")) {
+ runQ();
+ }
+# endif
+#endif
}
return 1;
}
@@ -192,23 +224,6 @@ mapping process_header(mixed varops) {
#define PSYC_TCP
#include "dispatch.i"
-// request sender authentication and/or target acknowledgement
-// from the remote side
-void sender_verification(array(string) sourcehosts, array(string) targethosts)
-{
- // FIXME: wrong variables here
- mapping vars = ([ "_list_sources_hosts" : sourcehosts,
- "_list_targets_hosts" : targethosts,
- "_tag" : RANDHEXSTRING ]);
- // assumption: we have already resolved all targethosts and
- // they point to the remote ip
- foreach(string ho : targethosts) {
- sAuthenticated(ho);
- }
-
- msg(0, "_request_verification", 0, vars);
-}
-
// receives a msg from the remote side
// note: this is circuit-messaging
void circuit_msg(string mc, mapping vars, string data) {
@@ -245,13 +260,13 @@ void circuit_msg(string mc, mapping vars, string data) {
} else {
// FIXME!!!!
CIRCUITERROR("sorry, no more than one element in _list_sources_hosts currently");
+ P0(("more than one element in _list_sources_hosts: %O\n", vars["_list_sources_hosts"]))
}
// keep tag if present!!!
// resolve all of _list_sources_hosts
// look at _list_targets_hosts and determine localhostiness
} else {
CIRCUITERROR("_request_verification is not allowed on TLS circuits.");
- // _request_verification is not allowed on tls circuits
}
break;
case "_notice_features":
@@ -262,15 +277,19 @@ void circuit_msg(string mc, mapping vars, string data) {
flags -= TCP_PENDING_TIMEOUT;
}
sTextPath();
+#ifdef USE_FEATURES
if (tls_query_connection_state(ME) == 0) {
+# ifdef USE_VERIFICATION
// start hostname verification
// rather: look at Q and look for the hostnames we need
sender_verification(({ SERVER_HOST }), ({ peerhost }));
+# endif
} else {
if (function_exists("runQ")) {
runQ();
}
}
+#endif
break;
case "_notice_verification":
P0(("_notice verification with %O\n", vars))
diff --git a/world/net/spyc/dispatch.i b/world/net/spyc/dispatch.i
index fc7eb3c..2e996ad 100644
--- a/world/net/spyc/dispatch.i
+++ b/world/net/spyc/dispatch.i
@@ -29,14 +29,16 @@ void dispatch(mixed header_vars, mixed varops, mixed method, mixed body) {
if ((t = vars["_context"] || vars["_source"])) {
array(mixed) u;
unless (u = parse_uniform(t)) {
- DISPATCHERROR("logical source is not an uniform\n")
+ DISPATCHERROR("logical source is not a uniform\n")
}
-#ifdef PSYC_TCP
+#ifdef USE_VERIFICATION
+# ifdef PSYC_TCP
unless (qAuthenticated(NAMEPREP(u[UHost]))) {
DISPATCHERROR("non-authenticated host\n")
}
-#else
+# else
// TODO?
+# endif
#endif
}
// check that _target is hosted by us