Initial commit: extracted from memex
This commit is contained in:
26
src/protocol.lisp
Normal file
26
src/protocol.lisp
Normal file
@@ -0,0 +1,26 @@
|
||||
(in-package :org-agent)
|
||||
|
||||
(defun frame-message (msg-string)
|
||||
"Prefix MSG-STRING with a 6-character hex length (lowercase)."
|
||||
(let ((len (length msg-string)))
|
||||
(format nil "~(~6,'0x~)~a" len msg-string)))
|
||||
|
||||
(defun parse-message (framed-string)
|
||||
"Extract and parse the S-expression from a framed string."
|
||||
(when (< (length framed-string) 6)
|
||||
(error "Framed string too short"))
|
||||
(let* ((len-str (subseq framed-string 0 6))
|
||||
(actual-msg (subseq framed-string 6))
|
||||
(expected-len (ignore-errors (parse-integer len-str :radix 16))))
|
||||
(unless expected-len
|
||||
(error "Invalid hex length prefix: ~a" len-str))
|
||||
(unless (= expected-len (length actual-msg))
|
||||
(error "Message length mismatch. Expected ~a, got ~a" expected-len (length actual-msg)))
|
||||
(read-from-string actual-msg)))
|
||||
|
||||
(defun make-hello-message (version)
|
||||
"Construct the standard HELLO handshake message."
|
||||
(list :type :EVENT
|
||||
:payload (list :action :handshake
|
||||
:version version
|
||||
:capabilities '(:auth :swank :org-ast))))
|
||||
Reference in New Issue
Block a user