Liking cljdoc? Tell your friends :D

frereth.cp.message

Translation of curvecpmessage.c

This is really a generic buffer program

The "parent" child/server reads/writes to pipes that this provides, in a specific (and apparently undocumented) communications protocol.

This, in turn, reads/writes data from/to a child that it spawns.

I keep wanting to think of this as a simple transducer and just skip the buffering pieces, but they (and the flow control) are really the main point.

Translation of curvecpmessage.c

This is really a generic buffer program

The "parent" child/server reads/writes to pipes that this provides,
in a specific (and apparently undocumented) communications protocol.

This, in turn, reads/writes data from/to a child that it spawns.

I keep wanting to think of this as a simple transducer and just
skip the buffering pieces, but they (and the flow control) are
really the main point.
raw docstring

action-trigger!clj

(action-trigger!
  {:keys [:frereth.cp.message/actual-next :frereth.cp.message/delta_f
          :frereth.cp.message/scheduling-time]
   :as timing-details}
  {:keys [:frereth.cp.message.specs/message-loop-name] :as io-handle}
  {:keys [:frereth.cp.message.specs/outgoing] :as state}
  log-state-atom
  next-action)

Some action triggered the main ioloop

Some action triggered the main ioloop
sourceraw docstring

build-un-ackd-blocksclj

(build-un-ackd-blocks {:keys [:frereth.weald.specs/logger]
                       log-state :frereth.weald.specs/state})
source

child->!clj

(child->! {:keys [:frereth.weald.specs/logger
                  :frereth.cp.message.specs/child-out
                  :frereth.cp.message.specs/from-child
                  :frereth.cp.message.specs/message-loop-name
                  :frereth.cp.message.specs/pipe-from-child-size]
           log-state-atom :frereth.weald.specs/state-atom
           :as io-handle}
          array-o-bytes)

Send bytes from a child buffer...if we have room

Send bytes from a child buffer...if we have room
sourceraw docstring

child-buffer-timeoutclj

How long might we block child->

How long might we block child->
sourceraw docstring

child-close!clj

(child-close! {:keys [:frereth.cp.message.specs/from-child] :as io-handle})

Notify parent that child is done sending

Notify parent that child is done sending
sourceraw docstring

choose-next-scheduled-timeclj

(choose-next-scheduled-time {{:keys [:frereth.cp.message.specs/n-sec-per-block
                                     :frereth.cp.message.specs/rtt-timeout]
                              :as flow-control}
                               :frereth.cp.message.specs/flow-control
                             {:keys [:frereth.cp.message.specs/->child-buffer
                                     :frereth.cp.message.specs/gap-buffer]}
                               :frereth.cp.message.specs/incoming
                             {:keys [:frereth.cp.message.specs/earliest-time
                                     :frereth.cp.message.specs/last-block-time
                                     :frereth.cp.message.specs/send-eof
                                     :frereth.cp.message.specs/un-sent-blocks
                                     :frereth.cp.message.specs/un-ackd-blocks
                                     :frereth.cp.message.specs/want-ping]
                              :as outgoing}
                               :frereth.cp.message.specs/outgoing
                             :keys [:frereth.cp.message.specs/message-loop-name
                                    :frereth.cp.message.specs/recent]
                             log-state :frereth.weald.specs/state
                             :as state}
                            to-child-done?)
source

clear-interrupt!clj

(clear-interrupt!)
source

condensed-choose-next-scheduled-timeclj

(condensed-choose-next-scheduled-time
  {{:keys [:frereth.cp.message.specs/n-sec-per-block
           :frereth.cp.message.specs/rtt-timeout]}
     :frereth.cp.message.specs/flow-control
   {:keys [:frereth.cp.message.specs/->child-buffer
           :frereth.cp.message.specs/gap-buffer]}
     :frereth.cp.message.specs/incoming
   {:keys [:frereth.cp.message.specs/ackd-addr
           :frereth.cp.message.specs/earliest-time
           :frereth.cp.message.specs/last-block-time
           :frereth.cp.message.specs/send-eof
           :frereth.cp.message.specs/un-sent-blocks
           :frereth.cp.message.specs/un-ackd-blocks
           :frereth.cp.message.specs/want-ping]
    :as outgoing}
     :frereth.cp.message.specs/outgoing
   :keys [:frereth.cp.message.specs/message-loop-name
          :frereth.cp.message.specs/recent]
   log-state :frereth.weald.specs/state
   :as state}
  to-child-done?)
