Fix unix config and refactor configs
This commit is contained in:
parent
276af0ba97
commit
bfb550e5a6
@ -19,11 +19,22 @@ static FILE_SERVERS: &str = "mrprox_servers.conf";
|
|||||||
|
|
||||||
const DEF_PORT: u16 = 25565;
|
const DEF_PORT: u16 = 25565;
|
||||||
|
|
||||||
|
const TCP_TYPE: &str = "TCP";
|
||||||
|
const UNIX_TYPE: &str = "UNIX";
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
|
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
|
||||||
pub struct ConfFile{
|
pub struct ConfFile{
|
||||||
|
ip: String,
|
||||||
port: String,
|
port: String,
|
||||||
port_conf: String,
|
conf: ConfServer,
|
||||||
conf_type: String,
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
|
||||||
|
pub struct ConfServer{
|
||||||
|
sock_type: String,
|
||||||
|
path: Option<String>,
|
||||||
|
ip: Option<String>,
|
||||||
|
port: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
|
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
|
||||||
@ -35,8 +46,8 @@ pub struct ServerData{
|
|||||||
pub struct Config{
|
pub struct Config{
|
||||||
l_servers : HashMap<String, String>,
|
l_servers : HashMap<String, String>,
|
||||||
port: String,
|
port: String,
|
||||||
port_conf: String,
|
ip: String,
|
||||||
conf_type: String,
|
conf: ConfServer,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
@ -47,9 +58,9 @@ impl Config {
|
|||||||
let mut s2 = String::new();
|
let mut s2 = String::new();
|
||||||
conf_file.read_to_string(&mut s1).unwrap();
|
conf_file.read_to_string(&mut s1).unwrap();
|
||||||
servers_file.read_to_string(&mut s2).unwrap();
|
servers_file.read_to_string(&mut s2).unwrap();
|
||||||
let yam_conf: ConfFile = match serde_yaml::from_str(&s1) {
|
let yam_conf:ConfFile = match serde_yaml::from_str(&s1) {
|
||||||
Ok(result) => result,
|
Ok(result) => result,
|
||||||
Err(e) => {error!("Config file malformed"); panic!("{}", e);},
|
Err(e) => {error!("Config file malformed: {}",e); panic!("{}", e);},
|
||||||
};
|
};
|
||||||
let yam_ser: Vec<ServerData> = match serde_yaml::from_str(&s2) {
|
let yam_ser: Vec<ServerData> = match serde_yaml::from_str(&s2) {
|
||||||
Ok(result) => result,
|
Ok(result) => result,
|
||||||
@ -58,8 +69,8 @@ impl Config {
|
|||||||
Self{
|
Self{
|
||||||
l_servers: Self::get_servers(&yam_ser),
|
l_servers: Self::get_servers(&yam_ser),
|
||||||
port: yam_conf.port,
|
port: yam_conf.port,
|
||||||
port_conf: yam_conf.port_conf,
|
ip: yam_conf.ip,
|
||||||
conf_type: yam_conf.conf_type,
|
conf: yam_conf.conf,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,12 +132,45 @@ impl Config {
|
|||||||
&self.port
|
&self.port
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_ip(&self) -> &String{
|
||||||
|
&self.ip
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_port_conf(&self) -> &String{
|
pub fn get_port_conf(&self) -> &String{
|
||||||
&self.port_conf
|
match self.conf.sock_type.as_str() {
|
||||||
|
TCP_TYPE => &self.conf.port.as_ref().unwrap(),
|
||||||
|
_=> {error!("Only tcp types have port"); panic!("Only tcp types have port")},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_conf_ip(&self) -> &String{
|
||||||
|
match self.conf.sock_type.as_str() {
|
||||||
|
TCP_TYPE => &self.conf.ip.as_ref().unwrap(),
|
||||||
|
_=> {error!("Only tcp types have IP"); panic!("Only tcp types have IP")},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_bindeable_ip(&self) -> String {
|
||||||
|
build_bindeable_ip(&self.ip,&self.port)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_bindeable_conf(&self) -> String {
|
||||||
|
match self.conf.sock_type.as_str() {
|
||||||
|
TCP_TYPE => build_bindeable_ip(
|
||||||
|
self.conf.ip.as_ref().unwrap(),
|
||||||
|
self.conf.port.as_ref().unwrap()
|
||||||
|
),
|
||||||
|
UNIX_TYPE => self.conf.path.as_ref().unwrap().to_string(),
|
||||||
|
_=> {error!("Invalid type"); panic!("Invalid type")},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_conf_type(&self) -> &String{
|
pub fn get_conf_type(&self) -> &String{
|
||||||
&self.conf_type
|
&self.conf.sock_type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn build_bindeable_ip(ip: &String, port: &String) -> String{
|
||||||
|
format!("{}:{}",ip,port)
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ use std::net::TcpStream;
|
|||||||
use std::os::unix::net::UnixListener;
|
use std::os::unix::net::UnixListener;
|
||||||
use std::os::unix::net::UnixStream;
|
use std::os::unix::net::UnixStream;
|
||||||
use std::io::{Error, ErrorKind};
|
use std::io::{Error, ErrorKind};
|
||||||
|
use log::{warn};
|
||||||
|
|
||||||
pub const TCP_LIS : u8 = 1;
|
pub const TCP_LIS : u8 = 1;
|
||||||
pub const UNIX_LIS : u8 = 2;
|
pub const UNIX_LIS : u8 = 2;
|
||||||
@ -35,10 +36,18 @@ impl GenericListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn bind(port: &String, type_lis: u8) -> Result<Self, String>{
|
pub fn bind(address: String, type_lis: u8) -> Result<Self, String>{
|
||||||
let ret = match type_lis {
|
let ret = match type_lis {
|
||||||
TCP_LIS => Self::new_tcp(TcpListener::bind(String::from("0.0.0.0:") + port).unwrap()),
|
TCP_LIS => Self::new_tcp(
|
||||||
UNIX_LIS => Self::new_unix(UnixListener::bind(port).unwrap()),
|
match TcpListener::bind(address) {
|
||||||
|
Ok(s) => s,
|
||||||
|
Err(e) => return Err(e.to_string()),
|
||||||
|
}),
|
||||||
|
UNIX_LIS => Self::new_unix(
|
||||||
|
match UnixListener::bind(address){
|
||||||
|
Ok(s) => s,
|
||||||
|
Err(e) => return Err(e.to_string()),
|
||||||
|
}),
|
||||||
_ => return Err("No valid option".to_string()),
|
_ => return Err("No valid option".to_string()),
|
||||||
};
|
};
|
||||||
Ok(ret)
|
Ok(ret)
|
||||||
@ -57,8 +66,8 @@ impl GenericListener {
|
|||||||
|
|
||||||
pub fn string_top_type(s: &String) -> u8 {
|
pub fn string_top_type(s: &String) -> u8 {
|
||||||
match (*s).as_str(){
|
match (*s).as_str(){
|
||||||
"tcp" => TCP_LIS,
|
"TCP" => TCP_LIS,
|
||||||
"unix" => UNIX_LIS,
|
"UNIX" => UNIX_LIS,
|
||||||
&_ => ERROR_LIS,
|
&_ => ERROR_LIS,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ use crate::server_conf::conexion::Conexion;
|
|||||||
use crate::server_conf::listener::GenericListener;
|
use crate::server_conf::listener::GenericListener;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
use log::{error,info};
|
use log::{error,warn,info};
|
||||||
|
|
||||||
pub struct ConfSer{
|
pub struct ConfSer{
|
||||||
path: String,
|
path: String,
|
||||||
@ -11,11 +11,17 @@ pub struct ConfSer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ConfSer {
|
impl ConfSer {
|
||||||
fn new(path: &String, conf_type: &String) -> ConfSer{
|
fn new(path: String, conf_type: &String) -> ConfSer{
|
||||||
ConfSer{
|
ConfSer{
|
||||||
path: path.clone(),
|
path: path.clone(),
|
||||||
listener: GenericListener::bind(path,
|
listener: match GenericListener::bind(path,
|
||||||
GenericListener::string_top_type(conf_type)).unwrap(),
|
GenericListener::string_top_type(conf_type)){
|
||||||
|
Ok(l) => l,
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Error al levantar el servidor de configuraciones:{}",e);
|
||||||
|
panic!("Error al levantar el servidor de configuraciones:{}",e)
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29,8 +35,10 @@ impl Drop for ConfSer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn start(conf: Arc<RwLock<conf::Config>>){
|
pub fn start(conf: Arc<RwLock<conf::Config>>){
|
||||||
let ser = ConfSer::new(conf.read().unwrap().get_port_conf()
|
let ser = ConfSer::new(
|
||||||
,conf.read().unwrap().get_conf_type());
|
conf.read().unwrap().get_bindeable_conf(),
|
||||||
|
conf.read().unwrap().get_conf_type(),
|
||||||
|
);
|
||||||
|
|
||||||
loop{
|
loop{
|
||||||
match ser.listener.accept() {
|
match ser.listener.accept() {
|
||||||
|
@ -10,7 +10,9 @@ use crate::conf;
|
|||||||
use log::{error, info};
|
use log::{error, info};
|
||||||
|
|
||||||
pub fn start(servers: Arc<RwLock<conf::Config>>){
|
pub fn start(servers: Arc<RwLock<conf::Config>>){
|
||||||
let listener = TcpListener::bind(String::from("0.0.0.0:") + servers.read().unwrap().get_port()).unwrap();
|
let listener = TcpListener::bind(
|
||||||
|
servers.read().unwrap().get_bindeable_ip()
|
||||||
|
).unwrap();
|
||||||
let guard = Arc::new(RwLock::new(guard::Guard::new()));
|
let guard = Arc::new(RwLock::new(guard::Guard::new()));
|
||||||
for stream in listener.incoming() {
|
for stream in listener.incoming() {
|
||||||
if guard.read().unwrap().can_add(){
|
if guard.read().unwrap().can_add(){
|
||||||
@ -60,3 +62,4 @@ fn conect_server(servers: Arc<RwLock<conf::Config>>,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user