83 lines
2.1 KiB
Diff
83 lines
2.1 KiB
Diff
|
*** tproxy.c.orig Fri Dec 20 10:53:24 1996
|
||
|
--- tproxy.c Sun Jan 3 11:33:55 1999
|
||
|
***************
|
||
|
*** 135,140 ****
|
||
|
--- 135,144 ----
|
||
|
#include <netinet/in.h>
|
||
|
#include <sys/signal.h>
|
||
|
#include <syslog.h>
|
||
|
+ #include <unistd.h>
|
||
|
+ #include <fcntl.h>
|
||
|
+ #include <sys/ioctl.h>
|
||
|
+ #include <net/if.h>
|
||
|
#include "tproxy.h"
|
||
|
|
||
|
#ifdef AIX
|
||
|
***************
|
||
|
*** 147,152 ****
|
||
|
--- 151,159 ----
|
||
|
#define bzero(buf,size) memset(buf, '\0', size);
|
||
|
#endif /* SYSV */
|
||
|
|
||
|
+ #include "ip_compat.h"
|
||
|
+ #include "ip_fil.h"
|
||
|
+ #include "ip_nat.h"
|
||
|
|
||
|
|
||
|
/* socket to audio server */
|
||
|
***************
|
||
|
*** 324,329 ****
|
||
|
--- 331,369 ----
|
||
|
char localbuf[2048];
|
||
|
void timeout();
|
||
|
extern int errno;
|
||
|
+ /*
|
||
|
+ * IP-Filter block
|
||
|
+ */
|
||
|
+ struct sockaddr_in laddr, faddr;
|
||
|
+ struct natlookup natlookup;
|
||
|
+ int slen, natfd;
|
||
|
+
|
||
|
+ bzero((char *)&laddr, sizeof(laddr));
|
||
|
+ bzero((char *)&faddr, sizeof(faddr));
|
||
|
+ slen = sizeof(laddr);
|
||
|
+ if (getsockname(0, (struct sockaddr *)&laddr, &slen) < 0)
|
||
|
+ return -1;
|
||
|
+ slen = sizeof(faddr);
|
||
|
+ if (getpeername(0, (struct sockaddr *)&faddr, &slen) < 0)
|
||
|
+ return -1;
|
||
|
+ natlookup.nl_inport = laddr.sin_port;
|
||
|
+ natlookup.nl_outport = faddr.sin_port;
|
||
|
+ natlookup.nl_inip = laddr.sin_addr;
|
||
|
+ natlookup.nl_outip = faddr.sin_addr;
|
||
|
+ natlookup.nl_flags = IPN_TCP;
|
||
|
+ if ((natfd = open(IPL_NAT, O_RDONLY)) < 0)
|
||
|
+ return -1;
|
||
|
+ if (ioctl(natfd, SIOCGNATL, &natlookup) == -1) {
|
||
|
+ syslog(LOG_ERR, "SIOCGNATL failed: %m\n");
|
||
|
+ close(natfd);
|
||
|
+ return -1;
|
||
|
+ }
|
||
|
+ close(natfd);
|
||
|
+ strcpy(hostname, inet_ntoa(natlookup.nl_realip));
|
||
|
+ serverport = ntohs(natlookup.nl_realport);
|
||
|
+ /*
|
||
|
+ * End of IP-Filter block
|
||
|
+ */
|
||
|
|
||
|
/* setup a timeout in case dialog doesn't finish */
|
||
|
signal(SIGALRM, timeout);
|
||
|
***************
|
||
|
*** 337,344 ****
|
||
|
--- 377,386 ----
|
||
|
* and modify the call to (and subroutine) serverconnect() as
|
||
|
* appropriate.
|
||
|
*/
|
||
|
+ #if 0
|
||
|
strcpy(hostname, "randomhostname");
|
||
|
serverport = 7070;
|
||
|
+ #endif
|
||
|
/* Can we connect to the server */
|
||
|
if ( (serverfd = serverconnect(hostname, serverport)) < 0 ) {
|
||
|
/* errno may still be set from previous call */
|