[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] feature/async-dns 4015528 3/3: Remove some #ifdefs and upd
From: |
Lars Ingebrigtsen |
Subject: |
[Emacs-diffs] feature/async-dns 4015528 3/3: Remove some #ifdefs and update documentation |
Date: |
Mon, 15 Feb 2016 05:16:52 +0000 |
branch: feature/async-dns
commit 40155283c380a795c1a0036a31e1b41ed1df0f38
Author: Lars Ingebrigtsen <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>
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 a1c8755..60b2d90 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
address@hidden"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 6767446..b0d479f 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 5acf315..1dd5274 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))