Selaa lähdekoodia

p2pnet: default app_version retrieval added

aggstam 3 vuotta sitten
vanhempi
sitoutus
65a501f721
2 muutettua tiedostoa jossa 76 lisäystä ja 1 poistoa
  1. 75 0
      bin/ircd/src/main.rs
  2. 1 1
      src/net/settings.rs

+ 75 - 0
bin/ircd/src/main.rs

@@ -57,6 +57,81 @@ impl fmt::Display for KeyPair {
 
 pub type UnreadMsgs = Arc<Mutex<FxHashMap<String, Privmsg>>>;
 
+<<<<<<< HEAD
+=======
+async fn setup_listener(settings: Args) -> Result<(TcpListener, Option<TlsAcceptor>)> {
+    let listenaddr = settings.irc_listen.socket_addrs(|| None)?[0];
+    let listener = TcpListener::bind(listenaddr).await?;
+
+    let acceptor = match settings.irc_listen.scheme() {
+        "tls" => {
+            // openssl genpkey -algorithm ED25519 > example.com.key
+            // openssl req -new -out example.com.csr -key example.com.key
+            // openssl x509 -req -days 700 -in example.com.csr -signkey example.com.key -out example.com.crt
+
+            if settings.irc_tls_secret.is_none() || settings.irc_tls_cert.is_none() {
+                error!("To listen using TLS, please set irc_tls_secret and irc_tls_cert in your config file.");
+                return Err(Error::KeypairPathNotFound)
+            }
+
+            let file = File::open(expand_path(&settings.irc_tls_secret.unwrap())?)?;
+            let mut reader = std::io::BufReader::new(file);
+            let secret = &rustls_pemfile::pkcs8_private_keys(&mut reader)?[0];
+            let secret = rustls::PrivateKey(secret.clone());
+
+            let file = File::open(expand_path(&settings.irc_tls_cert.unwrap())?)?;
+            let mut reader = std::io::BufReader::new(file);
+            let certificate = &rustls_pemfile::certs(&mut reader)?[0];
+            let certificate = rustls::Certificate(certificate.clone());
+
+            let config = rustls::ServerConfig::builder()
+                .with_safe_defaults()
+                .with_no_client_auth()
+                .with_single_cert(vec![certificate], secret)?;
+
+            let acceptor = TlsAcceptor::from(Arc::new(config));
+            Some(acceptor)
+        }
+        _ => None,
+    };
+    Ok((listener, acceptor))
+}
+
+async fn start_listening(ircd: Ircd, executor: Arc<Executor<'_>>, settings: Args) -> Result<()> {
+    let (listener, acceptor) = setup_listener(settings.clone()).await?;
+    info!("[IRC SERVER] listening on {}", settings.irc_listen);
+    loop {
+        let (stream, peer_addr) = match listener.accept().await {
+            Ok((s, a)) => (s, a),
+            Err(e) => {
+                error!("[IRC SERVER] Failed accepting new connections: {}", e);
+                continue
+            }
+        };
+
+        let result = if let Some(acceptor) = acceptor.clone() {
+            let stream = match acceptor.accept(stream).await {
+                Ok(s) => s,
+                Err(e) => {
+                    error!("[IRC SERVER] Failed accepting TLS connection: {}", e);
+                    continue
+                }
+            };
+            ircd.process_new_connection(executor.clone(), stream, peer_addr).await
+        } else {
+            ircd.process_new_connection(executor.clone(), stream, peer_addr).await
+        };
+
+        if let Err(e) = result {
+            error!("[IRC SERVER] Failed processing connection {}: {}", peer_addr, e);
+            continue
+        };
+
+        info!("[IRC SERVER] Accept new connection: {}", peer_addr);
+    }
+}
+
+>>>>>>> a6e35ef2 (p2pnet: default app_version retrieval added)
 struct Ircd {
     // msgs
     privmsgs_buffer: ArcPrivmsgsBuffer,

+ 1 - 1
src/net/settings.rs

@@ -43,7 +43,7 @@ impl Default for Settings {
             external_addr: Vec::new(),
             peers: Vec::new(),
             seeds: Vec::new(),
-            node_id: String::new(),
+            node_id: option_env!("CARGO_PKG_VERSION").unwrap_or("").to_string(),
             app_version: String::new(),
             outbound_transports: get_outbound_transports(vec![]),
         }