rust/hedgewars-server/src/server/handlers/loggingin.rs
changeset 14672 6e6632068a33
parent 14671 455865ccd36c
child 14673 08a8605bafaf
equal deleted inserted replaced
14671:455865ccd36c 14672:6e6632068a33
    44 ) {
    44 ) {
    45     match message {
    45     match message {
    46         HWProtocolMessage::Nick(nick) => {
    46         HWProtocolMessage::Nick(nick) => {
    47             let client = &mut server.clients[client_id];
    47             let client = &mut server.clients[client_id];
    48             debug!("{} {}", nick, is_name_illegal(&nick));
    48             debug!("{} {}", nick, is_name_illegal(&nick));
    49             let actions = if client.room_id != None {
    49             if client.room_id != None {
    50                 unreachable!()
    50                 unreachable!()
    51             } else if !client.nick.is_empty() {
    51             } else if !client.nick.is_empty() {
    52                 vec![ProtocolError("Nickname already provided.".to_string())]
    52                 response.add(Error("Nickname already provided.".to_string()).send_self());
    53             } else if is_name_illegal(&nick) {
    53             } else if is_name_illegal(&nick) {
    54                 vec![ByeClient("Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}".to_string())]
    54                 // ByeClient("Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}".to_string())
    55             } else {
    55             } else {
    56                 client.nick = nick.clone();
    56                 client.nick = nick.clone();
    57                 vec![Nick(nick).send_self().action(), CheckRegistered]
    57                 response.add(Nick(nick).send_self());
    58             };
    58                 //CheckRegistered
    59 
    59             }
    60             server.react(client_id, actions);
       
    61         }
       
    62         HWProtocolMessage::Proto(proto) => {
       
    63             let client = &mut server.clients[client_id];
       
    64             let actions = if client.protocol_number != 0 {
       
    65                 vec![ProtocolError("Protocol already known.".to_string())]
       
    66             } else if proto == 0 {
       
    67                 vec![ProtocolError("Bad number.".to_string())]
       
    68             } else {
       
    69                 client.protocol_number = proto;
       
    70                 vec![Proto(proto).send_self().action(), CheckRegistered]
       
    71             };
       
    72             server.react(client_id, actions);
       
    73         }
    60         }
    74         #[cfg(feature = "official-server")]
    61         #[cfg(feature = "official-server")]
    75         HWProtocolMessage::Password(hash, salt) => {
    62         HWProtocolMessage::Password(hash, salt) => {
    76             let c = &server.clients[client_id];
    63             let c = &server.clients[client_id];
    77 
    64 
    78             let client_hash = get_hash(c, &salt, &c.server_salt);
    65             let client_hash = get_hash(c, &salt, &c.server_salt);
    79             let server_hash = get_hash(c, &c.server_salt, &salt);
    66             let server_hash = get_hash(c, &c.server_salt, &salt);
    80             let actions = if client_hash == server_hash {
    67             if client_hash == server_hash {
    81                 vec![
    68                 response.add(ServerAuth(format!("{:x}", server_hash)).send_self());
    82                     ServerAuth(format!("{:x}", server_hash))
    69             //JoinLobby
    83                         .send_self()
       
    84                         .action(),
       
    85                     JoinLobby,
       
    86                 ]
       
    87             } else {
    70             } else {
    88                 vec![ByeClient("Authentication failed".to_string())]
    71                 //ByeClient("Authentication failed".to_string())
    89             };
    72             };
    90             server.react(client_id, actions);
    73         }
       
    74         HWProtocolMessage::Proto(proto) => {
       
    75             let client = &mut server.clients[client_id];
       
    76             if client.protocol_number != 0 {
       
    77                 response.add(Error("Protocol already known.".to_string()).send_self());
       
    78             } else if proto == 0 {
       
    79                 response.add(Error("Bad number.".to_string()).send_self());
       
    80             } else {
       
    81                 client.protocol_number = proto;
       
    82                 response.add(Proto(proto).send_self());
       
    83                 // CheckRegistered
       
    84             }
    91         }
    85         }
    92         #[cfg(feature = "official-server")]
    86         #[cfg(feature = "official-server")]
    93         HWProtocolMessage::Checker(protocol, nick, password) => {
    87         HWProtocolMessage::Checker(protocol, nick, password) => {
    94             let c = &mut server.clients[client_id];
    88             let c = &mut server.clients[client_id];
    95             c.nick = nick;
    89             c.nick = nick;