static async Task Main(string[] args) { Console.WriteLine("Ropu Load Balancer"); Console.WriteLine("Copyright (c) Daniel Hughes"); Console.WriteLine(); var settingsReader = new CommandLineSettingsReader(); var settings = settingsReader.ParseArgs(args); if (settings == null) { return; } var credentialsProvider = new CredentialsProvider() { Email = settings.Email, Password = settings.Password }; var webClient = new RopuWebClient("https://192.168.1.9:5001/", credentialsProvider); var groupsClient = new GroupsClient(webClient, new ImageClient(webClient)); var keysClient = new KeysClient(webClient, true, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key))); var packetEncryption = new PacketEncryption(keysClient); var loadBalancerProtocol = new LoadBalancerProtocol(new PortFinder(), 5069, packetEncryption, keysClient); var servicesClient = new ServicesClient(webClient, ServiceType.LoadBalancer); var controller = new LoadBalancerRunner(keysClient, loadBalancerProtocol, groupsClient, webClient, settings, servicesClient); await controller.Run(); }
public void Send(Packet packet) { if (tcpClient.Connected) { byte[] data = Encoding.UTF8.GetBytes(PacketEncryption.EncryptPacket(packet, password)); networkStream.Write(data, 0, data.Length); } }
public RopuProtocol(PortFinder portFinder, int startingPort, PacketEncryption packetEncryption) { _socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); MediaPort = (ushort)portFinder.BindToAvailablePort(_socket, IPAddress.Any, startingPort); Console.WriteLine($"Serving Node Protocol bound to port {MediaPort}"); _socketEventArgsPool = new MemoryPool <SocketAsyncEventArgs>(() => CreateSocketAsyncEventArgs()); _packetEncryption = packetEncryption; }
public void Run(string[] args) { var settingsReader = new CommandLineClientSettingsReader(); if (!settingsReader.ParseArgs(args)) { return; } var settings = settingsReader.ClientSettings; if (settings.Email == null) { Console.Error.WriteLine("No Email configured"); return; } if (settings.Password == null) { Console.Error.WriteLine("No Password configured"); return; } var credentials = new CredentialsProvider() { Email = settings.Email, Password = settings.Password }; var webClient = new RopuWebClient("asdf", credentials); var keysClient = new KeysClient(webClient, false, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key))); var packetEncryption = new PacketEncryption(keysClient); var protocolSwitch = new ProtocolSwitch(_controlPortStarting, new PortFinder(), packetEncryption, keysClient, settings); var servingNodeClient = new ServingNodeClient(protocolSwitch); var callManagementProtocol = new LoadBalancerProtocol(new PortFinder(), 5079, packetEncryption, keysClient); _mediaClient = BuildMediaClient(protocolSwitch, settings); //IPEndPoint loadBalancerEndpoint = new IPEndPoint(settings.LoadBalancerIPAddress, LoadBalancerPort); var beepPlayer = BuildBeepPlayer(settings); _ropuClient = new RopuClient(protocolSwitch, servingNodeClient, _mediaClient, callManagementProtocol, settings, beepPlayer, webClient, keysClient); var ropuClientTask = _ropuClient.Run(); //var consoleTask = TaskCordinator.RunLong(HandleCommands); //TaskCordinator.WaitAll(ropuClientTask, consoleTask).Wait(); ropuClientTask.Wait(); }
public LoadBalancerProtocol( IPortFinder portFinder, ushort startingPort, PacketEncryption packetEncryption, KeysClient keysClient) { _sendArgs = CreateSocketAsyncEventArgs(); _packetEncryption = packetEncryption; _keysClient = keysClient; _socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); _port = (ushort)portFinder.BindToAvailablePort(_socket, IPAddress.Any, startingPort); Console.WriteLine($"Load BalancerProtocol bound to port {_port}"); }
private void BackgroundSender_DoWork(Packet packet, Client client) { if (client.socket.Connected) { Socket socket = client.socket; string crypted_packet = PacketEncryption.EncryptPacket(packet, password); if (!string.IsNullOrEmpty(crypted_packet)) { byte[] data = Encoding.UTF8.GetBytes(PacketEncryption.EncryptPacket(packet, password)); socket.Send(data); } } }
private void Background_receive_DoWork(object sender, DoWorkEventArgs e) { while (true) { if (tcpClient.Connected) { byte[] data = new byte[1024]; Stream stream = tcpClient.GetStream(); int k = stream.Read(data, 0, data.Length); NewPacket(PacketEncryption.DecryptPacket(Encoding.UTF8.GetString(data).Trim('\0'), password)); } Thread.Sleep(1000); } }
public ProtocolSwitch( ushort startingPort, IPortFinder portFinder, PacketEncryption packetEncryption, KeysClient keysClient, IClientSettings clientSettings) { _socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); _packetEncryption = packetEncryption; _keysClient = keysClient; _clientSettings = clientSettings; LocalPort = (ushort)portFinder.BindToAvailablePort(_socket, IPAddress.Any, startingPort); Console.WriteLine($"ProtocolSwitch bound to port {LocalPort}"); }
static async Task Main(string[] args) { Console.WriteLine("Ropu Serving Node"); Console.WriteLine("Copyright (c) Daniel Hughes"); Console.WriteLine(); var settingsReader = new CommandLineSettingsReader(); var settings = settingsReader.ParseArgs(args); if (settings == null) { return; } var portFinder = new PortFinder(); var credentialsProvider = new CredentialsProvider() { Email = settings.Email, Password = settings.Password }; var webClient = new RopuWebClient("https://192.168.1.9:5001", credentialsProvider); var keysClient = new KeysClient(webClient, true, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key))); var packetEncryption = new PacketEncryption(keysClient); var mediaProtocol = new RopuProtocol(portFinder, StartingServingNodePort, packetEncryption, keysClient); var loadBalancerProtocol = new LoadBalancerProtocol(portFinder, StartingLoadBalancerPort, packetEncryption, keysClient); var serviceDiscovery = new ServiceDiscovery(); var groupsClient = new GroupsClient(webClient, new ImageClient(webClient)); var registra = new Registra(groupsClient); var servingNodes = new ServingNodes(100); var groupCallControllerLookup = new GroupCallControllerLookup(); var servicesClient = new ServicesClient(webClient, ServiceType.ServingNode); var servingNodeRunner = new ServingNodeRunner( mediaProtocol, loadBalancerProtocol, serviceDiscovery, registra, servingNodes, groupCallControllerLookup, servicesClient, keysClient); await servingNodeRunner.Run(); }
static async Task Main(string[] args) { Console.WriteLine("Starting Ropu Call Controller"); Console.WriteLine("Copyright (c) Daniel Hughes 2018"); Console.WriteLine(); var settingsReader = new CommandLineSettingsReader(); var settings = settingsReader.ParseArgs(args); if (settings == null) { return; } var credentialsProvider = new CredentialsProvider() { Email = settings.Email, Password = settings.Password }; var webClient = new RopuWebClient("https://192.168.1.9:5001", credentialsProvider); var portFinder = new PortFinder(); var keysClient = new KeysClient(webClient, true, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key))); var packetEncryption = new PacketEncryption(keysClient); var ropuProtocol = new RopuProtocol(portFinder, 9000, packetEncryption); var loadBalancerProtocol = new LoadBalancerProtocol(portFinder, StartingControlPort, packetEncryption, keysClient); var serviceDiscovery = new ServiceDiscovery(); var servingNodes = new ServingNodes(100); var servicesClient = new ServicesClient(webClient, ServiceType.CallController); var callControl = new CallControl( loadBalancerProtocol, serviceDiscovery, ropuProtocol, servingNodes, servicesClient, keysClient); await callControl.Run(); }
private void BackgroundReceiver_DoWork(object sender, DoWorkEventArgs e) { while (!backgroundReceiver.CancellationPending) { byte[] data = new byte[1024]; if (socket.Connected) { try { socket.Receive(data); string data_string = Encoding.UTF8.GetString(data).Trim('\0'); Packet packet = PacketEncryption.DecryptPacket(data_string, password); NewPacket(packet, this); } catch { Disconected(this); } } } }
static void Main(string[] args) { const ushort controlPortStarting = 5061; var settingsManager = new CommandLineClientSettingsReader(); if (!settingsManager.ParseArgs(args)) { return; } var settings = settingsManager.ClientSettings; var webClient = new RopuWebClient("https://192.168.1.9:5001/", settingsManager); var keysClient = new KeysClient(webClient, false, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key))); var packetEncryption = new PacketEncryption(keysClient); var protocolSwitch = new ProtocolSwitch(controlPortStarting, new PortFinder(), packetEncryption, keysClient, settings); var servingNodeClient = new ServingNodeClient(protocolSwitch); IAudioSource audioSource = settings.FileMediaSource != null ? (IAudioSource) new FileAudioSource(settings.FileMediaSource) : (IAudioSource) new PulseAudioSimple(StreamDirection.Record, "RopuInput"); var audioPlayer = new PulseAudioSimple(StreamDirection.Playback, "RopuOutput"); var audioCodec = new OpusCodec(); var jitterBuffer = new AdaptiveJitterBuffer(2, 50); var mediaClient = new MediaClient(protocolSwitch, audioSource, audioPlayer, audioCodec, jitterBuffer, settings); var callManagementProtocol = new LoadBalancerProtocol(new PortFinder(), 5079, packetEncryption, keysClient); var beepPlayer = new BeepPlayer(new PulseAudioSimple(StreamDirection.Playback, "RopuBeeps")); var ropuClient = new RopuClient(protocolSwitch, servingNodeClient, mediaClient, callManagementProtocol, settings, beepPlayer, webClient, keysClient); var application = new RopuApplication(ropuClient); var imageService = new ImageService(); //TODO: get web address from config var imageClient = new ImageClient(webClient); var groupsClient = new GroupsClient(webClient, imageClient); var usersClient = new UsersClient(webClient); //settings.UserId = usersClient.GetCurrentUser().Result.Id; var pttPage = new PttPage(imageService); var navigator = new Navigator(); var colorService = new ColorService(); navigator.Register <LoginViewModel, LoginView>(() => new LoginView(new LoginViewModel(navigator, webClient, settingsManager), imageService)); navigator.Register <SignupViewModel, SignupPage>(() => new SignupPage(new SignupViewModel(navigator, usersClient), imageService)); Action <Func <Task> > invoke = toDo => Application.Instance.Invoke(toDo); var permissionServices = new PermissionServices(); var pttView = new PttView(new PttViewModel <Color>(ropuClient, settingsManager, groupsClient, usersClient, imageClient, colorService, invoke, permissionServices, webClient, navigator), pttPage); navigator.Register <PttViewModel <Color>, PttView>(() => pttView); navigator.RegisterView("HomeRightPanel", "PttView", () => pttView); var homeView = new HomeView(new HomeViewModel(navigator), navigator, colorService); navigator.Register <HomeViewModel, HomeView>(() => homeView); var browseGroupsView = new BrowseGroupsView(new BrowseGroupsViewModel(groupsClient, navigator)); navigator.Register <BrowseGroupsViewModel, BrowseGroupsView>(() => browseGroupsView); Func <Group, BrowseGroupView> browseGroupViewBuilder = group => new BrowseGroupView(new BrowseGroupViewModel(group, groupsClient, settings, navigator), imageService, navigator, colorService); navigator.Register <BrowseGroupViewModel, BrowseGroupView, Group>(group => browseGroupViewBuilder(group)); var selectIdleGroupView = new SelectIdleGroupView(new SelectGroupViewModel(groupsClient, navigator, ropuClient)); navigator.RegisterView("HomeRightPanel", "SelectIdleGroupView", () => selectIdleGroupView); var mainForm = new MainView(navigator, new MainViewModel(settings, navigator)); mainForm.Icon = imageService.Ropu; var ignore = navigator.ShowModal <HomeViewModel>(); ignore = navigator.ShowPttView(); application.Run(mainForm); }