6e84edd2ca
tetrinetx provides a server for hosting TetriNet games (a multiplayer variant of Tetris for up to six players). When the ipv6 flavor is used, IPv4 support is disabled. ok jasper@
257 lines
7.1 KiB
Plaintext
257 lines
7.1 KiB
Plaintext
$OpenBSD: patch-src_main_c,v 1.1.1.1 2007/09/06 17:58:55 simon Exp $
|
|
--- src/main.c.orig Tue Jul 9 05:53:49 2002
|
|
+++ src/main.c Thu Sep 6 09:41:35 2007
|
|
@@ -200,15 +200,23 @@ int is_valid_channelname(char *p)
|
|
|
|
char is_explicit_banned(struct net_t *n)
|
|
{ /* I should use regex, but I've not used it before, and it was late. Easier to write a quick one of my own */
|
|
+#ifdef USE_IPV6
|
|
+ char ip_str[INET6_ADDRSTRLEN], host[INET6_ADDRSTRLEN];
|
|
+#else
|
|
char ip_str[UHOSTLEN+1], host[UHOSTLEN+1];
|
|
char n1[4], n2[4], n3[4], n4[4];
|
|
+#endif
|
|
int i, j; int found;
|
|
|
|
+#ifdef USE_IPV6
|
|
+ inet_ntop(AF_INET6, &n->addr, (char *)ip_str, INET6_ADDRSTRLEN);
|
|
+#else
|
|
sprintf(n1,"%lu", (unsigned long)(n->addr&0xff000000)/(unsigned long)0x1000000);
|
|
sprintf(n2,"%lu", (unsigned long)(n->addr&0x00ff0000)/(unsigned long)0x10000);
|
|
sprintf(n3,"%lu", (unsigned long)(n->addr&0x0000ff00)/(unsigned long)0x100);
|
|
sprintf(n4,"%lu", (unsigned long)n->addr&0x000000ff);
|
|
sprintf(ip_str, "%s.%s.%s.%s", n1, n2, n3, n4);
|
|
+#endif
|
|
|
|
found = 0;
|
|
i = 0;
|
|
@@ -228,8 +236,12 @@ char is_explicit_banned(struct net_t *n)
|
|
|
|
int is_banned(struct net_t *n)
|
|
{ /* I should use regex, but I've not used it before, and it was late. Easier to write a quick one of my own */
|
|
+#ifdef USE_IPV6
|
|
+ char ip_str[INET6_ADDRSTRLEN], host[INET6_ADDRSTRLEN];
|
|
+#else
|
|
char ip_str[UHOSTLEN+1], host[UHOSTLEN+1];
|
|
char n1[4], n2[4], n3[4], n4[4];
|
|
+#endif
|
|
int i, j; int found, allow;
|
|
|
|
allow = 0;
|
|
@@ -247,11 +259,15 @@ int is_banned(struct net_t *n)
|
|
return(0);
|
|
|
|
|
|
+#ifdef USE_IPV6
|
|
+ inet_ntop(AF_INET6, &n->addr, (char *)ip_str, INET6_ADDRSTRLEN);
|
|
+#else
|
|
sprintf(n1,"%lu", (unsigned long)(n->addr&0xff000000)/(unsigned long)0x1000000);
|
|
sprintf(n2,"%lu", (unsigned long)(n->addr&0x00ff0000)/(unsigned long)0x10000);
|
|
sprintf(n3,"%lu", (unsigned long)(n->addr&0x0000ff00)/(unsigned long)0x100);
|
|
sprintf(n4,"%lu", (unsigned long)n->addr&0x000000ff);
|
|
sprintf(ip_str, "%s.%s.%s.%s", n1, n2, n3, n4);
|
|
+#endif
|
|
|
|
found = 0;
|
|
i = 0;
|
|
@@ -404,7 +420,11 @@ void init_telnet_port()
|
|
gnet=malloc(sizeof(struct net_t));
|
|
gnet->next=NULL;
|
|
n=gnet;
|
|
+#ifdef USE_IPV6
|
|
+ getmyip(&n->addr);
|
|
+#else
|
|
n->addr=getmyip();
|
|
+#endif
|
|
n->type=NET_TELNET;
|
|
n->channel = malloc(sizeof(struct channel_t));
|
|
n->channel->name[0] = '\0';
|
|
@@ -452,7 +472,11 @@ void init_query_port()
|
|
/* no existing entry */
|
|
n->next = malloc(sizeof(struct net_t));
|
|
n = n->next;
|
|
+#ifdef USE_IPV6
|
|
+ getmyip(&n->addr);
|
|
+#else
|
|
n->addr=getmyip();
|
|
+#endif
|
|
n->type=NET_QUERY;
|
|
n->next=NULL;
|
|
n->channel = malloc(sizeof(struct channel_t));
|
|
@@ -496,7 +520,11 @@ void init_playback_port()
|
|
/* no existing entry */
|
|
n->next = malloc(sizeof(struct net_t));
|
|
n = n->next;
|
|
+#ifdef USE_IPV6
|
|
+ getmyip(&n->addr);
|
|
+#else
|
|
n->addr=getmyip();
|
|
+#endif
|
|
n->type=NET_PLAYBACK;
|
|
n->next=NULL;
|
|
n->channel = malloc(sizeof(struct channel_t));
|
|
@@ -2317,8 +2345,21 @@ int net_query_playerquery(struct net_t *n, char *buf)
|
|
return 1;
|
|
}
|
|
|
|
+#ifdef USE_IPV6
|
|
int net_query_IPconvert(struct net_t *n, char *host)
|
|
{
|
|
+ char ip_str[INET6_ADDRSTRLEN];
|
|
+
|
|
+ inet_ntop(AF_INET6, &n->addr, (char *)ip_str, INET6_ADDRSTRLEN);
|
|
+ if (n->host[0] == 0 || strlen(n->host) >= UHOSTLEN)
|
|
+ sprintf(host, "%s",ip_str);
|
|
+ else
|
|
+ strcpy(host, n->host);
|
|
+ return 1;
|
|
+}
|
|
+#else
|
|
+int net_query_IPconvert(struct net_t *n, char *host)
|
|
+{
|
|
unsigned char x1, x2, x3, x4;
|
|
IP ip;
|
|
ip = n->addr;
|
|
@@ -2333,6 +2374,7 @@ int net_query_IPconvert(struct net_t *n, char *host)
|
|
strcpy(host, n->host);
|
|
return 1;
|
|
}
|
|
+#endif
|
|
|
|
/* Trim weird useless chars at the end */
|
|
int net_query_TrimStr(char *p)
|
|
@@ -3468,8 +3510,12 @@ void net_query_init(struct net_t *n, char *buf)
|
|
/* Someone has just connected. So lets answer them */
|
|
void net_query(struct net_t *n, char *buf)
|
|
{
|
|
+#ifdef USE_IPV6
|
|
+ struct in6_addr ip;
|
|
+#else
|
|
IP ip;
|
|
/* unsigned char x1, x2, x3, x4; */
|
|
+#endif
|
|
struct net_t *net;
|
|
|
|
net=malloc(sizeof(struct net_t));
|
|
@@ -3481,7 +3527,11 @@ void net_query(struct net_t *n, char *buf)
|
|
net->sock=answer(n->sock,&ip,0);
|
|
setopt(net->sock, 0);
|
|
|
|
+#ifdef USE_IPV6
|
|
+ memcpy(&net->addr, &ip, sizeof(ip));
|
|
+#else
|
|
net->addr=ip;
|
|
+#endif
|
|
net->port=n->port;
|
|
net->securitylevel=LEVEL_NORMAL;
|
|
net->status=STAT_NOTPLAYING;
|
|
@@ -3490,6 +3540,9 @@ void net_query(struct net_t *n, char *buf)
|
|
strcpy(net->nick, "(telnet)");
|
|
do_async_dns(net);
|
|
net->type = NET_WAITINGFORDNS;
|
|
+#ifdef USE_IPV6
|
|
+net_donedns(net);
|
|
+#endif
|
|
}
|
|
|
|
void net_query_donedns (struct net_t *net) {
|
|
@@ -3646,8 +3699,12 @@ int net_playback_isvalidnick(char *p)
|
|
/* Someone has just connected. So lets answer them */
|
|
void net_playback(struct net_t *n, char *buf)
|
|
{
|
|
+#ifdef USE_IPV6
|
|
+ struct in6_addr ip;
|
|
+#else
|
|
IP ip;
|
|
/* unsigned char x1, x2, x3, x4; */
|
|
+#endif
|
|
struct net_t *net;
|
|
|
|
net=malloc(sizeof(struct net_t));
|
|
@@ -3659,7 +3716,11 @@ void net_playback(struct net_t *n, char *buf)
|
|
net->sock=answer(n->sock,&ip,0);
|
|
setopt(net->sock, 0);
|
|
|
|
+#ifdef USE_IPV6
|
|
+ memcpy(&net->addr, &ip, sizeof(ip));
|
|
+#else
|
|
net->addr=ip;
|
|
+#endif
|
|
net->port=n->port;
|
|
net->securitylevel=LEVEL_NORMAL;
|
|
net->status=STAT_NOTPLAYING;
|
|
@@ -3669,6 +3730,9 @@ void net_playback(struct net_t *n, char *buf)
|
|
strcpy(net->nick, "(telnet)");
|
|
do_async_dns(net);
|
|
net->type = NET_WAITINGFORDNS;
|
|
+#ifdef USE_IPV6
|
|
+net_donedns(net);
|
|
+#endif
|
|
}
|
|
|
|
void net_playback_donedns(struct net_t *net) {
|
|
@@ -4348,7 +4412,11 @@ void net_telnet_init(struct net_t *n, char *buf)
|
|
/* Someone has just connected. So lets answer them */
|
|
void net_telnet(struct net_t *n, char *buf)
|
|
{
|
|
+#ifdef USE_IPV6
|
|
+ static struct in6_addr ip;
|
|
+#else
|
|
unsigned long ip;
|
|
+#endif
|
|
struct net_t *net;
|
|
|
|
|
|
@@ -4361,7 +4429,11 @@ void net_telnet(struct net_t *n, char *buf)
|
|
net->sock=answer(n->sock,&ip,0);
|
|
setopt(net->sock, 0);
|
|
/* Save the port stuff */
|
|
+#ifdef USE_IPV6
|
|
+ memcpy(&net->addr, &ip, sizeof(ip));
|
|
+#else
|
|
net->addr=ip;
|
|
+#endif
|
|
net->port=n->port;
|
|
net->securitylevel=LEVEL_NORMAL;
|
|
net->status=STAT_NOTPLAYING;
|
|
@@ -4373,12 +4445,24 @@ void net_telnet(struct net_t *n, char *buf)
|
|
net->timeout_ingame = 30;
|
|
do_async_dns(net);
|
|
net->type = NET_WAITINGFORDNS;
|
|
+#ifdef USE_IPV6
|
|
+net_donedns(net);
|
|
+#endif
|
|
/* net has not been added to socket list */
|
|
/* EOF on this will be EOF on unknown socket */
|
|
|
|
}
|
|
|
|
+#ifdef USE_IPV6
|
|
void do_async_dns (struct net_t *n) {
|
|
+ char ip_str[INET6_ADDRSTRLEN];
|
|
+
|
|
+ inet_ntop(AF_INET6, &n->addr, (char *)ip_str, INET6_ADDRSTRLEN);
|
|
+ sprintf(n->host, "%s", ip_str);
|
|
+ sprintf(n->ip, "%s", ip_str);
|
|
+}
|
|
+#else
|
|
+void do_async_dns (struct net_t *n) {
|
|
char n1[4], n2[4], n3[4], n4[4];
|
|
char buf[1024];
|
|
int res_id;
|
|
@@ -4393,11 +4477,14 @@ void do_async_dns (struct net_t *n) {
|
|
res_id = query_do(buf);
|
|
add_rnet(n, res_id);
|
|
}
|
|
+#endif
|
|
|
|
void net_donedns(struct net_t *net) {
|
|
|
|
if (net->type != NET_WAITINGFORDNS) return;
|
|
+#ifndef USE_IPV6
|
|
rem_rnet(net);
|
|
+#endif
|
|
switch(net->port) {
|
|
case TELNET_PORT: { net_telnet_donedns (net); break; }
|
|
case QUERY_PORT: { net_query_donedns (net); break; }
|