예제 #1
0
        public static int Main(string[] args)
        {
            try
            {
                // **DESTINATION**
                // Create watcher and completionHandler

                ManagementOperationWatcher delete_res            = new ManagementOperationWatcher();
                ManagementOperationWatcher results               = new ManagementOperationWatcher();
                CompletionHandler          completionHandler     = new CompletionHandler();
                CompletionHandler          completionHandler_res = new CompletionHandler();
                delete_res.Completed += new CompletedEventHandler(completionHandler_res.Done);
                results.Completed    += new CompletedEventHandler(completionHandler.Done);
                PutHandler putHandler = new PutHandler();
                results.ObjectPut += new ObjectPutEventHandler(putHandler.JustPut);

                // Create the class TestDelClassasync for deletion later
                // **SOURCE **
                ManagementClass newclassObj = new ManagementClass("root/default", "", null);
                newclassObj.SystemProperties["__CLASS"].Value = "TestDelClassasync";
                PropertySet mykeyprop = newclassObj.Properties;
                mykeyprop.Add("MyKey", "Hello");

                Console.WriteLine("Thread is {0}", System.Threading.Thread.CurrentThread.ApartmentState);
                newclassObj.Put(results);
                while (!completionHandler.IsComplete)
                {
                    System.Threading.Thread.Sleep(1000);
                }
                completionHandler.Reset();

                ManagementClass dummyClassCheck = new ManagementClass("root/default", "TestDelClassasync", null);
                //dummyClassCheck.Get();
                Console.WriteLine(dummyClassCheck.SystemProperties["__Class"].Value.ToString());

                // Delete the Class aync
                newclassObj.Delete(delete_res);
                while (!completionHandler_res.IsComplete)
                {
                    System.Threading.Thread.Sleep(1000);
                }
                completionHandler_res.Reset();
                if ("System.Management.ManagementOperationWatcher" == completionHandler_res.Sender)
                {
                    Console.WriteLine("Test 10.2: Able to delete classes asynchronously.");
                }
                else
                {
                    Console.WriteLine("Test 10.2: Unable to delete classes asynchronously.");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Test 10.2: " + e.GetType().ToString());
                Console.WriteLine(e.Message + e.StackTrace);
            }


            return(0);
        }
예제 #2
0
        public void Check_If_Updated_Name_Already_Exists()
        {
            var putHandler = new PutHandler("../../../../TestFrameworklessApp/UnitTests/PutHandlerDatabaseTest.json");
            var exception  = Assert.Throws <ArgumentException>(() => putHandler.UpdateUserName("3", "Bob"));

            Assert.Equal("User already exists", exception.Message);
        }
예제 #3
0
        public void Update_Non_Existing_User()
        {
            var putHandler = new PutHandler("../../../../TestFrameworklessApp/UnitTests/PutHandlerDatabaseTest.json");

            var exception = Assert.Throws <ArgumentException>(() => putHandler.UpdateUserName("8", "Alex"));

            Assert.Equal("User doesn't exist", exception.Message);
        }
예제 #4
0
        public void Update_Existing_User_Name_Given_Id()
        {
            var putHandler = new PutHandler("../../../../TestFrameworklessApp/UnitTests/PutHandlerDatabaseTest.json");

            var result = putHandler.UpdateUserName("2", "Alicia");

            putHandler.UpdateUserName("2", "Sally");

            Assert.True(result);
        }
예제 #5
0
        void HandlePut(RequestContext request)
        {
            ResponseHandler.Status201(Writer);
            string message = ReadContent();

            request.addMessage(message);

            PutHandler.HandleByCommand(request);

            //messageList.RemoveAt(position - 1);
            //messageList.Insert(position - 1, request);
        }
예제 #6
0
 public static IHandler Build()
 {
     var okHandler = new OkHandler();
     var putHandler = new PutHandler();
     var notFoundHandler = new NotFoundHandler(putHandler);
     var methodIsSupportedHandler = new MethodIsSupportedHandler(okHandler);
     var resourceExistsHandler = new ResourceExistsHandler(methodIsSupportedHandler, notFoundHandler);
     var endpointExistsHandler = new EndpointExistsHandler(resourceExistsHandler);
     var optionsHandler = new OptionsHandler(endpointExistsHandler);
     var authorizationHandler = new AuthorizationHandler(optionsHandler);
     var authenticationHandler = new AuthenticationHandler(authorizationHandler);
     return authenticationHandler;
 }
예제 #7
0
        private void HandleConnection(Socket sock)
        {
            NetworkStream stream    = new NetworkStream(sock);
            string        line      = null;
            bool          error     = false;
            bool          keepAlive = false;
            DateTime      startTime = DateTime.Now;

            sock.ReceiveTimeout      = RequestHandler.Timeout * 100;
            sock.Blocking            = false;
            sock.NoDelay             = true;
            sock.SendBufferSize      = 16 * 1024;
            sock.UseOnlyOverlappedIO = true;

            string type = "";
            string path = "";

            do
            {
                bool           first   = true;
                RequestHandler handler = null;

                do
                {
                    line = null;
                    try
                    {
                        line             = ReadLine(stream);
                        BytesReadHeader += line.Length + 2;
                    }
                    catch (ThreadAbortException e)
                    {
                        keepAlive = false;
                        error     = true;
                        break;
                    }
                    catch (IOException e)
                    {
                        keepAlive = false;
                        error     = true;
                        break;
                    }
                    catch (Exception e)
                    {
                        keepAlive = false;
                        error     = true;
                        break;
                    }

                    /* connection timed out or closed */
                    if (line == null)
                    {
                        sock.Close();
                        LogRequest("  (Socket closed)");
                        return;
                    }

                    if (first)
                    {
                        LogRequest("  (Connection from " + sock.RemoteEndPoint + ")");
                    }
                    LogRequest("< " + line);

                    /* not an empty line? */
                    if (line != "")
                    {
                        /* the first line contains the request */
                        if (first)
                        {
                            if (line.Contains(' '))
                            {
                                type = line.Substring(0, line.IndexOf(' '));
                                path = line.Substring(line.IndexOf(' ')).Trim();
                                try
                                {
                                    switch (type)
                                    {
                                    case "OPTIONS":
                                        handler = new OptionsHandler(this, path);
                                        break;

                                    case "PROPFIND":
                                        handler = new PropFindHandler(this, path);
                                        break;

                                    case "GET":
                                        handler = new GetHandler(this, path);
                                        break;

                                    case "HEAD":
                                        handler = new HeadHandler(this, path);
                                        break;

                                    case "PUT":
                                        handler = new PutHandler(this, path);
                                        break;

                                    case "LOCK":
                                        handler = new LockHandler(this, path);
                                        break;

                                    case "UNLOCK":
                                        handler = new UnlockHandler(this, path);
                                        break;

                                    case "DELETE":
                                        handler = new DeleteHandler(this, path);
                                        break;

                                    case "MOVE":
                                        handler = new MoveHandler(this, path);
                                        break;

                                    case "COPY":
                                        handler = new CopyHandler(this, path);
                                        break;

                                    case "MKCOL":
                                        handler = new MkColHandler(this, path);
                                        break;

                                    case "PROPPATCH":
                                        handler = new PropPatchHandler(this, path);
                                        break;

                                    default:
                                        handler = new RequestHandler(this, "/");
                                        break;
                                    }
                                }
                                catch (IOException e)
                                {
                                    Log("[i] Connection from " + sock.RemoteEndPoint + " (" + type + ") had IOException");
                                }
                                catch (Exception e)
                                {
                                    Log("[E] '" + e.GetType().ToString() + "' in connection from " + sock.RemoteEndPoint + " (" + type + ")");
                                }
                            }

                            first = false;
                        }
                        else
                        {
                            try
                            {
                                handler.AddHeaderLine(line);
                            }
                            catch (IOException e)
                            {
                                /* just close */
                                sock.Close();
                                LogRequest("  (Socket closed)");
                                return;
                            }
                            catch (Exception e)
                            {
                                Log("[E] '" + e.GetType().ToString() + "' in connection from " + sock.RemoteEndPoint + " (AddHeaderLine)");
                            }
                            //stream.Flush();
                        }
                    }
                } while (line != "");

                if (handler == null)
                {
                    Log("[E] Empty request in connection from " + sock.RemoteEndPoint + " (HandleContent/HandleRequest)");
                    handler.KeepAlive = false;
                    return;
                }

                if (!error)
                {
                    try
                    {
                        if (handler.RequestContentLength > 0)
                        {
                            handler.HandleContent(stream);
                        }

                        handler.HandleRequest(stream);
                        stream.Flush();
                    }
                    catch (FileNotFoundException e)
                    {
                        Log("[E] 404 '" + e.GetType().ToString() + ": " + e.Message + "' in connection from " + sock.RemoteEndPoint + " (HandleContent/HandleRequest)");

                        /* respond with error */
                        handler            = new RequestHandler(this, "/");
                        handler.StatusCode = RequestHandler.GetStatusCode(404);
                        handler.KeepAlive  = false;
                        handler.HandleRequest(stream);
                        stream.Flush();
                    }
                    catch (SocketException e)
                    {
                        Log("[E] '" + e.GetType().ToString() + ": " + e.Message + "' in connection from " + sock.RemoteEndPoint + " (HandleContent/HandleRequest)");
                        handler.KeepAlive = false;
                        return;
                    }
                    catch (UnauthorizedAccessException e)
                    {
                        Log("[i] 403 '" + e.GetType().ToString() + ": " + e.Message + "' in connection from " + sock.RemoteEndPoint + " (HandleContent/HandleRequest)");

                        /* respond with error */
                        handler            = new RequestHandler(this, "/");
                        handler.StatusCode = RequestHandler.GetStatusCode(403);
                        handler.KeepAlive  = false;
                        handler.HandleRequest(stream);
                        stream.Flush();
                    }
                    catch (Exception e)
                    {
                        Log("[E] 500 '" + e.GetType().ToString() + ": " + e.Message + "' in connection from " + sock.RemoteEndPoint + " (HandleContent/HandleRequest)");

                        /* respond with error */
                        handler            = new RequestHandler(this, "/");
                        handler.StatusCode = RequestHandler.GetStatusCode(500);
                        handler.KeepAlive  = false;
                        handler.HandleRequest(stream);
                        stream.Flush();
                    }


                    if (EnableRequestLog)
                    {
                        DateTime endTime = DateTime.Now;
                        Log("[i] Connection from " + sock.RemoteEndPoint + " (" + type + " " + path + ") took " + (endTime - startTime).TotalMilliseconds + " ms (" + handler.StatusCode + ")");
                    }
                    LogRequest("");

                    lock (StatisticsLock)
                    {
                        BytesWrittenHeader += handler.BytesWrittenHeader;
                        BytesWrittenData   += handler.BytesWrittenData;
                        BytesReadHeader    += handler.BytesReadHeader;
                        BytesReadData      += handler.BytesReadData;
                    }

                    keepAlive = handler.KeepAlive;

                    /* windows isnt really using keepalive :( */
                    keepAlive = false;
                }
            } while (keepAlive);

            sock.Close();
            LogRequest("  (Socket closed)");
        }