source

do-startclj

(do-start {:keys [:frereth.cp.message.specs/message-loop-name]
           {:keys [:frereth.cp.message.specs/pipe-from-child-size]
            :or {pipe-from-child-size K/k-64}
            :as outgoing}
             :frereth.cp.message.specs/outgoing
           {:keys [:frereth.cp.message.specs/pipe-to-child-size]
            :as incoming
            :or {pipe-to-child-size K/k-64}}
             :frereth.cp.message.specs/incoming
           :as state}
          logger
          parent-cb
          child-cb)

Trigger side-effects to start a ::state

Trigger side-effects to start a ::state
sourceraw docstring

fast-spinsclj

source

get-stateclj

(get-state stream-holder)
(get-state {:keys [:frereth.weald.specs/logger
                   :frereth.cp.message.specs/message-loop-name
                   :frereth.cp.message.specs/stream]
            log-state-atom :frereth.weald.specs/state-atom}
           timeout
           failure-signal)

Synchronous equivalent to a deref

Synchronous equivalent to a deref
sourceraw docstring

halt!clj

(halt! {:keys [:frereth.weald.specs/logger
               :frereth.cp.message.specs/message-loop-name
               :frereth.cp.message.specs/stream
               :frereth.cp.message.specs/from-child
               :frereth.cp.message.specs/child-out]
        log-state-atom :frereth.weald.specs/state-atom
        :as io-handle})

This is supposed to be a hard-stop that means we're totally done.

This is supposed to be a hard-stop that means we're totally done.
sourceraw docstring

initial-stateclj

(initial-state human-name logger)
(initial-state human-name
               server?
               {{:keys [:frereth.cp.message.specs/pipe-to-child-size]
                 :or {pipe-to-child-size K/k-64}
                 :as incoming}
                  :frereth.cp.message.specs/incoming
                {:keys [:frereth.cp.message.specs/pipe-from-child-size]
                 :or {pipe-from-child-size K/k-64}
                 :as outgoing}
                  :frereth.cp.message.specs/outgoing
                log-state :frereth.weald.specs/state
                :as opts}
               logger)

Put together an initial state that's ready to start!

Put together an initial state that's ready to start!
sourceraw docstring

interrupt!clj

(interrupt!)
source

interrupted?clj

(interrupted?)
source

max-child-buffer-sizeclj

Maximum message blocks from parent to child that we'll buffer before dropping

must be power of 2 -- DJB

Maximum message blocks from parent to child that we'll buffer before dropping

must be power of 2 -- DJB
sourceraw docstring

parent->!clj

(parent->! io-handle array-o-bytes)
(parent->! {:keys [:frereth.weald.specs/logger
                   :frereth.cp.message.specs/message-loop-name
                   :frereth.cp.message.specs/stream]
            log-state-atom :frereth.weald.specs/state-atom
            :as io-handle}
           array-o-bytes
           timeout)

Receive a byte array from parent

411-435: try receiving messages: (DJB)

The parent is going to call this. It should trigger the pieces that naturally fall downstream and lead to writing the bytes to the child.

It's replacing one of the polling triggers that set off the main() event loop. Need to account for that fundamental strategic change

Receive a byte array from parent

411-435: try receiving messages: (DJB)

The parent is going to call this. It should trigger
the pieces that naturally fall downstream and lead
to writing the bytes to the child.

It's replacing one of the polling triggers that
set off the main() event loop. Need to account for
that fundamental strategic change
sourceraw docstring

pick-next-actionclj

