Commit Graph

275 Commits

Author SHA1 Message Date
Cesar Blum Silveira 59aef9a443 Merge branch 'benaadams/remove-framecontext' into dev 2016-05-19 12:25:04 -07:00
Cesar Blum Silveira 1f494b168b Remove Frame._requestProcessingStarted field. 2016-05-19 11:48:50 -07:00
Cesar Blum Silveira 9960cb8c23 Remove unused Frame static fields. 2016-05-19 11:47:58 -07:00
Cesar Blum Silveira 8e9df409c4 Remove dead code in ReasonPhrases. 2016-05-19 11:46:48 -07:00
Ben Adams e8647c0cb4 Remove extra FrameContext class
Resolves #837
2016-05-19 19:22:39 +01:00
Cesar Blum Silveira 9a06bf39ab Move ECONNRESET value check to server initialization. 2016-05-18 22:11:10 -07:00
Stephen Halter 7e7f21ec49 Merge branch 'benaadams/dateheader' into dev 2016-05-18 17:11:01 -07:00
Stephen Halter 369512369f Merge branch 'benaadams/return-blocks-out-of-lock' into dev 2016-05-18 17:03:24 -07:00
Nathan Anderson e1c64d2119 reuse typeof results in generated Frame code 2016-05-18 16:52:34 -07:00
Stephen Halter 185ad000bb Prevent NullReferenceException in KestrelThread.OnStopRude
- UvMemory.FromIntPtr looks up a weak reference so we need to null check.
2016-05-18 16:21:55 -07:00
Cesar Blum Silveira 8c8ee150f7 Send 'Connection: close' in all 400 responses to HTTP/1.1 requests (#840). 2016-05-18 15:03:31 -07:00
Cesar Blum Silveira 3e841ccba1 Always send HTTP/1.1 responses (#792). 2016-05-16 16:11:37 -07:00
Cesar Blum Silveira 3186e1bd72 Make TakeStartLine more robust (#683). 2016-05-12 12:07:08 -07:00
Ben Adams a3b0f809de Only call PrepareDateValues if not already called for tick 2016-05-10 20:38:27 +01:00
Ben Adams 0e8cbe5df6 Return SocketInput blocks out of lock 2016-05-10 01:18:24 +01:00
Stephen Halter 388841c1d8 Merge branch 'release' into dev 2016-05-09 16:37:40 -07:00
Stephen Halter 12a3816c12 Make some MemoryPoolBlock operations volatile
- Making MemoryPoolBlock.End volatile and using Volatile.Write for
  MemoryPoolBlock.Next prevents a race that could cause threads consuming
  blocks to skip produced bytes.
2016-05-05 15:13:28 -07:00
Stephen Halter 4c39374dc0 Always check if block is last in linked list before consuming it
- This prevents a race where we could read into the "Next" Block without
  completely consuming the previous one.
2016-05-05 15:13:17 -07:00
Nathan Anderson 132263e767 narrow lock scope when connections end 2016-05-04 16:50:08 -07:00
Stephen Halter fed7c44829 Merge branch 'halter73/validate-header' into dev 2016-05-04 12:35:26 -07:00
Stephen Halter c1e5640a65 Don't allow response headers to contain control characters
- For the purposes of this commit, control characters are everything < 0x20.
- Immediately throw an InvalidOperationException when the header is added to
  the IHttpResponseFeature.Headers dictionary.
2016-05-04 12:24:31 -07:00
Mike Harder 14bbba0641 Update addresses in IServerAddressesFeature with assigned dynamic ports (#758)
- Change most tests to use dynamic ports, rather than a fixed port obtained from GetNextPort().
- Add several new cases to `AddressRegistrationTests` and `ServerAddressFacts`.
- Remove project `test\Microsoft.AspNetCore.Server.Kestrel.TestCommon`.  It's not longer needed, since only `AddressRegistrationTests` uses `GetNextPort()`.
2016-05-04 11:27:23 -07:00
Stephen Halter f8c2c2470f Merge branch 'benaadams/memorypool' into dev 2016-05-02 21:58:53 -07:00
Pranav K ff510875f2 Merge branch 'release' into dev 2016-05-02 14:56:30 -07:00
Pranav K f0358182e4 Fix build warnings 2016-05-02 11:27:18 -07:00
Ben Adams 3a424f6aba Remove unnecessary fixed blocks 2016-04-30 11:17:06 +01:00
Ben Adams 2aa10a64a2 Remove noop pin+unpin w/ memory blocks
+ Only use pooled blocks in tests
2016-04-30 11:17:06 +01:00
Kristian Hellang 8a9840216c Use type's namespace instead of assembly FullName 2016-04-29 12:02:56 -07:00
moozzyk 75adbc18a2 Use IOCP on secondary listener threads on Windows
Addresses #679
2016-04-29 08:45:12 -07:00
Cesar Blum Silveira ebca8db7dc Merge branch 'justinvp/taskutilities' into dev 2016-04-28 11:28:42 -07:00
Justin Van Patten 68f14c06cb Use Task.FromCanceled<TResult>() on NETSTANDARD1_3
Task.FromCanceled<int>(cancellationToken) can be used on
NETSTANDARD1_3 in TaskUtilities.GetCancelledZeroTask().
2016-04-27 22:26:31 -07:00
Cesar Blum Silveira 5a8cba878d Merge branch 'benaadams/async-write' into dev 2016-04-27 11:25:45 -07:00
Justin Van Patten 8f7c0ff041 Minor Stream improvements
- Unsupported members should throw NotSupportedException instead of
NotImplementedException per MSDN docs for CanRead/CanSeek/CanWrite.
- Position should throw NotSupportedException when CanSeek is false.
- FrameRequestStream.Flush/FlushAsync should not throw
NotImplementedException.
- Use expression-bodied members for CanRead/CanSeek/CanWrite on
FrameRequestStream to match FrameResponseStream.
- Provide no-op override of LibuvStream.FlushAsync to match Flush.
2016-04-25 22:19:30 -07:00
Ben Adams 216aa9343e Remove redundent null coalesce 2016-04-25 11:49:48 +01:00
Ben Adams 4626833e51 StreamSocketOutput WriteAsync as async 2016-04-25 09:52:33 +01:00
Cesar Blum Silveira 0a21b94609 Make ECONNRESET value platform-specific (#649). 2016-04-22 16:06:08 -07:00
Cesar Blum Silveira 179b57b01f Remove SocketInputStream (#753). 2016-04-21 15:10:12 -07:00
Cesar Blum Silveira 7ca0fbeb3d Merge branch 'release' into dev 2016-04-19 22:22:48 -07:00
Cesar Blum Silveira f29dd60999 Fix connection termination issues when using connection filters (#737, #747).
- If we're done before the client sends a FIN, force a FIN into the raw
  SocketInput so the task in FileteredStreamAdapter finishes gracefully
  and we dispose everything in proper order.
- If there's an error while writing to a stream (like ObjectDisposedException),
  log it once and prevent further write attempts. This means the client closed
  the connection while we were still writing output.
- This also fixes a bug related to the point above, where memory blocks were
  being leaked instead of returned to the pool (because we weren't catching
  the exception from Write()).
2016-04-19 22:04:33 -07:00
Mike Harder 8b83f1ee6b Merge branch 'release' into dev 2016-04-18 16:59:08 -07:00
Mike Harder 0453e4af70 Add KestrelServerOptionsSetup before KestrelServerOptions (#755) (#757)
- Required to ensure that options.ApplicationServices is available after during UseKestrel(options)
2016-04-18 16:57:59 -07:00
Mike Harder 0d9dc1a205 Merge branch 'release' into dev 2016-04-18 15:33:21 -07:00
Mike Harder bbf2c83a7d Add KestrelServerOptionsSetup to IServiceCollection in UseKestrel() (#755)
- Previously, KestrelServerOptionsSetup was only added to IServiceCollection in UseKestrel(options)
- Required to ensure that options.ApplicationServices is available after calling UseKestrel()
2016-04-18 15:32:09 -07:00
Chris R 20a1f4a548 Merge branch 'release' into dev 2016-04-15 16:06:15 -07:00
Chris R c48353f4ef Hosting#698 Remove IServerFactory 2016-04-15 16:05:01 -07:00
Mike Harder 38c70a6fec Merge branch 'release' into dev 2016-04-13 15:12:37 -07:00
Mike Harder 6047a62c07 Add IWebHostBuilder.UseKestrel(options) overload to configure Kestrel (#720)
- Replace KestrelServerInformation with KestrelServerOptions.
- Move properties from KestrelServerPoolingParameters to KestrelServerOptions.
- Stop reading default options from "kestrel.*" config settings.
- Move extension method IApplicatonBuilder.UseKestrelConnectionLogging() to KestrelServerOptions.UseConnectionLogging()
2016-04-13 14:57:54 -07:00
Stephen Halter c9a1d4000f Merge branch 'release' into dev 2016-04-13 12:51:56 -07:00
David Fowler 5354005a1a Remove support for DNX on osx on mono
- Remove mono osx specific PInvokes
- Use PlatformAbstractions to detect darwin instead of direct pinvoke

#742
2016-04-12 23:47:36 -07:00
Eilon Lipton 795fc36cde Fix package metadata 2016-04-12 18:47:35 -07:00
Cesar Blum Silveira 7b63846357 Prevent crash when aborting connection before Frame is created (#738). 2016-04-12 14:18:41 -07:00
Stephen Halter 7d4fcfeb23 Depend on separate libuv package 2016-04-10 21:15:43 -07:00
Pranav K 29a8d5b7c5 Removing imports from src projects 2016-04-08 06:49:01 -07:00
Stephen Halter 056b4ac41d Never call Thread.Abort
- This API isn't available on .NET Core so we should rely entirely on
  our other methods of terminating the libuv threads.
2016-04-06 14:48:01 -07:00
Stephen Halter 50f187aa3e Ensure entire request body is consumed before handling fin
This completes the fix for #704
2016-04-05 11:16:09 -07:00
David Fowler 21de2aee13 Remove unused dependency on TraceSource
- TraceSource is RID specific (see https://github.com/dotnet/corefx/issues/7480) and it
causes 2 dlls to end up in the output of every ASP.NET application. We don't even
use it anymore.
2016-04-04 20:04:17 -07:00
BrennanConroy 109c56713a React to logging changes 2016-04-01 11:53:47 -07:00
Mike Harder 228c34b500 Remove duplicate calls to FrameRequestHeaders and FrameResponseHeaders ctors (#695) 2016-03-31 17:34:59 -07:00
Mike Harder 088b7e5779 Add UseKestrel() extension method to IWebHostBuilder (#713) 2016-03-30 12:08:32 -07:00
Stephen Halter aa17125f9e Fix spelling of "timeout" in kestrel.shutdownTimeout 2016-03-30 11:14:35 -07:00
Stephen Halter f0e438f65f Remove IKestrelTrace.ApplicationError overload without connection id
Add test verifying that exceptions thrown from application tcs continuations
run by the LoggingThreadPool don't get logged as general exceptions.
2016-03-30 11:13:13 -07:00
Stephen Halter a8e5c0ce30 Log connection id in KestrelTrace.ApplicationError 2016-03-30 10:16:01 -07:00
Cesar Blum Silveira 3f0e65495e Merge branch 'shalter/last-request' into dev 2016-03-22 17:57:26 -07:00
Cesar Blum Silveira fd70fb732d Add explanatory comments for previous commit. 2016-03-22 17:55:21 -07:00
Doug Bunting f13c418a65 React to HttpAbstractions change: No features in `.Internal` namespace
- see issue aspnet/HttpAbstractions#561 and pull aspnet/HttpAbstractions#589
2016-03-18 19:01:53 -07:00
Stephen Halter 792f3ad089 Fix race preventing handling of the last request sent over a connection
We need to attempt to consume start lines and headers even after
SocketInput.RemoteIntakeFin is set to true to ensure we don't close a
connection without giving the application a chance to respond to a request
sent immediately before the a FIN from the client.
2016-03-17 23:08:30 -07:00
Stephen Halter 84a68208d0 Remove race condition from socket input that could stall reads
- Without the _sync lock, if new data was produced as ConsumingComplete
  was called, the next "await SocketInput" might never complete despite not
  all data being examined.
- If more data is produced afterward, the stall would be prevented, but this
  isn't always the case such as during the end of the request.
2016-03-17 07:44:32 -07:00
Cesar Blum Silveira 8e24c3a708 Fix deadlock when connection is simultaneously aborted and ended (#684). 2016-03-12 21:35:21 -08:00
Pranav K 7c67366e84 Fix CI build failure 2016-03-11 21:41:09 -08:00
Brice Lambson fb8cf86f71 Don't reference facades in NuSpec
These can be removed entirely after dotnet/cli#164
2016-03-11 08:45:06 -08:00
Cesar Blum Silveira 88367ccf2d Wait for more input while request hasn't finished (#672). 2016-03-09 15:20:02 -08:00
moozzyk 5f6293110c Adding libuv.so to the package 2016-03-07 13:21:35 -08:00
Cesar Blum Silveira cd8e8f0a11 Prevent DebugAssertException from blocks not returned by non-graceful shutdowns (#667). 2016-03-03 23:57:22 -08:00
Ajay Bhargav Baaskaran 65f83015e3 Added Company, Copyright and Product attributes to AssemblyInfo 2016-03-03 17:32:50 -08:00
Stephen Halter f15471bcf2 Remove 2 from MemoryPool2 and related types
- This was merely an artifact from when this was the second of 2 pools
2016-03-03 12:11:25 -08:00
Doug Bunting bb2e76c7f1 Remove project name from output path
- aspnet/Coherence-Signed#187
- remove `<RootNamespace>` settings but maintain other unique aspects e.g. `<DnxInvisibleContent ... />`
- in a few cases, standardize on VS version `14.0` and not something more specific
2016-03-02 18:57:23 -08:00
Cesar Blum Silveira 41f77ee3fd Handle uploads larger than 2GB. 2016-03-02 16:09:52 -08:00
Stephen Halter 4e5920fd09 KestrelThread.Stop should wait for StartAsync to complete
- Previously KestrelThread.Stop might assume start failed prematurely
- This could cause a background thread to run indefinitely in the background
2016-03-02 15:04:29 -08:00
N. Taylor Mullen c33b422d7a Transition to netstandard.
- dotnet5.X => netstandard1.y (where y = x-1).
- DNXCore50 => netstandardapp1.5.
- Applied the same changes to ifdefs.
2016-03-01 13:36:06 -08:00
Ben Adams dab1a1fa8d bug dodge: Invalid Program Excep on Clr 2016-02-27 13:23:54 +00:00
Ben Adams 766803c573 Return 400 for bad requests and close conn 2016-02-27 12:35:12 +00:00
Ben Adams 4bfcd7ba1f Drain chunked extensions + refactor 2016-02-26 23:48:51 +00:00
Ben Adams e0f7bb06dd Parse chunked trailing headers 2016-02-26 23:48:50 +00:00
Ben Adams 8d8176f14a Consume chunked request fully 2016-02-26 23:48:49 +00:00
Cesar Blum Silveira f21cb128e8 Handle 0-byte reads correctly (#520). 2016-02-26 15:21:11 -08:00
Ben Adams c2e5124d5a Fix XML Comment 2016-02-22 22:43:30 -08:00
Ben Adams 58e07a8b2b Put threads into background before starting 2016-02-20 06:15:11 +00:00
Ajay Bhargav Baaskaran e14b86ebe0 Enabled xml doc generation 2016-02-18 16:27:55 -08:00
N. Taylor Mullen 795bbfce69 Update System.Linq 4.0.2-* => 4.1.0-*. 2016-02-18 15:36:17 -08:00
Chris R aef612bdac Add IHttpConnectionFeature.ConnectionId. 2016-02-18 11:10:55 -08:00
Cesar Blum Silveira aa48ad2933 Merge branch 'benaadams/loopback-fastpath' into dev 2016-02-18 10:52:42 -08:00
Stephen Halter bc56d11d8c Set IsBackground property to true on libuv Threads for non-debug builds
- If libuv doesn't shutdown as expected, the process will still stop. Thanks @benaadams!
- Address other minor PR feedback.
2016-02-17 16:40:05 -08:00
Stephen Halter 53ecef0f98 Use libuv to track connections instead of ConcurrentDictionaries
- This means connections become untracked sooner than before and not all blocks will
  necessarily be returned.
- The assertion in the MemoryPoolBlock2 finalizer was weakened because FilteredStreamAdapter
  will continue to use blocks after libuv stops tracking the associated connection.
- Make 100% sure we don't accept new connections after we dispose the listen socket by using a flag.
- Add a (currently unused) AllowStop method to KestrelThread. This is meant to be called from
  listeners when we stop accepting new connections, but needs investigation to prevent flakiness.
2016-02-17 16:05:35 -08:00
Stephen Halter f4bb8d5eff Verify that memory pool blocks aren't leaked in tests 2016-02-17 16:05:34 -08:00
Stephen Halter 304016fc3b Close UvAsyncHandle properly to avoid zombie threads
- Even when safe handles are disposed explicitly, ReleaseHandle is sometimes
  called on another thread which breaks uv_close.
- Ensure we close the UvAsyncHandle the uv loop so that the second call
  to uv_run always completes without a timeout/Thread.Abort.
- Re-enable some tests. Add skip conditions for those that aren't passing.
2016-02-17 16:05:32 -08:00
Stephen Halter 54caf3071c Close connections as quickly and gracefully as possible on shutdown
- Make the time given for requests to complete gracefully configurable.
- Complete all async reads so calling code can re-check whether to stop
  request processing and exit if in between requests.
- Don't wait for a FIN from the client since some browsers (e.g. IE & Chrome)
  will take a long time to send one.
- Ensure all ConnectionFilters complete before the memory pool is disposed.
- Ensure blocks get returned even when a ConnectionFilter produces a failed read
2016-02-17 16:05:23 -08:00
Stephen Halter 9c31907bac Don't rely on the finalizer to return blocks referenced by SocketInput 2016-02-17 16:01:35 -08:00
Stephen Halter 87bd60746b Merge branch 'benaadams/pool-headers' into dev 2016-02-17 16:00:20 -08:00
Ben Adams 020e0b9dc5 Enable TCP Loopback Fast Path (Windows)
Enable TCP Loopback Fast Path; where the IP layer is skipped, for lower
latency for localhost comms, like HttpPlatformHandler+IIS reverse proxy

http://blogs.technet.com/b/wincat/archive/2012/12/05/fast-tcp-loopback-performance-and-low-latency-with-windows-server-2012-tcp-loopback-fast-path.aspx

Have to do it this way due to open issue in libuv

Loopback fast path: libuv/libuv#489

Related: "Confirm HttpPlatformHandler uses Fast TCP Loopback"
aspnet/IISIntegration#29
2016-02-14 04:44:20 +00:00
Ben Adams b473402cb1 Fast header clear 2016-02-13 11:49:00 +00:00
Ben Adams f8aa1a676a Pass ServerInformation as property of ServiceContext 2016-02-13 05:51:54 +00:00
Ben Adams 460dbb15c2 RO Headers & rationalise exceptions 2016-02-13 03:35:26 +00:00
Ben Adams e533d5da89 Fast path Consume when already complete 2016-02-13 01:52:16 +00:00
Ben Adams c293bbbd1a Reuse headers to prevent values moving to higher GC gens 2016-02-13 01:16:17 +00:00
Stephen Halter f89c959f4f Merge branch 'benaadams/no-spin' into dev 2016-02-12 10:54:48 -08:00
moozzyk fe75aa47db Enabling Kestrel on OSx Mono when not running with dnx
Before moving to dotnet dnx on OSx on Mono would load libuv.dll into the process and Kestrel would use DllImport with __Internal to import functions from the native libraries loaded into the Mono process. With the move to dotnet nothing is preloading libuv to the process so Kestrel must no longer use DllImports with __Internal but the regular ones. Mono seems to load native libraries from the app folder so, the user won't have to install libuv on their own since libuv.dylib is published with the app.
2016-02-11 16:05:32 -08:00
Pranav K c5a8792ece Reacting to CoreCLR package version changes 2016-02-08 09:33:46 -08:00
Cesar Blum Silveira 6757a31fd2 Build with dotnet (#571). 2016-02-01 14:37:47 -08:00
Cesar Blum Silveira 1209eca3fa Normalize request path to NFC and resolve dot segments (#273). 2016-01-28 15:29:29 -08:00
Brennan 15ed03eb26 React to Logging API changes 2016-01-27 14:25:52 -08:00
Stephen Halter a2fe59fb2c Speed up unit tests
- Remove unnecessary uses of Task.Delay
- Change all usages to CancellationToken.None to default(CancellationToken)
  for consistency
2016-01-27 13:01:44 -08:00
Ben Adams 00b8a13b55 Merge+rename+rename resolve 2016-01-26 11:33:14 +00:00
Ben Adams 9f2d685cbf Merge remote-tracking branch 'refs/remotes/aspnet/shalter/always-immediate' into combined-fixes 2016-01-26 02:15:56 +00:00
Stephen Halter a4b8b01c99 Remove immediate parameter from Frame.ProduceStart
- Simply call SocketOutput.WriteAsync(_emptyData) to force headers to be flushed
2016-01-25 11:09:15 -08:00
Stephen Halter 7570da9daa Flush chunked writes before the entire response completes
Ensure chunked writes force an "immediate" write by removing the now
unused immediate parameter from ISocketOutput.Write
2016-01-25 10:34:15 -08:00
Ben Adams 3f414782b9 Remove spinning for blocked socket ops
As per https://github.com/dotnet/corefx/pull/5655
2016-01-24 14:49:25 +00:00
Ben Adams de34d14abb WriteChunked immediate for large responses 2016-01-23 10:48:24 +00:00
Ben Adams 0ca8ca0328 Update FrameResponseStream Cancellation 2016-01-23 10:17:09 +00:00
Stephen Halter 735c0fbbef Added new test to verify failed writes complete all pending write tasks
- Changed MockLibuv to never fall back to real libuv methods.
- Fixed EngineTests.ConnectionCanReadAndWrite
2016-01-23 10:17:07 +00:00
Ben Adams e5238ff383 Only log connection error once 2016-01-23 10:17:06 +00:00
Ben Adams cd621509d0 Complete all writes after error 2016-01-23 10:17:05 +00:00
Ben Adams a97cb81f92 MockConnection Abort 2016-01-23 10:17:03 +00:00
Ben Adams 73bb0ab5b8 SocketOutput Cancellation handling 2016-01-23 10:17:02 +00:00
N. Taylor Mullen b062f851dc Rename AspNet 5 file contents.
See https://github.com/aspnet/Announcements/issues/144 for more information.
2016-01-22 12:23:51 -08:00
N. Taylor Mullen 3cfe2f3070 Rename AspNet 5 folders and files.
See https://github.com/aspnet/Announcements/issues/144 for more information.
2016-01-22 12:23:44 -08:00