Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Start implementing commands in GUI mode |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
581eb4c5440c3f23435dfc69c1d68fc3 |
| User & Date: | bernd 2019-07-04 21:50:35.168 |
Context
|
2019-07-05
| ||
| 14:51 | Add better chain support check-in: 985b47981c user: bernd tags: trunk | |
|
2019-07-04
| ||
| 21:50 | Start implementing commands in GUI mode check-in: 581eb4c544 user: bernd tags: trunk | |
|
2019-07-02
| ||
| 00:53 | Fix decompiling check-in: 044486945e user: bernd tags: trunk | |
Changes
Changes to dht.fs.
| ︙ | ︙ | |||
353 354 355 356 357 358 359 |
['] addme-end IS expect-reply? ;
previous
: +addme ['] addme is setip-xt next-request request-gen ! ;
: -setip ['] .iperr is setip-xt ;
: sub-me ( -- ) msg( ." sub-me" forth:cr )
| | | | 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 |
['] addme-end IS expect-reply? ;
previous
: +addme ['] addme is setip-xt next-request request-gen ! ;
: -setip ['] .iperr is setip-xt ;
: sub-me ( -- ) msg( ." sub-me" forth:cr )
dht-connection >o o to connection +resend
net2o-code expect-reply
pk@ $, dht-id
pub-addr$ [: sigsize# - 2dup + sigdate datesize# move
gen-host-del $, dht-host- ;] $[]map
end-with
cookie+request
end-code| o> ;
: addme-owndht ( -- )
pk@ >d#id >o dht-host $[]off
my-addr$ [: dht-host $+[]! ;] $[]map o> ;
\ replace me stuff
|
| ︙ | ︙ |
Changes to gui.fs.
| ︙ | ︙ | |||
973 974 975 976 977 978 979 980 981 982 983 984 985 986 |
msg-tdisplay
msgs-box >o [: +sync +resize ;] vp-needed vp-bottom
+sync +resize o> ;
' wmsg-display wmsg-class to msg:display
#128 Value gui-msgs# \ display last 128 messages
0 Value chat-edit \ chat edit field
: (gui-msgs) ( gaddr u -- )
reset-time
64#0 to last-tick last-bubble-pk $free
0 to msg-par 0 to msg-box
msgs-box .dispose-childs
glue*lll }}glue msgs-box .child+
| > | 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 |
msg-tdisplay
msgs-box >o [: +sync +resize ;] vp-needed vp-bottom
+sync +resize o> ;
' wmsg-display wmsg-class to msg:display
#128 Value gui-msgs# \ display last 128 messages
0 Value chat-edit \ chat edit field
0 Value chat-edit-bg \ chat edit background
: (gui-msgs) ( gaddr u -- )
reset-time
64#0 to last-tick last-bubble-pk $free
0 to msg-par 0 to msg-box
msgs-box .dispose-childs
glue*lll }}glue msgs-box .child+
|
| ︙ | ︙ | |||
1003 1004 1005 1006 1007 1008 1009 1010 |
[: msg-group$ $@ (gui-msgs) ;] !wrapper
msgs-box >o [: +sync +resize ;] vp-needed vp-bottom
+sync +resize o> ;
' msg-wredisplay wmsg-class is msg:redisplay
[IFDEF] android also android [THEN]
: chat-edit-enter ( o:edit-w -- )
| > > > > > > > | > | 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 |
[: msg-group$ $@ (gui-msgs) ;] !wrapper
msgs-box >o [: +sync +resize ;] vp-needed vp-bottom
+sync +resize o> ;
' msg-wredisplay wmsg-class is msg:redisplay
[IFDEF] android also android [THEN]
: ?chat-otr-status ( o:edit-w -- )
msg-group-o .msg:?otr
IF otr-col# [ greenish x-color ] Fliteral
ELSE chat-col# [ blackish x-color ] Fliteral THEN
chat-edit >o to w-color o>
chat-edit-bg >o to w-color o> ;
: chat-edit-enter ( o:edit-w -- )
text$ dup IF do-chat-cmd? 0= IF avalanche-text
ELSE ?chat-otr-status THEN
ELSE 2drop THEN
64#-1 line-date 64! $lastline $free ;
\ +db click( \ )
\ +db click-o( \ )
\ +db gui( \ )
|
| ︙ | ︙ | |||
1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
dup to msgs-box
dup font-size# 66% f* fdup vslider
over >r }}h box[] r>
font-size# 66% f* fdup hslider
}}v box[]
{{
{{ glue*lll edit-bg x-color font-size# 40% f* }}frame dup .button3
{{ \normal \regular blackish "" }}edit 40%b dup to chat-edit glue*l }}glue
glue*lll }}glue
}}h box[]
}}z chat-edit [: edit-w .chat-edit-enter drop nip 0 tuck false ;] edit[] ' size-limit filter[]
>o act >o [: connection .chat-next-line ;] is edit-next-line o> o o>
>o act >o [: connection .chat-prev-line ;] is edit-prev-line o> o o>
{{
| > | 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 |
dup to msgs-box
dup font-size# 66% f* fdup vslider
over >r }}h box[] r>
font-size# 66% f* fdup hslider
}}v box[]
{{
{{ glue*lll edit-bg x-color font-size# 40% f* }}frame dup .button3
dup to chat-edit-bg
{{ \normal \regular blackish "" }}edit 40%b dup to chat-edit glue*l }}glue
glue*lll }}glue
}}h box[]
}}z chat-edit [: edit-w .chat-edit-enter drop nip 0 tuck false ;] edit[] ' size-limit filter[]
>o act >o [: connection .chat-next-line ;] is edit-next-line o> o o>
>o act >o [: connection .chat-prev-line ;] is edit-prev-line o> o o>
{{
|
| ︙ | ︙ |
Changes to helper.fs.
| ︙ | ︙ | |||
116 117 118 119 120 121 122 |
end-code| -setip net2o:send-replace announced on ;
\ NAT retraversal
Forward insert-addr ( o -- )
: renat ( -- )
| < | | | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
end-code| -setip net2o:send-replace announced on ;
\ NAT retraversal
Forward insert-addr ( o -- )
: renat ( -- )
[: msg:peers[] $@ bounds ?DO
I @ >o o-beacon pings
\ !!FIXME!! should maybe do a re-lookup?
ret-addr $10 erase dest-0key dest-0key> !
punch-addrs $@ bounds ?DO
I @ insert-addr IF
o to connection
net2o-code new-request true gen-punchload gen-punch
end-code
THEN
cell +LOOP o>
cell +LOOP
;] group#map ;
\ notification for address changes
[IFDEF] android require android/net.fs [ELSE]
[IFDEF] PF_NETLINK require linux/net.fs [THEN]
[THEN]
|
| ︙ | ︙ | |||
154 155 156 157 158 159 160 |
beacons# #frees
0 >o dhtroot +dht-beacon o>
renat
[IFDEF] renat-complete ;] catch renat-complete throw [THEN]
beacon( ." done renat" cr ) ;
scope{ /chat
| | | 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
beacons# #frees
0 >o dhtroot +dht-beacon o>
renat
[IFDEF] renat-complete ;] catch renat-complete throw [THEN]
beacon( ." done renat" cr ) ;
scope{ /chat
:noname ( addr u -- ) renat-all /nat ; is /renat
}scope
\ beacon handling
event: :>do-beacon ( addr -- )
beacon( ." :>do-beacon" forth:cr )
{ beacon } beacon cell+ $@ 1 64s /string bounds ?DO
|
| ︙ | ︙ |
Changes to msg.fs.
| ︙ | ︙ | |||
1297 1298 1299 1300 1301 1302 1303 |
forward avalanche-text
false value away?
: group#map ( xt -- )
msg-group# swap [{: xt: xt :}l cell+ $@ drop cell+ .xt ;] #map ;
| | > > | < < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | < | < | | < | | < < | | < < | < < | < < > | < < | | < | | | < < < < | | < < | | < < < | | < < | | < < | < < < | < < < | | < < | | < < | | < < < < | | < < | | < < | | < < | | < < | | 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 |
forward avalanche-text
false value away?
: group#map ( xt -- )
msg-group# swap [{: xt: xt :}l cell+ $@ drop cell+ .xt ;] #map ;
uval-o chat-cmd-o
object uclass chat-cmd-o
also net2o-base scope: /chat
umethod /me ( addr u -- )
\U me <action> send string as action
\G me: send remaining string as action
umethod /away ( addr u -- )
\U away [<action>] send string or "away from keyboard" as action
\G away: send string or "away from keyboard" as action
synonym /back /away
umethod /otr ( addr u -- )
\U otr on|off|message turn otr mode on/off (or one-shot)
umethod /chain ( addr u -- )
\U chain on|off turn chain mode on/off
umethod /peers ( addr u -- )
\U peers list peers
\G peers: list peers in all groups
umethod /gps ( addr u -- )
\U gps send coordinates
\G gps: send your coordinates
synonym /here /gps
umethod /chats ( addr u -- )
\U chats list chats
\G chats: list all chats
umethod /nat ( addr u -- )
\U nat list NAT info
\G nat: list nat traversal information of all peers in all groups
umethod /renat ( addr u -- )
\U renat redo NAT traversal
\G renat: redo nat traversal
umethod /help ( addr u -- )
\U help show help
\G help: list help
umethod /myaddrs ( addr u -- )
\U myaddrs list my addresses
\G myaddrs: list my own local addresses (debugging)
umethod /!myaddrs ( addr u -- )
\U !myaddrs re-obtain my addresses
\G !myaddrs: if automatic detection of address changes fail,
\G !myaddrs: you can use this command to re-obtain your local addresses
umethod /notify ( addr u -- )
\U notify always|on|off|led <rgb> <on-ms> <off-ms>|interval <time>[smh]|mode 0-3
\G notify: Change notificaton settings
umethod /beacons ( addr u -- )
\U beacons list beacons
\G beacons: list all beacons
umethod /n2o ( addr u -- )
\U n2o <cmd> execute n2o command
\G n2o: Execute normal n2o command
umethod /invitations ( addr u -- )
\U invitations handle invitations
\G invitations: handle invitations: accept, ignore or block invitations
umethod /sync ( addr u -- )
\U sync [+date] [-date] synchronize logs
\G sync: synchronize chat logs, starting and/or ending at specific
\G sync: time/date
umethod /version ( addr u -- )
\U version version string
\G version: print version string
umethod /log ( addr u -- )
\U log [#lines] show log
\G log: show the log, default is a screenful
umethod /logstyle ( addr u -- )
\U logstyle [+-style] set log style
\G logstyle: set log styles, the following settings exist:
\G logstyle: +date a date per log line
\G logstyle: +num a message number per log line
umethod /otrify ( addr u -- )
\U otrify #line[s] otrify message
\G otrify: turn an older message of yours into an OTR message
umethod /lock ( addr u -- )
\U lock {@nick} lock down
\G lock: lock down communication to list of nicks
umethod /unlock ( addr u -- )
\U unlock stop lock down
\G unlock: stop lock down
umethod /bye ( addr u -- )
\U bye
\G bye: leaves the current chat
umethod /chat ( addr u -- )
\U chat [group][@user] switch/connect chat
\G chat: switch to chat with user or group
umethod /split ( addr u -- )
\U split split load
\G split: reduce distribution load by reconnecting
end-class chat-cmds
chat-cmds new Constant text-chat-cmd-o
text-chat-cmd-o to chat-cmd-o
:noname ( addr u -- )
[: $, msg-action ;] send-avalanche ; is /me
:noname ( addr u -- )
dup 0= IF 2drop
away? IF "I'm back" ELSE "Away from keyboard" THEN
away? 0= to away?
THEN
[: $, msg-action ;] send-avalanche ; is /away
:noname ( addr u -- )
2dup s" on" str= >r
2dup s" off" str= r@ or IF 2drop
msg-group-o r@ IF .msg:+otr ELSE .msg:-otr THEN
<info> ." === " r> IF ." enter" ELSE ." leave" THEN
." otr mode ===" <default> forth:cr
ELSE rdrop
msg-group-o .msg:mode @ >r
msg-group-o .msg:+otr avalanche-text
r> msg-group-o .msg:mode !
THEN ; is /otr
:noname ( addr u -- )
2dup s" on" str= >r
s" off" str= r@ or IF
msg-group-o r@ IF .msg:+chain ELSE .msg:-chain THEN
<info> ." === " r> IF ." enter" ELSE ." leave" THEN
." chain mode ==="
ELSE <err> ." only 'chain on|off' are allowed" rdrop THEN
<default> forth:cr ; is /chain
:noname ( addr u -- ) 2drop
[: msg:name$ .group ." : "
msg:peers[] $@ bounds ?DO
space I @ >o .con-id space
ack@ .rtdelay 64@ 64>f 1n f* (.time) o>
cell +LOOP forth:cr ;] group#map ; is /peers
:noname ( addr u -- ) 2drop
coord! coord@ 2dup 0 -skip nip 0= IF 2drop
ELSE
[: $, msg-coord ;] send-avalanche
THEN ; is /gps
:noname ( addr u -- )
bl skip '/' skip
2dup [: ." \U " forth:type ;] $tmp ['] .chathelp search-help
[: ." \G " forth:type ':' forth:emit ;] $tmp ['] .cmd search-help ;
is /help
:noname ( addr u -- )
2drop .invitations ; is /invitations
:noname ( addr u -- )
2drop ." ===== chats: "
[: msg:name$ msg-group$ $@ str= IF ." *" THEN
msg:name$ .group
." [" msg:peers[] $[]# 0 .r ." ]#"
msg:log[] $[]# u. ;] group#map
." =====" forth:cr ; is /chats
:noname ( addr u -- ) 2drop
[: ." ===== Group: " msg:name$ .group ." =====" forth:cr
msg:peers[] $@ bounds ?DO
." --- " I @ >o .con-id ." : " return-address .addr-path
." ---" forth:cr .nat-addrs o>
cell +LOOP ;] group#map ; is /nat
:noname ( addr u -- )
2drop
." ===== all =====" forth:cr .my-addr$s
." ===== public =====" forth:cr .pub-addr$s
." ===== private =====" forth:cr .priv-addr$s ; is /myaddrs
:noname ( addr u -- )
2drop !my-addr ; is /!myaddrs
:noname ( addr u -- )
['] notify-cmds evaluate-in .notify ; is /notify
:noname ( addr u -- )
2drop ." === beacons ===" forth:cr
beacons# [: dup $@ .address space
cell+ $@ over 64@ .ticks space
1 64s safe/string bounds ?DO
I 2@ ?dup-IF ..con-id space THEN .name
2 cells +LOOP forth:cr ;] #map ; is /beacons
:noname ( addr u -- )
s>unumber? IF drop ELSE 2drop 0 THEN cells >r
msg-group-o .msg:peers[] $@ r@ u<= IF drop rdrop EXIT THEN
r> + @ >o o to connection
." === sync ===" forth:cr
net2o-code expect-msg [: msg-group last?, ;] [msg,] end-code o> ; is /sync
:noname ( addr u -- )
2drop .n2o-version space .gforth-version forth:cr ; is /version
:noname ( addr u -- )
s>unumber? IF drop >r ELSE 2drop rows >r THEN
msg-group$ $@ >group purge-log
r> display-lastn ; is /log
:noname ( addr u -- )
['] logstyles evaluate-in ; is /logstyle
:noname ( addr u -- )
msg-group-o .msg:mode dup @ msg:otr# or swap
[: now>otr
[: BEGIN bl $split 2>r dup WHILE s>unumber? WHILE
drop do-otrify 2r> REPEAT THEN
2drop 2r> 2drop
;] (send-avalanche) drop .chat save-msgs&
;] !wrapper ; is /otrify
:noname ( addr u -- )
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
: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
}scope
: ?slash ( addr u -- addr u flag )
over c@ dup '/' = swap '\' = or ;
: do-chat-cmd? ( addr u -- t / addr u f )
?slash dup 0= ?EXIT drop
|
| ︙ | ︙ | |||
1626 1627 1628 1629 1630 1631 1632 |
2dup pk-peek? IF chat-connect ELSE 2drop THEN ;] $[]map ;
: ?wait-chat ( -- addr u ) #0. /chat:/chats
BEGIN chats# 0= WHILE wait-chat chat-connects REPEAT
msg-group$ $@ ; \ stub
scope{ /chat
| | < < | | 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 |
2dup pk-peek? IF chat-connect ELSE 2drop THEN ;] $[]map ;
: ?wait-chat ( -- addr u ) #0. /chat:/chats
BEGIN chats# 0= WHILE wait-chat chat-connects REPEAT
msg-group$ $@ ; \ stub
scope{ /chat
:noname ( addr u -- )
chat-keys $[]off nick>chat 0 chat-keys $[]@ key>group
msg-group$ $@ >group msg-group-o .msg:peers[] $@ dup 0= IF 2drop
nip IF chat-connects
ELSE ." That chat isn't active" forth:cr THEN
ELSE
bounds ?DO 2dup I @ .pubkey $@ key2| str= 0= WHILE cell +LOOP
2drop chat-connects ELSE UNLOOP 2drop THEN
THEN #0. /chats ; is /chat
}scope
also net2o-base
: punch-addr-ind@ ( -- o )
punch-addrs $[]# 0 U+DO
I punch-addrs $[] @ .host:route $@len IF
I punch-addrs $[] @ unloop EXIT
|
| ︙ | ︙ | |||
1710 1711 1712 1713 1714 1715 1716 |
msg:peers[] >r 0
BEGIN dup 1+ r@ $[]# u< WHILE
dup r@ $[] 2@ .send-reconnect1
1+ dup r@ $[] @ >o o to connection disconnect-me o>
REPEAT drop rdrop ;
scope{ /chat
| | < < | | 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 |
msg:peers[] >r 0
BEGIN dup 1+ r@ $[]# u< WHILE
dup r@ $[] 2@ .send-reconnect1
1+ dup r@ $[] @ >o o to connection disconnect-me o>
REPEAT drop rdrop ;
scope{ /chat
:noname ( addr u -- ) 2drop
msg-group$ $@ >group msg-group-o .split-load ; is /split
}scope
\ chat toplevel
: do-chat ( addr u -- )
get-order n>r
chat-history ['] /chat >body 1 set-order
|
| ︙ | ︙ |
Changes to n2o.fs.
| ︙ | ︙ | |||
791 792 793 794 795 796 797 |
?set-debug
:noname defers 'cold ?set-debug n2o-history ; is 'cold
\ allow issuing commands during chat
scope{ /chat
| < | | < | 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 |
?set-debug
:noname defers 'cold ?set-debug n2o-history ; is 'cold
\ allow issuing commands during chat
scope{ /chat
:noname [: word-args ['] evaluate do-net2o-cmds ;] catch
?dup-IF <err> ." error: " error$ type cr <default> THEN ; is /n2o
}scope
: start-n2o ( -- )
[IFDEF] cov+ load-cov [THEN]
cmd-args ++debug %droprate %droprate \ read in all debugging stuff
profile( init-timer )
argc @ 1 > IF next-cmd ELSE n2o:help THEN
|
| ︙ | ︙ |