(pick-next-action this
                  {:keys [:frereth.cp.message/now
                          :frereth.cp.message.specs/recent
                          :frereth.cp.message.specs/stream]
                   actual-next :frereth.cp.message/next-action-time
                   log-state :frereth.weald.specs/state})
source

schedule-next-timeout!clj

(schedule-next-timeout!
  {:keys [:frereth.weald.specs/logger :frereth.cp.message.specs/->parent
          :frereth.cp.message.specs/child-output-loop
          :frereth.cp.message.specs/child-input-loop
          :frereth.cp.message.specs/to-child
          :frereth.cp.message.specs/to-child-done?
          :frereth.cp.message.specs/message-loop-name
          :frereth.cp.message.specs/stream]
   :as io-handle}
  {:keys [:frereth.cp.message.specs/recent]
   {:keys [:frereth.cp.message.specs/next-action] :as flow-control}
     :frereth.cp.message.specs/flow-control
   {:keys [:frereth.cp.message.specs/receive-eof
           :frereth.cp.message.specs/receive-total-bytes
           :frereth.cp.message.specs/receive-written]}
     :frereth.cp.message.specs/incoming
   {:keys [:frereth.cp.message.specs/send-eof-acked] :as outgoing}
     :frereth.cp.message.specs/outgoing
   log-state :frereth.weald.specs/state
   :as state})
source

start-event-loops!clj

(start-event-loops! {:keys [:frereth.weald.specs/logger
                            :frereth.cp.message.specs/->child
                            :frereth.cp.message.specs/message-loop-name]
                     :as io-handle}
                    {log-state :frereth.weald.specs/state :as state})
source

swap-parent-callback!clj

(swap-parent-callback! io-handle new-callback)
(swap-parent-callback! {:keys [:frereth.weald.specs/logger
                               :frereth.cp.message.specs/message-loop-name
                               :frereth.cp.message.specs/stream]
                        log-state-atom :frereth.weald.specs/state-atom
                        :as io-loop}
                       time-out
                       timed-out-value
                       new-callback)

Swap out the ->parent callback

For switching the Client from Initiate to Message packets

Swap out the ->parent callback

For switching the Client from Initiate to Message packets
sourceraw docstring

trigger-from-childclj

(trigger-from-child io-handle
                    callback
                    accepted?
                    {{:keys [:frereth.cp.message.specs/strm-hwm] :as outgoing}
                       :frereth.cp.message.specs/outgoing
                     :keys [:frereth.cp.message.specs/message-loop-name]
                     :as state})
source

trigger-from-parentclj

(trigger-from-parent {:keys [:frereth.weald.specs/logger
                             :frereth.cp.message.specs/message-loop-name]
                      :as io-handle}
                     message
                     {{:keys [:frereth.cp.message.specs/->child-buffer]}
                        :frereth.cp.message.specs/incoming
                      {:keys
                         [:frereth.cp.message.specs/client-waiting-on-response]}
                        :frereth.cp.message.specs/flow-control
                      log-state :frereth.weald.specs/state
                      :as state})

Message block arrived from parent. Work triggered by ioloop

Message block arrived from parent. Work triggered by ioloop
sourceraw docstring

trigger-from-timerclj

(trigger-from-timer io-handle
                    {:keys [:frereth.cp.message.specs/message-loop-name]
                     :as state})
source

trigger-outputclj

(trigger-output {:keys [:frereth.cp.message.specs/to-child] :as io-handle}
                {{:keys [:frereth.cp.message.specs/next-action]}
                   :frereth.cp.message.specs/flow-control
                 :keys [:frereth.cp.message.specs/message-loop-name]
                 :as state})
source

write-from-child-timeoutclj

milliseconds before we give up on writing a packet from child to parent

milliseconds before we give up on writing a packet from child to parent
sourceraw docstring

write-from-parent-timeoutclj

milliseconds before we give up on writing a packet from parent to child

milliseconds before we give up on writing a packet from parent to child
sourceraw docstring

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close