Commit Graph

972 Commits

Author SHA1 Message Date
Stephen Halter 5e97c63467 Throw PlatformNotSupportedException on big-endian platforms 2016-10-28 14:51:55 -07:00
Stephen Halter d475d41f71 Fix boundary cases in MemoryPoolIterator.(Try)PeekLong()
- Fix edge case where the iterator is at the very end of a block.
- Fix edge case where one bits where improperly filled in on a right shift.
- Don't use -1 to represent failure. Use bool and an out parameter instead.
2016-10-28 14:51:47 -07:00
Cesar Blum Silveira 1ffad5ca38 Handle multiple tokens in Connection header (#1170). 2016-10-27 12:19:43 -07:00
Cesar Blum Silveira d64b4c7acb Control-flow simplification in Frame.CreateResponseHeader() (#1168). 2016-10-24 11:07:06 -07:00
Nathan Anderson 610601cc6e test fixes and whitespace changes to generated code 2016-10-20 15:23:03 -07:00
Nathan Anderson 11ed34f229 add header ordering and short circuits to known headers
refactor known header changes

- create template string from Append switch
- add a check to ClearFast to bail out if too many headers are set
2016-10-19 15:49:01 -07:00
Cesar Blum Silveira fff0adeaaf Faster response Content-Length parsing. 2016-10-18 15:57:40 -07:00
Cesar Blum Silveira 78584799a4 Separate request rejection from bad request state setting. 2016-10-17 15:16:50 -07:00
Mike Harder f1071dea50 Set StatusCode before disposing HttpContext (#876) 2016-10-17 15:16:43 -07:00
Cesar Blum Silveira bf94f8526a Remove TCP Loopback Fast Path code (#1147). 2016-10-12 11:41:57 -07:00
Cesar Blum Silveira ffc3eb3afd HEAD response can include Content-Length header. 2016-10-12 11:38:18 -07:00
Stephen Halter ce6e65b1d7 Don't take SocketOutput's _contextLock to return written blocks 2016-10-11 16:39:13 -07:00
Cesar Blum Silveira a15b1e2805 Update cached Content-Length when setting raw header. 2016-10-11 13:55:05 -07:00
Cesar Blum Silveira f8813a600d Handle response content length mismatches (#175). 2016-10-11 13:25:22 -07:00
Cesar Blum Silveira 6c2532682a Merge branch 'benaadams/callstack' into dev 2016-10-10 14:42:22 -07:00
Cesar Blum Silveira 3177ba0aae Wait for frame loop completion to dispose connection stream (#1156). 2016-10-10 10:16:03 -07:00
Ben Adams adc3e63ecc Improve callstack for LoggingThreadPool 2016-10-08 05:14:00 +01:00
Kristian Hellang 03f8a7a217 Use HeaderUtilities.FormatDate in DateHeaderValueManager (#1132) 2016-10-06 11:56:49 -07:00
Cesar Blum Silveira 2c94884da9 Include address in error message when address already in use (#1086). 2016-10-05 14:23:09 -07:00
Pranav K 91497621c9 Updating partner package versions 2016-10-03 19:59:39 -07:00
Cesar Blum Silveira a2439105ae Refactor request line validation and error reporting (#1116). 2016-10-03 16:54:51 -07:00
Cesar Blum Silveira 4117ad8a1e Refactor non-body response handling.
- Add functional tests
- Remove BadHttpResponse, ResponseRejectionReasons and TestFrameProtectedMembers
- Chunk non-keepalive HTTP/1.1 responses
- Set _canHaveBody to true when StatusCode == 101
- Add test to check that upgraded connections are always closed when the app
  is done
- Log writes on responses to HEAD requests only once.
2016-10-03 16:46:59 -07:00
Ben Adams e7e6b896ba Don't emit TE header or body for non-body responses 2016-10-03 15:54:14 -07:00
Cesar Blum Silveira e8fa40235b Remove unused variable in MemoryPoolIterator.Seek() (#1137). 2016-10-03 14:22:10 -07:00
Mikael Mengistu 12adc7de9d Refactored to use the fields from the HttpMethods class
* Reacting to PR comments
2016-09-29 12:19:26 -07:00
Ben Adams 310411075f Slimmer locks 2016-09-28 15:33:34 -07:00
Cesar Blum Silveira 09fda749b0 Don't reset frame state when connection is aborted (#1103). 2016-09-28 15:06:22 -07:00
Cesar Blum Silveira 73656f6503 Assume zero length on non-keepalive requests without Content-Length or Transfer-Encoding (#1104). 2016-09-28 12:30:53 -07:00
Cesar Blum Silveira 0312da7df3 Add request headers timeout (#1110). 2016-09-27 17:08:02 -07:00
Stephen Halter 7b2f7b94ab Return last block from SocketOutput when data is fully written
- This reduces Kestrel's memory usage for idle connections.
2016-09-27 15:57:45 -07:00
Stephen Halter 0edf36bd21 Return last block from SocketInput when data is fully consumed
- This reduces Kestrel's memory usage for idle connections.
2016-09-27 15:57:45 -07:00
Cesar Blum Silveira 375e8b7022 Change context relationships from inheritance to composition. 2016-09-27 11:53:06 -07:00
David Fowler 78c859d7ea Turn on warnings as errors 2016-09-25 12:25:12 -07:00
David Fowler 67930753df Merge pull request #1123 from svick/sockaddr-sequential
Specify sequential layout to avoid warning
2016-09-25 10:49:10 -07:00
Petr Onderka 782f96572d Specify sequential layout to avoid warning 2016-09-25 18:13:42 +02:00
Cesar Blum Silveira 49ff98f8cb More specific response status codes for errors (#653).
- 414 when request line exceeds size limit
- 431 when request headers exceed size or count limits
- 505 when request line contains unsupported HTTP version
2016-09-22 12:13:14 -07:00
Stephen Halter 63509b9e10 Make FrameRequestStream.CopyToAsync(...) copyless
- Add tests for when the CopyToAsync destinationStream throws.
- Add test to verify the destination stream sees the same array written to by
  the producer.
2016-09-20 11:54:58 -07:00
Cesar Blum Silveira 1a273f5a34 Improve keep-alive timeout.
- Track time more accurately
- Control timeout in Connection instead of Frame
2016-09-14 20:57:16 -07:00
Stephen Halter 2fbf0c6281 Merge branch 'DamirAinullin/single-initialize' into dev 2016-09-12 10:34:35 -07:00
Cesar Blum Silveira 8c513402a3 Always call ConsumingComplete() with furthest examined position (#1095). 2016-09-10 20:05:14 -07:00
Pavel Krymets c777a9efea Use TaskCache class from Microsoft.Extensions.TaskCache.Sources (#1089)
Instead of Task.FromResult(0)
2016-09-09 15:57:33 -07:00
DamirAinullin 0491b49268 Remove double initializing of variable _field3 2016-09-07 14:23:06 +03:00
Cesar Blum Silveira f2085b1968 Add keep-alive timeout (#464). 2016-09-06 12:48:47 -07:00
Cesar Blum Silveira 19f8958fa8 Move TestServer to shared directory. 2016-09-06 12:47:24 -07:00
David Fowler 6795ca2f78 Make the char array for utf8 decoding smaller 2016-08-31 18:54:15 -07:00
Stephen Halter 1ecef8094a Make Kestrel's response buffer limit configurable 2016-08-30 16:01:42 -07:00
Stephen Halter acfcafb6e1 Ensure MockLibuv.OnPostTask doesn't complete too early 2016-08-29 20:53:00 -07:00
Stephen Halter 0742d113be Make all calls to ThreadPool.QueueUserWorkItem through IThreadPool
- This allows SocketOutputTests to cause QUWI to exec synchronously
- To avoid allocations, the logger can't be captured making it "unsafe"
2016-08-29 20:52:47 -07:00
Stephen Halter 08d7f66108 Merge branch 'benaadams/less-unsafe' into dev 2016-08-26 14:44:18 -07:00
Ben Adams be51e5aecb Remove unneeded unsafe modifiers 2016-08-25 08:07:15 +01:00
Ben Adams 7dc0a8c7bd Return count from trywrite 2016-08-25 07:58:36 +01:00
Ben Adams af73e519c1 Comment inlinability changes 2016-08-25 07:53:01 +01:00
Ben Adams 40636998d7 Improve inlinability of libuv success checking 2016-08-21 13:48:35 +01:00
Stephen Halter 7bd30ea693 Log all startup errors in KestrelServer 2016-08-18 14:52:26 -07:00
Stephen Halter 972be6e8c1 Disable automatic chunking for all non keep-alive requests
- Fixes a bug where Upgrade requests (e.g. WebSockets) would be chunked
- Allows chunking to be disabled by setting "Connection: close" on the response
2016-08-17 12:39:18 -07:00
Stephen Halter 16fbb94c44 Automatically chunk and set 0 Content-Length for non keep-alive responses 2016-08-15 16:27:54 -07:00
Stephen Halter 5f4e60bf8d Always set "Connection: close" header for non keep-alive responses 2016-08-15 16:27:54 -07:00
Cesar Blum Silveira 08a91f17bf Call OnStarting and OnCompleted callbacks in LIFO order (#1042). 2016-08-10 14:52:05 -07:00
Cesar Blum Silveira 08f98f4790 Add header limit options (#475). 2016-08-09 12:31:39 -07:00
Cesar Blum Silveira a5aacd6307 Throw when setting OnStarting after response has already started (#806). 2016-08-08 11:38:06 -07:00
Cesar Blum Silveira 140dc6fcf5 Add obsoletion reason for KestrelServerOptions.MaxRequestBufferSize. 2016-08-04 10:46:42 -07:00
Stephen Halter 9727a4db86 Improve the performance of connection filters
- Buffer connection filter input less by using ProducingStart/Complete
- Simplify FilteredStreamAdapter
2016-08-03 16:45:39 -07:00
Stephen Halter 5aee524768 Ensure Begin/End Read/Write methods are correctly implemented
- Add Begin/End Write methods to FrameResponseStream
- Fix state check of Begin/End Read methods in FrameRequestStream
2016-08-03 16:45:39 -07:00
Stephen Halter 4337d2a4a7 Implement Begin/End Read/Write methods in LibuvStream 2016-08-03 16:45:39 -07:00
Cesar Blum Silveira 8836eec7d8 Limit request line length (#784). 2016-08-03 15:39:16 -07:00
Stephen Halter dfe12223b8 Ensure HTTPS handshake errors aren't logged on socket close 2016-08-03 15:21:57 -07:00
Stephen Halter 1020d69171 Better logging for connection errors during HTTPS handshake 2016-08-03 11:15:15 -07:00
Mike Harder 4ece3f4b68 Change "String." to "string." to match coding convention 2016-08-01 11:09:31 -07:00
Stephen Halter 00a540dcb8 Merge branch 'benaadams/more-block-collect-info' into dev 2016-07-28 16:51:35 -07:00
Cesar Blum Silveira 2244f190e1 Merge branch 'benaadams/exceptions' into dev 2016-07-25 10:31:32 -07:00
Stephen Halter 3a67cb9df5 Merge branch 'benaadams/enum-rather-than-string' into dev 2016-07-25 10:30:33 -07:00
Stephen Halter b5c117695e Stop KestrelThreads in parallel 2016-07-25 10:29:01 -07:00
Stephen Halter dc12f3150e Wait for graceful shutdown now that it usually works
- Unreference the async handle to allow the loop to stop without walking first
- Wait before walking open handles to allow earlier uv_close calls to complete
2016-07-25 10:29:01 -07:00
Ben Adams 51288e13f8 Enum to singular 2016-07-22 22:25:03 +01:00
Ben Adams 0a1ea124ee Use HttpVersionType enum rather than string compare 2016-07-22 21:34:49 +01:00
Ben Adams 0620ce5a2f Consolidate BadHttpRequestException messages 2016-07-22 21:19:44 +01:00
Ben Adams 7c811ff568 Only allocate key string when unknown 2016-07-22 20:50:43 +01:00
Stephen Halter 27f8c8dca2 Ensure libuv handles get disposed properly after binding errors 2016-07-22 12:26:27 -07:00
David Fowler 0e7967a7fc Allocate things per KestrelThread instead of per listener
- Moved things that have loop affinity to KestrelThread like
WriteReqPool, MemoryPool and the ConnectionManager
- Changed on the listeners to only kill the ListenSocket, not the
connections on dispose
- Moved connection disposal to KestrelThread.Stop
- Simplify the connection manager logic so it's possible to walk and
wait in a single call
2016-07-21 22:17:18 -07:00
Stephen Halter 24fa5c0264 Merge pull request #938 from NVentimiglia/dev
As an American, I had to correct the spelling of 'independent'
2016-07-21 17:17:47 -07:00
Cesar Blum Silveira 3c0e0f8d88 Always throw same exception type on read after connection error (#975). 2016-07-21 16:33:56 -07:00
Pavel Krymets 6bcf7643df Do not allocate large write task queues (#1005) 2016-07-21 16:05:50 -07:00
Pavel Krymets 7b7e2889ce Allocate less in GetIPEndPoint (#1004) 2016-07-21 12:17:55 -07:00
Ben Adams f42316af7f Remove Environment.StackTrace as crashing tests 2016-07-21 01:44:23 +01:00
Ben Adams aa385a1317 Use Environment.NewLine and Environment.StackTrace 2016-07-21 01:13:27 +01:00
Ben Adams 7b8abf5a3e Improved Memoryblock tracking
Also fixed 3 tests that weren't handling block properly
2016-07-21 01:13:27 +01:00
David Fowler 3078f4914c Removed unneeded things from Connection 2016-07-18 22:19:45 -07:00
David Fowler 8399910a6e PR feedback 2016-07-15 15:16:03 -07:00
David Fowler 14717f2a3f Always allocate the socket closed tcs 2016-07-15 15:16:03 -07:00
David Fowler 142685c0fb Remove state lock from Connection
- Remove the state lock by creating the frame earlier
- Set properties on the frame that need to be set before calling start.
- Don't rely on the copy ctor of the *Context hierarchy to set
*everything*
2016-07-15 15:16:03 -07:00
Cesar Blum Silveira 3bb7f4e2c4 Treat ECONNRESET as a connection error (#934). 2016-07-15 14:53:21 -07:00
Doug Bunting 82a0a99107 One build to rule them all
- well, at least VS and command-line builds will share output
- part of aspnet/Coherence-Signed#277
2016-07-07 12:07:14 -07:00
Cesar Blum Silveira edd247b8e2 Merge branch 'khellang/status-451' into dev 2016-07-07 11:42:15 -07:00
Cesar Blum Silveira 176b599854 Merge branch 'khellang/status-308' into dev 2016-07-07 11:35:24 -07:00
Cesar Blum Silveira 9f720eda90 Reset frame streams on each request (#940). 2016-07-06 14:57:43 -07:00
Nicholas Ventimiglia 6a8a4e8669 Update MemoryPoolBlock.cs 2016-06-21 17:00:59 -07:00
Nicholas Ventimiglia 3db95ddcde As an American, I had to correct the spelling of 'independent' 2016-06-21 11:08:40 -07:00
Pranav K de668c2ebd Updating to dev versions
# Conflicts:
#	test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/project.json
2016-06-16 10:40:58 -07:00
Kristian Hellang eb74a19f9a
Added "451 Unavailable For Legal Reasons" to ReasonPhrases
From RFC7725 - https://tools.ietf.org/html/rfc7725
2016-06-16 13:49:26 +02:00
Kristian Hellang 6414ccc2fd
Added "308 Permanent Redirect" to ReasonPhrases
From RFC7538 - https://tools.ietf.org/html/rfc7538
2016-06-16 13:48:52 +02:00
Stephen Halter 01e9101543 Add more doc comments to KestrelServerOptions 2016-06-13 19:52:38 -07:00
Mike Harder 5ecb1f59a4 Limit size of memory buffer when reading request (#304)
- Added property `KestrelServerOptions.MaxRequestBufferSize`
 - Default is 1,048,576 bytes (1MB)
 - If value is null, the size of the request buffer is unlimited.
- Fixed bug in `IConnectionControl.Resume()` where `_socket.ReadStart()` can throw if the socket is already disconnected.
- Made `UvStreamHandle.ReadStop()` idempotent, to match `uv_read_stop()`.
2016-06-13 18:52:20 -07:00
Stephen Halter b4632c273e Handle exceptions thrown from Connection.Start in ListenerSecondary
- This is already done for primary listeners
2016-06-08 17:17:49 -07:00
jacalvar 8dbdc0294f Remove unncessary imports 2016-06-08 15:07:48 -07:00
Mukul Sabharwal badbc7c8f7 Downtarget Kestrel to NETStandard 1.3 2016-06-06 21:37:44 -07:00
moozzyk 69bd0dc4be Reject requests that have null characters in path 2016-06-06 09:59:42 -07:00
Pranav K 17a41597a6 Reacting to Hosting changes 2016-06-03 18:24:35 -07:00
Andrew Stanton-Nurse 09f5be1434 fix #909 by moving most classes to Internal ns 2016-06-03 14:14:21 -07:00
Stephen Halter d14f18012a Avoid Null ReferenceException in Frame.RequestAbortedSource
- Avoid unneeded resetting of _abortedCts and _manuallySetRequestAbortToken
2016-06-02 16:55:19 -07:00
Stephen Halter 6bff2ecb34 Small cleanup to SocketOutput's shutdown logic 2016-06-02 16:54:00 -07:00
Stephen Halter 07744e75d9 Gracefully handle connection close in SocketOutput.ProducingComplete 2016-06-02 16:54:00 -07:00
Stephen Halter 2d229e8980 Allow a maximum of 3 concurrent uv_write operations per connection
- Keep logic to prevent unnecessary calls to KestrelThread.Post
- This partially reverts commit 480996433e.
2016-06-02 16:52:06 -07:00
moozzyk 0342754c57 Using the optimized method for converting header name to ASCII 2016-06-02 16:36:22 -07:00
Cesar Blum Silveira de022b6051 Improved handling of whitespace in headers. 2016-06-02 16:18:43 -07:00
moozzyk 6e46d9757d Improve perf of TryGetAsciiString 2016-06-02 12:52:12 -07:00
Stephen Halter f609f41a7c Reject non-ASCII chars in headers in addition to control chars 2016-06-01 16:01:15 -07:00
Pavel Krymets bb92cc1c29 Fix NRE when aborting connection or client disconects 2016-06-01 15:52:05 -07:00
Chris R 6224f5b6e8 Perf: Remove unnecessary path checks 2016-06-01 14:56:49 -07:00
moozzyk 0753f06c28 Aborting request if a string can't be converted to ASCII 2016-05-31 17:11:31 -07:00
moozzyk 5d77ad24c2 Refactoring out GetAsciiString from MemoryPoolIteratorExtensions 2016-05-31 16:27:01 -07:00
Cesar Blum Silveira 50208a3a79 Implement IHttpRequestFeature.RawTarget (aspnet/HttpAbstractions#596). 2016-05-31 15:30:12 -07:00
Andrew Stanton-Nurse 290e1e3f3f improve validation of HTTP methods 2016-05-31 14:13:13 -07:00
Mike Harder 306084356e ServerAddress.FromUrl() should throw if Host is missing (#860) 2016-05-31 11:54:38 -07:00
BrennanConroy 6b25ee7343 Replace PlatformAbstractions with RuntimeInformation 2016-05-31 08:17:02 -07:00
Cesar Blum Silveira 0a181b1f3f Reset Frame's IHttpRequestFeature.Headers and IHttpResponseFeature.Headers between requests (#879). 2016-05-27 16:02:55 -07:00
Stephen Halter 1a6ec294bc Merge branch 'stephentoub/remove_valuetask_casts' into dev 2016-05-27 15:47:13 -07:00
Cesar Blum Silveira 80a2bc124d Remove Frame.RequestUri. 2016-05-27 12:40:14 -07:00
Mike Harder 2453047fe2 ServerAddress.FromUrl() should throw for invalid url (#875) 2016-05-27 12:02:30 -07:00
Stephen Toub 69d8b17095 Remove uses of ValueTask<T>'s implicit casts
These are being removed.
2016-05-27 10:28:24 -04:00
Stephen Halter b9b67f6bf4 Merge branch 'khellang/set-headers-on-response-start' into dev 2016-05-26 15:35:01 -07:00
Kristian Hellang 72cc0ffbd5 Set Date and Server headers at response start
Closes #223
2016-05-26 17:38:16 +02:00
Cesar Blum Silveira a3d0bd0ec4 Bind to both IPv4 and IPv6 when localhost is specified (#231). 2016-05-25 21:23:29 -07:00
Cesar Blum Silveira 3f4e2323f4 Throw when setting Frame.StatusCode or Frame.ReasonPhrase after response has already started (#805). 2016-05-24 16:32:54 -07:00
Stephen Halter cb284b9d58 Fix race that would allow GetDateHeaderValues to return null 2016-05-24 16:28:46 -07:00
Stephen Halter d164f350b4 Add comment explaining why ForChunkedEncoding._vectorCRs is not static 2016-05-24 16:05:20 -07:00
Mike Harder 5ca6592677 Don't bind if only port is specified (#814) (#861)
- Also renamed ServerAddressFacts to ServerAddressTests to match existing test classes
2016-05-23 14:06:46 -07:00
Ben Adams 6098880132 Reset connection info not using interface 2016-05-21 00:41:55 +01:00
Cesar Blum Silveira 925d8e0200 Always cache headers and streams across frames (#754). 2016-05-20 16:16:19 -07:00
Stephen Halter 5495610e5c Merge branch 'benaadams/fastpath-connectioncheck' into dev 2016-05-20 16:02:46 -07:00
Stephen Halter a38a437efb Merge branch 'khellang/server-header-option' into dev 2016-05-20 15:56:29 -07:00
Stephen Halter c39546352a Merge branch 'shanewalters/remote-cert' into dev 2016-05-20 15:53:51 -07:00
Kristian Hellang 2ab01c09fd Add option to remove the Server header 2016-05-20 13:18:18 +02:00
Ben Adams 5eb1466487 Fast-path response header connection check 2016-05-20 03:37:32 +01:00
shanewalters b17c070e1c Updated to not use handle, centralize conversion logic. 2016-05-19 14:40:29 -06:00
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
shanewalters 9232029950 Use SslStream.RemoteCertificate to recreate disposed certificate. 2016-05-19 12:17:23 -06: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
Doug Bunting c828fafe1b React to HttpAbstractions namespace changes
- aspnet/HttpAbstractions#549 and aspnet/HttpAbstractions#592
- clean up `using`s
2016-03-30 16:04:43 -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
Cesar Blum Silveira 37b0917ac1 Use TLS 1.1 or 1.2 only (#637). 2016-03-09 12:09:31 -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