From 40155283c380a795c1a0036a31e1b41ed1df0f38 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Mon, 15 Feb 2016 16:05:14 +1100 Subject: [PATCH] Remove some #ifdefs and update documentation * doc/lispref/processes.texi (Network Processes): Remove mention of `dns'. * lisp/net/network-stream.el (open-network-stream): Remove mention of `dns'. * src/process.c (Fset_process_filter) (Fset_process_window_size, Fprocess_contact) (Fprocess_datagram_address, Fset_process_datagram_address) (Fset_network_process_option, Fprocess_send_region) (Fprocess_send_string, Fset_process_coding_system) (Fset_process_filter_multibyte): Remove the #ifdef HAVE_GETADDRINFO_A checks. (Fprocess_send_string): Wait for TLS negotiation. (wait_for_tls_negotiation): New function. (send_process): Remove the TLS boot check. * src/process.c (Fmake_network_process): Ditto. --- doc/lispref/processes.texi | 6 ---- lisp/net/network-stream.el | 6 +--- src/process.c | 73 +++++++++++++------------------------- 3 files changed, 26 insertions(+), 59 deletions(-) diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index a1c8755c926..60b2d90d819 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -2418,12 +2418,6 @@ second argument matching @code{"open"} (if successful) or @code{make-network-process} does not return until the connection has succeeded or failed. -If @var{nowait} is @code{dns}, also do the @acronym{DNS} lookup -asynchronously, if supported. In that case, the process is returned -before a connection has been made, and the client should not try -communicating with the process until it has changed status to -@code{"connected"}. - @item :tls-parameters When opening a TLS connection, this should be where the first element is the TLS type (which should either be @code{gnutls-x509pki} or diff --git a/lisp/net/network-stream.el b/lisp/net/network-stream.el index 676744668d4..b0d479f948e 100644 --- a/lisp/net/network-stream.el +++ b/lisp/net/network-stream.el @@ -137,11 +137,7 @@ non-nil, is used warn the user if the connection isn't encrypted. a greeting from the server. :nowait, if non-nil, says the connection should be made -asynchronously, if possible. If it is `dns', also do the DNS -lookup asynchronously, if supported. In that case, the process -is returned before a connection has been made, and the client -should not try communicating with the process until it has -changed status to \"connected\". +asynchronously, if possible. :tls-parameters is a list that should be supplied if you're opening a TLS connection. The first element is the TLS diff --git a/src/process.c b/src/process.c index 5acf31550ef..1dd52742e16 100644 --- a/src/process.c +++ b/src/process.c @@ -1031,10 +1031,8 @@ The string argument is normally a multibyte string, except: CHECK_PROCESS (process); -#ifdef HAVE_GETADDRINFO_A if (NETCONN_P (process)) wait_for_socket_fds (process); -#endif p = XPROCESS (process); @@ -1120,10 +1118,8 @@ DEFUN ("set-process-window-size", Fset_process_window_size, { CHECK_PROCESS (process); -#ifdef HAVE_GETADDRINFO_A if (NETCONN_P (process)) wait_for_socket_fds (process); -#endif /* All known platforms store window sizes as 'unsigned short'. */ CHECK_RANGED_INTEGER (height, 0, USHRT_MAX); @@ -1207,10 +1203,8 @@ list of keywords. */) #ifdef DATAGRAM_SOCKETS -#ifdef HAVE_GETADDRINFO_A if (NETCONN_P (process)) wait_for_socket_fds (process); -#endif if (DATAGRAM_CONN_P (process) && (EQ (key, Qt) || EQ (key, QCremote))) @@ -2441,10 +2435,8 @@ DEFUN ("process-datagram-address", Fprocess_datagram_address, Sprocess_datagram_ CHECK_PROCESS (process); -#ifdef HAVE_GETADDRINFO_A if (NETCONN_P (process)) wait_for_socket_fds (process); -#endif if (!DATAGRAM_CONN_P (process)) return Qnil; @@ -2465,10 +2457,8 @@ Returns nil upon error setting address, ADDRESS otherwise. */) CHECK_PROCESS (process); -#ifdef HAVE_GETADDRINFO_A if (NETCONN_P (process)) wait_for_socket_fds (process); -#endif if (!DATAGRAM_CONN_P (process)) return Qnil; @@ -2638,9 +2628,7 @@ OPTION is not a supported option, return nil instead; otherwise return t. */) if (!NETCONN1_P (p)) error ("Process is not a network process"); -#ifdef HAVE_GETADDRINFO_A wait_for_socket_fds (process); -#endif s = p->infd; if (s < 0) @@ -3453,16 +3441,12 @@ system used for both reading and writing for this process. If CODING is a cons (DECODING . ENCODING), DECODING is used for reading, and ENCODING is used for writing. -:nowait NOWAIT -- If NOWAIT is non-nil for a stream type client +:nowait BOOL -- If NOWAIT is non-nil for a stream type client process, return without waiting for the connection to complete; instead, the sentinel function will be called with second arg matching "open" (if successful) or "failed" when the connect completes. Default is to use a blocking connect (i.e. wait) for stream type -connections. If NOWAIT is `dns', also do the DNS lookup -asynchronously, if supported. In that case, the process is returned -before a connection has been made, and the client should not try -communicating with the process until it has changed status to -"connected". +connections. :noquery BOOL -- Query the user unless BOOL is non-nil, and process is running when Emacs is exited. @@ -3725,7 +3709,7 @@ usage: (make-network-process &rest ARGS) */) #endif #ifdef HAVE_GETADDRINFO_A - if (EQ (Fplist_get (contact, QCnowait), Qt) && + if (!NILP (Fplist_get (contact, QCnowait)) && !NILP (host)) { int ret; @@ -4683,24 +4667,32 @@ check_for_dns (Lisp_Object proc) return ip_addresses; } +#endif /* HAVE_GETADDRINFO_A */ + static void -wait_for_socket_fds(Lisp_Object process) +wait_for_socket_fds (Lisp_Object process) { - while (XPROCESS(process)->dns_requests) - { - wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0); - } + while (XPROCESS (process)->infd < 0 && + EQ (XPROCESS (process)->status, Qconnect)) + wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0); } static void -wait_while_connecting(Lisp_Object process) +wait_while_connecting (Lisp_Object process) { - while (EQ (Qconnect, XPROCESS(process)->status)) - { - wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0); - } + while (EQ (XPROCESS (process)->status, Qconnect)) + wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0); +} + +static void +wait_for_tls_negotiation (Lisp_Object process) +{ +#ifdef HAVE_GNUTLS + while (EQ (XPROCESS (process)->status, Qrun) && + !NILP (XPROCESS (process)->gnutls_boot_parameters)) + wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0); +#endif } -#endif /* HAVE_GETADDRINFO_A */ /* This variable is different from waiting_for_input in keyboard.c. It is used to communicate to a lisp process-filter/sentinel (via the @@ -5962,13 +5954,6 @@ send_process (Lisp_Object proc, const char *buf, ptrdiff_t len, if (p->outfd < 0) error ("Output file descriptor of %s is closed", SDATA (p->name)); -#ifdef HAVE_GNUTLS - /* The TLS connection hasn't been set up yet, so we can't write - anything on the socket. */ - if (!NILP (p->gnutls_boot_parameters)) - return; -#endif - coding = proc_encode_coding_system[p->outfd]; Vlast_coding_system_used = CODING_ID_NAME (coding->id); @@ -6193,10 +6178,8 @@ Output from processes can arrive in between bunches. */) if (XINT (start) < GPT && XINT (end) > GPT) move_gap_both (XINT (start), start_byte); -#ifdef HAVE_GETADDRINFO_A if (NETCONN_P (proc)) wait_while_connecting (proc); -#endif send_process (proc, (char *) BYTE_POS_ADDR (start_byte), end_byte - start_byte, Fcurrent_buffer ()); @@ -6218,10 +6201,10 @@ Output from processes can arrive in between bunches. */) CHECK_STRING (string); proc = get_process (process); -#ifdef HAVE_GETADDRINFO_A - if (NETCONN_P (proc)) + if (NETCONN_P (proc)) { wait_while_connecting (proc); -#endif + wait_for_tls_negotiation (proc); + } send_process (proc, SSDATA (string), SBYTES (string), string); @@ -6639,10 +6622,8 @@ process has been transmitted to the serial port. */) proc = get_process (process); -#ifdef HAVE_GETADDRINFO_A if (NETCONN_P (proc)) wait_while_connecting (proc); -#endif if (DATAGRAM_CONN_P (proc)) return process; @@ -7099,10 +7080,8 @@ encode subprocess input. */) CHECK_PROCESS (process); -#ifdef HAVE_GETADDRINFO_A if (NETCONN_P (process)) wait_for_socket_fds (process); -#endif p = XPROCESS (process); @@ -7143,10 +7122,8 @@ suppressed. */) CHECK_PROCESS (process); -#ifdef HAVE_GETADDRINFO_A if (NETCONN_P (process)) wait_for_socket_fds (process); -#endif p = XPROCESS (process); if (NILP (flag)) -- 2.39.5