Author: iratqq
Date: Mon Feb 16 09:16:34 2009
New Revision: 5854
Modified:
trunk/scm/prime-custom.scm
trunk/scm/prime.scm
Log:
* scm/prime-custom.scm (prime-server-setting?)
(prime-tcpserver-name, prime-tcpserver-port):
- Change to choice.
* scm/prime.scm (prime-open-with-tcp-socket):
- New function
(prime-connection-init):
- Sync.
Add TCP connection method for prime.
Modified: trunk/scm/prime-custom.scm
==============================================================================
--- trunk/scm/prime-custom.scm (original)
+++ trunk/scm/prime-custom.scm Mon Feb 16 09:16:34 2009
@@ -89,11 +89,44 @@
(N_ "Alternative space character key")
(N_ "long description will be here."))
-(define-custom 'prime-use-unixdomain? #t
+(define-custom 'prime-server-setting? 'unixdomain
'(prime advanced)
- '(boolean)
- (N_ "Use UNIX domain socket to communicate with PRIME")
+ (list 'choice
+ (list 'unixdomain
+ (N_ "Unix domain")
+ (N_ "Use UNIX domain socket to communicate with PRIME."))
+ (list 'tcpserver
+ (N_ "TCP server")
+ (N_ "Use tcp server to communicate with PRIME"))
+ (list 'pipe
+ (N_ "Pipe")
+ (N_ "Use pipe. spawn new prime process to communicate with
PRIME")))
+ (N_ "Prime connection setting")
(N_ "long description will be here."))
+
+(define-custom 'prime-tcpserver-name "localhost"
+ '(prime advanced)
+ '(string ".*")
+ (N_ "PRIME server address")
+ (N_ "long description will be here."))
+
+(custom-add-hook 'prime-tcpserver-name
+ 'custom-activity-hooks
+ (lambda ()
+ (eq? prime-server-setting?
+ 'tcpserver)))
+
+(define-custom 'prime-tcpserver-port 1180
+ '(prime advanced)
+ '(integer 0 65535)
+ (N_ "PRIME server port")
+ (N_ "long description will be here."))
+
+(custom-add-hook 'prime-tcpserver-port
+ 'custom-activity-hooks
+ (lambda ()
+ (eq? prime-server-setting?
+ 'tcpserver)))
;(define-custom 'prime-use-candidate-window? #t
; '(prime candwin)
Modified: trunk/scm/prime.scm
==============================================================================
--- trunk/scm/prime.scm (original)
+++ trunk/scm/prime.scm Mon Feb 16 09:16:34 2009
@@ -861,15 +861,46 @@
(uim-notify-fatal "cannot create socket directory")
#f)))))
+(define prime-open-with-tcp-socket
+ (lambda (hostname servname)
+ (call/cc
+ (lambda (fds)
+ (call-with-getaddrinfo-hints
+ '($AI_PASSIVE) '$PF_UNSPEC '$SOCK_STREAM #f
+ (lambda (hints)
+ (call-with-getaddrinfo
+ hostname servname hints
+ (lambda (res)
+ (map (lambda (res0)
+ (let ((s (socket (addrinfo-ai-family? res0)
+ (addrinfo-ai-socktype? res0)
+ (addrinfo-ai-protocol? res0))))
+ (if (< s 0)
+ #f
+ (if (< (connect s
+ (addrinfo-ai-addr? res0)
+ (addrinfo-ai-addrlen? res0))
+ 0)
+ (begin
+ (file-close s)
+ #f)
+ (fds (cons s s))))))
+ res)))))))))
+
(define prime-open-with-pipe
(lambda (path)
(process-io path)))
(define prime-connection-init
(lambda ()
- (let ((fds (if prime-use-unixdomain?
- (prime-open-with-unix-domain-socket
(prime-socket-path!))
- (prime-open-with-pipe "prime"))))
+ (let ((fds (cond ((eq? prime-server-setting? 'unixdomain)
+ (prime-open-with-unix-domain-socket
(prime-socket-path!)))
+ ((eq? prime-server-setting? 'tcpserver)
+ (prime-open-with-tcp-socket prime-tcpserver-name
prime-tcpserver-port))
+ ((eq? prime-server-setting? 'pipe)
+ (prime-open-with-pipe "prime"))
+ (else
+ (uim-notify-fatal "Prime connection is not
defined")))))
(cons (open-file-port (car fds))
(open-file-port (cdr fds))))))