Skip to content

Commit f55e8d4

Browse files
committed
v1.2(development beta 1, patch 8)
1. Removed feature "UNIX Socket".
1 parent 776c982 commit f55e8d4

File tree

8 files changed

+107
-336
lines changed

8 files changed

+107
-336
lines changed

README.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ Minecraft Versions before 12w04a are **NOT SUPPORTED**!<br/>
77
## Features
88
* Support reverse proxy for Minecraft servers by server address in the handshake packet which client send to.
99
* Support rewrite server address and server port to camouflage connection which using official server address. (eg: pretend to be a normal connection to Hypixel, avoiding their server address check.)
10-
* Support listening on an UNIX socket or relay to an UNIX socket. (eg: using nginx as your front-end server, connnect to this UNIX socket.)
1110

1211
## Requirements
1312
* Linux
@@ -62,14 +61,13 @@ default destination_object
6261
* loglevel: set max message level in logging message.
6362
>* loglvl: a unsigned short integer, range 0-255. This program will not log message with level higher than this level. 0: Critical, 1: Warning, 2+: Information. For more information, watch loglevel.info.
6463
* bind: set bind information.
65-
>* bind_object: (format: "address:port" or "unix:path") default: "0.0.0.0:25565".
64+
>* bind_object: (format: "address:port") default: "0.0.0.0:25565".
6665
>>* address: the address you wish to bind as an Internet Service. Only x.x.x.x allowed.
6766
>>* port: the port you wish to bind as an Internet Service. Valid range: 1-65535.
68-
>>* path: the socket file you wish to bind as an UNIX Socket.
6967
* proxy_pass: list of relay/relay+rewrites.
7068
>* proxy_type: type of proxies, "relay" for raw relay, "rewrite" for relay with server address camouflage enabled.
7169
>* ident_name: name of destination identification. Usually a Fully Qualified Domain Name(FQDN) by CNAME to your server.
72-
>* destination_object: (format: "address_d[:port]" or "unix:path")
70+
>* destination_object: (format: "address_d[:port]")
7371
>>* address_d: the address you wish to connect. Both FQDN or x.x.x.x allowed.
7472
>>* port: optional, the port you wish to connect. Valid range: 1-65535.<br/>
7573
If not set, the server will detect SRV record first(defined in address_d).<br/>

mod/basic.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
#ifndef _MOD_BASIC_H_
1313
#define _MOD_BASIC_H_
1414
#ifdef linux
15-
#define TYPE_UNIX 1
16-
#define TYPE_INET 2
1715
#define PVER_L_UNIDENT 0
1816
#define PVER_L_ORIGPRO 1
1917
#define PVER_L_LEGACY1 2

mod/linux/config.c

