1
0
Fork 0
mirror of git://git.psyced.org/git/psyced synced 2024-08-15 03:25:10 +00:00

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
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
This file contains TODO and CHANGES (at EOF) rolled into one.
Essentially: whenever you fix something, move that line to the end of file.
- marks bugs & fixes, + marks new features, ? marks issues, * marks big stuff
| This file contains TODO and CHANGES (at EOF) rolled into one.
| Essentially: whenever you fix something, move that line to the end of file.
| - marks bugs & fixes, + marks new features, ? marks issues, * marks big stuff
________________________________________________________________________
== NEXT RELEASE ========================================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- interserver xmpp /me expects no leading newline, but pidgin recently
started sending one
- autorefetch twitter isnt working
http/fetch is too complicated. throw out the queue and callback logic. kiss!
@ -21,7 +24,7 @@ ________________________________________________________________________
________________________________________________________________________
== 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
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?
- the ~0 bug
________________________________________________________________________
:_group psyc://psyced.org/@welcome
:_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 ==========================================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
SPYC (implementation of http://about.psyc.eu/Specification)
* to activate spyc support, defined USE_SPYC
it will attempt to use new syntax on outgoing links by default
* to debug verification, define USE_VERIFICATION
* to spend an extra round trip time negotiating, define USE_FEATURES
> SPYC
- 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 thus doesn't work for ircers..
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!?)
- /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
arrays rather than as strings. this opens up the possibility to have
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...
so all [_nick] should simply be replaced by [_source] etc.
! implementing the latter approach with the uni2nick callback strategy!
AUTOALIASES & ALIASES FOR PLACES
> AUTOALIASES & ALIASES FOR PLACES
+ /set aliases auto
use temporary aliases for people in places,
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!?
- remote /topic shows wrong nick
PRESENCE STATUS
> PRESENCE STATUS
+ all _status_person need to be upgraded to _status_presence with
availability etc.
- _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>
* see also various PRESENCE boxes
DECENTRALIZED STATE / PERSISTENT CONTEXT SLAVES
> DECENTRALIZED STATE / PERSISTENT CONTEXT SLAVES
- do not send revision with every cast
+ we could use better integration of availability
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
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
generischer presence.. siehe auch http://about.psyc.eu/presence und..
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)
... or just rewrite it all into context subscription!!
ARCHETYPE PLACES
> ARCHETYPE PLACES
? archetype.gen & other places: current privilege model sux.
qAide(), qOwner(), boss(source), v("topic-user")
.. how does this fit with confctrl, _duty and qAllowExternal?
.. and in some cases you just want to check for isMember
>>>
- REGISTERED_USERS_ONLY does not behave properly on IRC port
(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
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.
- 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 =====================================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
@ -369,12 +380,12 @@ ________________________________________________________________________
? generate psyced without cvs support if no cvs installed?
... bzw. git
WINDOWS DISTRIBUTION
> WINDOWS DISTRIBUTION
? how can we compile SRV into erq.exe? do we care?
? which open source installer for win to use?
? what to do about psyconf.. include perl or re-implement psyconf for win?
TWITTER
> TWITTER
+ resolve redirect-urls before forwarding to subscriptions, that means,
calling http/fetch on http://tr.im/whatever urls until it no longer
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)
CIRCUITRY
> CIRCUITRY
- _request_circuit_shutdown isnt issued or doesnt arrive
or is the disconnected-detection buggy?
+ net/circuit:pushback TODO:
@ -433,24 +444,24 @@ CIRCUITRY
? what to do when hosts talk faster then we resolve them?
see around _error_invalid_host_slow
TRUST1
> TRUST1
- _request_circuit_trust needs to check some challenge, or it can be
tricked by replay. so for now only use it over safe networks!!
? generic SASL for xmpp, psyc and irc?
TRUST2
> TRUST2
? TRUSTED_HOSTS are permitted to relay, this allows all users from that host to
relay.. not so cool.
+ the trust implementation needs to learn to distinguish host trust and
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.
+ implement *.service.* and *.scheme.* etc according to
http://about.psyc.eu/Directory_Service - so that mailto: works for any server
+ move the .psyc.eu suffix into a #define
+ implement forward-to-mailto-when-offline as a generic forwarding feature
FOLLOW INVITES
> FOLLOW INVITES
+ /set follow all|friends|none
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
@ -461,6 +472,7 @@ FOLLOW INVITES
create a subchannel of your self context, containing only the friends
you want to have a conversation with, and poof you can start talking!
>>>
- ok, x@y notation sollte mind. dots im host überprüfen,
wenn nicht sogar leading #
In BuHa fragt el_presidente: inseln?
@ -470,13 +482,15 @@ FOLLOW INVITES
C:xmpp:euirc · euirc does not resolve
In BuHa fragt el_presidente: was soll da passieren?
- improve handling of "Minusport" outgoing stuff:
reject and handle _failures
? suspend flag on error? like this: when you receive errors, that a user or a
> ERROR HANDLING
- reject and handle _failures
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
candidate as 'suspended' or 'temporarily unreachable' - and automatically
change this status with the first sign of life from that entity or server.
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
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
wie denn? was würde reply() anders machen?
PRESENCE
> PRESENCE
- eigene mood & availability erscheinen nicht im showStatus
(description schon, aber das war's noch nicht)
- 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
- persistent_presence does not store description and mood
gmail hat irgendwelche anderen probleme...
- heute nachmittag stand auf dem schirm:
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!
>>>
- unnecessary refriendship requests
wenn ich mit Alias: xmpp:symlynx@example.ccc.de = JYNX /friend mache kommt:
symlynx schließt mit Dir Freundschaft.
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
PROGRAMMABLE USER IDENTIFICATIONS & MULTIPLE CLIENT INTERFACES
> PROGRAMMABLE USER IDENTIFICATIONS & MULTIPLE CLIENT INTERFACES
- experimental rename fails sometimes:
Attempt to rename to existing object '~nautilutz'
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... ;)
? 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
replied to, but a _request_trust_manual is sent to the monitor.
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,
like an automatic blacklisting. _info_adopt_trust or something.
CHARSET
> CHARSET
+ ensure UTF-8 at parsing time on all inputs so we can
a) remove the action limitation:
- 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
== PSYC 1.0alpha =======================================================
THE BIG METHOD RENAME
> THE BIG METHOD RENAME
- shouldn't all _tag_reply be renamed into the more generic _tag_relay ?
i mean.. pushback setting _tag_reply is semantically wrong whereas
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.
+ 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.
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
@ -677,6 +657,7 @@ clients). example:
in fact.. we can even simplify all abbrev() calls into mere == comparisons
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
to with an error. currently however, handling falls thru to rootMsg() like
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
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
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
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
notwendig, da (a) clients den zutritt zu einem raum von ihrer UNI
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
man könnte nochmal seinen grips drauf ansetzen.
HISTORY
> HISTORY
+ add timestamp search to lastlog.c, add timestamp-based /history and /log
commands, maybe remove v("new") code. then again, it's quite efficient.
see person.h for details.
@ -748,7 +729,7 @@ ________________________________________________________________________
? _nick_local and coolname are shown, but cannot be identified
localMUC:
> localMUC:
- MUC member list may be incorrect after psyced server restart..
we should probably castmsg all local leaves at shutdown
- when entering places from XMPP-S2S own id appears both
@ -765,7 +746,7 @@ localMUC:
still causing problems
? M1: apparently something in psyced's MUC implementation is making mcabber crash :(
remoteMUC:
> remoteMUC:
- whispering in remote MUCs:
xmpp:psyc@conference.jabber.org sagt Dir: test
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>
... then again, telnet is the only protocol that could use that.. scrapped
>>>
- "asks" kommt blöd.. entweder visiblespeakaction immer, oder gar
nicht (implement visiblespeakaction in net/jabber)
- ausserdem wird kein asks erzeugt wenn jabberisten fragen stellen
@ -791,6 +773,12 @@ remoteMUC:
________________________________________________________________________
== 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: 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.
@ -798,7 +786,7 @@ ________________________________________________________________________
MUC meldungen. ob der fehler bei psi oder uns liegt, k.A.
... 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
AFAIK the xmpp: uri does not forbid * from the URI RFC thus
meebo should be incorrect here. we'll have to talk to them..
@ -812,6 +800,7 @@ ASTERISK IN XMPP: UNIFORMS
</message>
- is psi having a problem with this, too?
>>>
- accurate availability values from friends aren't stored and delivered
- re-subscribe isn't properly handled (so we do friend(0) earlier instead)
@ -1234,7 +1223,7 @@ ________________________________________________________________________
fippo hotzenplotzt: möglich
? 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
- 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.
@ -1250,6 +1239,7 @@ PROFILES
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.
>>>
- Invalid password error in tn/server appears indented w/o LF
+ provide textdb editing mechanisms:
@ -1293,7 +1283,7 @@ PROFILES
? _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__
undefiniert sein wird wenn erq beim hochfahren nicht gefunden wurde,
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
if localhost abfragen im bisherigen code unnötig machen. optimization TODO
>>>
- don't accept connections during shutdown sequence
should work by returning 0 from master:connect()
- 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-
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
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*
@ -1441,18 +1424,18 @@ könnte es ein fall sein für diese kleine vermutung:
trying to intantiate ridiculous objects? (no extensions outside static?)
see also http://about.psyc.eu/Web_Attack
________________________________________________________________________
* GOTCHAs
> GOTCHAs
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
! 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!
________________________________________________________________________
* 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/Follower
________________________________________________________________________
* TOYS IN THE ATTIC
> TOYS IN THE ATTIC
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- In welcome spricht Igramul: hmm... the "+list" command made xchat crash
<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,
gibt es return 0 statt return rvars durch. ist das alles, oder fehlt was?
________________________________________________________________________
* GATEBOT / IRCGATE / etc
> GATEBOT / IRCGATE / etc
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- /m freenode:symlynx hey
Sorry, _message_private is not supported by the IRC gateway.
@ -1588,7 +1571,7 @@ ________________________________________________________________________
mobile phone, especially if you have permanent context subscriptions
flowing into your log nonstop.
RELAYING
> RELAYING
+ net/spyc needs relaying (without parsing even), see TODO in parse_content()
? relaying doesn't work for psyc clients (xmpp: in particular)
works for localhost clients
@ -1608,26 +1591,14 @@ RELAYING
but some of the old stuff does.. how do we find a proper solution?
== 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
dann mit /** library: this stuff.. */ woanders einordnen.. jetzt brauchen wir
ne dokuware die sowas kann, und jemand der die dokummentare reinschreibt..
-> doxygen-1.3.9.1.src.tar.gz (2649K)... definitiv kein aufwand, sowas...
== RELEASE ANNOUNCEMENT ================================================
REDIRECT: http://about.psyc.eu/Release_Announcement .. außerdem:
? 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!!!!
* REDIRECT: http://about.psyc.eu/Release_Announcement
== COMPETITION =========================================================
+ 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
________________________________________________________________________
UNDER CONSTRUCTION: (offene baustellen im LPC code)
== UNDER CONSTRUCTION: (offene baustellen im LPC code) =================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- file transfers between local jabber clients
- 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
blacklist_report() ? :)
SHOW STATUS?
> SHOW STATUS?
? is the following stuff superceded by DECENTRALIZED STATE?
? _status_flags aus der auswahl _members _topic _configuration und
_limit_history bei _request_enter mitgeben, damit showStatus dann die
@ -1777,6 +1748,7 @@ SHOW STATUS?
same way
+ "/set verbose on" gibt (unter anderem) mehr statuskram beim einloggen aus..
>>>
? filter + /msg: auto tmp-friend status ?
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
SPAM / FLOOD CONTROL
> SPAM / FLOOD CONTROL
+ connect flood protection (against icaruz from XX.XX.XX.XX)
1. introduce #define MAX_CONNECTIONS_FROM_ONE_IP
2. warn admins via monitor when MAX_CONNECTIONS_FROM_ONE_IP * 70%
@ -1939,7 +1911,7 @@ ________________________________________________________________________
psyc textdb directory tree..
? 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"
? do we want var change notifications on psyc parse level so that
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
== 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 p2puser
+_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
werden ohne router dazwischen..
-> wie unterscheide ich member und subroute?
falls du es überhaupt brauchst daran, dass subroute seine members definiert.
== P2P ROUTING =========================================================
* Kademlia
Möglicherweise interessant ist eine P2P-artige Form von Routing, basierend
auf Kademlia ( siehe http://de.wikipedia.org/wiki/Kademlia ) + Auth
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
-> oder gleich den eingebauten zeileneditor ed() von lpmud verwenden
(telnet only)
threads:
> threads:
+ jeder Message noch eine threadID geben (in-reply-to):
man numeriert die msgs durch und ein reply trägt noch den _tag von
seinem vorgänger.. oder so...?
@ -2012,7 +1985,7 @@ threads:
? 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
+ introduce global psyc time?
? 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
+ add date/weekday for /log messages older than 24h
>>>
? finish up /connect with password
? 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
________________________________________________________________________
DRIVER TODO:
> DRIVER TODO:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
* moved to psyclpc/TODO file
@ -2137,7 +2111,7 @@ DRIVER TODO:
- unless (checkVar(&key, &value)) return;
- psyc/library
________________________________________________________________________
PERLPSYC TODO:
> PERLPSYC TODO:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- FORK
- 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.
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://freshmeat.net/projects/yeemp/ GPG over SSL, UTF8 etc.
? http://freshmeat.net/projects/xchatosd/ X11 OSD hihi
@ -2163,14 +2137,14 @@ sonst noch evtl anguckenswert
- 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 not receive templates for standard messages?
+ standardized way to select language?
________________________________________________________________________
MISCELLANEOUS STUFF:
> MISCELLANEOUS STUFF:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
? irc-notify suckt, aber als reines client-interface kann man es doch
eigentlich erlauben? ison polling nervt, kann man hoffentlich vermeiden,
@ -2198,10 +2172,11 @@ Similar Projexx:
http://freshmeat.net/projects/ymsgr/
== HINTS: Multicast (see also COMPETITION) =============================
? reliable multicast library?
From: Gerd Flaig <gefla@pond.example.org>
> Was brauchen wir in der Praxis also? Eine reliable Multicast
> Implementation in PSYC einbinden (müsste ja heutzutage ne fertige
> Library sein zum Aufrufen), [..]
> Was brauchen wir in der Praxis also? Eine reliable Multicast
> Implementation in PSYC einbinden (müsste ja heutzutage ne fertige
> Library sein zum Aufrufen), [..]
nach so etwas suche ich schon eine ganze Weile, habe aber bisher nur
im OCaml-Umfeld eine Implementierung gefunden (genaue URL habe ich
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?
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 =============================================
> #define MUD
> #undef _flag_enable_routing_UDP will force psyc to use tcp only
> #define NO_EXTERNAL_LOGINS if you want
> #define CONFIG_PATH to where your /local/ is
> #define TEXT_PATH to where you want to put /default/*
* #define MUD
> #undef _flag_enable_routing_UDP will force psyc to use tcp only
> #define NO_EXTERNAL_LOGINS if you want
> #define CONFIG_PATH to where your /local/ is
> #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
same goes for DEFAULT_USER_OBJECT. if you need to fake the library
#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
http://cvsweb.caudiumforge.net/cgi-bin/cvsweb.cgi/sugor/?cvsroot=sugor
@ -3984,4 +3951,13 @@ irc/user
- handle root messages
jabber/*
- 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
P=psyced
V=20090303
V=20090617
# this part can be executed once the ebuild is in portage

View file

@ -9,7 +9,7 @@
# emerge. From nothing. fischerspooner rocks. -lynX
P=psyclpc
V=20080707
V=20090321
# 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
|Tut mir Leid, das geht erst nach Registrierung.
_failure_necessary_variable
|Unvollständige Anfrage.
_error_necessary_nick_place
|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>
_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
|<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
|<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
|<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
|<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
|<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
|<presence to='[_INTERNAL_target_jabber]' from='[_INTERNAL_source_jabber]'/>
_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
|<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]'/>
_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
|<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
|<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
|<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
|<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
|<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.
_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
|Could not establish a circuit to [_host] to deliver a [_method_relay] to [_source].

View file

@ -30,6 +30,10 @@
#include <status.h>
#include <uniform.h>
#ifdef BETA
# define ENFORCE_UNIFORM
#endif
#ifdef CONTEXT_STATE // {{{
# define HEADER_ONLY
# include "../state.c"
@ -98,7 +102,7 @@ castmsg(source, mc, data, vars) {
#endif // }}}
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
vars["_context"] = ME;
@ -114,11 +118,11 @@ castmsg(source, mc, data, vars) {
foreach (route, noa : _routes) {
#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,
data, vars))
#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))
#endif
// if (route == source) return; // skip sender
@ -191,6 +195,9 @@ protected load(file) {
remove_member(source, origin) {
mixed t;
#ifdef ENFORCE_UNIFORM
if (objectp(source)) source = psyc_name(source);
#endif
P2(("%O remove_member(%O, %O)\n", ME, source, origin))
if (origin && (
#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",
ME, source, _routes))
}
P3(("%O -> _routes = %O\n", ME, _routes))
}
insert_member(source, origin) {
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))
if (objectp(origin) && (t = origin->qOrigin())) {
#ifdef FORK
@ -279,6 +299,7 @@ insert_member(source, origin) {
// would be nice to do it here, but that's not correct
//revision += 1;
#endif
P3(("%O -> _routes = %O\n", ME, _routes))
}
// code duplicaton is faster than others

View file

@ -48,10 +48,11 @@
#define PPL_NOTIFY_DEFAULT PPL_NOTIFY_IMMEDIATE
#define PPL_NOTIFY_DELAYED '6'
#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_PENDING '1' // friendship request sent
#define PPL_NOTIFY_OFFERED '0' // friendship request received
#define PPL_NOTIFY_PENDING '1' // _outgoing friendship request sent
#define PPL_NOTIFY_OFFERED '0' // _incoming friendship req received
#define PPL_NOTIFY_NONE ' '
#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
// 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
// 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
// single damn variable
if (vars["_description_presence"])
vars["_XML_description_presence"] =
vars["_INTERNAL_XML_description_presence"] =
xmlquote(vars["_description_presence"]);
if (stringp(data)) data = xmlquote(data);
else if (vars["_action"])

View file

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

View file

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

View file

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

View file

@ -794,7 +794,12 @@ varargs mixed sendmsg(mixed target, string mc, mixed data, vamapping vars,
showingLog, source, u);
#endif
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");
//
// 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_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>_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_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>

View file

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

View file

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

View file

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

View file

@ -1011,34 +1011,10 @@ case "_set_password":
// TODO? add support for integer _service means multiple
// catch-all clients possible. do we want this?
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"]);
linkSet(vars["_service"], vars["_location"], source);
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
// needs a reorg
t = v("locations")[0];
@ -1058,7 +1034,6 @@ case "_set_password":
// now we leave the old client circuit
// to die off.. let's hope that's safe
}
#endif
#ifdef _flag_disable_module_trust
unless(stringp(source)) {
m_delete(v("locations"), 0);
@ -1370,6 +1345,10 @@ case "_request_execute":
// this should be renamed into _context but
// that cannot be done before _context is
// 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"]
|| vars["_group"])) {
// check if the uniform is one of

View file

@ -768,6 +768,7 @@ insert_member(source, mc, data, vars, ni, neu, again) {
# else
// only this code runs
vars["_duty"] = "member";
// why not _role instead of _duty?
# endif
#endif // OWNED
// we are also echoing his vars back to the requestor
@ -1150,6 +1151,8 @@ msg(source, mc, data, mapping vars) {
|| abbrev("_request_invitation", mc)) {
mc = "_notice_place"+mc[8..];
#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))
vars["_topic"] = v("topic");
#endif

View file

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

View file

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

View file

@ -914,7 +914,7 @@ cmd(a, args, dest, command) {
if (member(places, (t = sizeof(args) < 2 ? place : args[1]))) {
m_delete(places, t);
}
// fall thru
// fall thru
case "unenter": // and the protocol should follow.. unenter!
case "leave":
case "part":
@ -1001,7 +1001,7 @@ cmd(a, args, dest, command) {
break;
case "notice":
t2 = "_message_private_annotate";
// fall thru
// fall thru
case "msg":
case "tell":
case "m":
@ -1020,7 +1020,7 @@ cmd(a, args, dest, command) {
"Usage: /more. See also /tell and /talk.");
break;
}
// fall thru
// fall thru
case "q":
case "query":
case "talk":
@ -1046,18 +1046,6 @@ cmd(a, args, dest, command) {
return 1;
}
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
#ifndef _flag_disable_module_friendship
case "shout":
@ -1068,8 +1056,21 @@ cmd(a, args, dest, command) {
"Usage: /shout <message-to-your-friends>");
break;
# ifndef _flag_disable_module_presence
case "presence":
showMyPresence(1);
// experimental new way to log out without logging out.
// 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;
case "offline":
announce(AVAILABILITY_OFFLINE, 1, 1, ARGS(1));
@ -1157,6 +1158,9 @@ cmd(a, args, dest, command) {
// this command is normally accessed as /mynick
// as it behaves similarely to /me
return motto(ARGS(1));
case "presence":
showMyPresence(1);
return 1;
# endif /* _flag_disable_module_presence */
case "cancel":
case "can":
@ -1590,7 +1594,7 @@ case "_message":
tell(vars["_person"], data, 0, vars["_action"], 0);
return 1;
}
// else.. fall thru
// else.. fall thru
case "_message_public":
case "_public":
case "_speak":
@ -1630,6 +1634,7 @@ case "_leave":
, 1, vars["_flag"]);
return 1;
case "_invite":
// _focus has been taken care of beforehand in person.c
if (t = vars["_person"]) {
unless (place) return w("_error_status_place_none",
"You aren't in a room");
@ -1637,6 +1642,21 @@ case "_invite":
return invite(t, vars);
}
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 "_register_remove": // to go
// unregister a user? only if you are trustworthy!
@ -1746,17 +1766,25 @@ case "_friend": // tmp
return 1;
#ifndef _flag_disable_module_presence
case "_presence":
P3(("%O with %O\n", mc, vars))
if ((t = vars["_degree_mood"]) && intp(t))
vSet("mood", mood = t);
if ((t = vars["_degree_availability"]) && intp(t)) {
announce(t, !vars["_degree_automation"],
// parser takes care of checking _degree type
if (t = vars["_degree_mood"]) {
// if (! sscanf(t, "%1d", t)) {
// w("_warning_usage_mood");
// 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"]);
return 1;
}
P1(("got invalid %O: %O, %O\n", mc, vars, data))
// complain about missing args?
return 0;
P1(("got invalid %O: %O, %O in %O\n", mc, vars, data, ME))
w("_failure_necessary_variable");
return 1;
#endif // _flag_disable_module_presence
case "_list_peers_JSON":
listAcq(PPL_JSON);
@ -1773,7 +1801,7 @@ case "_unlink":
case "_exit":
// so this is some kind of ugly hack not to be used.. huh?
announce(AVAILABILITY_OFFLINE);
// fall thru
// fall thru
case "_quit":
// bye(vars["_reason"]);
quit();