485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
|
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
|
-
-
+
+
-
+
|
;; handlerkey host:port pid qrykey params ...
;;
(let ((res
(if (and inp oup)
(let* ()
(if my-host-port
(begin
(write-line dat oup)
(write-line data oup)
(write dat oup)
(write data oup) ;; send as sexpr
;; (print "Sent dat: " dat " data: " data)
(if retval
(read-line inp)
(read inp)
#t))
(begin
(print "ERROR: send called but no receiver has been setup. Please call setup first!")
#f))
;; NOTE: DO NOT BE TEMPTED TO LOOK AT ANY DATA ON INP HERE!
;; (there is a listener for handling that)
)
|
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
|
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
|
-
-
+
+
-
+
|
(define (ulex-handler-loop udata)
(let* ((serv-listener (udat-serv-listener udata)))
;; data comes as two lines
;; handlerkey resp-addr:resp-port hostname pid qrykey [dbpath/dbfile.db]
;; data
(let loop ((state 'start))
(let-values (((inp oup)(tcp-accept serv-listener)))
(let* ((controldat (read-line inp))
(data (read-line inp))
(let* ((controldat (read inp))
(data (read inp))
(resp (ulex-handler udata controldat data)))
(if resp (write-line resp oup))
(if resp (write resp oup))
(close-input-port inp)
(close-output-port oup))
(loop state)))))
;; add a proc to the handler list, these are done symetrically (i.e. in all instances)
;; so that the proc can be dereferenced remotely
;;
|