aboutsummaryrefslogtreecommitdiffstats
path: root/src/process.c
diff options
context:
space:
mode:
authorRobert Pluim2019-08-07 13:55:38 +0200
committerRobert Pluim2019-08-07 13:55:38 +0200
commit76662cc47d0dd1482442914d0b1f5011f0c86c5e (patch)
tree01e3f26615d579cc8889b7a4a296cc98c8129af7 /src/process.c
parent742c2344bf076040f9c57f37b2220410f9e27304 (diff)
downloademacs-76662cc47d0dd1482442914d0b1f5011f0c86c5e.tar.gz
emacs-76662cc47d0dd1482442914d0b1f5011f0c86c5e.zip
fixup! Implement hostname->ip lookup function
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c40
1 files changed, 16 insertions, 24 deletions
diff --git a/src/process.c b/src/process.c
index 42909c4ba4f..7b1723b9f56 100644
--- a/src/process.c
+++ b/src/process.c
@@ -2488,7 +2488,7 @@ usage: (make-pipe-process &rest ARGS) */)
2488 The address family of sa is not included in the result. */ 2488 The address family of sa is not included in the result. */
2489 2489
2490Lisp_Object 2490Lisp_Object
2491conv_sockaddr_to_lisp (struct sockaddr *sa, ptrdiff_t len, bool include_port) 2491conv_sockaddr_to_lisp (struct sockaddr *sa, ptrdiff_t len)
2492{ 2492{
2493 Lisp_Object address; 2493 Lisp_Object address;
2494 ptrdiff_t i; 2494 ptrdiff_t i;
@@ -2507,12 +2507,9 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, ptrdiff_t len, bool include_port)
2507 { 2507 {
2508 DECLARE_POINTER_ALIAS (sin, struct sockaddr_in, sa); 2508 DECLARE_POINTER_ALIAS (sin, struct sockaddr_in, sa);
2509 len = sizeof (sin->sin_addr) + 1; 2509 len = sizeof (sin->sin_addr) + 1;
2510 if (!include_port)
2511 len--;
2512 address = Fmake_vector (make_number (len), Qnil); 2510 address = Fmake_vector (make_number (len), Qnil);
2513 p = XVECTOR (address); 2511 p = XVECTOR (address);
2514 if (include_port) 2512 p->contents[--len] = make_number (ntohs (sin->sin_port));
2515 p->contents[--len] = make_number (ntohs (sin->sin_port));
2516 cp = (unsigned char *) &sin->sin_addr; 2513 cp = (unsigned char *) &sin->sin_addr;
2517 break; 2514 break;
2518 } 2515 }
@@ -2522,12 +2519,9 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, ptrdiff_t len, bool include_port)
2522 DECLARE_POINTER_ALIAS (sin6, struct sockaddr_in6, sa); 2519 DECLARE_POINTER_ALIAS (sin6, struct sockaddr_in6, sa);
2523 DECLARE_POINTER_ALIAS (ip6, uint16_t, &sin6->sin6_addr); 2520 DECLARE_POINTER_ALIAS (ip6, uint16_t, &sin6->sin6_addr);
2524 len = sizeof (sin6->sin6_addr) / 2 + 1; 2521 len = sizeof (sin6->sin6_addr) / 2 + 1;
2525 if (!include_port)
2526 len--;
2527 address = Fmake_vector (make_number (len), Qnil); 2522 address = Fmake_vector (make_number (len), Qnil);
2528 p = XVECTOR (address); 2523 p = XVECTOR (address);
2529 if (include_port) 2524 p->contents[--len] = make_number (ntohs (sin6->sin6_port));
2530 p->contents[--len] = make_number (ntohs (sin6->sin6_port));
2531 for (i = 0; i < len; i++) 2525 for (i = 0; i < len; i++)
2532 p->contents[i] = make_number (ntohs (ip6[i])); 2526 p->contents[i] = make_number (ntohs (ip6[i]));
2533 return address; 2527 return address;
@@ -2578,7 +2572,7 @@ conv_addrinfo_to_lisp (struct addrinfo *res)
2578{ 2572{
2579 Lisp_Object protocol = make_number (res->ai_protocol); 2573 Lisp_Object protocol = make_number (res->ai_protocol);
2580 eassert (XINT (protocol) == res->ai_protocol); 2574 eassert (XINT (protocol) == res->ai_protocol);
2581 return Fcons (protocol, conv_sockaddr_to_lisp (res->ai_addr, res->ai_addrlen, true)); 2575 return Fcons (protocol, conv_sockaddr_to_lisp (res->ai_addr, res->ai_addrlen));
2582} 2576}
2583 2577
2584 2578
@@ -2720,8 +2714,7 @@ set up yet, this function will block until socket setup has completed. */)
2720 2714
2721 channel = XPROCESS (process)->infd; 2715 channel = XPROCESS (process)->infd;
2722 return conv_sockaddr_to_lisp (datagram_address[channel].sa, 2716 return conv_sockaddr_to_lisp (datagram_address[channel].sa,
2723 datagram_address[channel].len, 2717 datagram_address[channel].len);
2724 true);
2725} 2718}
2726 2719
2727DEFUN ("set-process-datagram-address", Fset_process_datagram_address, Sset_process_datagram_address, 2720DEFUN ("set-process-datagram-address", Fset_process_datagram_address, Sset_process_datagram_address,
@@ -3582,7 +3575,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos,
3582#endif 3575#endif
3583 3576
3584 contact = Fplist_put (contact, p->is_server? QClocal: QCremote, 3577 contact = Fplist_put (contact, p->is_server? QClocal: QCremote,
3585 conv_sockaddr_to_lisp (sa, addrlen, true)); 3578 conv_sockaddr_to_lisp (sa, addrlen));
3586#ifdef HAVE_GETSOCKNAME 3579#ifdef HAVE_GETSOCKNAME
3587 if (!p->is_server) 3580 if (!p->is_server)
3588 { 3581 {
@@ -3591,7 +3584,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos,
3591 DECLARE_POINTER_ALIAS (psa1, struct sockaddr, &sa1); 3584 DECLARE_POINTER_ALIAS (psa1, struct sockaddr, &sa1);
3592 if (getsockname (s, psa1, &len1) == 0) 3585 if (getsockname (s, psa1, &len1) == 0)
3593 contact = Fplist_put (contact, QClocal, 3586 contact = Fplist_put (contact, QClocal,
3594 conv_sockaddr_to_lisp (psa1, len1, true)); 3587 conv_sockaddr_to_lisp (psa1, len1));
3595 } 3588 }
3596#endif 3589#endif
3597 } 3590 }
@@ -4255,8 +4248,7 @@ network_interface_list (void)
4255 namebuf[sizeof (ifq->ifr_name)] = 0; 4248 namebuf[sizeof (ifq->ifr_name)] = 0;
4256 res = Fcons (Fcons (build_string (namebuf), 4249 res = Fcons (Fcons (build_string (namebuf),
4257 conv_sockaddr_to_lisp (&ifq->ifr_addr, 4250 conv_sockaddr_to_lisp (&ifq->ifr_addr,
4258 sizeof (struct sockaddr), 4251 sizeof (struct sockaddr))),
4259 true)),
4260 res); 4252 res);
4261 } 4253 }
4262 4254
@@ -4459,9 +4451,9 @@ network_interface_info (Lisp_Object ifname)
4459 { 4451 {
4460 any = 1; 4452 any = 1;
4461#ifdef HAVE_STRUCT_IFREQ_IFR_NETMASK 4453#ifdef HAVE_STRUCT_IFREQ_IFR_NETMASK
4462 elt = conv_sockaddr_to_lisp (&rq.ifr_netmask, sizeof (rq.ifr_netmask), true); 4454 elt = conv_sockaddr_to_lisp (&rq.ifr_netmask, sizeof (rq.ifr_netmask));
4463#else 4455#else
4464 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr), true); 4456 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr));
4465#endif 4457#endif
4466 } 4458 }
4467#endif 4459#endif
@@ -4472,7 +4464,7 @@ network_interface_info (Lisp_Object ifname)
4472 if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0) 4464 if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0)
4473 { 4465 {
4474 any = 1; 4466 any = 1;
4475 elt = conv_sockaddr_to_lisp (&rq.ifr_broadaddr, sizeof (rq.ifr_broadaddr), true); 4467 elt = conv_sockaddr_to_lisp (&rq.ifr_broadaddr, sizeof (rq.ifr_broadaddr));
4476 } 4468 }
4477#endif 4469#endif
4478 res = Fcons (elt, res); 4470 res = Fcons (elt, res);
@@ -4482,7 +4474,7 @@ network_interface_info (Lisp_Object ifname)
4482 if (ioctl (s, SIOCGIFADDR, &rq) == 0) 4474 if (ioctl (s, SIOCGIFADDR, &rq) == 0)
4483 { 4475 {
4484 any = 1; 4476 any = 1;
4485 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr), true); 4477 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr));
4486 } 4478 }
4487#endif 4479#endif
4488 res = Fcons (elt, res); 4480 res = Fcons (elt, res);
@@ -4602,7 +4594,7 @@ nil if none were found. Each address is a vector of integers. */)
4602 for (lres = res; lres; lres = lres->ai_next) 4594 for (lres = res; lres; lres = lres->ai_next)
4603 { 4595 {
4604 addresses = Fcons (conv_sockaddr_to_lisp 4596 addresses = Fcons (conv_sockaddr_to_lisp
4605 (lres->ai_addr, lres->ai_addrlen, false), 4597 (lres->ai_addr, lres->ai_addrlen),
4606 addresses); 4598 addresses);
4607 } 4599 }
4608 addresses = Fnreverse (addresses); 4600 addresses = Fnreverse (addresses);
@@ -4879,12 +4871,12 @@ server_accept_connection (Lisp_Object server, int channel)
4879 if (!NILP (service)) 4871 if (!NILP (service))
4880 contact = Fplist_put (contact, QCservice, service); 4872 contact = Fplist_put (contact, QCservice, service);
4881 contact = Fplist_put (contact, QCremote, 4873 contact = Fplist_put (contact, QCremote,
4882 conv_sockaddr_to_lisp (&saddr.sa, len, true)); 4874 conv_sockaddr_to_lisp (&saddr.sa, len));
4883#ifdef HAVE_GETSOCKNAME 4875#ifdef HAVE_GETSOCKNAME
4884 len = sizeof saddr; 4876 len = sizeof saddr;
4885 if (getsockname (s, &saddr.sa, &len) == 0) 4877 if (getsockname (s, &saddr.sa, &len) == 0)
4886 contact = Fplist_put (contact, QClocal, 4878 contact = Fplist_put (contact, QClocal,
4887 conv_sockaddr_to_lisp (&saddr.sa, len, true)); 4879 conv_sockaddr_to_lisp (&saddr.sa, len));
4888#endif 4880#endif
4889 4881
4890 pset_childp (p, contact); 4882 pset_childp (p, contact);
@@ -8116,7 +8108,7 @@ init_process_emacs (int sockfd)
8116 union u_sockaddr sa; 8108 union u_sockaddr sa;
8117 socklen_t salen = sizeof sa; 8109 socklen_t salen = sizeof sa;
8118 if (getsockname (sockfd, &sa.sa, &salen) == 0) 8110 if (getsockname (sockfd, &sa.sa, &salen) == 0)
8119 sockname = conv_sockaddr_to_lisp (&sa.sa, salen, true); 8111 sockname = conv_sockaddr_to_lisp (&sa.sa, salen);
8120 } 8112 }
8121# endif 8113# endif
8122 Vinternal__daemon_sockname = sockname; 8114 Vinternal__daemon_sockname = sockname;