Lines changed: 33 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,13 @@
1616
#include <string.h>
1717
struct conf_bind
1818
{
19-
unsigned short type;
20-
char unix_path[BUFSIZ],inet_addr[BUFSIZ];
19+
char inet_addr[BUFSIZ];
2120
unsigned short inet_port;
2221
};
2322
struct conf_map
2423
{
2524
unsigned short enable_rewrite;
26-
char from[512],to_unix_path[512],to_inet_addr[512];
27-
unsigned short to_type;
25+
char from[512],to_inet_addr[512];
2826
unsigned short to_inet_port;
2927
unsigned short to_inet_hybridmode;
3028
};
@@ -93,18 +91,8 @@ void config_dump(struct conf * source)
9391
break;
9492
}
9593
printf("\n[BIND]\n");
96-
switch(source->bind.type)
97-
{
98-
case TYPE_UNIX:
99-
printf("Type\t\tUNIX Socket\n");
100-
printf("Path\t\t%s\n",source->bind.unix_path);
101-
break;
102-
case TYPE_INET:
103-
printf("Type\t\tInternet Socket\n");
104-
printf("Address\t\t%s\n",source->bind.inet_addr);
105-
printf("Port\t\t%d\n",source->bind.inet_port);
106-
break;
107-
}
94+
printf("Address\t\t%s\n",source->bind.inet_addr);
95+
printf("Port\t\t%d\n",source->bind.inet_port);
10896
for(int i=0;i<source->relay_count;i++)
10997
{
11098
printf("\n[RELAY #%d]\n",i+1);
@@ -118,50 +106,30 @@ void config_dump(struct conf * source)
118106
break;
119107
}
120108
printf("vhost\t\t%s\n",source->relay[i].from);
121-
switch(source->relay[i].to_type)
109+
printf("Address\t\t%s\n",source->relay[i].to_inet_addr);
110+
switch(source->relay[i].to_inet_hybridmode)
122111
{
123-
case TYPE_UNIX:
124-
printf("Type\t\tUNIX Socket\n");
125-
printf("Path\t\t%s\n",source->relay[i].to_unix_path);
112+
case 0:
113+
printf("Port\t\t%d\n",source->relay[i].to_inet_port);
114+
printf("SRV Resolve\tDisabled\n");
126115
break;
127-
case TYPE_INET:
128-
printf("Type\t\tInternet Socket\n");
129-
printf("Address\t\t%s\n",source->relay[i].to_inet_addr);
130-
switch(source->relay[i].to_inet_hybridmode)
131-
{
132-
case 0:
133-
printf("Port\t\t%d\n",source->relay[i].to_inet_port);
134-
printf("SRV Resolve\tDisabled\n");
135-
break;
136-
case 1:
137-
printf("SRV Resolve\tEnabled\n");
138-
break;
139-
}
116+
case 1:
117+
printf("SRV Resolve\tEnabled\n");
140118
break;
141119
}
142120
}
143121
if(source->enable_default==1)
144122
{
145123
printf("\n[DEFAULT RELAY]\n");
146-
switch(source->relay_default.to_type)
124+
printf("Address\t\t%s\n",source->relay_default.to_inet_addr);
125+
switch(source->relay_default.to_inet_hybridmode)
147126
{
148-
case TYPE_UNIX:
149-
printf("Type\t\tUNIX Socket\n");
150-
printf("Path\t%s\n",source->relay_default.to_unix_path);
127+
case 0:
128+
printf("Port\t\t%d\n",source->relay_default.to_inet_port);
129+
printf("SRV Resolve\tDisabled\n");
151130
break;
152-
case TYPE_INET:
153-
printf("Type\t\tInternet Socket\n");
154-
printf("Address\t\t%s\n",source->relay_default.to_inet_addr);
155-
switch(source->relay_default.to_inet_hybridmode)
156-
{
157-
case 0:
158-
printf("Port\t\t%d\n",source->relay_default.to_inet_port);
159-
printf("SRV Resolve\tDisabled\n");
160-
break;
161-
case 1:
162-
printf("SRV Resolve\tEnabled\n");
163-
break;
164-
}
131+
case 1:
132+
printf("SRV Resolve\tEnabled\n");
165133
break;
166134
}
167135
}
@@ -245,17 +213,8 @@ int config_load(char * filename, struct conf * result)
245213
tmpptr=value;
246214
tmpptr=strsplit(tmpptr,':',key2);
247215
tmpptr=strsplit(tmpptr,':',value2);
248-
if(strcmp(key2,"unix")==0)
249-
{
250-
result->bind.type=TYPE_UNIX;
251-
strcpy(result->bind.unix_path,value2);
252-
}
253-
else
254-
{
255-
result->bind.type=TYPE_INET;
256-
strcpy(result->bind.inet_addr,key2);
257-
result->bind.inet_port=basic_atosu(value2);
258-
}
216+
strcpy(result->bind.inet_addr,key2);
217+
result->bind.inet_port=basic_atosu(value2);
259218
}
260219
else if(strcmp(key,"proxy_pass")==0)
261220
{
@@ -292,7 +251,6 @@ int config_load(char * filename, struct conf * result)
292251
}
293252
if(strsplit_fieldcount(tmpptr,':')==1)
294253
{
295-
result->relay[rec_relay].to_type=TYPE_INET;
296254
result->relay[rec_relay].to_inet_hybridmode=1;
297255
tmpptr=strsplit(tmpptr,':',result->relay[rec_relay].to_inet_addr);
298256
result->relay[rec_relay].to_inet_port=25565;
@@ -307,26 +265,17 @@ int config_load(char * filename, struct conf * result)
307265
bzero(value2,sizeof(value2));
308266
tmpptr=strsplit(tmpptr,':',key2);
309267
tmpptr=strsplit(tmpptr,':',value2);
310-
if(strcmp(key2,"unix")==0)
268+
strcpy(result->relay[rec_relay].to_inet_addr,key2);
269+
int port=basic_atosu(value2);
270+
if(port==0)
311271
{
312-
result->relay[rec_relay].to_type=TYPE_UNIX;
313-
strcpy(result->relay[rec_relay].to_unix_path,value2);
272+
line_reccount++;
273+
strcpy(tmp_buffer,buffer[line_reccount+1]);
274+
continue;
314275
}
315276
else
316277
{
317-
result->relay[rec_relay].to_type=TYPE_INET;
318-
strcpy(result->relay[rec_relay].to_inet_addr,key2);
319-
int port=basic_atosu(value2);
320-
if(port==0)
321-
{
322-
line_reccount++;
323-
strcpy(tmp_buffer,buffer[line_reccount+1]);
324-
continue;
325-
}
326-
else
327-
{
328-
result->relay[rec_relay].to_inet_port=port;
329-
}
278+
result->relay[rec_relay].to_inet_port=port;
330279
}
331280
rec_relay++;
332281
line_reccount++;
@@ -350,7 +299,6 @@ int config_load(char * filename, struct conf * result)
350299
if(strsplit_fieldcount(tmpptr,':')==1)
351300
{
352301
relay_default.to_inet_hybridmode=1;
353-
relay_default.to_type=TYPE_INET;
354302
tmpptr=strsplit(tmpptr,':',relay_default.to_inet_addr);
355303
relay_default.to_inet_port=25565;
356304
}
@@ -359,24 +307,15 @@ int config_load(char * filename, struct conf * result)
359307
relay_default.to_inet_hybridmode=0;
360308
tmpptr=strsplit(tmpptr,':',key2);
361309
tmpptr=strsplit(tmpptr,':',value2);
362-
if(strcmp(key2,"unix")==0)
310+
strcpy(relay_default.to_inet_addr,key2);
311+
int port=basic_atosu(value2);
312+
if(port==0)
363313
{
364-
relay_default.to_type=TYPE_UNIX;
365-
strcpy(relay_default.to_unix_path,value2);
314+
continue;
366315
}
367316
else
368317
{
369-
relay_default.to_type=TYPE_INET;
370-
strcpy(relay_default.to_inet_addr,key2);
371-
int port=basic_atosu(value2);
372-
if(port==0)
373-
{
374-
continue;
375-
}
376-
else
377-
{
378-
relay_default.to_inet_port=port;
379-
}
318+
relay_default.to_inet_port=port;
380319
}
381320
}
382321
else
@@ -399,7 +338,7 @@ int config_load(char * filename, struct conf * result)
399338
{
400339
return CONF_ENOLOGLEVEL;
401340
}
402-
if(!((strcmp(result->bind.unix_path,"")!=0)||((strcmp(result->bind.inet_addr,"")!=0)&&(inet_addr(result->bind.inet_addr)!=-1)&&(result->bind.inet_port!=0))))
341+
if(!(((strcmp(result->bind.inet_addr,"")!=0)&&(inet_addr(result->bind.inet_addr)!=-1)&&(result->bind.inet_port!=0))))
403342
{
404343
return CONF_EINVALIDBIND;
405344
}

