Skip to content

Commit e069a20

Browse files
authored
Merge pull request #270 from Julow/no-use-unix-sockaddr
Remove usage of Unix.sockaddr type
2 parents 263f5b8 + d455c3d commit e069a20

File tree

4 files changed

+21
-47
lines changed

4 files changed

+21
-47
lines changed

src/server/ocsigen_cohttp.ml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,10 @@ let handler ~ssl ~address ~port ~connector (flow, conn) request body =
5858
let filenames = ref [] in
5959
let edn = Conduit_lwt_unix.endp_of_flow flow in
6060
let rec getsockname = function
61-
| `TCP (ip, port) -> Unix.ADDR_INET (Ipaddr_unix.to_inet_addr ip, port)
62-
| `Unix_domain_socket path -> Unix.ADDR_UNIX path
61+
| `TCP (ip, _port) -> Ipaddr.to_string ip
62+
| `Unix_domain_socket path -> "unix://" ^ path
6363
| `TLS (_, edn) -> getsockname edn
64-
| `Unknown err -> raise (Failure ("resolution failed: " ^ err))
65-
| `Vchan_direct _ -> raise (Failure "VChan not supported")
66-
| `Vchan_domain_socket _ -> raise (Failure "VChan not supported")
64+
| `Unknown _ | `Vchan_direct _ | `Vchan_domain_socket _ -> "unknown"
6765
in
6866
let sockaddr = getsockname edn in
6967
let connection_closed =

src/server/ocsigen_request.ml

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,7 @@ type t =
5353
; r_port : int
5454
; r_ssl : bool
5555
; r_filenames : string list ref
56-
; r_sockaddr : Lwt_unix.sockaddr
57-
; r_remote_ip : string Lazy.t
58-
; r_remote_ip_parsed : [`Ip of Ipaddr.t | `Unix of string] Lazy.t
56+
; r_remote_ip : string
5957
; r_forward_ip : string list
6058
; r_uri : uri
6159
; r_meth : Cohttp.Code.meth
@@ -86,26 +84,11 @@ let make
8684
~connection_closed
8785
request
8886
=
89-
let r_remote_ip =
90-
lazy
91-
(match sockaddr with
92-
| Unix.ADDR_INET (ip, _port) -> Unix.string_of_inet_addr ip
93-
| ADDR_UNIX f -> f)
94-
in
95-
let r_remote_ip_parsed =
96-
lazy
97-
(match sockaddr with
98-
| Unix.ADDR_INET (ip, _port) ->
99-
`Ip (Ipaddr.of_string_exn (Unix.string_of_inet_addr ip))
100-
| ADDR_UNIX f -> `Unix f)
101-
in
10287
{ r_address = address
10388
; r_port = port
10489
; r_ssl = ssl
10590
; r_filenames = filenames
106-
; r_sockaddr = sockaddr
107-
; r_remote_ip
108-
; r_remote_ip_parsed
91+
; r_remote_ip = sockaddr
10992
; r_forward_ip = forward_ip
11093
; r_uri = make_uri (Cohttp.Request.uri request)
11194
; r_encoding = Cohttp.Request.encoding request
@@ -140,7 +123,6 @@ let update
140123
; r_meth
141124
; r_forward_ip
142125
; r_remote_ip
143-
; r_remote_ip_parsed
144126
; r_cookies_override
145127
; r_body
146128
; r_sub_path
@@ -150,11 +132,8 @@ let update
150132
let r_ssl = match ssl with Some ssl -> ssl | None -> r_ssl
151133
and r_forward_ip =
152134
match forward_ip with Some forward_ip -> forward_ip | None -> r_forward_ip
153-
and r_remote_ip, r_remote_ip_parsed =
154-
match remote_ip with
155-
| Some remote_ip ->
156-
lazy remote_ip, lazy (`Ip (Ipaddr.of_string_exn remote_ip))
157-
| None -> r_remote_ip, r_remote_ip_parsed
135+
and r_remote_ip =
136+
match remote_ip with Some remote_ip -> remote_ip | None -> r_remote_ip
158137
and r_sub_path = match sub_path with Some _ -> sub_path | None -> r_sub_path
159138
and r_body =
160139
match post_data with
@@ -193,7 +172,6 @@ let update
193172
; r_meth
194173
; r_forward_ip
195174
; r_remote_ip
196-
; r_remote_ip_parsed
197175
; r_body
198176
; r_cookies_override
199177
; r_sub_path
@@ -292,8 +270,19 @@ let post_params r s i =
292270
let files r s i =
293271
match force_post_data r s i with Some v -> Some (v >|= snd) | None -> None
294272

295-
let remote_ip {r_remote_ip; _} = Lazy.force r_remote_ip
296-
let remote_ip_parsed {r_remote_ip_parsed; _} = Lazy.force r_remote_ip_parsed
273+
let remote_ip {r_remote_ip; _} = r_remote_ip
274+
275+
let remote_ip_parsed {r_remote_ip; _} =
276+
let is_prefix prefix s =
277+
(* TODO: Naive version to be swapped with [String.starts_with ~prefix s]
278+
when the dependency on OCaml >= 4.13 is acceptable. *)
279+
let plen = String.length prefix in
280+
String.length s >= plen && String.sub s 0 plen = prefix
281+
in
282+
if is_prefix "unix://" r_remote_ip
283+
then `Unix r_remote_ip
284+
else `Ip (Ipaddr.of_string_exn r_remote_ip)
285+
297286
let forward_ip {r_forward_ip; _} = r_forward_ip
298287
let request_cache {r_request_cache; _} = r_request_cache
299288
let tries {r_tries; _} = r_tries

src/server/ocsigen_request.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ val make :
1919
-> port:int
2020
-> ssl:bool
2121
-> filenames:string list ref
22-
-> sockaddr:Lwt_unix.sockaddr
22+
-> sockaddr:string
2323
-> body:Cohttp_lwt.Body.t
2424
-> connection_closed:unit Lwt.t
2525
-> Cohttp.Request.t

src/server/ocsigen_server.ml

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,6 @@ let () =
3838
("Uncaught Exception after lwt timeout" ^^ "@\n%s")
3939
(Printexc.to_string e)))
4040

41-
let pp_sockaddr ppf = function
42-
| Unix.ADDR_INET (ip, _port) ->
43-
Format.fprintf ppf "%s" (Unix.string_of_inet_addr ip)
44-
| ADDR_UNIX f -> Format.fprintf ppf "%s" f
45-
46-
let _warn sockaddr s =
47-
Logs.warn ~src:section (fun fmt ->
48-
fmt "While talking to %a:%s" pp_sockaddr sockaddr s)
49-
50-
let _dbg sockaddr s =
51-
Logs.info ~src:section (fun fmt ->
52-
fmt "While talking to %a:%s" pp_sockaddr sockaddr s)
53-
5441
(* fatal errors messages *)
5542
let errmsg = function
5643
| Dynlink_wrapper.Error e ->

0 commit comments

Comments
 (0)