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))))))

Reply via email to