mod/linux/main.c

Lines changed: 24 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#include <unistd.h>
2121
const char * version_str="1.2-beta1";
2222
const char * year_str="2020-2021";
23-
const short version_internal=43;
23+
const short version_internal=44;
2424
struct conf config;
2525
char configfile[512],cwd[512],config_logfull[BUFSIZ];
2626
unsigned short config_runmode;
@@ -83,7 +83,6 @@ int main(int argc, char ** argv)
8383
{
8484
int socket_inbound_server,strulen,socket_inbound_client;
8585
struct sockaddr_in addr_inbound_server,addr_inbound_client;
86-
struct sockaddr_un uddr_inbound_server,uddr_inbound_client;
8786
signal(SIGTERM,deal_sigterm);
8887
signal(SIGINT,deal_sigterm);
8988
bzero(cwd,512);
@@ -222,54 +221,32 @@ int main(int argc, char ** argv)
222221
{
223222
fclose(tmpfd);
224223
}
225-
if(config.bind.type==TYPE_INET)
224+
socket_inbound_server=socket(AF_INET,SOCK_STREAM,0);
225+
int socket_inbound_server_opt=1;
226+
setsockopt(socket_inbound_server,SOL_SOCKET,SO_REUSEADDR,&socket_inbound_server_opt,sizeof(socket_inbound_server_opt));
227+
in_addr_t bindaddr=0;
228+
if(inet_pton(AF_INET,config.bind.inet_addr,&bindaddr))
226229
{
227-
socket_inbound_server=socket(AF_INET,SOCK_STREAM,0);
228-
int socket_inbound_server_opt=1;
229-
setsockopt(socket_inbound_server,SOL_SOCKET,SO_REUSEADDR,&socket_inbound_server_opt,sizeof(socket_inbound_server_opt));
230-
in_addr_t bindaddr=0;
231-
if(inet_pton(AF_INET,config.bind.inet_addr,&bindaddr))
232-
{
233-
addr_inbound_server=net_mksockaddr_in(AF_INET,&bindaddr,config.bind.inet_port);
234-
}
235-
else
236-
{
237-
mksysmsg(0,config_logfull,config_runmode,config.loglevel,0,"Error: Invalid bind address!\n");
238-
return 14;
239-
}
240-
if(config.bind.inet_port==0)
241-
{
242-
mksysmsg(0,config_logfull,config_runmode,config.loglevel,0,"Error: Invalid bind port!\n");
243-
return 14;
244-
}
245-
strulen=sizeof(struct sockaddr_in);
246-
mksysmsg(0,config_logfull,config_runmode,config.loglevel,2,"Binding on %s:%d...\n",config.bind.inet_addr,config.bind.inet_port);
247-
if(bind(socket_inbound_server,(struct sockaddr *)&addr_inbound_server,strulen)==-1)
248-
{
249-
mksysmsg(0,config_logfull,config_runmode,config.loglevel,0,"Bind Failed!\n");
250-
return 2;
251-
}
252-
mksysmsg(0,config_logfull,config_runmode,config.loglevel,2,"Bind Successful.\n\n");
230+
addr_inbound_server=net_mksockaddr_in(AF_INET,&bindaddr,config.bind.inet_port);
253231
}
254-
else if(config.bind.type==TYPE_UNIX)
232+
else
255233
{
256-
unlink(config.bind.unix_path);
257-
socket_inbound_server=socket(AF_UNIX,SOCK_STREAM,0);
258-
uddr_inbound_server=net_mksockaddr_un(config.bind.unix_path);
259-
strulen=sizeof(uddr_inbound_server);
260-
mksysmsg(0,config_logfull,config_runmode,config.loglevel,2,"Binding on %s...\n",uddr_inbound_server.sun_path);
261-
if(bind(socket_inbound_server,(struct sockaddr *)&uddr_inbound_server,strulen)==-1)
262-
{
263-
mksysmsg(0,config_logfull,config_runmode,config.loglevel,0,"Bind Failed!\n");
264-
return 2;
265-
}
266-
if(chmod(config.bind.unix_path,S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IWOTH|S_IXOTH)==-1)
267-
{
268-
mksysmsg(0,config_logfull,config_runmode,config.loglevel,0,"Set Permission Failed!\n");
269-
return 13;
270-
}
271-
mksysmsg(0,config_logfull,config_runmode,config.loglevel,2,"Bind Successful.\n\n");
234+
mksysmsg(0,config_logfull,config_runmode,config.loglevel,0,"Error: Invalid bind address!\n");
235+
return 14;
236+
}
237+
if(config.bind.inet_port==0)
238+
{
239+
mksysmsg(0,config_logfull,config_runmode,config.loglevel,0,"Error: Invalid bind port!\n");
240+
return 14;
272241
}
242+
strulen=sizeof(struct sockaddr_in);
243+
mksysmsg(0,config_logfull,config_runmode,config.loglevel,2,"Binding on %s:%d...\n",config.bind.inet_addr,config.bind.inet_port);
244+
if(bind(socket_inbound_server,(struct sockaddr *)&addr_inbound_server,strulen)==-1)
245+
{
246+
mksysmsg(0,config_logfull,config_runmode,config.loglevel,0,"Bind Failed!\n");
247+
return 2;
248+
}
249+
mksysmsg(0,config_logfull,config_runmode,config.loglevel,2,"Bind Successful.\n\n");
273250
mksysmsg(0,"",config_runmode,config.loglevel,2,"For more information, watch log file: %s\n\n",config.log);
274251
int pid;
275252
if(config_runmode==2)
@@ -306,14 +283,7 @@ int main(int argc, char ** argv)
306283
while(1)
307284
{
308285
while(listen(socket_inbound_server,1)==-1);
309-
if(config.bind.type==TYPE_INET)
310-
{
311-
socket_inbound_client=accept(socket_inbound_server,(struct sockaddr *)&addr_inbound_client,&strulen);
312-
}
313-
else if(config.bind.type==TYPE_UNIX)
314-
{
315-
socket_inbound_client=accept(socket_inbound_server,(struct sockaddr *)&uddr_inbound_client,&strulen);
316-
}
286+
socket_inbound_client=accept(socket_inbound_server,(struct sockaddr *)&addr_inbound_client,&strulen);
317287
pid=fork();
318288
if(pid>0)
319289
{

0 commit comments

Comments
 (0)