From 2a92390d01f936c4d464b873f1e26aabd71dc071 Mon Sep 17 00:00:00 2001
From: Bernd Paysan <bernd.paysan@gmx.de>
Date: Thu, 29 Oct 2020 16:50:27 +0100
Subject: [PATCH] More work on new silent have protocol

---
 classes.fs |  1 +
 msg.fs     | 22 +++++++++++++---------
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/classes.fs b/classes.fs
index 0d834296..57c51a3e 100644
--- a/classes.fs
+++ b/classes.fs
@@ -148,6 +148,7 @@ cmd-class class{ msg
     field: pks#
     field: perms# \ pk -> permission map
     field: mode
+    value: silent?
     \ mode bits:
     1 3 bits: otr# lock# visible#
     : bit-ops: ( bit -- )
diff --git a/msg.fs b/msg.fs
index ca7f267f..00af0eed 100644
--- a/msg.fs
+++ b/msg.fs
@@ -38,13 +38,15 @@ Variable otr-mode \ global otr mode
 
 User ihave$
 User push$
+$200 Constant max#have
 
 : (avalanche-msg) ( o:connect -- )
     msg-group-o .msg:peers[] $@
     bounds ?DO  I @ o <> IF  I @ .avalanche-to  THEN
     cell +LOOP ;
 : cleanup-msg ( -- )
-    ihave$ $free  push$ $free ;
+    ihave$ $@len max#have < IF  ihave$ $free  ELSE  ihave$ 0 max#have $del  THEN
+    push$ $free ;
 : avalanche-msg ( o:connect -- )
     \G forward message to all next nodes of that message group
     (avalanche-msg) cleanup-msg ;
@@ -462,9 +464,9 @@ $20 net2o: msg-start ( $:pksig -- ) \g start message
 $60 net2o: msg-silent-start ( $:pksig -- ) \g silent message tag
     1 !!>order? $40 c-state !  $> msg:silent-start ;
 +net2o: msg-hashs ( $:hashs -- ) \g ihave part 1 within signed message
-    $40 !!order?  $> msg:hashs ;
+    ( $40 !!order? )  $> msg:hashs ;
 +net2o: msg-hash-id ( $:id -- ) \g ihave part 2 within signed message
-    $41 !!order?  $> msg:hash-id ;
+    ( $41 !!order? )  $> msg:hash-id ;
 +net2o: msg-otrify2 ( $:date+sig $:newdate+sig -- ) \g turn a past message into OTR, silent version
     $40 !!order?  $> $> msg:otrify ;
 +net2o: msg-updates ( $:fileinfo $:hash -- ) \g Files got an update.
@@ -604,13 +606,14 @@ end-class msg-?hash-class
 
 :noname ( addr u -- )
     last# >r  2dup key| to msg:id$
+    false to msg:silent?
     .log-num
     2dup startdate@ .log-date
     2dup enddate@ .log-end
     .key-id ." : " 
     r> to last# ; msg-class is msg:start
 :noname ( addr u -- )
-    key| to msg:id$ ; msg-class is msg:silent-start
+    key| to msg:id$ true to msg:silent? ; msg-class is msg:silent-start
 :noname ( addr u -- ) $utf8>
     <warn> '#' forth:emit .group <default> ; msg-class is msg:tag
 :noname ( addr u -- ) last# >r
@@ -666,7 +669,7 @@ end-class msg-?hash-class
 :noname ( id u -- )
     fetch( ." ihave:" msg:id$ .key-id '.' emit 2dup type msg:hashs$ bounds U+DO
     forth:cr I keysize 85type keysize +LOOP forth:cr )
-    msg:id$ key| [: 2swap type type ;] $tmp
+    msg:id$ key| [: type type ;] $tmp
     msg:hashs$ 2swap >ihave.id
 ; msg-class is msg:hash-id
 
@@ -880,7 +883,7 @@ msg-class is msg:object
     THEN ; msg-class is msg:otrify
 
 :noname ( -- )
-    forth:cr ; msg-class is msg:end
+    msg:silent? 0= IF  forth:cr  THEN ; msg-class is msg:end
 
 \g 
 \g ### group description commands ###
@@ -1594,8 +1597,8 @@ also net2o-base
     push$ $@ dup IF  $, nestsig  ELSE  2drop  THEN ;
 : ihave, ( -- )
     <msg msg-silent-start
-    ihave$ $@ $, msg-hashs
-    host $@ $, msg-hash-id
+    ihave$ $@ max#have umin $, msg-hashs
+    host$ $@ $, msg-hash-id
     msg> ;
 
 : (send-avalanche) ( xt -- addr u flag )
@@ -2022,7 +2025,8 @@ is /help
     2drop msg-group-o .msg:?lock 0= IF  ." un"  THEN  ." locked" forth:cr
 ; is /lock?
 :noname 2drop .ihaves ; is /have
-:noname 2drop scan-log-hashs ; is /rescan#
+:noname 2drop scan-log-hashs
+    BEGIN  ihave$ $@len  WHILE  avalanche-msg ( msg-log, )  REPEAT ; is /rescan#
 
 :noname ( addr u -- )
     word-args [: parse-name >perms args>keylist ;] execute-parsing
-- 
GitLab