Просмотр исходного кода

bin/darkirc: ignore CAP END if user is registered

dasman 2 лет назад
Родитель
Сommit
39bd52c985
2 измененных файлов с 5 добавлено и 1 удалено
  1. 3 0
      bin/darkirc/src/irc/client.rs
  2. 2 1
      bin/darkirc/src/irc/command.rs

+ 3 - 0
bin/darkirc/src/irc/client.rs

@@ -78,6 +78,8 @@ pub struct Client {
     pub registered: AtomicBool,
     pub registered: AtomicBool,
     /// Registration pause marker
     /// Registration pause marker
     pub reg_paused: AtomicBool,
     pub reg_paused: AtomicBool,
+    /// CAP END marker
+    pub is_cap_end: AtomicBool,
     /// Client username
     /// Client username
     pub username: Arc<RwLock<String>>,
     pub username: Arc<RwLock<String>>,
     /// Client nickname
     /// Client nickname
@@ -114,6 +116,7 @@ impl Client {
             penalty: AtomicUsize::new(0),
             penalty: AtomicUsize::new(0),
             registered: AtomicBool::new(false),
             registered: AtomicBool::new(false),
             reg_paused: AtomicBool::new(false),
             reg_paused: AtomicBool::new(false),
+            is_cap_end: AtomicBool::new(false),
             username: username.clone(),
             username: username.clone(),
             nickname: nickname.clone(),
             nickname: nickname.clone(),
             realname: RwLock::new(String::from("*")),
             realname: RwLock::new(String::from("*")),

+ 2 - 1
bin/darkirc/src/irc/command.rs

@@ -193,7 +193,8 @@ impl Client {
             "END" => {
             "END" => {
                 // At CAP END, if we have USER and NICK, we can welcome them.
                 // At CAP END, if we have USER and NICK, we can welcome them.
                 self.reg_paused.store(false, SeqCst);
                 self.reg_paused.store(false, SeqCst);
-                if self.registered.load(SeqCst) {
+                if self.registered.load(SeqCst) && !self.is_cap_end.load(SeqCst) {
+                    self.is_cap_end.store(true, SeqCst);
                     return Ok(self.welcome().await)
                     return Ok(self.welcome().await)
                 }
                 }