#lang racket/base ;; (Temporary) example client and server (require racket/tcp) (require racket/pretty) (require racket/match) (require racket/class) (require racket/port) (require racket/sandbox) (require "ssh-service.rkt") (require "standard-thread.rkt") #;(define (t-client) (let-values (((i o) (tcp-connect "localhost" 2323 ;;22 ))) (let ((api (ssh-session 'client i o))) (printf "Got API ~v\n" api) (semaphore-wait (make-semaphore 0))))) (define (repl-shell username in out) (fprintf out "Hello, ~a.\n" username) (parameterize ((current-input-port in) (current-output-port out) (current-error-port out) (sandbox-input in) (sandbox-output out) (sandbox-error-output out) (current-namespace (make-empty-namespace))) (parameterize ((current-eval (make-evaluator 'racket/base))) (read-eval-print-loop)) (fprintf out "\nGoodbye!\n") (close-input-port in) (close-output-port out))) (define (t-server) (define s (tcp-listen 2322 4 #t "localhost")) (printf "Accepting...\n") (tcp-pty-ssh-server s repl-shell)) (if (getenv "clientmode") (void) #;(t-client) (t-server))