From 778416c0a215d63120c19cdbdb65a58780d8ffbd Mon Sep 17 00:00:00 2001 From: DarkFeather Date: Tue, 16 Oct 2018 17:42:13 -0500 Subject: [PATCH] Adding files --- RavenNetListener.csharp | 80 +++++++++++++++++++++++++++++++++++++++++ ravensend | 48 +++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 RavenNetListener.csharp create mode 100755 ravensend diff --git a/RavenNetListener.csharp b/RavenNetListener.csharp new file mode 100644 index 0000000..5456407 --- /dev/null +++ b/RavenNetListener.csharp @@ -0,0 +1,80 @@ +using System; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using AniNIX.Shared; + +namespace AniNIX.TheRaven { + + //TODO Add comments + + //IRC messages are a primitive data type for us to use. + public class RavenNetListener { + + private String _key; + private Connection _ircdConnection; + + private void _RavenSend(Connection ircdConnection, String channel, String message) { + + IRCClientMessage ircMessage = new IRCClientMessage(); + ircMessage.PrivMsg(message,channel); + ircdConnection.Write(ircMessage); + } + + private void _netThread() { + while (true) { + try + { + // Open a new listener on localhost port 9501 + IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); + TcpListener listener = new TcpListener(ipAddress, 9501); + listener.Start(); + // Accept all connections + while (true) + { + Socket client = listener.AcceptSocket(); + byte[] data = new byte[512]; + int size = client.Receive(data); + // Receive and parse string. + string received = ""; + for (int i = 0; i < size; i++) + received += Convert.ToChar(data[i]); + String[] bySpace = received.Split(' '); + // If the key matches, ... + if (this._key.Equals(bySpace[0])) { + ReportMessage.Log(Verbosity.Verbose,"Accepted passphrase -- sending message."); + String channel = bySpace[1]; + String message = String.Join(" ",bySpace.Skip(2).ToArray()); + // Send to IRC + _RavenSend(_ircdConnection,channel,message); + + } else { + ReportMessage.Log(Verbosity.Error,"Passphrase rejected for NetListener connection."); + } + //Clean up + client.Close(); + } + } + // If we got here, something went wrong. Log. + catch (Exception e) + { + ReportMessage.Log(Verbosity.Error,String.Format("RavenNetListener died for unknown reason: {0}",e.Message)); + } + } + } + + public void NetListener(Connection ircdConnection) { + this._ircdConnection = ircdConnection; + ReportMessage.Log(Verbosity.Verbose,"Starting NetListener thread..."); + ThreadStart netListenerWorker = _netThread; + Thread netListenerThread = new Thread(netListenerWorker); + netListenerThread.Start(); + ReportMessage.Log(Verbosity.Verbose,"Started."); + } + + public RavenNetListener(String key) { + this._key = key; + } + } +} diff --git a/ravensend b/ravensend new file mode 100755 index 0000000..490af89 --- /dev/null +++ b/ravensend @@ -0,0 +1,48 @@ +#!/bin/bash + +# TODO Add comments + +# Default variables +unset channel +unset message +unset passphrase +export file="/usr/local/etc/TheRaven/raven.conf" +export port="9501" +export host="localhost" + +# Show help +function usage() { + echo "Usage: $0 -c chan -m msg [ -f file -t host -p port ]" + echo " $0 -h" echo "Add -v to increase verbosity" + echo "Passphrase is pulled from Raven config, set to ${file}" +} + +# Parse arguments +while getopts 'c:hm:p:P:t:v' OPTION; do + case "$OPTION" in + c) channel="${OPTARG}" ;; + f) file="${OPTARG}" ;; + h) usage; exit 0 ;; + m) message="${OPTARG}" ;; + p) port="${OPTARG}" ;; + t) host="${OPTARG}" ;; + v) set -x ;; + *) usage; exit 1 ;; + esac +done + +# Check inputs. +if [ -z "$channel" ] || [ -z "$message" ] || [ -z "$file" ] || [ -z "$port" ] || [ -z "$host" ]; then + usage; + exit 1; +fi + +# Try to get the passphrase. +passphrase="$(egrep -m 1 '^password=' "$file" | sed 's/^password=//')" +if [ -z "$passphrase" ]; then + echo Couldn\'t identify passphrase. + exit 2; +fi + +# Send format to socket +printf "%s %s %s" "$passphrase" "$channel" "$message" | ncat "$host" "$port"