|
|
@@ -57,81 +57,6 @@ 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,
|