From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Mario Lang Newsgroups: gmane.emacs.devel Subject: Local interface used for outbound network connections Date: Tue, 07 Jan 2003 23:43:53 +0100 Sender: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Message-ID: <87ptr81sye.fsf@lexx.delysid.org> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: main.gmane.org 1041992339 23464 80.91.224.249 (8 Jan 2003 02:18:59 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Wed, 8 Jan 2003 02:18:59 +0000 (UTC) Return-path: Original-Received: from quimby.gnus.org ([80.91.224.244]) by main.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 18W5o2-00066I-00 for ; Wed, 08 Jan 2003 03:18:58 +0100 Original-Received: from monty-python.gnu.org ([199.232.76.173]) by quimby.gnus.org with esmtp (Exim 3.12 #1 (Debian)) id 18W5sr-0006T7-00 for ; Wed, 08 Jan 2003 03:23:57 +0100 Original-Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18W5hu-0001A2-04 for emacs-devel@quimby.gnus.org; Tue, 07 Jan 2003 21:12:38 -0500 Original-Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.10.13) id 18W5hc-00019a-00 for emacs-devel@gnu.org; Tue, 07 Jan 2003 21:12:20 -0500 Original-Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.10.13) id 18W3zs-0003dY-00 for emacs-devel@gnu.org; Tue, 07 Jan 2003 19:23:36 -0500 Original-Received: from [80.109.223.66] (helo=lexx.delysid.org) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18W2Rz-000225-00 for emacs-devel@gnu.org; Tue, 07 Jan 2003 17:43:59 -0500 Original-Received: from mlang by lexx.delysid.org with local (Exim 3.36 #1 (Debian)) id 18W2Rt-0001iA-00 for ; Tue, 07 Jan 2003 23:43:53 +0100 Original-To: emacs-devel@gnu.org User-Agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i386-pc-linux-gnu) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1b5 Precedence: list List-Id: Emacs development discussions. List-Help: List-Post: List-Subscribe: , List-Archive: List-Unsubscribe: , Errors-To: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Xref: main.gmane.org gmane.emacs.devel:10549 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:10549 Hello. We're now working on DCC server support for erc, which involes using make-network-prcess :server t. First of all, thanks to all people involved with that functionality for their work! It seem possible, we're only missing one vital bit of information: For IRC DCC connection, we need a reliable way to optain the IP address we're reachable via. Normally, IRC clients do this by calling getsockname on the connection they have to the IRC server. This returns the interface used + port number. Emacs does (as far as I could see) currently not support this in any way. We'd need to do ugly hacks with ifconfig or whatever, to optain the currently used IP, and this is not really portable. But with a very small addition to make-network-process, we can record the local address used for outbound tcp connections. I've attached the patch. As usual, I'm not good at C, and I'm sure something is wrong, but it works. I originally wanted to use :local, but it appears that indicates server processes, and did not work. So I creates a new keyword symbol, :iface. I know the name is bad, any suggestions for a better name would be nice. Here is what process-contact reports for my currently active irc connection: (process-contact erc-process t) => (:name "erc-irc.eu.freenode.net-6667" :buffer # :host "irc.eu.freenode.net" :service 6667 :remote [195 139 52 134 6667] :iface [80 109 223 66 33231] :filter erc-process-filter) Can someone comment on this. Could we please install that in some form? Thank you *** process.c.~1.388.~ Mon Nov 18 16:40:06 2002 --- process.c Tue Jan 7 23:26:29 2003 *************** *** 130,136 **** Lisp_Object Qopen, Qclosed, Qconnect, Qfailed, Qlisten; Lisp_Object Qlocal, Qdatagram; Lisp_Object QCname, QCbuffer, QChost, QCservice, QCtype; ! Lisp_Object QClocal, QCremote, QCcoding; Lisp_Object QCserver, QCnowait, QCnoquery, QCstop; Lisp_Object QCsentinel, QClog, QCoptions; Lisp_Object Qlast_nonmenu_event; --- 130,136 ---- Lisp_Object Qopen, Qclosed, Qconnect, Qfailed, Qlisten; Lisp_Object Qlocal, Qdatagram; Lisp_Object QCname, QCbuffer, QChost, QCservice, QCtype; ! Lisp_Object QCiface, QClocal, QCremote, QCcoding; Lisp_Object QCserver, QCnowait, QCnoquery, QCstop; Lisp_Object QCsentinel, QClog, QCoptions; Lisp_Object Qlast_nonmenu_event; *************** *** 3066,3071 **** --- 3066,3085 ---- #endif contact = Fplist_put (contact, QCaddress, conv_sockaddr_to_lisp (lres->ai_addr, lres->ai_addrlen)); + #ifdef HAVE_GETSOCKNAME + /* Record the address info returned by getsockname + if (socktype == SOCK_STREAM && !is_server) + { + struct sockaddr_in sa1; + int len1 = sizeof (sa1); + if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0) + { + contact = + Fplist_put (contact, QCiface, + conv_sockaddr_to_lisp (&sa1, len1)); + } + } + #endif } #ifdef HAVE_GETADDRINFO *************** *** 6261,6266 **** --- 6275,6282 ---- staticpro (&QCtype); QClocal = intern (":local"); staticpro (&QClocal); + QCiface = intern (":iface"); + staticpro (&QCiface); QCremote = intern (":remote"); staticpro (&QCremote); QCcoding = intern (":coding"); -- CYa, Mario | Debian Developer | Get my public key via finger mlang@db.debian.org | 1024D/7FC1A0854909BCCDBE6C102DDFFC022A6B113E44