Re: A Issue in HTTP::%LOCAL-HOST-PARSED-IP-NUMBER when start CL-HTTP on specific x.x.x.x address and port

Martin Simmons <[email protected]> Wed, 23 Mar 2011 12:39:48 GMT
Newsgroups gmane.lisp.cl-http
Message-ID <[email protected]>
>>>>> On Wed, 23 Mar 2011 16:10:07 +0800, Chun Tian (binghe) said:
> 
> Hi, CL-HTTP developers
> 
> I'm trying to start a CL-HTTP server on specific x.x.x.x IPv4 address and port. I have to do this, because:
> 
> 1) I don't have a resolvable hostname on my laptop and some other servers;
> 2) I have many interface addresses on single machine, need to choose a specific one to be the default virtual host.
> 
> Currently I have following initialize code when a empty CL-HTTP image without examples start up:
> 
> (defun warm-start ()
>   (let ((host (get-from-command-line "-host"))
> 	(port (or (parse-integer (get-from-command-line "-port")) #+linux 443 #-linux 80)))
> 
>     #+linux
>     (http:define-https-service
>       :address host
>       :port port
>       :certificate #p"SYS:SSL;SERVER.CRT"
>       :private-key #p"SYS:SSL;SERVER.KEY"
>       :password :none
>       :certificate-authorities #p"SYS:SSL;CA.CRT"
>       :parameters #p"SYS:SSL;DH"
>       :ciphers :all
>       :ssl-version :ssl-default)
> 
>     (setq www-utils:*primary-network-host* host
> 	  http:*standard-http-port* port
> 	  http:*standard-protocol* #+linux :https #-linux :http
> 	  http:*resolve-ip-addresses* nil
> 	  http:*connection-backlog* 128.
> 	  http::*standard-log-directory* #p"SYS:LOG;")
> 
>     (http:set-maximum-number-of-connections 32.)
>     (http:log-file-stream-stays-open t)
> 
>     (http:run-server-initializations t)
>     ;; (http::run-server-launch-initializations t)
>     (http:enable-http-service)))
> 
> Please let me know if my way to start CL-HTTP has something wrong.
> 
> And my problem is, when www-utils:*primary-network-host* was set to a string like "192.168.150.12", (WWW-UTILS:LOCAL-HOST) cannot work, because www-utils:%local-host-parsed-ip-number will call IPC:INTERNET-ADDRESS on *primary-network-host*, and due to its definition, only hostname can be accepted:
> 
> (defun local-machine-instance ()
>   "Returns the primary domain name (or IP number) for the local host."
>   (or *primary-network-host* (machine-instance)))
> 
> (defun %local-host-parsed-ip-number ()
>   (ipc:internet-address (local-machine-instance)))
> 
> ;; LispWorks version
> (defun internet-address (name)
>   (or (comm:get-host-entry name :fields '(:address))
>       (error 'www-utils:unknown-host-name :hostname name)))
> 
> To make things work, I have to change the definition of %local-host-parsed-ip-number into this:
> 
> (in-package :www-utils)
> 
> (defun %local-host-parsed-ip-number ()
>   (or (ipc:string-ip-address (local-machine-instance))
>       (ipc:internet-address (local-machine-instance))))
> 
> Is this reasonable, or is there any other solution?

It looks reasonable to me (the function %parse-internet-address does something
similar).  I would bind the result of calling (local-machine-instance) in a
variable.

I am slightly puzzled why you get an error though, because

(comm:get-host-entry "192.168.150.12" :fields '(:address))

returns the correct number for me, even though 192.168.150.12 is not
resolvable in the DNS.

-- 
Martin Simmons
LispWorks Ltd
http://www.lispworks.com/

_______________________________________________
WWW-CL mailing list
[email protected]
https://lists.csail.mit.edu/mailman/listinfo/www-cl