stupid merge..

This commit is contained in:
psyc://psyced.org/~lynX 2009-12-10 11:46:37 +01:00
commit f47227d54d
27 changed files with 400 additions and 247 deletions

View File

@ -1,11 +1,14 @@
vim:nosmarttab:syntax=diff vim:nosmarttab:syntax=diff
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
This file contains TODO and CHANGES (at EOF) rolled into one. | This file contains TODO and CHANGES (at EOF) rolled into one.
Essentially: whenever you fix something, move that line to the end of file. | Essentially: whenever you fix something, move that line to the end of file.
- marks bugs & fixes, + marks new features, ? marks issues, * marks big stuff | - marks bugs & fixes, + marks new features, ? marks issues, * marks big stuff
________________________________________________________________________ ________________________________________________________________________
== NEXT RELEASE ======================================================== == NEXT RELEASE ========================================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- interserver xmpp /me expects no leading newline, but pidgin recently
started sending one
- autorefetch twitter isnt working - autorefetch twitter isnt working
http/fetch is too complicated. throw out the queue and callback logic. kiss! http/fetch is too complicated. throw out the queue and callback logic. kiss!
@ -21,7 +24,7 @@ ________________________________________________________________________
________________________________________________________________________ ________________________________________________________________________
== currently being inspected =========================================== == currently being inspected ===========================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
? /ve/TODO/leave-from-user - install.sh/configure doesn't *ensure* libidn is available
- newbies are allowed to open new owned rooms - newbies are allowed to open new owned rooms
fippo sagt: ergo brauchst du nen exit-hook der owner löscht wenn der n00b-owner aus dem raum geht fippo sagt: ergo brauchst du nen exit-hook der owner löscht wenn der n00b-owner aus dem raum geht
@ -69,6 +72,7 @@ ________________________________________________________________________
? should /load inform that errors go to the console? ? should /load inform that errors go to the console?
- the ~0 bug
________________________________________________________________________ ________________________________________________________________________
:_group psyc://psyced.org/@welcome :_group psyc://psyced.org/@welcome
:_source_identification psyc://xxx.no-ip.org/~xxx :_source_identification psyc://xxx.no-ip.org/~xxx
@ -94,14 +98,15 @@ In welcome spricht «psyc://xxx.no-ip.org/~0» xxx: it should either ignore firs
________________________________________________________________________ ________________________________________________________________________
== psyced 1.0 ========================================================== == psyced 1.0 ==========================================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
SPYC (implementation of http://about.psyc.eu/Specification) > SPYC
* 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 - net/spyc is buggy and incomplete
(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
INVITE ISSUES > INVITE ISSUES
- remote /invite is shown without uniform, just #nick_place - remote /invite is shown without uniform, just #nick_place
remote invite thus doesn't work for ircers.. remote invite thus doesn't work for ircers..
beta's lynx invites psyc://psyced.org/~gynx into TEST. beta's lynx invites psyc://psyced.org/~gynx into TEST.
@ -122,7 +127,7 @@ INVITE ISSUES
there is a circuit already (should it be a _request!?) there is a circuit already (should it be a _request!?)
- /invite should do remote echo like _message_private, not local - /invite should do remote echo like _message_private, not local
REMOVE NICKNAMES FROM PROTOCOL > REMOVE NICKNAMES FROM PROTOCOL
? remote uniforms could be passed around in the psyced as parse_uniform ? remote uniforms could be passed around in the psyced as parse_uniform
arrays rather than as strings. this opens up the possibility to have arrays rather than as strings. this opens up the possibility to have
a stringprepped+lowercased version of the uniform for comparisons. a stringprepped+lowercased version of the uniform for comparisons.
@ -142,7 +147,7 @@ REMOVE NICKNAMES FROM PROTOCOL
nick/alias when a friend (or local?), full uniform when unknown... nick/alias when a friend (or local?), full uniform when unknown...
so all [_nick] should simply be replaced by [_source] etc. so all [_nick] should simply be replaced by [_source] etc.
! implementing the latter approach with the uni2nick callback strategy! ! implementing the latter approach with the uni2nick callback strategy!
AUTOALIASES & ALIASES FOR PLACES > AUTOALIASES & ALIASES FOR PLACES
+ /set aliases auto + /set aliases auto
use temporary aliases for people in places, use temporary aliases for people in places,
keep them in [r]aliases mappings only, not in v("aliases") keep them in [r]aliases mappings only, not in v("aliases")
@ -161,7 +166,7 @@ problems that should disappear when we move away from _nick's:
friendship requests. eh! where's the uniform!? friendship requests. eh! where's the uniform!?
- remote /topic shows wrong nick - remote /topic shows wrong nick
PRESENCE STATUS > PRESENCE STATUS
+ all _status_person need to be upgraded to _status_presence with + all _status_person need to be upgraded to _status_presence with
availability etc. availability etc.
- _status_person_present appears as a chat msg for local jabber/server users. - _status_person_present appears as a chat msg for local jabber/server users.
@ -177,7 +182,7 @@ PRESENCE STATUS
net/jabber/user#whojarr <message to='whojarr@example.org/Home' from='oops@example.org/irc' type='chat'><body>oops is a roving piker.</body></message> net/jabber/user#whojarr <message to='whojarr@example.org/Home' from='oops@example.org/irc' type='chat'><body>oops is a roving piker.</body></message>
* see also various PRESENCE boxes * see also various PRESENCE boxes
DECENTRALIZED STATE / PERSISTENT CONTEXT SLAVES > DECENTRALIZED STATE / PERSISTENT CONTEXT SLAVES
- do not send revision with every cast - do not send revision with every cast
+ we could use better integration of availability + we could use better integration of availability
because right now CACHE_PRESENCE doesn't work because right now CACHE_PRESENCE doesn't work
@ -203,7 +208,7 @@ DECENTRALIZED STATE / PERSISTENT CONTEXT SLAVES
is useful even when we have packet ids in place.. some places it's okay is useful even when we have packet ids in place.. some places it's okay
to lose packets if at least the member lists are in sync to lose packets if at least the member lists are in sync
GENERIC CONTEXT SUBSCRIBE / PRESENCE FOR ALL > GENERIC CONTEXT SUBSCRIBE / PRESENCE FOR ALL
+ krasser rewrite und fusion von raumanwesenheit und buddylists mittels + krasser rewrite und fusion von raumanwesenheit und buddylists mittels
generischer presence.. siehe auch http://about.psyc.eu/presence und.. generischer presence.. siehe auch http://about.psyc.eu/presence und..
schwer zu glauben, wir haben heute festgestellt, dass wir subscribe, schwer zu glauben, wir haben heute festgestellt, dass wir subscribe,
@ -219,12 +224,13 @@ see also http://about.psyc.eu/subscription
not from own UNI (see #ifdef FRIEND_ECHO) not from own UNI (see #ifdef FRIEND_ECHO)
... or just rewrite it all into context subscription!! ... or just rewrite it all into context subscription!!
ARCHETYPE PLACES > ARCHETYPE PLACES
? archetype.gen & other places: current privilege model sux. ? archetype.gen & other places: current privilege model sux.
qAide(), qOwner(), boss(source), v("topic-user") qAide(), qOwner(), boss(source), v("topic-user")
.. how does this fit with confctrl, _duty and qAllowExternal? .. how does this fit with confctrl, _duty and qAllowExternal?
.. and in some cases you just want to check for isMember .. and in some cases you just want to check for isMember
>>>
- REGISTERED_USERS_ONLY does not behave properly on IRC port - REGISTERED_USERS_ONLY does not behave properly on IRC port
(see also NO_NEWBIES ... clean up and rename?) (see also NO_NEWBIES ... clean up and rename?)
@ -305,6 +311,11 @@ ________________________________________________________________________
- place redirection doesn't work for ircII: client still thinks i am in the - place redirection doesn't work for ircII: client still thinks i am in the
first room while i get messages from the second room. when i type stuff first room while i get messages from the second room. when i type stuff
to the first room, it doesn't even forward to the second. to the first room, it doesn't even forward to the second.
- psyced spits out _error_rejected_relay_incoming for hostnames that have
been redirected using SRV. x-net.hu's A record is still being checked.
_psyc._tcp.x-net.hu has SRV record 0 0 14404 psyc.x-net.hu.
________________________________________________________________________ ________________________________________________________________________
== MINOR DELEGATES ===================================================== == MINOR DELEGATES =====================================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
@ -369,12 +380,12 @@ ________________________________________________________________________
? generate psyced without cvs support if no cvs installed? ? generate psyced without cvs support if no cvs installed?
... bzw. git ... bzw. git
WINDOWS DISTRIBUTION > WINDOWS DISTRIBUTION
? how can we compile SRV into erq.exe? do we care? ? how can we compile SRV into erq.exe? do we care?
? which open source installer for win to use? ? which open source installer for win to use?
? what to do about psyconf.. include perl or re-implement psyconf for win? ? what to do about psyconf.. include perl or re-implement psyconf for win?
TWITTER > TWITTER
+ resolve redirect-urls before forwarding to subscriptions, that means, + resolve redirect-urls before forwarding to subscriptions, that means,
calling http/fetch on http://tr.im/whatever urls until it no longer calling http/fetch on http://tr.im/whatever urls until it no longer
returns a 30x redirection code. [improves privacy btw, since all those returns a 30x redirection code. [improves privacy btw, since all those
@ -402,7 +413,7 @@ ________________________________________________________________________
? apply more TAGGING (tagged callbacks also avoid the monster switches) ? apply more TAGGING (tagged callbacks also avoid the monster switches)
CIRCUITRY > CIRCUITRY
- _request_circuit_shutdown isnt issued or doesnt arrive - _request_circuit_shutdown isnt issued or doesnt arrive
or is the disconnected-detection buggy? or is the disconnected-detection buggy?
+ net/circuit:pushback TODO: + net/circuit:pushback TODO:
@ -433,24 +444,24 @@ CIRCUITRY
? what to do when hosts talk faster then we resolve them? ? what to do when hosts talk faster then we resolve them?
see around _error_invalid_host_slow see around _error_invalid_host_slow
TRUST1 > TRUST1
- _request_circuit_trust needs to check some challenge, or it can be - _request_circuit_trust needs to check some challenge, or it can be
tricked by replay. so for now only use it over safe networks!! tricked by replay. so for now only use it over safe networks!!
? generic SASL for xmpp, psyc and irc? ? generic SASL for xmpp, psyc and irc?
TRUST2 > TRUST2
? TRUSTED_HOSTS are permitted to relay, this allows all users from that host to ? TRUSTED_HOSTS are permitted to relay, this allows all users from that host to
relay.. not so cool. relay.. not so cool.
+ the trust implementation needs to learn to distinguish host trust and + the trust implementation needs to learn to distinguish host trust and
person trust, yet understand the interaction and develop maths for it person trust, yet understand the interaction and develop maths for it
SCHEMES AND SERVICES > SCHEMES AND SERVICES
+ allow for icq: rather than xmpp:XXX@icq etc. + allow for icq: rather than xmpp:XXX@icq etc.
+ implement *.service.* and *.scheme.* etc according to + implement *.service.* and *.scheme.* etc according to
http://about.psyc.eu/Directory_Service - so that mailto: works for any server http://about.psyc.eu/Directory_Service - so that mailto: works for any server
+ move the .psyc.eu suffix into a #define + move the .psyc.eu suffix into a #define
+ implement forward-to-mailto-when-offline as a generic forwarding feature + implement forward-to-mailto-when-offline as a generic forwarding feature
FOLLOW INVITES > FOLLOW INVITES
+ /set follow all|friends|none + /set follow all|friends|none
allow your friends to invite you (and make you follow) into a room allow your friends to invite you (and make you follow) into a room
so that they can immediately start talking to a group of people like so that they can immediately start talking to a group of people like
@ -461,6 +472,7 @@ FOLLOW INVITES
create a subchannel of your self context, containing only the friends create a subchannel of your self context, containing only the friends
you want to have a conversation with, and poof you can start talking! you want to have a conversation with, and poof you can start talking!
>>>
- ok, x@y notation sollte mind. dots im host überprüfen, - ok, x@y notation sollte mind. dots im host überprüfen,
wenn nicht sogar leading # wenn nicht sogar leading #
In BuHa fragt el_presidente: inseln? In BuHa fragt el_presidente: inseln?
@ -470,13 +482,15 @@ FOLLOW INVITES
C:xmpp:euirc · euirc does not resolve C:xmpp:euirc · euirc does not resolve
In BuHa fragt el_presidente: was soll da passieren? In BuHa fragt el_presidente: was soll da passieren?
- improve handling of "Minusport" outgoing stuff: > ERROR HANDLING
reject and handle _failures - reject and handle _failures
? suspend flag on error? like this: when you receive errors, that a user or a suspend flag on error? like this: when you receive errors, that a user or a
host could not be reached, then the castmsg'ing entity could flag this host could not be reached, then the castmsg'ing entity could flag this
candidate as 'suspended' or 'temporarily unreachable' - and automatically candidate as 'suspended' or 'temporarily unreachable' - and automatically
change this status with the first sign of life from that entity or server. change this status with the first sign of life from that entity or server.
this would save friendship status and room presence across downtimes. this would save friendship status and room presence across downtimes.
: added PPL_NOTIFY_INACTIVE to peers.h but actually this needs a more
generic solution for all contexts. see krasser rewrite.
? uni.c kümmert sich nicht um castmsg(), weswegen presence zurecht immer ? uni.c kümmert sich nicht um castmsg(), weswegen presence zurecht immer
zur UNI gehen, aber leider auch raumcasts. im falle von jabber UNRs zur UNI gehen, aber leider auch raumcasts. im falle von jabber UNRs
@ -494,7 +508,7 @@ fritz: fritz zuckt.
fippo: TAGGING koennte dieses problem bald loesen fippo: TAGGING koennte dieses problem bald loesen
wie denn? was würde reply() anders machen? wie denn? was würde reply() anders machen?
PRESENCE > PRESENCE
- eigene mood & availability erscheinen nicht im showStatus - eigene mood & availability erscheinen nicht im showStatus
(description schon, aber das war's noch nicht) (description schon, aber das war's noch nicht)
- irc access receives _status_away notices for each message they send to a - irc access receives _status_away notices for each message they send to a
@ -509,42 +523,8 @@ PRESENCE
man kann eine passende _notice machen und wird sogar als friend gelistet man kann eine passende _notice machen und wird sogar als friend gelistet
- persistent_presence does not store description and mood - persistent_presence does not store description and mood
gmail hat irgendwelche anderen probleme... >>>
- heute nachmittag stand auf dem schirm: - unnecessary refriendship requests
oops schließt mit Dir Freundschaft.
TAV möchte mit Dir Freundschaft schließen.
bin mir ziemlich sicher, dass es keinen lokalen oops gibt.. es handelt sich
um eine fehlerhafte doppelte darstellung vom TAV alias ohne sein @gmail.com!?
einige stunden später:
Du bist mit oops bereits befreundet.
TAV möchte mit Dir Freundschaft schließen.
? mir scheint das passiert nicht mehr..
wenn "bereits befreundet" ausgegeben wird, geht auch ne textmeldung an
tav auf gmail raus. eine die es in jabberland nicht gibt. das wär okay
wenn wir keinen bug hätten.....
* also eigentlich sollte da ein "meinetwegen bist du subscribed" rausgehen
weshalb wir nur noch das display an unseren user unterdruecken muessten
hier ein ausschnitt aus der rawlog..
» S:xmpp:64.233.166.129:-26112 <presence type="subscribe" from="oops@gmail.example" to="lynx@ve.example.com"/>
« C:xmpp:gmail.com <presence to='oops@gmail.example' from='lynx@ve.example.com' type='subscribed'/>
« C:xmpp:gmail.com <presence to='oops@gmail.com' from='lynx@ve.example.com'><x from='lynx@ve.example.com' stamp='20060314T21:21:47' xmlns='jabber:x:delay'/></presence>
..man beachte, die newlines nach type='subscribed'/> wurden scheinbar
wirklich gesendet, aber vermutlich harmlos. dass gmail einen subscribe
abschickt für jemanden mit dem man schon längst befreundet ist, dass ist
wohl das problem. vermutlich ein dirty hack im umgang mit herkömmlichen
jabber servern welcher bei uns aber doofe effekte hat. was tun? genau
genommen müsste man errors zurückschicken, aber das wird die gmail-user
nicht glücklich stimmen.. sonst? einfach verwerfen? na gut
... hmm würde es reichen dafür ausserhalb des switch display=0 zu setzen
und nur im fall von PPL_NOTIFY_PENDING display=1 einzuschalten?
* man sollte wirklich mal von wem kompetentes auf gmail-seite den
subscription state checken lassen. ich vermute, die lassen
gaim-b0rkedness raus in die welt.
- ouch!! ganz schlimm.. es ist kein gmail-only problem!
wenn ich mit Alias: xmpp:symlynx@example.ccc.de = JYNX /friend mache kommt: wenn ich mit Alias: xmpp:symlynx@example.ccc.de = JYNX /friend mache kommt:
symlynx schließt mit Dir Freundschaft. symlynx schließt mit Dir Freundschaft.
JYNX möchte mit Dir Freundschaft schließen. JYNX möchte mit Dir Freundschaft schließen.
@ -581,7 +561,7 @@ JYNX möchte mit Dir Freundschaft schließen.
- falls /set entersilent off so erhalten bleibt, dokumentieren - falls /set entersilent off so erhalten bleibt, dokumentieren
PROGRAMMABLE USER IDENTIFICATIONS & MULTIPLE CLIENT INTERFACES > PROGRAMMABLE USER IDENTIFICATIONS & MULTIPLE CLIENT INTERFACES
- experimental rename fails sometimes: - experimental rename fails sometimes:
Attempt to rename to existing object '~nautilutz' Attempt to rename to existing object '~nautilutz'
possible fix: separate user identity from user access interface possible fix: separate user identity from user access interface
@ -602,7 +582,7 @@ PROGRAMMABLE USER IDENTIFICATIONS & MULTIPLE CLIENT INTERFACES
a UNI server in c++ anyway... ;) a UNI server in c++ anyway... ;)
? consider also what CONTEXT CHANNEL requirements the new identity has ? consider also what CONTEXT CHANNEL requirements the new identity has
WHITELISTING & BLACKLISTING on the SERVER TRUST WEB > WHITELISTING & BLACKLISTING on the SERVER TRUST WEB
+ enable the #ifdef such that dialback from new hosts is not automatically + enable the #ifdef such that dialback from new hosts is not automatically
replied to, but a _request_trust_manual is sent to the monitor. replied to, but a _request_trust_manual is sent to the monitor.
see also http://about.psyc.eu/Talk:Encryption see also http://about.psyc.eu/Talk:Encryption
@ -622,7 +602,7 @@ WHITELISTING & BLACKLISTING on the SERVER TRUST WEB
when the server tells you about things that have happened automatically, when the server tells you about things that have happened automatically,
like an automatic blacklisting. _info_adopt_trust or something. like an automatic blacklisting. _info_adopt_trust or something.
CHARSET > CHARSET
+ ensure UTF-8 at parsing time on all inputs so we can + ensure UTF-8 at parsing time on all inputs so we can
a) remove the action limitation: a) remove the action limitation:
- when an umlaut appears in speakaction, then the entire line is not - when an umlaut appears in speakaction, then the entire line is not
@ -639,7 +619,7 @@ CHARSET
so it is still necessary that CONSOLE_CHARSET learns to be easy about it so it is still necessary that CONSOLE_CHARSET learns to be easy about it
== PSYC 1.0alpha ======================================================= == PSYC 1.0alpha =======================================================
THE BIG METHOD RENAME > THE BIG METHOD RENAME
- shouldn't all _tag_reply be renamed into the more generic _tag_relay ? - shouldn't all _tag_reply be renamed into the more generic _tag_relay ?
i mean.. pushback setting _tag_reply is semantically wrong whereas i mean.. pushback setting _tag_reply is semantically wrong whereas
setting _tag_relay makes sense. the MMP spec has abandoned _tag_reply setting _tag_relay makes sense. the MMP spec has abandoned _tag_reply
@ -662,7 +642,7 @@ THE BIG METHOD RENAME
should have the same names as the entries in psyced.ini if equivalent. should have the same names as the entries in psyced.ini if equivalent.
+ after /unsub and /unfriend we should also have /unset + after /unsub and /unfriend we should also have /unset
COMPACT METHODS and KEYWORD INHERITANCE > COMPACT METHODS and KEYWORD INHERITANCE
nothing can be as fast as fixing the method inheritance at psyc parsing time. nothing can be as fast as fixing the method inheritance at psyc parsing time.
since we have to patch compact methods into long methods anyway, we know all since we have to patch compact methods into long methods anyway, we know all
the methods the muve can handle - so we can handle inheritance before passing the methods the muve can handle - so we can handle inheritance before passing
@ -677,6 +657,7 @@ clients). example:
in fact.. we can even simplify all abbrev() calls into mere == comparisons in fact.. we can even simplify all abbrev() calls into mere == comparisons
or switches in our muve code, because they will never be needed! or switches in our muve code, because they will never be needed!
>>>
- when a _target does not comply to the rules, a message needs to be replied - when a _target does not comply to the rules, a message needs to be replied
to with an error. currently however, handling falls thru to rootMsg() like to with an error. currently however, handling falls thru to rootMsg() like
this: this:
@ -688,13 +669,13 @@ or switches in our muve code, because they will never be needed!
- should ignored people receive an echo for the sake of not being - should ignored people receive an echo for the sake of not being
distinguishable from not ignored people? yes... but is a nasty change to do distinguishable from not ignored people? yes... but is a nasty change to do
TYPE CHECKING AT PARSING TIME > TYPE CHECKING AT PARSING TIME
- unless trustworthy > 4 all incoming vars should be checked for legal - unless trustworthy > 4 all incoming vars should be checked for legal
content, like chars in actions etc.. or maybe switch over the varnames content, like chars in actions etc.. or maybe switch over the varnames
and fix the obvious candidates.. if a method is non-standard (we will and fix the obvious candidates.. if a method is non-standard (we will
be aware of this by 1.0) we should check each var mentioned in the body. be aware of this by 1.0) we should check each var mentioned in the body.
PSYC protokoll verbessern, dass implementationen einfach sein können: > PSYC protokoll verbessern, dass implementationen einfach sein können:
+ die lookup_identification queue in place/basic ist vermutlich nicht + die lookup_identification queue in place/basic ist vermutlich nicht
notwendig, da (a) clients den zutritt zu einem raum von ihrer UNI notwendig, da (a) clients den zutritt zu einem raum von ihrer UNI
vermitteln lassen können und (b) scripte ihre informationen für einen vermitteln lassen können und (b) scripte ihre informationen für einen
@ -724,7 +705,7 @@ PSYC protokoll verbessern, dass implementationen einfach sein können:
dadurch die queues in net/circuit vereinfachen? unwahrscheinlich, aber dadurch die queues in net/circuit vereinfachen? unwahrscheinlich, aber
man könnte nochmal seinen grips drauf ansetzen. man könnte nochmal seinen grips drauf ansetzen.
HISTORY > HISTORY
+ add timestamp search to lastlog.c, add timestamp-based /history and /log + add timestamp search to lastlog.c, add timestamp-based /history and /log
commands, maybe remove v("new") code. then again, it's quite efficient. commands, maybe remove v("new") code. then again, it's quite efficient.
see person.h for details. see person.h for details.
@ -748,7 +729,7 @@ ________________________________________________________________________
? _nick_local and coolname are shown, but cannot be identified ? _nick_local and coolname are shown, but cannot be identified
localMUC: > localMUC:
- MUC member list may be incorrect after psyced server restart.. - MUC member list may be incorrect after psyced server restart..
we should probably castmsg all local leaves at shutdown we should probably castmsg all local leaves at shutdown
- when entering places from XMPP-S2S own id appears both - when entering places from XMPP-S2S own id appears both
@ -765,7 +746,7 @@ localMUC:
still causing problems still causing problems
? M1: apparently something in psyced's MUC implementation is making mcabber crash :( ? M1: apparently something in psyced's MUC implementation is making mcabber crash :(
remoteMUC: > remoteMUC:
- whispering in remote MUCs: - whispering in remote MUCs:
xmpp:psyc@conference.jabber.org sagt Dir: test xmpp:psyc@conference.jabber.org sagt Dir: test
would be nice to see the nickname at least.. ;) would be nice to see the nickname at least.. ;)
@ -775,6 +756,7 @@ remoteMUC:
or actually implement it? looks so stupid on telnet when typing <enter> or actually implement it? looks so stupid on telnet when typing <enter>
... then again, telnet is the only protocol that could use that.. scrapped ... then again, telnet is the only protocol that could use that.. scrapped
>>>
- "asks" kommt blöd.. entweder visiblespeakaction immer, oder gar - "asks" kommt blöd.. entweder visiblespeakaction immer, oder gar
nicht (implement visiblespeakaction in net/jabber) nicht (implement visiblespeakaction in net/jabber)
- ausserdem wird kein asks erzeugt wenn jabberisten fragen stellen - ausserdem wird kein asks erzeugt wenn jabberisten fragen stellen
@ -791,6 +773,12 @@ remoteMUC:
________________________________________________________________________ ________________________________________________________________________
== JABBER CLIENT ISSUES (...experimental is justified...) ============== == JABBER CLIENT ISSUES (...experimental is justified...) ==============
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- display twitter notices somehow
- when 'localhost' is chosen as server name, psyced will append invalid
dot and space in jabber output:
<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><jid>test@localhost. /(null)</jid></bind>
? XMPP: connecting to psyced.org with psi pops up a profile window everytime ? XMPP: connecting to psyced.org with psi pops up a profile window everytime
? XMPP: first reply to a stranger's remote psyc message did not show up in psi ? XMPP: first reply to a stranger's remote psyc message did not show up in psi
? neulich wurde 'stanly' beim runterfahren von psi nicht aus dem MUC genommen. ? neulich wurde 'stanly' beim runterfahren von psi nicht aus dem MUC genommen.
@ -798,7 +786,7 @@ ________________________________________________________________________
MUC meldungen. ob der fehler bei psi oder uns liegt, k.A. MUC meldungen. ob der fehler bei psi oder uns liegt, k.A.
... is this still happening with the new fixes? ... is this still happening with the new fixes?
ASTERISK IN XMPP: UNIFORMS > ASTERISK IN XMPP: UNIFORMS
- tjgillies: meebo doesn't let you put * in MUC name - tjgillies: meebo doesn't let you put * in MUC name
AFAIK the xmpp: uri does not forbid * from the URI RFC thus AFAIK the xmpp: uri does not forbid * from the URI RFC thus
meebo should be incorrect here. we'll have to talk to them.. meebo should be incorrect here. we'll have to talk to them..
@ -812,6 +800,7 @@ ASTERISK IN XMPP: UNIFORMS
</message> </message>
- is psi having a problem with this, too? - is psi having a problem with this, too?
>>>
- accurate availability values from friends aren't stored and delivered - accurate availability values from friends aren't stored and delivered
- re-subscribe isn't properly handled (so we do friend(0) earlier instead) - re-subscribe isn't properly handled (so we do friend(0) earlier instead)
@ -1234,7 +1223,7 @@ ________________________________________________________________________
fippo hotzenplotzt: möglich fippo hotzenplotzt: möglich
? problem: how to allow remote XMPP MUC users to filter web inspection notices? ? problem: how to allow remote XMPP MUC users to filter web inspection notices?
PROFILES > PROFILES
! depend on DECENTRALIZED STATE to get to the next stadium of coolness ! depend on DECENTRALIZED STATE to get to the next stadium of coolness
- exposed lists aren't properly sorted by expose level. a maximum expose should - exposed lists aren't properly sorted by expose level. a maximum expose should
automatically put a friend or group at the top of the profile list etc. automatically put a friend or group at the top of the profile list etc.
@ -1250,6 +1239,7 @@ PROFILES
by channels - so we have a chance to multicast changes to our profile to by channels - so we have a chance to multicast changes to our profile to
the intended people and don't have complexity explosion in user data for this. the intended people and don't have complexity explosion in user data for this.
>>>
- Invalid password error in tn/server appears indented w/o LF - Invalid password error in tn/server appears indented w/o LF
+ provide textdb editing mechanisms: + provide textdb editing mechanisms:
@ -1293,7 +1283,7 @@ PROFILES
? _subject in jabber messages wird ignoriert. was machen wir damit? ? _subject in jabber messages wird ignoriert. was machen wir damit?
library/dns ... geht derzeit sowieso nicht ohne erq. erq muss sein! > ERQ
- an mehreren stellen verlassen wir uns darauf, dass __ERQ_MAX_SEND__ - an mehreren stellen verlassen wir uns darauf, dass __ERQ_MAX_SEND__
undefiniert sein wird wenn erq beim hochfahren nicht gefunden wurde, undefiniert sein wird wenn erq beim hochfahren nicht gefunden wurde,
aber wenn ich ldmud mit -N aufrufe wird __ERQ_MAX_SEND__ trotzdem aber wenn ich ldmud mit -N aufrufe wird __ERQ_MAX_SEND__ trotzdem
@ -1301,6 +1291,7 @@ library/dns ... geht derzeit sowieso nicht ohne erq. erq muss sein!
+ es gibt neue localhost selbstresolver switche, das müsste mehrere + es gibt neue localhost selbstresolver switche, das müsste mehrere
if localhost abfragen im bisherigen code unnötig machen. optimization TODO if localhost abfragen im bisherigen code unnötig machen. optimization TODO
>>>
- don't accept connections during shutdown sequence - don't accept connections during shutdown sequence
should work by returning 0 from master:connect() should work by returning 0 from master:connect()
- reorder shutdown? why do we see _notice_place_leave_reload_server - reorder shutdown? why do we see _notice_place_leave_reload_server
@ -1407,14 +1398,6 @@ javascript:popnoresize('http://sport.ard.de/php/sportticker/?event_art=6&ticker=
+ spoof tester script in perl- oder pypsyc, welches gespoofte oder fehler- + spoof tester script in perl- oder pypsyc, welches gespoofte oder fehler-
hafte meldungen zu erzeugen versucht um w() und co dicht zu kriegen hafte meldungen zu erzeugen versucht um w() und co dicht zu kriegen
sollten wir wieder eine "Too deep recursion" im raumbereich haben
könnte es ein fall sein für diese kleine vermutung:
wenn QUIET_REMOTE_MEMBERS nicht defined ist, ist
isValidRelay(vars["_source_relay"]) in place/basic.c:47 bei einem
_failure_unsuccessful_delivery true, weil im _source_relay der
raum selbst steht. und dann so weiter, da der user nie aus _u
verschwindet
+ support for transfer/sharing of user data between servers. when a new + support for transfer/sharing of user data between servers. when a new
server is started using the .o files of an existing server, each loaded server is started using the .o files of an existing server, each loaded
user object should be aware, that it is *not* the entity that *made* user object should be aware, that it is *not* the entity that *made*
@ -1441,18 +1424,18 @@ könnte es ein fall sein für diese kleine vermutung:
trying to intantiate ridiculous objects? (no extensions outside static?) trying to intantiate ridiculous objects? (no extensions outside static?)
see also http://about.psyc.eu/Web_Attack see also http://about.psyc.eu/Web_Attack
________________________________________________________________________ ________________________________________________________________________
* GOTCHAs > GOTCHAs
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
! When the /topic command makes funny errors, then your room has a custom ! When the /topic command makes funny errors, then your room has a custom
cmd() and doesn't pass vars over. It should use ON_COMMAND instead! cmd() and doesn't pass vars over. It should use ON_COMMAND instead!
________________________________________________________________________ ________________________________________________________________________
* PSYC FUTURES see also http://about.psyc.eu/Category:Vapor > PSYC FUTURES see also http://about.psyc.eu/Category:Vapor
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
+ http://about.psyc.eu/Hashtags + http://about.psyc.eu/Hashtags
+ http://about.psyc.eu/Follower + http://about.psyc.eu/Follower
________________________________________________________________________ ________________________________________________________________________
* TOYS IN THE ATTIC > TOYS IN THE ATTIC
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- In welcome spricht Igramul: hmm... the "+list" command made xchat crash - In welcome spricht Igramul: hmm... the "+list" command made xchat crash
<fippo> man sollte dazu sagen, dass er danach gesagt hat, dass es ein <fippo> man sollte dazu sagen, dass er danach gesagt hat, dass es ein
@ -1482,7 +1465,7 @@ mapping rvars msg(source, mc, data, vars, rvars);
wenn ein msg() signalisieren will, dass die nachricht abgearbeitet ist, wenn ein msg() signalisieren will, dass die nachricht abgearbeitet ist,
gibt es return 0 statt return rvars durch. ist das alles, oder fehlt was? gibt es return 0 statt return rvars durch. ist das alles, oder fehlt was?
________________________________________________________________________ ________________________________________________________________________
* GATEBOT / IRCGATE / etc > GATEBOT / IRCGATE / etc
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- /m freenode:symlynx hey - /m freenode:symlynx hey
Sorry, _message_private is not supported by the IRC gateway. Sorry, _message_private is not supported by the IRC gateway.
@ -1588,7 +1571,7 @@ ________________________________________________________________________
mobile phone, especially if you have permanent context subscriptions mobile phone, especially if you have permanent context subscriptions
flowing into your log nonstop. flowing into your log nonstop.
RELAYING > RELAYING
+ net/spyc needs relaying (without parsing even), see TODO in parse_content() + net/spyc needs relaying (without parsing even), see TODO in parse_content()
? relaying doesn't work for psyc clients (xmpp: in particular) ? relaying doesn't work for psyc clients (xmpp: in particular)
works for localhost clients works for localhost clients
@ -1608,26 +1591,14 @@ RELAYING
but some of the old stuff does.. how do we find a proper solution? but some of the old stuff does.. how do we find a proper solution?
== DOCUMENTATION ISSUES ================================================ == DOCUMENTATION ISSUES ================================================
ich habs.. jede datei definiert am anfang in welche kategorie sie gehört.. * ich habs.. jede datei definiert am anfang in welche kategorie sie gehört..
"library" "user" "server" "language" etc... und jede funktion kann sich "library" "user" "server" "language" etc... und jede funktion kann sich
dann mit /** library: this stuff.. */ woanders einordnen.. jetzt brauchen wir dann mit /** library: this stuff.. */ woanders einordnen.. jetzt brauchen wir
ne dokuware die sowas kann, und jemand der die dokummentare reinschreibt.. ne dokuware die sowas kann, und jemand der die dokummentare reinschreibt..
-> doxygen-1.3.9.1.src.tar.gz (2649K)... definitiv kein aufwand, sowas... -> doxygen-1.3.9.1.src.tar.gz (2649K)... definitiv kein aufwand, sowas...
== RELEASE ANNOUNCEMENT ================================================ == RELEASE ANNOUNCEMENT ================================================
REDIRECT: http://about.psyc.eu/Release_Announcement .. außerdem: * REDIRECT: http://about.psyc.eu/Release_Announcement
? Netzeitung.de könnten man beschwatzen schonmal nen echten psyc feed
zu liefern.. am besten wenn sie einen stabilen 0.99 server installieren.
oder sie führen einfach dpa2psyc aus.
? http://en.wikipedia.org/wiki/Chat und ff. strotzen vor Fehlern..
erbarmt sich jemand? und ausserdem.. http://en.wikipedia.org/wiki/PSYC
man kann sich ja an http://de.wikipedia.org/wiki/PSYC orientieren :)
- "CSpace could be the 7th, component of the open office suite, see the
discussion on the mailinglist of Open office developers for July 2006"
they must be kidding!!!!
== COMPETITION ========================================================= == COMPETITION =========================================================
+ man könnte die kollegen bitten gemäß forschertradition unter "other + man könnte die kollegen bitten gemäß forschertradition unter "other
@ -1666,7 +1637,7 @@ http://freshmeat.net/projects/boo/
mixgerät aus active, server und circuit erstmal ein temporäres newct.c machen mixgerät aus active, server und circuit erstmal ein temporäres newct.c machen
________________________________________________________________________ ________________________________________________________________________
UNDER CONSTRUCTION: (offene baustellen im LPC code) == UNDER CONSTRUCTION: (offene baustellen im LPC code) =================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- file transfers between local jabber clients - file transfers between local jabber clients
- file transfers between jabber clients and gateways - file transfers between jabber clients and gateways
@ -1765,7 +1736,7 @@ das sieht doof aus.. gehts auch besser? hmm
+ dns_rresolve should panic when discovering fake PTRs and suchlike + dns_rresolve should panic when discovering fake PTRs and suchlike
blacklist_report() ? :) blacklist_report() ? :)
SHOW STATUS? > SHOW STATUS?
? is the following stuff superceded by DECENTRALIZED STATE? ? is the following stuff superceded by DECENTRALIZED STATE?
? _status_flags aus der auswahl _members _topic _configuration und ? _status_flags aus der auswahl _members _topic _configuration und
_limit_history bei _request_enter mitgeben, damit showStatus dann die _limit_history bei _request_enter mitgeben, damit showStatus dann die
@ -1777,6 +1748,7 @@ SHOW STATUS?
same way same way
+ "/set verbose on" gibt (unter anderem) mehr statuskram beim einloggen aus.. + "/set verbose on" gibt (unter anderem) mehr statuskram beim einloggen aus..
>>>
? filter + /msg: auto tmp-friend status ? ? filter + /msg: auto tmp-friend status ?
hierzu müsste man wohl einen status "bekannter" in ppl einfügen hierzu müsste man wohl einen status "bekannter" in ppl einfügen
@ -1821,7 +1793,7 @@ SHOW STATUS?
- psyctext() hängt sich auf wenn ein [ nicht wieder mit ] geschlossen wird - psyctext() hängt sich auf wenn ein [ nicht wieder mit ] geschlossen wird
SPAM / FLOOD CONTROL > SPAM / FLOOD CONTROL
+ connect flood protection (against icaruz from XX.XX.XX.XX) + connect flood protection (against icaruz from XX.XX.XX.XX)
1. introduce #define MAX_CONNECTIONS_FROM_ONE_IP 1. introduce #define MAX_CONNECTIONS_FROM_ONE_IP
2. warn admins via monitor when MAX_CONNECTIONS_FROM_ONE_IP * 70% 2. warn admins via monitor when MAX_CONNECTIONS_FROM_ONE_IP * 70%
@ -1939,7 +1911,7 @@ ________________________________________________________________________
psyc textdb directory tree.. psyc textdb directory tree..
? user.c puts host, not ip, into v("ip") - makes sense? ? user.c puts host, not ip, into v("ip") - makes sense?
FROM MEDITATION ON PDEV: > FROM MEDITATION ON PDEV:
+ elaborate availability/presence features, even before "logon" + elaborate availability/presence features, even before "logon"
? do we want var change notifications on psyc parse level so that ? do we want var change notifications on psyc parse level so that
the protocol does not need to issue messages for every minor event? the protocol does not need to issue messages for every minor event?
@ -1949,6 +1921,9 @@ FROM MEDITATION ON PDEV:
+ unls wie psycbiff melden sich für bestimmte methodenfamilien an + unls wie psycbiff melden sich für bestimmte methodenfamilien an
== REAL PSYC ROUTING =================================================== == REAL PSYC ROUTING ===================================================
? wie unterscheide ich member und subroute?
falls du es überhaupt brauchst daran, dass subroute seine members definiert.
=_members <route> sepp frida alex =_members <route> sepp frida alex
+_members p2puser +_members p2puser
+_members <subroute> uwe anton fippo +_members <subroute> uwe anton fippo
@ -1961,10 +1936,8 @@ aber casten braucht man nur an die router, die übrig bleiben.
und der p2puser ist ein sonderfall: er will von allen direkt angenachrichtet und der p2puser ist ein sonderfall: er will von allen direkt angenachrichtet
werden ohne router dazwischen.. werden ohne router dazwischen..
-> wie unterscheide ich member und subroute?
falls du es überhaupt brauchst daran, dass subroute seine members definiert.
== P2P ROUTING ========================================================= == P2P ROUTING =========================================================
* Kademlia
Möglicherweise interessant ist eine P2P-artige Form von Routing, basierend Möglicherweise interessant ist eine P2P-artige Form von Routing, basierend
auf Kademlia ( siehe http://de.wikipedia.org/wiki/Kademlia ) + Auth auf Kademlia ( siehe http://de.wikipedia.org/wiki/Kademlia ) + Auth
via Public Keys. Man sendet Nachrichten an einen (gehashten ?) Publickey via Public Keys. Man sendet Nachrichten an einen (gehashten ?) Publickey
@ -1986,7 +1959,7 @@ schaffen oder muss man freigiebiger mit der Information sein?
TODO: edit-funktionen, etc TODO: edit-funktionen, etc
-> oder gleich den eingebauten zeileneditor ed() von lpmud verwenden -> oder gleich den eingebauten zeileneditor ed() von lpmud verwenden
(telnet only) (telnet only)
threads: > threads:
+ jeder Message noch eine threadID geben (in-reply-to): + jeder Message noch eine threadID geben (in-reply-to):
man numeriert die msgs durch und ein reply trägt noch den _tag von man numeriert die msgs durch und ein reply trägt noch den _tag von
seinem vorgänger.. oder so...? seinem vorgänger.. oder so...?
@ -2012,7 +1985,7 @@ threads:
? psyc clients as persistent java applets (ie channel, signed ns applet) ? psyc clients as persistent java applets (ie channel, signed ns applet)
TIME - rewrite of all time outputs: > TIME - rewrite of all time outputs:
+ handle timezones + handle timezones
+ introduce global psyc time? + introduce global psyc time?
? seconds since 2000-01-01 0:0 GMT or -- still lets you say "in an hour" ? seconds since 2000-01-01 0:0 GMT or -- still lets you say "in an hour"
@ -2021,6 +1994,7 @@ TIME - rewrite of all time outputs:
too bad it cant be done in perl too bad it cant be done in perl
+ add date/weekday for /log messages older than 24h + add date/weekday for /log messages older than 24h
>>>
? finish up /connect with password ? finish up /connect with password
? wenn man per psyc ne message an xx schickt, gilt der anschliessend ? wenn man per psyc ne message an xx schickt, gilt der anschliessend
@ -2129,7 +2103,7 @@ thoughts from buddy-heggy.txt:
- logged_on should be gone - logged_on should be gone
________________________________________________________________________ ________________________________________________________________________
DRIVER TODO: > DRIVER TODO:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
* moved to psyclpc/TODO file * moved to psyclpc/TODO file
@ -2137,7 +2111,7 @@ DRIVER TODO:
- unless (checkVar(&key, &value)) return; - unless (checkVar(&key, &value)) return;
- psyc/library - psyc/library
________________________________________________________________________ ________________________________________________________________________
PERLPSYC TODO: > PERLPSYC TODO:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- FORK - FORK
- negotiation muss sowohl blocking als auch nonblocking funktionieren. per - negotiation muss sowohl blocking als auch nonblocking funktionieren. per
@ -2148,7 +2122,7 @@ PERLPSYC TODO:
konfigurieren können. md5 überprüft dann die legitimität der nachricht. konfigurieren können. md5 überprüft dann die legitimität der nachricht.
oder wir implementieren das auf serverconnect-ebene.. hmmm oder wir implementieren das auf serverconnect-ebene.. hmmm
sonst noch evtl anguckenswert > sonst noch evtl anguckenswert
+ http://search.cpan.org/~sparsons/Net-Dev-Syslog-0.8.0/Syslog.pm + http://search.cpan.org/~sparsons/Net-Dev-Syslog-0.8.0/Syslog.pm
+ http://freshmeat.net/projects/yeemp/ GPG over SSL, UTF8 etc. + http://freshmeat.net/projects/yeemp/ GPG over SSL, UTF8 etc.
? http://freshmeat.net/projects/xchatosd/ X11 OSD hihi ? http://freshmeat.net/projects/xchatosd/ X11 OSD hihi
@ -2163,14 +2137,14 @@ sonst noch evtl anguckenswert
- checkout the fileshare stuff in perlpsyc/bin/ - checkout the fileshare stuff in perlpsyc/bin/
________________________________________________________________________ ________________________________________________________________________
PSYC SPEC TODO: > PSYC SPEC TODO:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
+ option to receive rendered messages instead of templates ( as in ve:w() ) + option to receive rendered messages instead of templates ( as in ve:w() )
+ option to not receive templates for standard messages? + option to not receive templates for standard messages?
+ standardized way to select language? + standardized way to select language?
________________________________________________________________________ ________________________________________________________________________
MISCELLANEOUS STUFF: > MISCELLANEOUS STUFF:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
? irc-notify suckt, aber als reines client-interface kann man es doch ? irc-notify suckt, aber als reines client-interface kann man es doch
eigentlich erlauben? ison polling nervt, kann man hoffentlich vermeiden, eigentlich erlauben? ison polling nervt, kann man hoffentlich vermeiden,
@ -2198,10 +2172,11 @@ Similar Projexx:
http://freshmeat.net/projects/ymsgr/ http://freshmeat.net/projects/ymsgr/
== HINTS: Multicast (see also COMPETITION) ============================= == HINTS: Multicast (see also COMPETITION) =============================
? reliable multicast library?
From: Gerd Flaig <gefla@pond.example.org> From: Gerd Flaig <gefla@pond.example.org>
> Was brauchen wir in der Praxis also? Eine reliable Multicast > Was brauchen wir in der Praxis also? Eine reliable Multicast
> Implementation in PSYC einbinden (müsste ja heutzutage ne fertige > Implementation in PSYC einbinden (müsste ja heutzutage ne fertige
> Library sein zum Aufrufen), [..] > Library sein zum Aufrufen), [..]
nach so etwas suche ich schon eine ganze Weile, habe aber bisher nur nach so etwas suche ich schon eine ganze Weile, habe aber bisher nur
im OCaml-Umfeld eine Implementierung gefunden (genaue URL habe ich im OCaml-Umfeld eine Implementierung gefunden (genaue URL habe ich
nicht mehr, irgendwo unter http://caml.inria.fr/), die aber wohl noch nicht mehr, irgendwo unter http://caml.inria.fr/), die aber wohl noch
@ -2212,27 +2187,19 @@ stabile Bibliothek entsteht.
wer kann ich das mal ansehen? wer kann ich das mal ansehen?
http://www.junglemonkey.net/emcast/ http://www.junglemonkey.net/emcast/
und ausserdem... erste gedanken an multicasting bei den jabbers:
http://www.jabber.org/jeps/jep-0033.html
es geht erstmal nur um eine syntax zwischen client und server
was der server dann tut ist weiterhin unicast... oder?
neuerdings erste gedanken bei den jabbers an raeume, die raeume joinen,
was eine rudimentaere Form von effizenter Verteilung sein mag, jedoch
ohne conferencing control
== DOC: HOW TO PORT TO MUD ============================================= == DOC: HOW TO PORT TO MUD =============================================
> #define MUD * #define MUD
> #undef _flag_enable_routing_UDP will force psyc to use tcp only > #undef _flag_enable_routing_UDP will force psyc to use tcp only
> #define NO_EXTERNAL_LOGINS if you want > #define NO_EXTERNAL_LOGINS if you want
> #define CONFIG_PATH to where your /local/ is > #define CONFIG_PATH to where your /local/ is
> #define TEXT_PATH to where you want to put /default/* > #define TEXT_PATH to where you want to put /default/*
if you care to define SERVER_HOST, please do so in local.h, not in net.h if you care to define SERVER_HOST, please do so in local.h, not in net.h
same goes for DEFAULT_USER_OBJECT. if you need to fake the library same goes for DEFAULT_USER_OBJECT. if you need to fake the library
#include "/net/gl-psyc/simulated.h" in your local.h #include "/net/gl-psyc/simulated.h" in your local.h
________________________________________________________________________ ________________________________________________________________________
LOOKING INTO PIKE: > LOOKING INTO PIKE:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
irc bot in pike: http://caudiumforge.net/anoncvs.rxml irc bot in pike: http://caudiumforge.net/anoncvs.rxml
http://cvsweb.caudiumforge.net/cgi-bin/cvsweb.cgi/sugor/?cvsroot=sugor http://cvsweb.caudiumforge.net/cgi-bin/cvsweb.cgi/sugor/?cvsroot=sugor
@ -3984,4 +3951,13 @@ irc/user
- handle root messages - handle root messages
jabber/* jabber/*
- deal with < and > in status updates - deal with < and > in status updates
group/master
- don't use local objects as they may get replaced and zeroed
use local uniforms instead (fixes some strange ghost membership fx)
usercmd
+ _failure_necessary_variable for _request_do_presence that
doesn't provide _availability (just provides _mood for example)
- tycho: Availability degree is not checked by server and can
be negative, like -5.
user
- psyc client _examine was falling thru to _HTML output, added return;

100
bin/todo2csv Executable file
View File

@ -0,0 +1,100 @@
#!/usr/bin/perl
# parse the historic CHANGESTODO.txt file and produce
# a "tab seperated values" CSV according to csv2trac format:
#
# Each line in the CSV file needs to have the following entries
# type text -- the ticket purpose
# time integer -- the time it was created
# changetime integer
# component text
# severity text
# priority text
# owner text -- who is this ticket assigned to
# reporter text
# cc text -- email addresses to notify
# url text -- url related to this ticket
# version text --
# milestone text --
# status text
# resolution text
# summary text -- one-line summary
# description text -- problem description (long)
# keywords text
use locale;
my $changestodofile = shift or die 'Please provide path to CHANGESTODO.txt';
open(I, "/usr/bin/expand $changestodofile |")
or die "Failed to /usr/bin/expand $changestodofile";
print <<X;
type\ttime\tchangetime\tcomponent\tseverity\tpriority\towner\treporter\tcc\turl\tversion\tmilestone\tstatus\tresolution\tsummary\tdescription\tkeywords
X
my $text = '';
my $headline, $first, $type, $sub;
my %types = (
'-' => 'defect',
'+' => 'enhancement',
'*' => 'task',
'?' => 'question', # needs to be added by trac-admin
);
sub output {
return unless $first;
my $t = $types{$type};
die 'no type' unless $t;
$summary = ($first && $sub) ? "$sub: $first" : ($first || $sub);
die 'expand failed' if $summary =~ /\t/ or $text =~ /\t/;
# $summary =~ s/\t/ /gm;
# $text =~ s/\t/ /gm;
$text =~ s/\n/\\n/gm;
my $mytime = 1234567890;
print <<X;
$t\t$mytime\t\tpsyced\t\t\t\t\t\t\t$headline\tnew\t\t$summary\t\\n$summary\\n$text\told imported
X
undef $type;
undef $first;
$text = '';
}
<I>; # skip first line
while (<I>) {
next if /^[_¯]+$/;
next if /^\|/;
if ( /^== (.+) =====/ ) {
&output;
$headline = $1;
undef $sub;
next;
}
if ( /^(-|\+|\?|\*) (.+)$/ ) {
&output;
$type = $1;
$first = "$1 $2";
next;
}
if ( /^\> (.+)$/ ) {
&output;
$sub = $1;
# print STDERR $_;
next;
}
if ( /^\>\>\>/ ) {
&output;
undef $sub;
next;
}
if ( /^=+$/ ) {
&output;
exit;
}
# if ( /^ (.+)$/ or /^\t(.+)$/ ) {
# $text .= $1;
# next;
# }
$text .= $_;
# print STDERR;
}

View File

@ -9,7 +9,7 @@
# emerge. From nothing. fischerspooner rocks. -lynX # emerge. From nothing. fischerspooner rocks. -lynX
P=psyced P=psyced
V=20090303 V=20090617
# this part can be executed once the ebuild is in portage # this part can be executed once the ebuild is in portage

View File

@ -9,7 +9,7 @@
# emerge. From nothing. fischerspooner rocks. -lynX # emerge. From nothing. fischerspooner rocks. -lynX
P=psyclpc P=psyclpc
V=20080707 V=20090321
# this part can be executed once the ebuild is in portage # this part can be executed once the ebuild is in portage

8
place/de_en.c Normal file
View File

@ -0,0 +1,8 @@
#define NAME "de_en"
#define TRANSLATION "de_en"
#ifdef ADMINISTRATORS
# define PLACE_OWNED ADMINISTRATORS
#endif
#include "babeldos.i"

View File

@ -744,6 +744,9 @@ _error_illegal_password_size
_error_necessary_registration _error_necessary_registration
|Tut mir Leid, das geht erst nach Registrierung. |Tut mir Leid, das geht erst nach Registrierung.
_failure_necessary_variable
|Unvollständige Anfrage.
_error_necessary_nick_place _error_necessary_nick_place
|Du kannst hier nicht einfach hereinlaufen ohne einen anständigen Spitznamen! |Du kannst hier nicht einfach hereinlaufen ohne einen anständigen Spitznamen!

View File

@ -366,28 +366,28 @@ _notice_place_leave
|<presence type='unavailable' to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]' id='[_tag]'><x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='none' role='none'/></x></presence> |<presence type='unavailable' to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]' id='[_tag]'><x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='none' role='none'/></x></presence>
_status_presence_here _status_presence_here
|<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_status_presence_here_talkative _status_presence_here_talkative
|<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><show>chat</show><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><show>chat</show><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_status_presence_here_busy _status_presence_here_busy
|<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><show>dnd</show><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><show>dnd</show><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_status_presence_away _status_presence_away
|<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><show>away</show><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><show>away</show><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_status_presence_absent_vacation _status_presence_absent_vacation
|<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><show>xa</show><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><show>xa</show><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_status_presence_absent _status_presence_absent
|<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]' type='unavailable'><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]' type='unavailable'><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_status_presence_here_quiet _status_presence_here_quiet
|<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'/> |<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'/>
_notice_presence_here _notice_presence_here
|<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber_bare]'><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber_bare]'><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_notice_presence_here_plain _notice_presence_here_plain
|<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'/> |<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'/>
@ -396,19 +396,19 @@ _notice_presence_here_quiet
|<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber]'/> |<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber]'/>
_notice_presence_here_talkative _notice_presence_here_talkative
|<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber_bare]'><show>chat</show><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber_bare]'><show>chat</show><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_notice_presence_here_busy _notice_presence_here_busy
|<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber]'><show>dnd</show><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber]'><show>dnd</show><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_notice_presence_away _notice_presence_away
|<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber]'><show>away</show><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber]'><show>away</show><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_notice_presence_absent_vacation _notice_presence_absent_vacation
|<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber]'><show>xa</show><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber]'><show>xa</show><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_notice_presence_absent _notice_presence_absent
|<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber]' type='unavailable'><status>[_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence> |<presence to='[_INTERNAL_target_jabber_bare]' from='[_INTERNAL_source_jabber]' type='unavailable'><status>[_INTERNAL_XML_description_presence]</status><mood xmlns='http://jabber.org/protocol/mood'><[_INTERNAL_mood_jabber]/></mood></presence>
_notice_person_absent_netburp _notice_person_absent_netburp
|<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><show>xa</show><status>{_notice_person_absent_netburp}</status></presence> |<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'><show>xa</show><status>{_notice_person_absent_netburp}</status></presence>

View File

@ -626,7 +626,10 @@ _failure_filter_strangers
|[_nick] has not enabled messages from strangers. |[_nick] has not enabled messages from strangers.
_failure_necessary_registration _failure_necessary_registration
|[_nick_target] cannot handle friendships yet. |[_nick_target] is no registered user yet.
_failure_necessary_variable
|Your request is incomplete.
_failure_unsuccessful_delivery _failure_unsuccessful_delivery
|Could not establish a circuit to [_host] to deliver a [_method_relay] to [_source]. |Could not establish a circuit to [_host] to deliver a [_method_relay] to [_source].

View File

@ -30,6 +30,10 @@
#include <status.h> #include <status.h>
#include <uniform.h> #include <uniform.h>
#ifdef BETA
# define ENFORCE_UNIFORM
#endif
#ifdef CONTEXT_STATE // {{{ #ifdef CONTEXT_STATE // {{{
# define HEADER_ONLY # define HEADER_ONLY
# include "../state.c" # include "../state.c"
@ -98,7 +102,7 @@ castmsg(source, mc, data, vars) {
#endif // }}} #endif // }}}
P2(("%O castmsg(%O,%O,%O..) for %O\n", ME, source,mc,data, _routes)) P2(("%O castmsg(%O,%O,%O..) for %O\n", ME, source,mc,data, _routes))
D3(P2(("%O vars = %O\n", ME, vars))) D4(P2(("%O vars = %O\n", ME, vars)))
// _context is an MMP variable, so we use it internally with objectp // _context is an MMP variable, so we use it internally with objectp
vars["_context"] = ME; vars["_context"] = ME;
@ -114,11 +118,11 @@ castmsg(source, mc, data, vars) {
foreach (route, noa : _routes) { foreach (route, noa : _routes) {
#if defined(TIDILY) && defined(MEMBERS_BY_SOURCE) #if defined(TIDILY) && defined(MEMBERS_BY_SOURCE)
P3(("place:each(%O,t=%O,s=%O,mc=%O,d=%O,v=%O)\n", P4(("place:each(%O,t=%O,s=%O,mc=%O,d=%O,v=%O)\n",
mappingp(noa) ? sizeof(noa) : noa, route, source, mc, mappingp(noa) ? sizeof(noa) : noa, route, source, mc,
data, vars)) data, vars))
#else #else
P3(("place:each(%O,t=%O,s=%O,mc=%O,d=%O,v=%O)\n", P4(("place:each(%O,t=%O,s=%O,mc=%O,d=%O,v=%O)\n",
noa, route, source, mc, data, vars)) noa, route, source, mc, data, vars))
#endif #endif
// if (route == source) return; // skip sender // if (route == source) return; // skip sender
@ -191,6 +195,9 @@ protected load(file) {
remove_member(source, origin) { remove_member(source, origin) {
mixed t; mixed t;
#ifdef ENFORCE_UNIFORM
if (objectp(source)) source = psyc_name(source);
#endif
P2(("%O remove_member(%O, %O)\n", ME, source, origin)) P2(("%O remove_member(%O, %O)\n", ME, source, origin))
if (origin && ( if (origin && (
#if 1 //defined(TIDILY) && defined(MEMBERS_BY_SOURCE) #if 1 //defined(TIDILY) && defined(MEMBERS_BY_SOURCE)
@ -241,10 +248,23 @@ jabberisten die freundschaft zum user#fippo entfernte:
P2(("%O encountered unnecessary remove of %O from %O\n", P2(("%O encountered unnecessary remove of %O from %O\n",
ME, source, _routes)) ME, source, _routes))
} }
P3(("%O -> _routes = %O\n", ME, _routes))
} }
insert_member(source, origin) { insert_member(source, origin) {
mixed t; mixed t;
#ifdef ENFORCE_UNIFORM
// when storing objects into _routes stupid things can happen:
// when a user is created, all her local friends are cloned and
// placed into her context. if one of those local friends logs in
// under different access a different user object is created -
// the old one is destroyed and, guess what, this context mapping
// is not updated. always using uniforms is a way to solve this
// problem.
//
if (objectp(source)) source = psyc_name(source);
#endif
P2(("%O insert_member(%O, %O)\n", ME, source, origin)) P2(("%O insert_member(%O, %O)\n", ME, source, origin))
if (objectp(origin) && (t = origin->qOrigin())) { if (objectp(origin) && (t = origin->qOrigin())) {
#ifdef FORK #ifdef FORK
@ -279,6 +299,7 @@ insert_member(source, origin) {
// would be nice to do it here, but that's not correct // would be nice to do it here, but that's not correct
//revision += 1; //revision += 1;
#endif #endif
P3(("%O -> _routes = %O\n", ME, _routes))
} }
// code duplicaton is faster than others // code duplicaton is faster than others

View File

@ -48,10 +48,11 @@
#define PPL_NOTIFY_DEFAULT PPL_NOTIFY_IMMEDIATE #define PPL_NOTIFY_DEFAULT PPL_NOTIFY_IMMEDIATE
#define PPL_NOTIFY_DELAYED '6' #define PPL_NOTIFY_DELAYED '6'
#define PPL_NOTIFY_DELAYED_MORE '4' #define PPL_NOTIFY_DELAYED_MORE '4'
#define PPL_NOTIFY_FRIEND PPL_NOTIFY_DELAYED_MORE #define PPL_NOTIFY_INACTIVE '3' // delivery returned error
#define PPL_NOTIFY_FRIEND PPL_NOTIFY_INACTIVE
#define PPL_NOTIFY_MUTE '2' #define PPL_NOTIFY_MUTE '2'
#define PPL_NOTIFY_PENDING '1' // friendship request sent #define PPL_NOTIFY_PENDING '1' // _outgoing friendship request sent
#define PPL_NOTIFY_OFFERED '0' // friendship request received #define PPL_NOTIFY_OFFERED '0' // _incoming friendship req received
#define PPL_NOTIFY_NONE ' ' #define PPL_NOTIFY_NONE ' '
#define TIME_DELAY_NOTIFY (60 * 3) // 3 minutes #define TIME_DELAY_NOTIFY (60 * 3) // 3 minutes

View File

@ -846,7 +846,14 @@ logon() {
// but i guess it is indeed appropriate to make it clear how very much // but i guess it is indeed appropriate to make it clear how very much
// different we are from a regular irc server. // different we are from a regular irc server.
// //
reply(RPL_ISUPPORT, "PSYC=.99 ALIAS AVAILABILITY FRIEND HISTORY MOOD SHOUT SSET STATUS SUBSCRIBE THREAD TRUST PREFIX= CHANTYPES=# CHANMODES= NICKLEN="+ (string)MAX_UNIFORM_LEN +" CHANNELLEN="+ (string)MAX_UNIFORM_LEN +" CASEMAPPING=ascii TOPICLEN=4404 KICKLEN=4404 AWAYLEN=4404 MAXTARGETS=1 CHARSET="+ (v("charset")||SYSTEM_CHARSET) +" NETWORK=" SERVER_HOST " CTCP=PRESENCE,TS UNIFORMS=psyc,xmpp :are supported by this server"); // reduced TOPICLEN etc from 4404 to 444 because of the 512 limit
// which some legacy clients really require. in fact, since we are
// very lax on uniform length here, it could be possible to attack
// irc clients in a psyc room using suitably long uniforms etc.
// solutions are either a uniform length limit in chatrooms or
// forced autoalias for ircers.
//
reply(RPL_ISUPPORT, "PSYC=.99 ALIAS AVAILABILITY FRIEND HISTORY MOOD SHOUT SSET STATUS SUBSCRIBE THREAD TRUST PREFIX= CHANTYPES=# CHANMODES= NICKLEN="+ (string)MAX_UNIFORM_LEN +" CHANNELLEN="+ (string)MAX_UNIFORM_LEN +" CASEMAPPING=ascii TOPICLEN=444 KICKLEN=444 AWAYLEN=444 MAXTARGETS=1 CHARSET="+ (v("charset")||SYSTEM_CHARSET) +" NETWORK=" SERVER_HOST " CTCP=PRESENCE,TS UNIFORMS=psyc,xmpp :are supported by this server");
// //
// MAXCHANNELS vs CHANLIMIT - we currently only have a limit on subs // MAXCHANNELS vs CHANLIMIT - we currently only have a limit on subs
// STD? what the hell is STD? // STD? what the hell is STD?

View File

@ -300,7 +300,7 @@ render(string mc, string data, mapping vars, mixed source) {
// if this kind of problem recurrs, we should quote every // if this kind of problem recurrs, we should quote every
// single damn variable // single damn variable
if (vars["_description_presence"]) if (vars["_description_presence"])
vars["_XML_description_presence"] = vars["_INTERNAL_XML_description_presence"] =
xmlquote(vars["_description_presence"]); xmlquote(vars["_description_presence"]);
if (stringp(data)) data = xmlquote(data); if (stringp(data)) data = xmlquote(data);
else if (vars["_action"]) else if (vars["_action"])

View File

@ -340,7 +340,7 @@ jabberMsg(XMLNode node) {
if (node["/connection-timeout"]) { if (node["/connection-timeout"]) {
/* ignore it */ /* ignore it */
} else if (node["/system-shutdown"]) { } else if (node["/system-shutdown"]) {
P1(("%O: counterpart is doing a system shutdown", ME)) P1(("%O: counterpart is doing a system shutdown\n", ME))
/* ignore it */ /* ignore it */
} else { } else {
P0(("stream error in %O: %O\n", ME, node)) P0(("stream error in %O: %O\n", ME, node))

View File

@ -185,6 +185,9 @@ jabberMsg(XMLNode node, mixed origin, mixed *su, array(mixed) tu) {
} }
PT(("input¹ %O\n", body)) PT(("input¹ %O\n", body))
if (stringp(body) && strlen(body)) { if (stringp(body) && strlen(body)) {
#ifdef BETA
if (body[0] == '\n') body = body[1..];
#endif
if (body[0] == cmdchar) { if (body[0] == cmdchar) {
// '/ /usr' notation is a USER_PROGRAM feature // '/ /usr' notation is a USER_PROGRAM feature
// so we have to redo it here // so we have to redo it here
@ -550,7 +553,7 @@ jabberMsg(XMLNode node, mixed origin, mixed *su, array(mixed) tu) {
vars["_description_presence"] = vars["_description_presence"] =
(node["/status"] && node["/status"][Cdata]) ? (node["/status"] && node["/status"][Cdata]) ?
node["/status"][Cdata] : ""; // "Get psyced!"; node["/status"][Cdata] : ""; // "Get psyced!";
vars["_XML_description_presence"] = vars["_INTERNAL_XML_description_presence"] =
xmlquote(vars["_description_presence"]); xmlquote(vars["_description_presence"]);
vars["_INTERNAL_mood_jabber"] = "neutral"; vars["_INTERNAL_mood_jabber"] = "neutral";
sendmsg(o, "_notice_presence_absent", 0, sendmsg(o, "_notice_presence_absent", 0,
@ -695,7 +698,7 @@ jabberMsg(XMLNode node, mixed origin, mixed *su, array(mixed) tu) {
vars["_description_presence"] = vars["_description_presence"] =
(node["/status"] && node["/status"][Cdata]) ? (node["/status"] && node["/status"][Cdata]) ?
node["/status"][Cdata] : ""; // "Get psyced!"; node["/status"][Cdata] : ""; // "Get psyced!";
vars["_XML_description_presence"] = vars["_INTERNAL_XML_description_presence"] =
xmlquote(vars["_description_presence"]); xmlquote(vars["_description_presence"]);
vars["_degree_availability"] = jabber2avail[node["/show"] vars["_degree_availability"] = jabber2avail[node["/show"]
&& node["/show"][Cdata]]; && node["/show"][Cdata]];

View File

@ -9,7 +9,8 @@ int msg(string source, string mc, string data,
mapping vars, int showingLog, string target) { mapping vars, int showingLog, string target) {
mixed t; mixed t;
switch (mc){ switch (mc) {
case "_status_description_time":
case "_status_person_away": case "_status_person_away":
case "_status_person_present": case "_status_person_present":
case "_status_person_present_implied": case "_status_person_present_implied":

View File

@ -129,6 +129,7 @@ msg(source, mc, data, mapping vars, showingLog) {
mc = "_notice_place_leave"; mc = "_notice_place_leave";
} }
switch (mc) { switch (mc) {
case "_status_description_time":
case "_status_person_present": case "_status_person_present":
case "_status_person_present_implied": case "_status_person_present_implied":
case "_status_person_absent": case "_status_person_absent":
@ -250,7 +251,7 @@ showFriends() {
"_INTERNAL_target_jabber" : myjid, "_INTERNAL_target_jabber" : myjid,
"_INTERNAL_source_jabber" : mkjid(person), "_INTERNAL_source_jabber" : mkjid(person),
"_description_presence" : "", // TODO: get these from state "_description_presence" : "", // TODO: get these from state
"_XML_description_presence" : "", "_INTERNAL_XML_description_presence" : "",
"_INTERNAL_mood_jabber" : "neutral" "_INTERNAL_mood_jabber" : "neutral"
])); ]));
} }
@ -572,15 +573,16 @@ iq(XMLNode node) {
P3(("+++ %O IQ node %O\n", ME, node)) P3(("+++ %O IQ node %O\n", ME, node))
iqchild = getiqchild(node); iqchild = getiqchild(node);
unless(iqchild) switch(node["@type"]) { unless (iqchild && mappingp(iqchild)) switch(node["@type"]) {
case "get": case "get":
case "set": case "set":
case "result": case "result":
case "error": case "error":
break; P1(("%O got empty iq %O\n", ME, node))
return;
default: default:
P1(("%O got invalid iq %O\n", ME, node)) P1(("%O got invalid iq %O\n", ME, node))
return; return;
} }
helper = iqchild; helper = iqchild;

View File

@ -794,7 +794,12 @@ varargs mixed sendmsg(mixed target, string mc, mixed data, vamapping vars,
showingLog, source, u); showingLog, source, u);
#endif #endif
case 0: case 0:
#ifdef DEVELOPMENT #if 0 //def DEVELOPMENT
// we get here when doing remote messaging
// in xmpp.. and in fact, in net/jabber we
// don't *know* which scheme needs to be
// used.
//
raise_error("scheme 0 is a bug\n"); raise_error("scheme 0 is a bug\n");
// //
// TODO: we had this error, and maybe it's // TODO: we had this error, and maybe it's

View File

@ -71,7 +71,7 @@
<tr><td>_flag_uniform_verbatim</td><td>verbatimuniform</td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td>_flag_uniform_verbatim</td><td>verbatimuniform</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>_flag_visibility</td><td>visibility</td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td>_flag_visibility</td><td>visibility</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>_gender</td><td>sex</td><td>gender</td><td></td><td></td><td></td><td>gender</td></tr> <tr><td>_gender</td><td>sex</td><td>gender</td><td></td><td></td><td></td><td>gender</td></tr>
<tr><td>_identification</td><td>id</td><td>psyc_id</td><td></td><td>PSYCID</td><td></td><td>psycID</td></tr> <tr><td>_identification</td><td>id</td><td>psyc_id</td><td></td><td></td><td></td><td>psycID</td></tr>
<tr><td>_identification_other</td><td>otherid</td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td>_identification_other</td><td>otherid</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>_identification_scheme_AIM</td><td>aimid</td><td>aim_id</td><td></td><td></td><td></td><td>aimChatID</td></tr> <tr><td>_identification_scheme_AIM</td><td>aimid</td><td>aim_id</td><td></td><td></td><td></td><td>aimChatID</td></tr>
<tr><td>_identification_scheme_ICQ</td><td>icqid</td><td>icq_id</td><td></td><td></td><td></td><td>icqChatID</td></tr> <tr><td>_identification_scheme_ICQ</td><td>icqid</td><td>icq_id</td><td></td><td></td><td></td><td>icqChatID</td></tr>

View File

@ -94,7 +94,6 @@ volatile mapping psyc2jCard = ([
"_affiliation" : "<ORG><ORGNAME>%s</ORGNAME></ORG>", "_affiliation" : "<ORG><ORGNAME>%s</ORGNAME></ORG>",
"_date_birth" : "<BDAY>%s</BDAY>", "_date_birth" : "<BDAY>%s</BDAY>",
"_description_public" : "<DESC>%s</DESC>", "_description_public" : "<DESC>%s</DESC>",
"_identification" : "<PSYCID>%s</PSYCID>",
"_identification_scheme_XMPP" : "<JABBERID>%s</JABBERID>", "_identification_scheme_XMPP" : "<JABBERID>%s</JABBERID>",
"_identification_scheme_mailto" : "<EMAIL><USERID>%s</USERID></EMAIL>", "_identification_scheme_mailto" : "<EMAIL><USERID>%s</USERID></EMAIL>",
"_name_family" : "<N><FAMILY>%s</FAMILY></N>", "_name_family" : "<N><FAMILY>%s</FAMILY></N>",
@ -133,7 +132,6 @@ volatile mapping jCard2psyc = ([
"TEL/NUMBER" : "_contact_telephone", "TEL/NUMBER" : "_contact_telephone",
"BDAY" : "_date_birth", "BDAY" : "_date_birth",
"DESC" : "_description_public", "DESC" : "_description_public",
"PSYCID" : "_identification",
"JABBERID" : "_identification_scheme_XMPP", "JABBERID" : "_identification_scheme_XMPP",
"EMAIL/USERID" : "_identification_scheme_mailto", "EMAIL/USERID" : "_identification_scheme_mailto",
"N/FAMILY" : "_name_family", "N/FAMILY" : "_name_family",

View File

@ -377,7 +377,8 @@ FOAF icqChatID
PSYC _identification PSYC _identification
jProf psyc_id jProf psyc_id
jCard PSYCID # I'm afraid adding a PSYCID field will not be well-recepted by some apps
#jCard PSYCID
FOAF psycID FOAF psycID
PSYC _identification_other PSYC _identification_other

View File

@ -24,11 +24,11 @@ volatile mapping share = ([
#ifdef JABBER_PATH #ifdef JABBER_PATH
# ifndef _flag_disable_module_presence # ifndef _flag_disable_module_presence
"jabber2avail": ([ "jabber2avail": ([
0 : AVAILABILITY_HERE,
"chat" : AVAILABILITY_TALKATIVE, "chat" : AVAILABILITY_TALKATIVE,
"dnd" : AVAILABILITY_BUSY, 0 : AVAILABILITY_HERE,
"away" : AVAILABILITY_DO_NOT_DISTURB, "dnd" : AVAILABILITY_BUSY, // dnd?
"xa" : AVAILABILITY_AWAY "away" : AVAILABILITY_DO_NOT_DISTURB, // nearby?
"xa" : AVAILABILITY_AWAY // "not available"
]), ]),
// map to http://www.jabber.org/jeps/jep-0107.html although that // map to http://www.jabber.org/jeps/jep-0107.html although that
// is more like good ole mud feelings // is more like good ole mud feelings

View File

@ -1011,34 +1011,10 @@ case "_set_password":
// TODO? add support for integer _service means multiple // TODO? add support for integer _service means multiple
// catch-all clients possible. do we want this? // catch-all clients possible. do we want this?
if (vars["_service"]) { if (vars["_service"]) {
// oh. we let it suggest a *different* location?
// interesting. why don't we also do this for clients?
// and who is using this code anyway?
linkDel(vars["_service"]); linkDel(vars["_service"]);
linkSet(vars["_service"], vars["_location"], source); linkSet(vars["_service"], vars["_location"], source);
return 0; return 0;
} }
#if 0
if (vars["_password"]) {
#ifndef VOLATILE
// obviously similar code in usercmd:set()
if (!v("password") &&
(t = legal_password(vars["_password"],
MYNICK))) {
ME->pr(t[0], t[1]); // TODO
return;
}
// why do we check password here again
// if we are just after a checkPassword?
// what are we doing here?
#endif
} else if (ONLINE &&
v("locations")[0] != source) {
sendmsg(source,
"_error_status_person_connected");
return 0;
}
#else
// this code should also run for _service, but it // this code should also run for _service, but it
// needs a reorg // needs a reorg
t = v("locations")[0]; t = v("locations")[0];
@ -1058,7 +1034,6 @@ case "_set_password":
// now we leave the old client circuit // now we leave the old client circuit
// to die off.. let's hope that's safe // to die off.. let's hope that's safe
} }
#endif
#ifdef _flag_disable_module_trust #ifdef _flag_disable_module_trust
unless(stringp(source)) { unless(stringp(source)) {
m_delete(v("locations"), 0); m_delete(v("locations"), 0);
@ -1370,6 +1345,10 @@ case "_request_execute":
// this should be renamed into _context but // this should be renamed into _context but
// that cannot be done before _context is // that cannot be done before _context is
// renamed into _channel .. hehe // renamed into _channel .. hehe
//
// also this would be the perfect place to
// make a distinction between _focus and _group
// if we wanted to.. actually, no, we want _context
if (stringp(t = vars["_focus"] if (stringp(t = vars["_focus"]
|| vars["_group"])) { || vars["_group"])) {
// check if the uniform is one of // check if the uniform is one of

View File

@ -768,6 +768,7 @@ insert_member(source, mc, data, vars, ni, neu, again) {
# else # else
// only this code runs // only this code runs
vars["_duty"] = "member"; vars["_duty"] = "member";
// why not _role instead of _duty?
# endif # endif
#endif // OWNED #endif // OWNED
// we are also echoing his vars back to the requestor // we are also echoing his vars back to the requestor
@ -1150,6 +1151,8 @@ msg(source, mc, data, mapping vars) {
|| abbrev("_request_invitation", mc)) { || abbrev("_request_invitation", mc)) {
mc = "_notice_place"+mc[8..]; mc = "_notice_place"+mc[8..];
#ifdef PLACE_TOPIC #ifdef PLACE_TOPIC
// hm, this doesn't just go back to the new
// person.. it is resent to all..
if (v("topic") &&! abbrev("_request_leave", mc)) if (v("topic") &&! abbrev("_request_leave", mc))
vars["_topic"] = v("topic"); vars["_topic"] = v("topic");
#endif #endif

View File

@ -57,7 +57,7 @@ volatile string lastvar, mod, origin_unl;
volatile array(mixed) list; volatile array(mixed) list;
volatile mapping hash; volatile mapping hash;
volatile int l = 0; volatile int l = 0;
volatile int pongtime, routing = 1; volatile int reject = 0, pongtime; //, routing;
#ifndef PSYC_TCP #ifndef PSYC_TCP
// resolved UNL of remote server (psyc://hostname or psyc://hostname:port) // resolved UNL of remote server (psyc://hostname or psyc://hostname:port)
@ -129,7 +129,7 @@ int restart() {
// delete other stuff too // delete other stuff too
buffer = ""; buffer = "";
mc = 0; mc = 0;
routing = 1; // unused as yet // routing = 1; // unused as yet
#ifdef SYSTEM_SECRET #ifdef SYSTEM_SECRET
checkpack = vcheck = 0; checkpack = vcheck = 0;
ctrust = trustworthy; ctrust = trustworthy;
@ -191,17 +191,22 @@ private int conclude() {
// to also store the list in pvars, but since i'm generally // to also store the list in pvars, but since i'm generally
// doubtful if this is the right way to go, i'll leave it to // doubtful if this is the right way to go, i'll leave it to
// a later day.. TODO // a later day.. TODO
// hooray, we get to check some variable families for sanity // hooray, we get to check some var type families for sanity
} else if (abbrev("_degree", lastvar)) { } else if (abbrev("_degree", lastvar)) {
// allow for unset degree '-' mixed t = cvars[lastvar];
if (!stringp(cvars[lastvar]) || (cvars[lastvar] != "-" && // allow for unset degree '-' ? not unless we know what for.
!sscanf(cvars[lastvar], "%1d", cvars[lastvar]))) { if ((intp(t) && t>=0) || sscanf(t, "%1d", cvars[lastvar])) {
P1(("%O failed to parse %O: %O\n", ME, // accept
lastvar, cvars[lastvar])) if (mod != ":") pvars[lastvar] = cvars[lastvar];
} else {
reject++;
P1(("%O failed to parse %O: %O\n", ME, lastvar, t))
croak("_error_type_degree",
"Your value for variable [_variable] does not qualify for a degree.",
([ "_variable": lastvar ]));
m_delete(cvars, lastvar); m_delete(cvars, lastvar);
if (mod != ":") m_delete(pvars, lastvar); //if (mod != ":") m_delete(pvars, lastvar);
} }
else if (mod != ":") pvars[lastvar] = cvars[lastvar];
} else if (abbrev("_list", lastvar)) { // _tab } else if (abbrev("_list", lastvar)) { // _tab
// we only get here if the _list has one or zero members // we only get here if the _list has one or zero members
#ifdef PARANOID #ifdef PARANOID
@ -293,7 +298,7 @@ vamixed parse(string a) {
// to put the mmp variable state away somewhere // to put the mmp variable state away somewhere
// and go fetch the psyc variable state for the current // and go fetch the psyc variable state for the current
// source/target pair from somewhere else. TODO // source/target pair from somewhere else. TODO
routing = 0; // unused as yet // routing = 0; // unused as yet
} else switch(a[0]) { } else switch(a[0]) {
case ':': case ':':
unless (SCANFIT) { unless (SCANFIT) {
@ -576,6 +581,12 @@ vamixed getdata(string a) {
// a runtime error (but it's still better to fix it!) // a runtime error (but it's still better to fix it!)
next_input_to(#'parse); next_input_to(#'parse);
# endif # endif
if (reject) {
// packet has been rejected by parser for semantic reasons
reject = 0;
restart();
return 1;
}
if (!t || trustworthy > 5) { if (!t || trustworthy > 5) {
deliver(0, 0, mc, buffer, cvars); deliver(0, 0, mc, buffer, cvars);
} else unless (u = parse_uniform(t)) { } else unless (u = parse_uniform(t)) {
@ -1110,6 +1121,7 @@ vamixed startParse(string a) {
restart(); restart();
if (isServer()) greet(); if (isServer()) greet();
} }
// new syntax is so broken, we should not pretend to support it yet FIXME
# if defined(SPYC_PATH) && defined(USE_SPYC) # if defined(SPYC_PATH) && defined(USE_SPYC)
else if (a == "|") { // new S_GLYPH_PACKET_DELIMITER else if (a == "|") { // new S_GLYPH_PACKET_DELIMITER
object o = clone_object(SPYC_PATH "server"); object o = clone_object(SPYC_PATH "server");
@ -1152,7 +1164,7 @@ vamixed startParse(string a) {
else { else {
PT(("PSYC startParse got %O from %O\n", a, query_ip_number())) PT(("PSYC startParse got %O from %O\n", a, query_ip_number()))
croak("_error_syntax_initialization", croak("_error_syntax_initialization",
"The protocol begins with a dot on a line by itself."); "The old protocol begins with a dot on a line by itself.");
// experiencing a loop here, because some implementations // experiencing a loop here, because some implementations
// try immediate reconnect. idea: in most places where we // try immediate reconnect. idea: in most places where we
// QUIT we should put the tcp link on hold instead, and // QUIT we should put the tcp link on hold instead, and

View File

@ -360,7 +360,7 @@ void step() {
step(); step();
} else { } else {
croak("_error_syntax_initialization", croak("_error_syntax_initialization",
"The protocol begins with a pipe and a line feed."); "The new protocol begins with a pipe and a line feed.");
} }
break; break;
default: // uhm... if we ever get here this is the programmers fault default: // uhm... if we ever get here this is the programmers fault

View File

@ -793,6 +793,7 @@ case "_status_description_place":
"_source_relay": source, "_source_relay": source,
"_uniform_style": vars["_uniform_style"] "_uniform_style": vars["_uniform_style"]
]) + vars); ]) + vars);
return 1;
case "_HTML": case "_HTML":
// client wants HTML // client wants HTML
if (v("locations")[0]) sendmsg(v("locations")[0], if (v("locations")[0]) sendmsg(v("locations")[0],
@ -802,6 +803,7 @@ case "_status_description_place":
"_source_relay": source, "_source_relay": source,
"_uniform_style": vars["_uniform_style"] "_uniform_style": vars["_uniform_style"]
])); ]));
return 1;
case "_surf": case "_surf":
// we're doing a /surf, so stop here // we're doing a /surf, so stop here
return 1; return 1;
@ -814,7 +816,7 @@ case "_status_description_place":
// hmmm.. well, that's how psyc to client happens here // hmmm.. well, that's how psyc to client happens here
mc = "_list"+ mc[7..]; mc = "_list"+ mc[7..];
w(mc+"_on", data, ([ // used by irc whois.. w(mc+"_on", data, ([ // used by irc whois..
"_source_relay": source, "_source_relay": source, "_tag_reply": t,
"_nick" : vars["_nick"] || vars["_nick_place"], "_nick" : vars["_nick"] || vars["_nick_place"],
"_name_public" : vars["_name_public"] || "", "_name_public" : vars["_name_public"] || "",
"_action_motto" : vars["_action_motto"] || "", "_action_motto" : vars["_action_motto"] || "",
@ -822,8 +824,8 @@ case "_status_description_place":
])); ]));
listDescription(vars, 1); listDescription(vars, 1);
w(mc+"_off", 0, ([ w(mc+"_off", 0, ([
"_source_relay": source, "_source_relay": source, "_tag_reply": t,
"_nick" : vars["_nick"] ])); "_nick" : vars["_nick"] ]));
return 1; return 1;
case "_status_place_members_none_automatic": case "_status_place_members_none_automatic":
if (beQuiet != -1) { if (beQuiet != -1) {

View File

@ -914,7 +914,7 @@ cmd(a, args, dest, command) {
if (member(places, (t = sizeof(args) < 2 ? place : args[1]))) { if (member(places, (t = sizeof(args) < 2 ? place : args[1]))) {
m_delete(places, t); m_delete(places, t);
} }
// fall thru // fall thru
case "unenter": // and the protocol should follow.. unenter! case "unenter": // and the protocol should follow.. unenter!
case "leave": case "leave":
case "part": case "part":
@ -1001,7 +1001,7 @@ cmd(a, args, dest, command) {
break; break;
case "notice": case "notice":
t2 = "_message_private_annotate"; t2 = "_message_private_annotate";
// fall thru // fall thru
case "msg": case "msg":
case "tell": case "tell":
case "m": case "m":
@ -1020,7 +1020,7 @@ cmd(a, args, dest, command) {
"Usage: /more. See also /tell and /talk."); "Usage: /more. See also /tell and /talk.");
break; break;
} }
// fall thru // fall thru
case "q": case "q":
case "query": case "query":
case "talk": case "talk":
@ -1046,18 +1046,6 @@ cmd(a, args, dest, command) {
return 1; return 1;
} }
break; break;
// experimental new way to log out without logging out.
// may very well not work as planned
case "det":
case "detach":
//availability = AVAILABILITY_OFFLINE;
remove_interactive(ME);
//break;
// used to fall thru to declare myself offline as well..
// now you have to declare yourself offline manually
// no you don't. if availability isn't offline the
// disconnect() handler will clean you out!
// fall thru
#endif #endif
#ifndef _flag_disable_module_friendship #ifndef _flag_disable_module_friendship
case "shout": case "shout":
@ -1068,8 +1056,21 @@ cmd(a, args, dest, command) {
"Usage: /shout <message-to-your-friends>"); "Usage: /shout <message-to-your-friends>");
break; break;
# ifndef _flag_disable_module_presence # ifndef _flag_disable_module_presence
case "presence": // experimental new way to log out without logging out.
showMyPresence(1); // may very well not work as planned
// detach for psyc clients: _do_presence offline + _unlink
case "det":
case "detach":
//availability = AVAILABILITY_OFFLINE;
remove_interactive(ME);
//break;
// used to fall thru to declare myself offline as well..
// now you have to declare yourself offline manually
// no you don't. if availability isn't offline the
// disconnected() handler will clean you out!
// ok let's do it manually.. see if we get in trouble later.
availability = AVAILABILITY_OFFLINE;
// yes v("availability") is retained.. maybe useful later
return 1; return 1;
case "offline": case "offline":
announce(AVAILABILITY_OFFLINE, 1, 1, ARGS(1)); announce(AVAILABILITY_OFFLINE, 1, 1, ARGS(1));
@ -1157,6 +1158,9 @@ cmd(a, args, dest, command) {
// this command is normally accessed as /mynick // this command is normally accessed as /mynick
// as it behaves similarely to /me // as it behaves similarely to /me
return motto(ARGS(1)); return motto(ARGS(1));
case "presence":
showMyPresence(1);
return 1;
# endif /* _flag_disable_module_presence */ # endif /* _flag_disable_module_presence */
case "cancel": case "cancel":
case "can": case "can":
@ -1590,7 +1594,7 @@ case "_message":
tell(vars["_person"], data, 0, vars["_action"], 0); tell(vars["_person"], data, 0, vars["_action"], 0);
return 1; return 1;
} }
// else.. fall thru // else.. fall thru
case "_message_public": case "_message_public":
case "_public": case "_public":
case "_speak": case "_speak":
@ -1630,6 +1634,7 @@ case "_leave":
, 1, vars["_flag"]); , 1, vars["_flag"]);
return 1; return 1;
case "_invite": case "_invite":
// _focus has been taken care of beforehand in person.c
if (t = vars["_person"]) { if (t = vars["_person"]) {
unless (place) return w("_error_status_place_none", unless (place) return w("_error_status_place_none",
"You aren't in a room"); "You aren't in a room");
@ -1637,6 +1642,21 @@ case "_invite":
return invite(t, vars); return invite(t, vars);
} }
return 0; return 0;
case "_subscribe_permanent":
case "_subscribe_temporary":
case "_subscribe":
if (t = vars["_group"] || vars["_focus"]) {
subscribe(family == "_subscribe_permanent" ?
SUBSCRIBE_PERMANENT : SUBSCRIBE_TEMPORARY, t);
return 1;
}
return 0;
case "_unsubscribe":
if (t = vars["_group"] || vars["_focus"]) {
subscribe(SUBSCRIBE_NOT, t);
return 1;
}
return 0;
case "_remove_register": case "_remove_register":
case "_register_remove": // to go case "_register_remove": // to go
// unregister a user? only if you are trustworthy! // unregister a user? only if you are trustworthy!
@ -1746,17 +1766,25 @@ case "_friend": // tmp
return 1; return 1;
#ifndef _flag_disable_module_presence #ifndef _flag_disable_module_presence
case "_presence": case "_presence":
P3(("%O with %O\n", mc, vars)) // parser takes care of checking _degree type
if ((t = vars["_degree_mood"]) && intp(t)) if (t = vars["_degree_mood"]) {
vSet("mood", mood = t); // if (! sscanf(t, "%1d", t)) {
if ((t = vars["_degree_availability"]) && intp(t)) { // w("_warning_usage_mood");
announce(t, !vars["_degree_automation"], // return 1;
// }
vSet("mood", mood = t);
}
if (t = vars["_degree_availability"]) {
// if (! sscanf(t, "%1d", t))
// w("_warning_usage_availability");
// else
announce(t, !vars["_degree_automation"],
1, vars["_description_presence"]); 1, vars["_description_presence"]);
return 1; return 1;
} }
P1(("got invalid %O: %O, %O\n", mc, vars, data)) P1(("got invalid %O: %O, %O in %O\n", mc, vars, data, ME))
// complain about missing args? w("_failure_necessary_variable");
return 0; return 1;
#endif // _flag_disable_module_presence #endif // _flag_disable_module_presence
case "_list_peers_JSON": case "_list_peers_JSON":
listAcq(PPL_JSON); listAcq(PPL_JSON);
@ -1773,7 +1801,7 @@ case "_unlink":
case "_exit": case "_exit":
// so this is some kind of ugly hack not to be used.. huh? // so this is some kind of ugly hack not to be used.. huh?
announce(AVAILABILITY_OFFLINE); announce(AVAILABILITY_OFFLINE);
// fall thru // fall thru
case "_quit": case "_quit":
// bye(vars["_reason"]); // bye(vars["_reason"]);
quit(); quit();