Nikolay Kim
d57579d700
refactor acceptor pipeline add client timeout
2018-09-27 18:33:29 -07:00
Nikolay Kim
b6a1cfa6ad
update openssl support
2018-09-27 18:33:29 -07:00
Nikolay Kim
9f1417af30
refactor http service builder
2018-09-27 18:33:29 -07:00
Nikolay Kim
0aa0f326f7
fix changes from master
2018-09-27 18:33:29 -07:00
Nikolay Kim
dbb4fab4f7
separate mod for HttpHandler; add HttpHandler impl for Vec<H>
2018-09-27 18:33:29 -07:00
Nikolay Kim
6f3e70a92a
simplify application factory
2018-09-27 18:33:29 -07:00
Nikolay Kim
a63d3f9a7a
cleanup ServerFactory trait
2018-09-27 18:33:29 -07:00
Nikolay Kim
a3cfc24232
refactor acceptor service
2018-09-27 18:33:29 -07:00
Nikolay Kim
6a61138bf8
enable ssl feature
2018-09-27 18:33:29 -07:00
Nikolay Kim
c9a52e3197
refactor date generatioin
2018-09-27 18:33:29 -07:00
Nikolay Kim
1907102685
switch to actix-net server
2018-09-27 18:33:29 -07:00
sapir
59deb4b40d
Try to separate HTTP/1 read & write disconnect handling, to fix #511 . ( #514 )
2018-09-27 18:15:02 -07:00
Ashley
782eeb5ded
Reduced unsafe converage ( #520 )
2018-09-26 11:56:34 +03:00
Douman
1b298142e3
Correct composing of multiple origins in cors ( #518 )
2018-09-21 08:45:22 +03:00
Douman
0dc96658f2
Send response to inform client of error ( #515 )
2018-09-21 07:24:10 +03:00
Nikolay Kim
f40153fca4
fix node::insert() method, missing next element
2018-09-17 11:39:03 -07:00
Nikolay Kim
bfb2f2e9e1
fix node.remove(), update next node pointer
2018-09-17 10:25:45 -07:00
Nikolay Kim
599e6b3385
refactor channel node remove operation
2018-09-17 05:29:07 -07:00
Nikolay Kim
7449884ce3
fix wrong error message for path deserialize for i32 #510
2018-09-15 17:09:07 -07:00
Nikolay Kim
9d1eefc38f
use 5 seconds keep-alive timer by default
2018-09-15 09:57:54 -07:00
Nikolay Kim
d65c72b44d
use server keep-alive timer as slow request timer
2018-09-15 09:55:38 -07:00
Nikolay Kim
c3f8b5cf22
clippy warnings
2018-09-11 11:25:32 -07:00
Nikolay Kim
70a3f317d3
fix failing requests to test server #508
2018-09-11 11:24:05 -07:00
Robert G. Jakabosky
70b45659e2
Make Node's traverse
method take a closure instead of calling shutdown
on each HttpChannel.
2018-09-12 00:27:15 +08:00
Robert G. Jakabosky
e0ae6b10cd
Fix bug with HttpChannel linked list.
2018-09-12 00:27:15 +08:00
Maciej Piechotka
003b05b095
Don't ignore errors in std::fmt::Debug implementations ( #506 )
2018-09-11 14:57:55 +03:00
Nikolay Kim
002bb24b26
unhide SessionBackend and SessionImpl traits and cleanup warnings
2018-09-07 20:46:43 -07:00
Maciej Piechotka
4251b0bc10
Refactor resource route parsing to allow repetition in the regexes
2018-09-06 08:51:55 +02:00
Jan Michael Auer
86fdbb47a5
Fix system_exit in HttpServer ( #501 )
2018-09-05 10:41:23 +02:00
Nikolay Kim
f0f67072ae
Read client response until eof if connection header set to close #464
2018-09-03 21:35:59 -07:00
Nikolay Kim
24d1228943
simplify handler path processing
2018-09-03 11:28:47 -07:00
Nikolay Kim
b7a73e0a4f
fix Scope::handler doc test
2018-09-02 08:51:26 -07:00
Nikolay Kim
968c81e267
Handling scoped paths without leading slashes #460
2018-09-02 08:14:54 -07:00
Nikolay Kim
d5957a8466
Merge branch 'master' of https://github.com/actix/actix-web
2018-09-02 07:47:45 -07:00
Nikolay Kim
f2f05e7715
allow to register handlers on scope level #465
2018-09-02 07:47:19 -07:00
Markus Unterwaditzer
3439f55288
doc: Add example for using custom nativetls connector ( #497 )
2018-09-01 18:13:52 +03:00
Robert Gabriel Jakabosky
0425e2776f
Fix Issue #490 ( #498 )
...
* Add failing testcase for HTTP 404 response with no reason text.
* Include canonical reason test for HTTP error responses.
* Don't send a reason for unknown status codes.
2018-09-01 12:00:32 +03:00
Nikolay Kim
6464f96f8b
Merge branch 'master' of https://github.com/actix/actix-web
2018-08-31 18:56:53 -07:00
Nikolay Kim
a2b170fec9
fmt
2018-08-31 18:56:21 -07:00
Nikolay Kim
0b42cae082
update tests
2018-08-31 18:54:19 -07:00
Nikolay Kim
c313c003a4
Fix typo
2018-08-31 17:45:29 -07:00
Nikolay Kim
2d51831899
handle socket read disconnect
2018-08-31 17:24:13 -07:00
Robert G. Jakabosky
66881d7dd1
If buffer is empty, read more data before calling parser.
2018-09-01 02:25:05 +08:00
Robert G. Jakabosky
a42a8a2321
Add some comments to clarify logic.
2018-09-01 02:15:36 +08:00
Robert G. Jakabosky
2341656173
Simplify buffer reading logic. Remove duplicate code.
2018-09-01 01:41:38 +08:00
Robert Gabriel Jakabosky
af6caa92c8
Merge branch 'master' into master
2018-09-01 00:17:34 +08:00
Robert G. Jakabosky
3ccbce6bc8
Fix issue with 'Connection: close' in ClientRequest
2018-09-01 00:08:53 +08:00
Markus Unterwaditzer
4bab50c861
Add ability to pass a custom TlsConnector ( #491 )
2018-08-29 20:53:31 +02:00
Robert G. Jakabosky
8393d09a0f
Fix tests.
2018-08-27 00:31:31 +08:00
Robert G. Jakabosky
c3ae9997fc
Fix bug with http1 client disconnects.
2018-08-26 22:21:05 +08:00
0x1793d1
471a3e9806
Fix server startup log message
2018-08-24 23:21:32 +02:00
Nikolay Kim
9ef7a9c182
hide AcceptorService
2018-08-23 11:30:49 -07:00
Nikolay Kim
3dafe6c251
hide token and server flags
2018-08-23 11:30:07 -07:00
Nikolay Kim
8dfc34e785
fix tokio-tls IoStream impl
2018-08-23 10:27:32 -07:00
Nikolay Kim
810995ade0
fix tokio-tls dependency #480
2018-08-23 10:10:13 -07:00
Nikolay Kim
1716380f08
clippy fmt
2018-08-23 09:48:01 -07:00
Nikolay Kim
e9c139bdea
clippy warnings
2018-08-23 09:47:32 -07:00
Nikolay Kim
cf54be2f17
hide new server api
2018-08-23 09:39:11 -07:00
Nikolay Kim
89f414477c
Merge branch 'master' into master
2018-08-23 09:34:34 -07:00
Douman
986f19af86
Revert back to serde_urlencoded dependecy ( #479 )
2018-08-21 22:23:17 +03:00
Franz Gregor
e680541e10
Made extensions constructor public
2018-08-18 19:32:28 +02:00
Kornel
bdc9a8bb07
Optionally support tokio-uds's UnixStream as IoStream ( #472 )
2018-08-17 19:04:15 +03:00
Nikolay Kim
eb1e9a785f
allow to use fn with multiple arguments with .with()/.with_async()
2018-08-16 20:29:06 -07:00
Douman
248bd388ca
Improve HTTP server docs ( #470 )
2018-08-16 16:11:15 +03:00
Gowee
d9c7cd96a6
Rework Content-Disposition parsing totally ( #461 )
2018-08-13 17:34:05 +03:00
Nikolay Kim
bf7779a9a3
add TestRequest::run_async_result helper method
2018-08-09 18:58:14 -07:00
Nikolay Kim
cc3fbd27e0
better ergonomics
2018-08-09 17:25:23 -07:00
Nikolay Kim
26629aafa5
explicit use
2018-08-09 13:41:13 -07:00
Nikolay Kim
2ab7dbadce
better ergonomics for Server::service() method
2018-08-09 13:38:10 -07:00
Nikolay Kim
2e8d67e2ae
upgrade native-tls package
2018-08-09 13:08:59 -07:00
Nikolay Kim
43b6828ab5
Merge branch 'master' of https://github.com/actix/actix-web
2018-08-09 11:52:45 -07:00
Nikolay Kim
e4ce6dfbdf
refactor workers management
2018-08-09 11:52:32 -07:00
Douman
5713d93158
Merge branch 'master' into master
2018-08-09 08:13:22 +03:00
Nikolay Kim
cfe4829a56
add TestRequest::execute() helper method
2018-08-08 16:13:45 -07:00
Nikolay Kim
b69774db61
fix attr name
2018-08-08 14:23:16 -07:00
Nikolay Kim
542782f28a
add HttpRequest::drop_state()
2018-08-08 13:57:13 -07:00
David McNeil
7c8dc4c201
Add json2 tests
2018-08-08 12:17:19 -06:00
David McNeil
7a11c2eac1
Add json2 HttpResponseBuilder method
2018-08-08 11:11:15 -06:00
Nikolay Kim
8eb9eb4247
flush io on complete
2018-08-08 09:12:32 -07:00
Nikolay Kim
992f7a11b3
remove debug println
2018-08-07 22:40:09 -07:00
Nikolay Kim
30769e3072
fix http/2 error handling
2018-08-07 20:48:25 -07:00
Nikolay Kim
57f991280c
fix protocol order for rustls acceptor
2018-08-07 13:53:24 -07:00
Nikolay Kim
85acc3f8df
deprecate HttpServer::no_http2(), update changes
2018-08-07 12:49:40 -07:00
Nikolay Kim
58a079bd10
include content-length to error response
2018-08-07 11:56:39 -07:00
Douman
86a5afb5ca
Reserve enough space for ServerError task to write status line
2018-08-07 17:34:24 +03:00
Douman
9c80d3aa77
Write non-80 port in HOST of client's request ( #451 )
2018-08-07 10:01:29 +03:00
Erik Desjardins
954f1a0b0f
impl FromRequest for () ( #449 )
2018-08-06 10:44:08 +03:00
Douman
900fd5a98e
Correct settings headers for HTTP2
...
Add test to verify number of Set-Cookies
2018-08-04 18:05:41 +03:00
Nikolay Kim
84b27db218
fix no_http2 flag
2018-08-03 19:40:43 -07:00
Nikolay Kim
ac9180ac46
simplify channel impl
2018-08-03 19:32:46 -07:00
Nikolay Kim
e34b5c08ba
allow to pass extra information from acceptor to application level
2018-08-03 19:24:53 -07:00
Nikolay Kim
f3f1e04853
refactor ssl support
2018-08-03 16:09:46 -07:00
Jan Michael Auer
e61ef7dee4
Use zlib instead of deflate for content encoding ( #442 )
2018-08-03 14:56:26 +02:00
Mathieu Amiot
9a10d8aa7a
Fixed headers' formating for CORS Middleware Access-Control-Expose-Headers header value to HTTP/1.1 & HTTP/2 spec-compliant format ( #436 )
2018-08-03 15:03:11 +03:00
Mathieu Amiot
f8e5d7c6c1
Fixed broken build on wrong variable usage ( #440 )
2018-08-03 14:11:51 +03:00
Nikolay Kim
8c89c90c50
add accept backpressure #250
2018-08-02 23:17:10 -07:00
Nikolay Kim
0da3fdcb09
do not use Arc for rustls config
2018-08-01 10:59:00 -07:00
jrconlin
115f59dd14
Merge branch 'master' of https://github.com/actix/actix-web into feat/432
2018-08-01 09:59:36 -07:00
Nikolay Kim
972b008a6e
remove unsafe error transmute, upgrade failure to 0.1.2 #434
2018-08-01 09:42:12 -07:00
Nikolay Kim
58230b15b9
use one thread for accept loop; refactor rust-tls support
2018-07-31 19:51:26 -07:00
jrconlin
aa1e75f071
feature: allow TestServer to open a websocket on any URL
...
* added `TestServer::ws_at(uri_str)`
* modified `TestServer::ws()` to call `self.ws_at("/")` to preserve
behavior
Closes #432
2018-07-31 16:21:18 -07:00
Nikolay Kim
2071ea0532
HttpRequest::url_for is not working with scopes #429
2018-07-31 15:40:52 -07:00
Nikolay Kim
3bd43090fb
use new gzdecoder, fixes gz streaming #228
2018-07-31 09:06:05 -07:00
Nikolay Kim
4dba531bf9
do not override HOST header for client request #428
2018-07-31 08:51:24 -07:00
Nikolay Kim
2072c933ba
handle error during request creation
2018-07-30 15:04:52 -07:00
Nikolay Kim
7bc0ace52d
move server accept impl to seprate module
2018-07-30 13:42:42 -07:00
Marat Safin
196da6d570
add rustls
2018-07-30 08:21:12 +03:00
Nikolay Kim
80fbc2e9ec
Fix stream draining for http/2 connections #290
2018-07-25 15:38:02 -07:00
Nikolay Kim
f58065082e
fix missing content-encoding header for h2 connections #421
2018-07-25 10:30:55 -07:00
Douman
6048817ba7
Correct flate feature names in documentation
2018-07-25 20:22:18 +03:00
Nikolay Kim
b878613e10
fix warning
2018-07-24 15:49:46 -07:00
Nikolay Kim
85b275bb2b
fix warnings
2018-07-24 15:09:30 -07:00
Nikolay Kim
d6abd2fe22
allow to handle empty path for application with prefix
2018-07-24 14:51:48 -07:00
Nikolay Kim
d3b12d885e
Merge branch 'master' into master
2018-07-24 14:07:03 -07:00
Akos Vandra
35b754a3ab
pr fixes
2018-07-24 09:42:46 +02:00
Akos Vandra
1079c5c562
Add FromRequest<S> implementation for Result<T> and Option<T> where T:FromRequest<S>
2018-07-24 09:42:46 +02:00
Akos Vandra
f4bb7efa89
add partialeq, eq, partialord and ord dervie to Path, Form and Query
2018-07-24 09:42:46 +02:00
Akos Vandra
0099091e96
remove unnecessary use
2018-07-24 09:42:46 +02:00
Denis Kolodin
b367f07d56
Add http_only flag to CookieSessionBackend
2018-07-23 12:49:59 +03:00
Damjan Georgievski
56b924e155
remove the timestamp from the default logger middleware
...
env_logger and other logging systems will (or should) already add their
own timestamp.
2018-07-21 15:15:28 +02:00
Nikolay Kim
4862227df9
fix not implemented panic #410
2018-07-21 05:58:08 -07:00
Nikolay Kim
040d9d2755
Merge branch 'master' of github.com:actix/actix-web
2018-07-20 12:43:44 -07:00
Nikolay Kim
2043bb5ece
do not reallocate waiters
2018-07-20 10:20:41 -07:00
Douman
a751df2589
Initial config for static files ( #405 )
2018-07-20 07:49:25 +03:00
Douman
f6e35a04f0
Just a bit of sanity check for short paths ( #409 )
2018-07-20 07:48:57 +03:00
Tobias Bieniek
0925a7691a
ws/context: Increase write()
visibility to public ( #402 )
...
This type is introduced to avoid confusion between the `.binary()` and `.write_raw()` methods on WebSocket contexts
2018-07-19 20:04:13 +03:00
Douman
2988a84e5f
Expose leaked private ContentDisposition ( #406 )
2018-07-19 20:03:45 +03:00
Nikolay Kim
6b10e1eff6
rename PayloadHelper
2018-07-18 10:01:28 +06:00
Nikolay Kim
85672d1379
fix client connector wait queue
2018-07-18 01:23:56 +06:00
Nikolay Kim
373f2e5028
add release stat
2018-07-17 17:38:16 +06:00
Nikolay Kim
f9f259e718
Merge branch 'master' of github.com:actix/actix-web
2018-07-17 17:23:23 +06:00
Nikolay Kim
d43902ee7c
proper handling for client connection release
2018-07-17 17:23:03 +06:00
Douman
29a275b0f5
Session should write percent encoded cookies and add cookie middleware test ( #393 )
...
* Should write percent encoded cookies to HTTP response
* Add cookie middleware test
2018-07-17 08:38:18 +03:00
Nikolay Kim
1af5aa3a3e
calculate client request timeout
2018-07-17 02:30:21 +06:00
Nikolay Kim
bccd7c7671
add wait queue size stat to client connector
2018-07-17 01:57:57 +06:00
Nikolay Kim
2a8c2fb55e
export Payload
2018-07-16 12:14:24 +06:00
Nikolay Kim
2dd57a48d6
checks nested scopes in has_resource()
2018-07-16 11:33:29 +06:00
Nikolay Kim
22385505a3
clippy warnings and fmt
2018-07-16 11:17:45 +06:00
Nikolay Kim
5888f01317
use has_prefixed_route for NormalizePath helper
2018-07-16 11:13:41 +06:00
Nikolay Kim
b7a3fce17b
simplify has_prefixed_route()
2018-07-16 11:10:51 +06:00
Nikolay Kim
bce05e4fcb
Merge pull request #381 from OtaK/fix/has_route_prefixes
...
Add prefix aware RouteInfo::has_prefixed_route()
2018-07-16 10:58:50 +06:00
Nikolay Kim
3373847a14
allocate buffer for request payload extractors
2018-07-16 00:40:22 +06:00
Mathieu Amiot
8f64508887
Added RouteInfo::has_prefixed_route() method for route matching with prefix awareness
2018-07-15 19:37:20 +02:00
Nikolay Kim
2214492792
use assert and restore test case
2018-07-15 18:53:02 +06:00
Nikolay Kim
42d3e86941
calculate prefix dynamicly
2018-07-15 16:25:56 +06:00
Nikolay Kim
b759dddf5a
simplify application prefix impl
2018-07-15 16:25:56 +06:00
Nikolay Kim
9570c1cccd
rename RouteInfo
2018-07-15 16:25:56 +06:00
Nikolay Kim
da915972c0
refactor router
2018-07-15 16:25:56 +06:00
Tobias Bieniek
9012cf43fe
error: Fix documentation typo
2018-07-14 00:05:07 +02:00
Douman
7d753eeb8c
Private serde fork ( #390 )
...
* Fork serde_urlencoded
* Apply enum PR https://github.com/nox/serde_urlencoded/pull/30
* Add test to verify enum in query
* Docs are updated to show example of how to use enum.
2018-07-13 09:59:09 +03:00
Nikolay Kim
35911b832a
Merge branch 'master' of github.com:actix/actix-web
2018-07-12 23:59:10 +06:00
Nikolay Kim
b8b90d9ec9
rename ResourceHandler to Resource
2018-07-12 15:30:01 +06:00
Nikolay Kim
db005af1af
clippy warnings
2018-07-12 10:41:49 +06:00
Nikolay Kim
8e462c5944
use write instead format
2018-07-12 10:35:09 +06:00
kingoflolz
d9988f3ab6
fix missing content length
...
fix missing content length when no compression is used
2018-07-11 21:21:32 +10:00
Nikolay Kim
696152f763
Merge pull request #377 from Diggsey/apply-mask
...
Refactor `apply_mask` implementation, removing dead code paths and re…
2018-07-11 13:36:08 +06:00
Nikolay Kim
28b36c650a
fix h2 compatibility
2018-07-11 13:25:07 +06:00
Nikolay Kim
b22132d3d6
Merge branch 'master' into apply-mask
2018-07-11 13:15:35 +06:00
Nikolay Kim
9aef34e768
remove & to &mut transmute #385
2018-07-11 12:56:35 +06:00
Diggory Blake
87824a9cf6
Refactor apply_mask
implementation, removing dead code paths and reducing scope of unsafety
2018-07-08 13:56:43 +01:00
Douman
82920e1ac1
Do not override user settings on signals and stop handling ( #375 )
2018-07-08 09:01:44 +03:00
Nikolay Kim
110605f50b
stop actor context on error #311
2018-07-08 09:41:55 +06:00
Diggory Blake
85012f947a
Remove reimplementation of LazyCell
2018-07-06 22:28:08 +01:00
Nikolay Kim
5b7aed101a
remove unsafe
2018-07-06 13:54:43 +06:00
Nikolay Kim
1c3b32169e
remove stream from WebsocketsContext::with_factory
2018-07-06 12:11:40 +06:00
Nikolay Kim
cfa470db50
close conneciton for head requests
2018-07-06 09:21:24 +06:00
Nikolay Kim
a5f7a67b4d
clippy warnings
2018-07-06 08:24:44 +06:00
Nikolay Kim
185e710dc8
do not drop content-encoding header in case of identity #363
2018-07-06 08:24:36 +06:00
Nikolay Kim
9070d59ea8
do not read head payload
2018-07-06 08:11:36 +06:00
Nikolay Kim
2a25caf2c5
Merge branch 'master' of github.com:actix/actix-web
2018-07-06 07:49:50 +06:00
Nikolay Kim
7d96b92aa3
add check for usize cast
2018-07-06 07:46:47 +06:00
Douman
67e4cad281
Introduce method to set header if it is missing only ( #364 )
...
Also let default headers use it.
Closes #320
2018-07-05 19:27:18 +03:00
Tessa Bradbury
080f232a0f
Use StaticFile default handler when file is inaccessible ( #357 )
...
* Use Staticfile default handler on all error paths
* Return an error from StaticFiles::new() if directory doesn't exist
2018-07-05 12:34:13 +03:00
Nikolay Kim
8058d15624
clippy warnings
2018-07-05 13:16:16 +06:00
Nikolay Kim
05a43a855e
remove unsafe
2018-07-05 13:00:46 +06:00
Nikolay Kim
80339147b9
call disconnect on write error
2018-07-05 12:50:54 +06:00
Nikolay Kim
6af2f5d642
re-enable start_incoming support
2018-07-05 12:14:10 +06:00
Nikolay Kim
d5606625a2
remove public Clone for Request
2018-07-04 22:57:40 +06:00
Nikolay Kim
5d79114239
optimize Request handling
2018-07-04 22:52:49 +06:00
Nikolay Kim
f559f23e1c
Merge branch 'master' of github.com:actix/actix-web
2018-07-04 21:02:40 +06:00
Nikolay Kim
6fd686ef98
cleanup warnings
2018-07-04 21:01:27 +06:00
Nikolay Kim
4c5a63965e
use new actix context api
2018-07-04 17:04:23 +06:00
Gorm Casper
09aabc7b3b
plain/text -> text/plain in comment ( #362 )
2018-07-04 11:17:44 +03:00
Nikolay Kim
fec6047ddc
refactor HttpRequest mutability
2018-07-02 23:35:32 +06:00
Nikolay Kim
445ea043dd
remove unsafes
2018-07-02 23:32:29 +06:00
Gowee
0be5448597
Properly escape special characters in fs/directory_listing. ( #355 )
2018-06-30 15:01:48 +03:00
ousado
0f27389e72
set length of vector to max_bytes ( closes #345 ) ( #346 )
2018-06-26 08:09:12 +03:00
Douman
a9425a866b
Fix duplicate tail of StaticFiles with index_file
...
Map from 0.6 to master
2018-06-25 19:59:55 +03:00
Nikolay Kim
800c404c72
explicit response release
2018-06-25 10:10:02 +06:00
Nikolay Kim
32212bad1f
simplify http response pool
2018-06-25 09:08:28 +06:00
Nikolay Kim
d1b73e30e0
update comments
2018-06-24 22:27:30 +06:00
Nikolay Kim
c0cdc39ba9
do not store cookies on client response
2018-06-24 22:21:04 +06:00
Nikolay Kim
8e8a68f90b
add empty output stream
2018-06-24 22:05:44 +06:00
Nikolay Kim
989cd61236
handle empty te
2018-06-24 10:59:01 +06:00
Nikolay Kim
33260c7b35
split encoding module
2018-06-24 10:42:20 +06:00
Nikolay Kim
40ca9ba9c5
simplify write buffer
2018-06-24 10:30:58 +06:00
Nikolay Kim
45682c04a8
refactor content encoder
2018-06-24 08:54:01 +06:00
Nikolay Kim
348491b18c
fix alpn connector
2018-06-23 17:59:45 +06:00
Nikolay Kim
3d2226aa9e
Merge branch 'master' of github.com:actix/actix-web
2018-06-23 12:40:45 +06:00
Nikolay Kim
cf38183dcb
refactor client connector waiters maintenance
2018-06-23 12:40:21 +06:00