Index: msg.fs ================================================================== --- msg.fs +++ msg.fs @@ -456,12 +456,14 @@ :noname ( xchar -- ) utf8emit ; msg-class is msg:like :noname ( addr u -- ) 0 .v-dec$ dup IF msg-key! msg-group-o .msg:+lock - ELSE 2drop THEN - ." chat is locked" ; msg-class is msg:lock + ." chat is locked" + ELSE 2drop + ." locked out of chat" + THEN ; msg-class is msg:lock :noname ( -- ) msg-group-o .msg:-lock ." chat is free for all" ; msg-class is msg:unlock ' drop msg-class is msg:away :noname ( addr u type -- ) space case @@ -722,16 +724,17 @@ sct2 sct0 sct1 sc25519* get0 sct2 ge25519*base get0 ge25519-pack sct2 sc25519>32b ; -: ]encpksig ( -- ) +: ]encpksign ( -- ) +zero16 nest$ msg-keys[] dup $[]# 1- swap $[]@ encrypt$ sigdate +date sktmp pktmp sk@ drop >modkey [: pktmp keysize forth:type sigdate datesize# forth:type - sig-params 2drop sktmp pktmp ed-sign forth:type + sig-params 2drop sktmp pktmp ed-sign + 2dup + 1- $80 swap orc! forth:type keysize forth:emit ;] ']sign ; \ nest-sig for msg/msging classes :noname ( addr u -- ) @@ -933,16 +936,19 @@ \ message composer : group, ( addr u -- ) $, msg-group ; +: ( -- ) \G end a message block by adding a signature - ]pksign ; + msg-group-o .msg:?lock IF ]encpksign ELSE ]pksign THEN ; : msg-otr> ( -- ) \G end a message block by adding a short-time signature - now>otr ]pksign ; + now>otr msg> ; : msg-log, ( -- addr u ) last-signed 2@ >msg-log ; previous @@ -973,19 +979,19 @@ : sync-ahead?, ( -- ) last-signdate@ 64#1 64+ lit, 64#-1 lit, ask-last# ulit, msg-last? ; : join, ( -- ) [: msg-join sync-ahead?, - sign[ msg-start "joined" $, msg-action msg-otr> ;] [msg,] ; + ;] [msg,] ; : silent-join, ( -- ) msg-group$ $@ dup IF message $, msg-join end-with ELSE 2drop THEN ; : leave, ( -- ) [: msg-leave - sign[ msg-start "left" $, msg-action msg-otr> ;] [msg,] ; + ;] [msg,] ; : silent-leave, ( -- ) ['] msg-leave [msg,] ; : left, ( addr u -- ) @@ -1169,11 +1175,11 @@ : chain, ( msgaddr u -- ) [: 2dup startdate@ 64#0 { 64^ sd } sd le-64! sd 1 64s forth:type c:0key sigonly@ >hash hashtmp hash#128 forth:type ;] $tmp $, msg-chain ; : (send-avalanche) ( xt -- addr u flag ) - [: 0 >o [: sign[ msg-start execute msg> ;] gen-cmd$ o> + [: 0 >o [: ;] gen-cmd$ o> +last-signed msg-log, ;] [group] ; previous : send-avalanche ( xt -- ) msg-group-o .msg:?otr IF now>otr ELSE now>never THEN (send-avalanche) @@ -1491,14 +1497,16 @@ 2drop 2r> 2drop ;] (send-avalanche) drop .chat save-msgs& ;] !wrapper ; is /otrify :noname ( addr u -- ) + msg-group-o .msg:-lock word-args ['] args>keylist execute-parsing [: key-list v-enc$ $, net2o-base:msg-lock ;] send-avalanche vkey keysize msg-keys[] $+[]! - msg-group-o .msg:+lock ; is /lock + msg-group-o .msg:+lock +; is /lock :noname ( addr u -- ) 2drop msg-group-o .msg:-lock ; is /unlock :noname ( addr u -- ) 2drop -1 [IFDEF] android android:level# [ELSE] level# [THEN] +! ; is /bye @@ -1578,12 +1586,12 @@ \ ." text: '" forth:type ''' forth:emit forth:cr $, msg-text ELSE 2drop THEN r> to forth-recognizer r> to last# ; -: avalanche-text ( addr u -- ) >utf8$ - [: parse-text ;] send-avalanche ; +: avalanche-text ( addr u -- ) + >utf8$ ['] parse-text send-avalanche ; previous : load-msgn ( addr u n -- ) >r load-msg r> display-lastn ; @@ -1699,18 +1707,18 @@ cell +LOOP ; : send-reconnects ( o:group -- ) net2o-code expect-msg [: msg-group-o .msg:name$ ?destpk $, msg-leave - sign[ msg-start "left" $, msg-action msg-otr> + reconnects, ;] [msg,] end-code| ; : send-reconnect1 ( o:group -- ) net2o-code expect-msg [: msg:name$ ?destpk $, msg-leave - sign[ msg-start "left" $, msg-action msg-otr> + .reconnect, ;] [msg,] end-code| ; previous : send-reconnect-xt ( o:group xt -- ) { xt: xt }