unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Local interface used for outbound network connections
@ 2003-01-07 22:43 Mario Lang
  2003-01-08 11:50 ` Kim F. Storm
  2003-01-09  7:28 ` Richard Stallman
  0 siblings, 2 replies; 7+ messages in thread
From: Mario Lang @ 2003-01-07 22:43 UTC (permalink / raw)


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 #<buffer irc.eu.freenode.net:6667>
    :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 <URL:http://debian.org/>
        | Get my public key via finger mlang@db.debian.org
        | 1024D/7FC1A0854909BCCDBE6C102DDFFC022A6B113E44

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2003-01-09 15:27 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-01-07 22:43 Local interface used for outbound network connections Mario Lang
2003-01-08 11:50 ` Kim F. Storm
2003-01-08 14:49   ` Mario Lang
2003-01-08 16:39     ` Kim F. Storm
2003-01-08 16:54       ` Kim F. Storm
2003-01-09  7:28 ` Richard Stallman
2003-01-09 15:27   ` Mario Lang

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).