void HandleCommand(Byte[] data, UInt32 offset, UInt32 length) { if (length == 0) { Console.WriteLine("{0} [{1}] [TmpControl] Got heartbeat", DateTime.Now, remoteEndPoint); return; } Byte commandID = data[offset]; switch (commandID) { case Tmp.ToAccessorServerInfoID: String oldServerName = this.serverInfoName; ServerInfo.Serializer.Deserialize(data, offset + 1, offset + length, out this.serverInfo); if (serverInfo.Name == null || serverInfo.Name.Length <= 0) { Console.WriteLine("{0} [{1}] [TmpControl] TmpServer did not provide a ServerName. Closing the connection.", DateTime.Now, remoteEndPoint); socket.ShutdownAndDispose(); return; } this.serverInfoName = Encoding.ASCII.GetString(serverInfo.Name); TmpAccessorServer.GotServerName(oldServerName, serverInfoName, this); Console.WriteLine("{0} [{1}] [TmpControl] Got ServerInfo(Name='{2}')", DateTime.Now, remoteEndPoint, serverInfoName); break; default: Console.WriteLine("{0} Unknown command id {1}", DateTime.Now, commandID); break; } }
public void SocketReceiverHandler(ref SelectControl selectControl, Socket socket, Buf safeBuffer) { Int32 bytesRead; if (receivedKey == null) { bytesRead = socket.Receive(safeBuffer.array, 1, SocketFlags.None); if (bytesRead <= 0) { CloseHandler(); selectControl.DisposeAndRemoveReceiveSocket(socket); return; } receivedKey = new Byte[safeBuffer.array[0]]; receivedLength = 0; if (socket.Available <= 0) { return; } } if (receivedLength >= receivedKey.Length) { throw new InvalidOperationException("CodeBug: This SocketReceiveHandler should have been set to something else after the receivedKey was completely received"); } bytesRead = socket.Receive(receivedKey, receivedLength, receivedKey.Length - receivedLength, SocketFlags.None); if (bytesRead <= 0) { CloseHandler(); selectControl.DisposeAndRemoveReceiveSocket(socket); return; } receivedLength += (Byte)bytesRead; if (receivedLength >= receivedKey.Length) { TmpAccessorServer.ReceivedTunnelKey(ref selectControl, socket, receivedKey); } }
public void Dispose() { Console.WriteLine("{0} TmpControlConnection 'Name={1}' Closed", DateTime.Now, (serverInfoName == null) ? "<null>" : serverInfoName); TmpAccessorServer.LostTmpControlConnection(this); }
public UInt16 AddTunnelListener(String serverName, Boolean requireTls, String targetHost, UInt16 targetPort) { return(TmpAccessorServer.AddTunnelListener(serverName, requireTls, targetHost, targetPort)); }
public void AddTunnelListener(String serverName, Boolean requireTls, String targetHost, UInt16 targetPort, UInt16 listenPort) { TmpAccessorServer.AddTunnelListener(serverName, requireTls, targetHost, targetPort, listenPort); }
public String[] GetServerNames() { return(TmpAccessorServer.GetServerNames()); }
static void Main(string[] args) { Options options = new Options(); List <String> nonOptionArgs = options.Parse(args); // // Initialize Static Data // TmpAccessorServer.GlobalTlsSettings = new TlsSettings(false); TmpAccessorServer.SelectServer = new SelectServer(false, new Buf(8192)); // // Add Tunnel Listeners from command line arguments // if (nonOptionArgs.Count > 0) { for (int i = 0; i < nonOptionArgs.Count; i++) { String tunnelListenerString = nonOptionArgs[i]; String[] tunnelListenerStrings = tunnelListenerString.Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (tunnelListenerStrings.Length < 3) { options.ErrorAndUsage("A tunnel-listener must have at least 3 comma seperated values but '{0}' only had {1}", tunnelListenerString, tunnelListenerStrings.Length); Environment.Exit(1); } String serverName = tunnelListenerStrings[0]; String targetHost = tunnelListenerStrings[1]; UInt16 targetPort = UInt16.Parse(tunnelListenerStrings[2]); if (tunnelListenerStrings.Length == 3) { TmpAccessorServer.AddTunnelListener(serverName, false, targetHost, targetPort); } else if (tunnelListenerStrings.Length == 4) { UInt16 listenPort = UInt16.Parse(tunnelListenerStrings[3]); TmpAccessorServer.AddTunnelListener(serverName, false, targetHost, targetPort, listenPort); } else { options.ErrorAndUsage("A tunnel-listener may not have more than 4 comma seperated values but '{0}' had {1}", tunnelListenerString, tunnelListenerStrings.Length); Environment.Exit(1); } } } // // Setup NPC Server so long as it isn't disabled // if (!options.disableNpc.set) { NpcReflector = new NpcReflector(TmpAccessorServer.ControlInstance); HtmlGenerator = new DefaultNpcHtmlGenerator("Tmp Accessor", NpcReflector); IPAddress listenIP = IPAddress.Any; Socket npcSocket = new Socket(listenIP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); npcSocket.Bind(new IPEndPoint(listenIP, Tmp.DefaultNpcControlPort)); npcSocket.Listen(8); TmpAccessorServer.SelectServer.control.AddListenSocket(npcSocket, NpcAcceptCallback); } // // Setup Tmp tunnel server // { IPAddress listenIP = IPAddress.Any; Socket listenSocket = new Socket(listenIP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); listenSocket.Bind(new IPEndPoint(listenIP, Tmp.DefaultPort)); listenSocket.Listen(8); TmpAccessorServer.SelectServer.control.AddListenSocket(listenSocket, TmpAccessorServer.AcceptCallback); } TmpAccessorServer.SelectServer.Run(); }