openbsd-ports/games/tetrinetx/patches/patch-src_main_c
simon 6e84edd2ca import tetrinetx
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@
2007-09-06 17:58:55 +00:00

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; }