From: Mario Lang <mlang@delysid.org>
Subject: Local interface used for outbound network connections
Date: Tue, 07 Jan 2003 23:43:53 +0100 [thread overview]
Message-ID: <87ptr81sye.fsf@lexx.delysid.org> (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
next reply other threads:[~2003-01-07 22:43 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-07 22:43 Mario Lang [this message]
2003-01-08 11:50 ` Local interface used for outbound network connections 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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ptr81sye.fsf@lexx.delysid.org \
--to=mlang@delysid.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).