Check for name to be ascii characters only

This commit is contained in:
Phuntsok Drak-pa
2018-03-23 17:25:13 +01:00
parent 7dfbf7c081
commit 5a56afb709
2 changed files with 71 additions and 35 deletions
+48 -29
View File
@@ -179,36 +179,15 @@ fn handle_client(stream: TcpStream, clients: Arc<Mutex<UserMap>>) {
if spliced_input.len() == 5 {
if spliced_input[2] == "CONNECT" && spliced_input[3] == "USER" {
let username = String::from(spliced_input[4]);
let mut used = false;
{
let lock = clients.lock().unwrap();
for (_, entry) in (*lock).iter() {
if username == entry.0 {
used = true;
break;
}
let mut ascii_nick = true;
for c in username.chars() {
if !c.is_ascii() {
ascii_nick = false;
send!("NAME FAILURE");
break;
}
}
if used == false {
send!("NAME OK");
return Ok(username);
} else {
send!("NAME FAILURE");
}
} else {
return Err(Error::new(ErrorKind::Other, "BAD REQ"));
}
}
loop {
send!("NAME REQ");
match receive!() {
input => {
let spliced_input: Vec<&str> = input.split_whitespace().collect();
if spliced_input.len() != 2 || spliced_input[0] != "NAME" {
return Err(Error::new(ErrorKind::Other, "BAD REQ"));
}
let username = String::from(spliced_input[1]);
if ascii_nick {
let mut used = false;
{
let lock = clients.lock().unwrap();
@@ -226,9 +205,49 @@ fn handle_client(stream: TcpStream, clients: Arc<Mutex<UserMap>>) {
send!("NAME FAILURE");
}
}
} else {
return Err(Error::new(ErrorKind::Other, "BAD REQ"));
}
}
loop {
send!("NAME REQ");
match receive!() {
input => {
let spliced_input: Vec<&str> = input.split_whitespace().collect();
if spliced_input.len() != 2 || spliced_input[0] != "NAME" {
return Err(Error::new(ErrorKind::Other, "BAD REQ"));
}
let username = String::from(spliced_input[1]);
let mut ascii_nick = true;
for c in username.chars() {
if !c.is_ascii() {
ascii_nick = false;
send!("NAME FAILURE");
break;
}
}
if ascii_nick {
let mut used = false;
{
let lock = clients.lock().unwrap();
for (_, entry) in (*lock).iter() {
if username == entry.0 {
used = true;
break;
}
}
}
if used == false {
send!("NAME OK");
return Ok(username);
} else {
send!("NAME FAILURE");
}
}
}
}
}
// return Ok(String::new());
}
}
})()