Esempio n. 1
0
            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;
                }
            }
Esempio n. 2
0
            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);
                }
            }
Esempio n. 3
0
 public void Dispose()
 {
     Console.WriteLine("{0} TmpControlConnection 'Name={1}' Closed", DateTime.Now,
                       (serverInfoName == null) ? "<null>" : serverInfoName);
     TmpAccessorServer.LostTmpControlConnection(this);
 }
Esempio n. 4
0
 public UInt16 AddTunnelListener(String serverName, Boolean requireTls, String targetHost, UInt16 targetPort)
 {
     return(TmpAccessorServer.AddTunnelListener(serverName, requireTls, targetHost, targetPort));
 }
Esempio n. 5
0
 public void AddTunnelListener(String serverName, Boolean requireTls, String targetHost, UInt16 targetPort, UInt16 listenPort)
 {
     TmpAccessorServer.AddTunnelListener(serverName, requireTls, targetHost, targetPort, listenPort);
 }
Esempio n. 6
0
 public String[] GetServerNames()
 {
     return(TmpAccessorServer.GetServerNames());
 }
Esempio n. 7
0
        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();
        }