of course we want to make the source of the handler.exe public.
You may help with making it work better, but we trust you guys that you don't use it to make your own version of it. 
So here you go:
It's written in CSharp ( C# )
handler.exe
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Diagnostics;
namespace alert
{
class Program
{
static string ProcessInput(string s)
{
// TODO Verify and validate the input
// string as appropriate for your application.
return s;
}
static void Main(string[] args)
{
foreach (string s in args)
{
string ss = s.Replace("oacon://", "");
string sss = ss.Replace("%20", " ");
string ssss = sss.Replace("/", "");
Console.WriteLine(ProcessInput(ssss));
Process p = null;
try
{
p = new Process();
string Dir2 = AppDomain.CurrentDomain.BaseDirectory;
p.StartInfo.FileName = "openarena.exe";
p.StartInfo.Arguments = " + connect " + ssss;
p.StartInfo.WorkingDirectory = Dir2;
p.StartInfo.CreateNoWindow = false;
p.Start();
p.WaitForExit();
}
catch (Exception ex)
{
Console.WriteLine("Exception Occurred :{0},{1}",
ex.Message, ex.StackTrace.ToString());
}
}
}
}
}
the oacon installer (oacon_install.exe) extracts 3 files:
add.reg
install.exe
handler.exe
And then it will exec install.exe
>> install.exe will change the add.reg to the path where handler.exe is.
>> install.exe will add add.reg to the registry.
>> install.exe will extract handler.exe to the openarena folder.
That's all
Here are the sources of add.reg and install.exe:
add.reg
REGEDIT4
[HKEY_CLASSES_ROOT\oacon]
@="URL:oacon Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\oacon\DefaultIcon]
@="handler.exe"
[HKEY_CLASSES_ROOT\oacon\shell]
[HKEY_CLASSES_ROOT\oacon\shell\open]
[HKEY_CLASSES_ROOT\oacon\shell\open\command]
@="\"path-to-handler.exe" \"%1\""
Install.exe
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Windows.Forms;
namespace install
{
class Program
{
static void Main(string[] args)
{
string sName1 = @"\add.reg";
string sName2 = @"\handler.exe";
string sDir = Directory.GetCurrentDirectory();
string sDir1 = Directory.GetCurrentDirectory() + sName1;
string sDir2 = Directory.GetCurrentDirectory() + sName2;
string ss = sDir2.Replace("\\", "\\\\");
string sss = ss + @"\";
string temp;
StringBuilder sb = new StringBuilder();
string[] file = File.ReadAllLines(sDir1);
foreach (string line in file)
{
if (line.Contains("path-to-handler.exe"))
{
temp = line.Replace("path-to-handler.exe", sss);
sb.Append(temp + "\r\n");
continue;
}
else
sb.Append(line + "\r\n");
}
File.WriteAllText(sDir1, sb.ToString());
Process regeditProcess = Process.Start("regedit.exe", "/s add.reg");
regeditProcess.WaitForExit();
}
}
}