summaryrefslogtreecommitdiffstats
path: root/tests (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Remove DoesDropOnUnsuitableTiger Wang2021-03-153-27/+0
| | | | This is only overridden false in Vines and Snow. It is called when a CanBeAt check fails, to determine whether DropBlockAsPickups is called. However, Vines and Snow already drop nothing without the right tool, so this function is superfluous.
* Prepare ChunkData for BlockState storage (#5105)Tiger Wang2021-03-057-266/+187
| | | | | | | | | | | | | | | | | | | | | | | * Rename ChunkData Creatable test * Add missing Y-check in RedstoneWireHandler * Remove ChunkDef.h dependency in Scoreboard * Prepare ChunkData for BlockState storage + Split chunk block, meta, block & sky light storage + Load the height map from disk - Reduce duplicated code in ChunkData - Remove saving MCSBiomes, there aren't any - Remove the allocation pool, ref #4315, #3864 * fixed build * fixed test * fixed the debug compile Co-authored-by: 12xx12 <44411062+12xx12@users.noreply.github.com>
* CompositeChat: use variants12xx122021-02-081-34/+48
|
* Fix debug macro situation (#5114)Tiger Wang2021-01-261-4/+4
| | | Use the standard NDEBUG.
* zlib -> libdeflate (#5085)Tiger Wang2021-01-115-7/+6
| | | | | | + Use libdeflate + Use std::byte * Fix passing temporary to string_view + Emulate make_unique_for_overwrite
* Remove unused Temporary namespaceTiger Wang2020-12-214-10/+10
| | | | - Remove unused temporary mapping generation at startup
* changing cComposite Chat to newer c++ standart (#5028)12xx122020-11-111-0/+14
| | | | | | | | | | | | | | | | | | | | * upgraded to new C++ for loops and fixed errors * readded delete instruction * now using unique ptr * added test for text only (that was causing an error for me) * using unique ptr constructor * added move constructor and deleted copy constructor * fixed deconstuctor http prefixes are constexpr and std::string_view * fixed whitespace Co-authored-by: 12xx12 <12xx12100@gmail.com>
* cBlockInfo: further cleanup (#5001)Tiger Wang2020-10-182-25/+2
| | | | | | | | * cBlockInfo: further cleanup + Use switch statements instead of lookup in dynamically initialised arrays - Remove some deprecated bindings * Update Stubs removing references to BlockInfoArray
* Fix Android builds (#4998)Tiger Wang2020-10-1514-415/+415
| | | | | Construct paths relative to the Cuberite sources with PROJECT_SOURCE_DIR, instead of wherever the first CMakeLists.txt file happened to be with CMAKE_SOURCE_DIR. In Android's case, the latter was in a folder called android/ but that's not the root of the source tree, so any file path built off that root was wrong. This caused file-specific warnings exclusions to fail to apply.
* Remove unused Temporary namespaceTiger Wang2020-09-252-2/+0
|
* Unify block entity pickup conversionTiger Wang2020-09-253-3/+3
| | | | | - Removed normal BlockHandler knowledge of block entities during conversion + Added cBlockEntity::ConvertToPickups that handles it
* BlockHandler initialisation is a constant expression (#4891)Tiger Wang2020-09-203-92/+72
| | | | | | | | | | | | | * BlockHandler initialisation is a constant expression If we can't make it all namespaces, this is the next best I guess. + Tag handlers constexpr, const as needed + Inherit constructors * Privatise handler functions * More constexpr Co-authored-by: Alexander Harkness <me@bearbin.net>
* Adding Generator For Single Piece Structures (#4830)12xx122020-09-181-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * the beginning of a magnificent work - added basic files and classes without functionality * fixed checkstyle * added imports * moved imports * - Adding SinglePieceStructureGen - Adding a cPrefabChestStructure to generate Chests with contents - Added the options and calls to the ComposableGenerator * moved Globals to .h file * removed the chest thingy from the code (for now) * Update SinglePieceStructureGen.cpp * readded whitespace * renamed to SinglePieceStructuresGen for consistency added new classes to test * fixed small things (mostly style and cleanup) removed loottables * added small changes suggested by madmaxoft * small change to documentation * added check for allowed biomes * check only the biome of the origin position * fixed error on IsBiomeAllowed * added new cubesets * updated structures for with sponging * updated biome names * updated metadata to prevent crashing removed debug output * updated structures with sponging * added sponging to deserterWell to make it disappear in sand * small change in meta * rename DesertTemple -> DesertPyramid * minor style changes Co-authored-by: 12xx12 <12xx12100@gmail.com> Co-authored-by: Alexander Harkness <me@bearbin.net>
* BlockHandler: no dynamic allocation (#4862)Tiger Wang2020-09-173-23/+11
| | | * BlockHandler: no dynamic allocation
* Fixup test block handler stubsTiger Wang2020-08-043-51/+3
|
* Replaced cpp14::make_unique<> with std::make_unique<>.Mattes D2020-08-011-4/+4
|
* More CMake cleanupTiger Wang2020-07-121-4/+4
|
* Update libevent to 2.1.12-stablePeter Bell2020-07-062-2/+0
|
* Upgrade to C++17 [CMake] (#4717)Tiger Wang2020-05-1615-109/+32
| | | * Make our CMake slightly less insane
* Cleanup unneeded globals (#4736)peterbell102020-05-105-5/+5
|
* Update submodules (#4727)peterbell102020-05-093-4/+8
| | | | | | | | | | | | | Closes #4708 This updates jsoncpp, mbedtls, TCLAP and SQLiteCpp to their latest stable release. A few additional changes were needed: * jsoncpp deprecated Reader, FastWriter and StyledWriter which I've replaced with some helper functions in JsonUtils.cpp * SQLiteCpp changed how it builds with external sqlite libraries, now expecting them to be installed. The simplest path was to remove sqlite from cuberite's submodule and just use SQLiteCpp's internal version.
* Require semi-colon at end of function-like macros (#4719)peterbell102020-05-053-62/+83
|
* Vector3 in Handlers (#4680)Mattes D2020-04-213-12/+15
| | | Refactored all cBlockHandler and cItemHandler descendants to use Vector3.
* More Vector3 in cBlockHandler (#4644)Mattes D2020-04-173-3/+3
| | | | | * cBlockHandler.OnUpdate uses Vector3 params. Also slightly changed how block ticking works.
* Manage block entity lifetime with unique_ptr (#4080)peterbell102020-04-033-10/+6
|
* Pulled the BlockID and BlockInfo headers from Globals.h. (#4591)Mattes D2020-04-035-45/+79
| | | | | | | | | The BlockID.h file was removed from Globals.h and renamed to BlockType.h (main change) The BlockInfo.h file was removed from Globals.h (main change) The ENUM_BLOCK_ID and ENUM_ITEM_ID enum names were replaced with ENUM_BLOCK_TYPE and ENUM_ITEM_TYPE (cosmetics) The various enums, such as eDimension, eDamageType and eExplosionSource were moved from BlockType.h to Defines.h, together with the helper functions for converting between them and strings (StringToDimension et al.) (minor) Many inline functions were moved from headers to their respective cpp files, so that BlockType.h could be included only into the cpp file, rather than the header. That broke our tests a bit, since they pick bits and pieces out of the main code and provide stubs for the rest; they had to be re-stubbed and re-verified. eMonsterType values are no longer tied to E_ITEM_SPAWN_EGG_META_* values
* BlockTypePalette: Improved loading speed in MSVC Debug builds.Mattes D2020-02-241-2/+2
|
* BlockTypePalette: Load from TSV or original reports' JSON.Mattes D2019-12-283-222/+143
|
* Moved ProtocolBlockTypePalette functionality into BlockTypePalette.Mattes D2019-12-286-218/+158
|
* BlockTypePalette: Refactored for usage in both directions.Mattes D2019-12-281-48/+60
| | | | Improves index() lookup speeds and allows BlockTypePalette to be used in place of ProtocolBlockTypePalette.
* Refactored block-to-pickup conversion. (#4417)Mattes D2019-10-163-63/+36
|
* Refactored more of Entities and BlockEntities to use Vector3. (#4403)Mattes D2019-09-293-13/+12
|
* Add ProtocolBlockTypePalette (#4391)E142019-09-225-0/+420
|
* Fix race condition in UrlClientTestpeterbell102019-09-101-15/+16
|
* ChunkGenerator: Changed to use cChunkCoords.Mattes D2019-09-081-3/+3
|
* Generator: Added repeatability test.Mattes D2019-09-072-24/+114
|
* Added a BasicGeneratorTest.Mattes D2019-09-064-1/+336
|
* Separated chunk generator from world / plugin interfaces.Mattes D2019-09-061-25/+101
| | | | The generator now only takes care of servicing synchronous "GetChunk(X, Y)" and "GetBiomes(X, Y)" requests.
* Updated LibEvent to release 2.1.11-stable. (#4383)Mattes D2019-09-041-1/+3
| | | | | | This finally restores my ability to compile on Windows and Linux from the same source folder (on a network drive). LibEvent broke this long ago by writing a config file into the source folder, rather than build folder. Now it's finally fixed.
* Added a basic PalettedBlockArea implementation (#4377)Mattes D2019-08-283-1/+586
|
* Improved testing framework. (#4376)Mattes D2019-08-2617-351/+388
|
* Added BlockState implementation for 1.13 support.Mattes D2019-08-242-0/+158
|
* BlockTypeRegistry: Added hint manipulationMattes D2019-08-051-0/+37
|
* BlockTypeRegistry: Initial skeletonMattes D2019-08-054-0/+348
|
* Optimise chunk set (#4260)peterbell102018-07-235-14/+39
| | | | | | | | | | | | | | | | | Closes #1244 Initially I was just going to add the cChunkData to cSetChunkData but profiling revealed that the copying wasn't even the biggest slowdown. Much more time was being spent in cChunk::CreateBlockEntities and cChunk::WakeUpSimulators than was in memcpy so I've made those significantly faster as well. Optimisations performed: * cSetChunkData now stores blocks in a cChunkData object * cChunkData objects can now perform moves even if they are using different pools * cChunk::CreateBlockEntities now iterates in the correct order and only over present chunk sections * Similarly for cChunk::WakeUpSimulators * cSetChunkData::CalculateHeightMap now shortcuts to the highest present chunk section before checking blocks directly
* Fix cUUID::Variant (#4213)peterbell102018-04-081-2/+31
|
* Fix cUrlClient leak (#4125)peterbell102018-02-201-5/+19
| | | | | | | | Fixes #4040 * The TCP connection is now shutdown after OnBodyFinished * Any open connections are closed when cNetworkSingleton::Terminate() is called. * Removed ownership cycles in cUrlClientRequest * Added a check to the test to ensure there are no leaks.
* Deal with covered switches consistently (#4161)peterbell102018-02-052-0/+8
| | | | | | | * Fixes a number of "<function>: not all control paths return a value" warnings on MSVC. * Introduces the UNREACHABLE global macro and uses it instead of conditionally compiled switch defaults. * Move cNBTParseErrorCategory from FastNBT.h into FastNBT.cpp to prevent bad calls to message()
* cChunk and cChunkData: Use vectors for block get and set functions (#4172)peterbell102018-02-043-99/+99
| | | | | * cChunkData: Change interface to use Vector3i * cChunk: Add Vector3i overloads for bounded block get and set functions.
* CMake: Fix test builds on MSVC (#4131)peterbell102018-01-221-0/+1
| | | | | | * Add test dependency missing for MSVC builds. * Appveyor builds tests and tools
* Add the fmt library (#4065)peterbell102018-01-0313-9/+27
| | | | | | | * Replaces AppendVPrintf with fmt::sprintf * fmt::ArgList now used as a type safe alternative to varargs. * Removed SIZE_T_FMT compatibility macros. fmt::sprintf is fully portable and supports %zu. * Adds FLOG functions to log with fmt's native formatting style.
* Fix Travis build (#4101)peterbell102017-12-221-1/+1
| | | | | | | | | Stop using gdb on osx - was breaking the build Add clang 3.5 build as travis now defaults to 5.0 Fix unknown-warning-option errors on AppleClang ProtoProxy: Use nullptr UrlClientTest: add override to callback destructor Update jsoncpp to use nullptr
* cChunkInterface GetBlock, GetBlockMeta, GetBlockTypeMeta use vectors (#4050)Bond-0092017-11-203-3/+3
|
* Removed UTF-8 BOM (#4033)Lukas Pioch2017-09-192-2/+2
|
* Add a test for cUUID (#4021)peterbell102017-09-113-0/+168
|
* Update mbedtls to 2.5.1 (#3964)peterbell102017-08-302-14/+16
| | | | | | | | | | | | | | | | | | | | | | * Renaming changes: * macro prefix "POLARSSL" -> "MBEDTLS" * functions now prefixed with "mbedtls_" * rename PolarSSL++ -> mbedTLS++ * rename polarssl submodule * Use mbedtls' AES-CFB8 implementation. * Add cSslConfig to wrap mbedtls_ssl_config * Update cTCPLink and cBlockingSslClientSocket to use cSslConfig * Use cSslConfig in cHTTPServer * Use cSslConfig for cMojangAPI::SecureRequest * CI Fixes * Set -fomit-frame-pointer on the right target
* Add cUUID class (#3871)peterbell102017-08-258-1/+69
|
* Implement protocol level chunk sparsing (#3864)peterbell102017-08-211-1/+2
|
* cBlockHandler: take player by refpeterbell102017-08-013-9/+9
|
* Check for intersection between placed blocks and entities. (#3850)Lane Kolbly2017-07-283-0/+47
| | | | | | | | | | | | | * Check for intersection between placed blocks and entities. + Implemented GetPlacementCollisionBox, to permit custom placement collision boxes for blocks. * Factored block-entity placement checking into another function in cPlayer. - Removed vector min/max functions * Use GetWorld to get the world in DoesPlacingBlocksIntersectEntity. + Added block height checks, allow different cEntity subclasses to decide whether they will prevent block placement.
* BigFlower fixes (#3826)peterbell102017-07-073-3/+3
| | | | | | | * BigFlowers fixes * Correct upper part meta * Documented parameters to DoesIgnoreBuildCollision
* cBlockInfo static initialisation (#3832)peterbell102017-07-033-12/+18
|
* cBlockArea supports block entities. (#3795)Mattes D2017-06-243-0/+87
|
* Removed the LeakFinder for Windows. (#3777)Mattes D2017-06-197-36/+14
|
* Replace evdns with getaddrinfo and getnameinfo (#3766)peterbell102017-06-151-0/+6
|
* FastRandom rewrite (#3754)peterbell102017-06-131-8/+6
|
* Gen: Added a simple PieceGeneratorBFSTree test.Mattes D2017-05-042-0/+103
|
* Gen: Moved tests to a separate folder, unified shared sources.Mattes D2017-05-0414-337/+27
|
* Gen: Moved PiecePool into a separate file.Mattes D2017-05-045-8/+8
| | | | Also rewritten the PieceGenerator to use std::unique_ptr.
* FastRandom: Added test of class re-creation. (#3648)Mattes D2017-03-281-7/+55
| | | Tests for the precondition of #2935 (re-created cFastRandom generates the same sequence of numbers).
* PieceGenerator: Added rotation-aware vertical connectors.Mattes D2017-02-137-2/+601
|
* DeadlockDetect now lists some tracked CS's stats.Mattes D2017-01-182-0/+34
|
* Tests: Added LuaState thread stress-test.Mattes D2017-01-158-0/+580
|
* Moved cPrefab parser self-check to the LoadablePieces test. (#3536)Mattes D2017-01-153-6/+128
|
* Added strict static_cast to void * in printf.Mattes D2016-11-131-3/+3
|
* Fixed type-casting-related warnings.Mattes D2016-08-248-29/+11
|
* HTTP: Fixed empty headers parsing.Mattes D2016-08-244-1/+17
|
* cUrlClient: Refactored callbacks to use UniquePtr.Mattes D2016-08-221-8/+8
|
* cTCPLink supports TLS out of the box.Mattes D2016-08-223-14/+108
|
* UrlClient: Basic HTTP implementation.Mattes D2016-08-222-3/+185
|
* Fixed cFastRandom Test. (#3291)Alexander Harkness2016-08-033-0/+116
| | | This resolves #3290
* CMake: Remove needless minimum version specifications.Mattes D2016-07-1810-20/+0
|
* Self tests (#3242)Mattes D2016-06-263-0/+111
| | | | | | | | * SelfTests: Added a cEvent stress-test. * cNetwork: Fixed startup event hang. The original code used to hang with a ~ 1:50000 chance, because on Linux the cEvent was destroyed before its "Set()" returned.
* SelfTests: More logging for EnumInterfaces.Mattes D2016-06-181-2/+3
|
* SelfTests: Print a quick message on test start.Mattes D2016-06-1813-1/+45
|
* SelfTests: Removed the unneeded cSelfTests class.Mattes D2016-06-181-28/+0
|
* SelfTests: Fixed HTTPMessageParser tests for out-of-source builds.Mattes D2016-06-181-5/+5
|
* SelfTests: Fixed missing override keyword in EchoServer.Mattes D2016-06-181-1/+1
|
* SelfTests: Moved BoundingBox test to a separate project.Mattes D2016-06-183-0/+125
|
* SelfTests: Moved SchematicFileSerializer test into a separate project.Mattes D2016-06-184-0/+330
|
* SelfTests: Moved cCompositeChat test to a separate project.Mattes D2016-06-184-0/+180
|
* SelfTests: Moved ByteBuffer test to a separate project.Mattes D2016-06-183-2/+129
|
* SelfTests: Organized into solution folders.Mattes D2016-06-184-1/+40
|
* Moved NetworkInterfaceEnum test to a separate test project.Mattes D2016-06-182-0/+59
|
* Out of world blocks are now always considered air blocksLogicParrot2016-04-231-48/+23
|
* WebAdmin uses the new HTTP parser framework.Mattes D2016-03-016-11/+333
|
* HTTP: Fixed response parser, unified API.Mattes D2016-03-012-6/+13
|
* Added unit test for parsing HTTP request.Mattes D2016-03-015-0/+224
|
* Renamed leftover strings to Cuberite / Server, as needed.Mattes D2016-01-012-3/+3
| | | | Also upgraded the user setting file for MSVC to 2013.
* Added a Json parser and serializer to Lua API.Mattes D2015-12-241-0/+9
|
* Added HTTPS links wherever they are supported.Alexander Harkness2015-12-191-3/+3
|
* Working coverage buildtycho2015-12-181-0/+4
|
* blockheight mechanismGargaj2015-12-131-0/+9
|
* Added PieceStructures generator.Mattes D2015-12-011-0/+4
|
* Fixed and improved restartingTiger Wang2015-08-201-0/+1
| | | | | Restarts are now an actual, close-as-possible to application exit+reopen.
* Improved mapsTiger Wang2015-07-141-0/+9
|
* Added neighbor specification in the OnNeighborChanged() block callback.Mattes D2015-07-011-1/+1
| | | | | Fixes the OnNeighborChanged endless recursion with large melon / pumpkin fields. Fixes #2213.
* Rebased version of CodeSamuel Barney2015-06-221-9/+0
|
* Added basic support for loading village prefabs from files.Mattes D2015-06-201-0/+3
|
* Externalized cPrefabPiecePool self-test.Mattes D2015-06-199-0/+626
|
* Fix clang 3.6 flags to only be used in clang 3.6tycho2015-05-241-1/+4
|
* Disable -Werror for warnings in tests.tycho2015-05-243-14/+3
|
* Fix teststycho2015-05-231-2/+3
|
* Fix teststycho2015-05-191-0/+7
|
* Network tests: Fixed clang warnings.Mattes D2015-02-203-3/+3
|
* Exported cServerHandle and cNetwork:Listen to Lua.Mattes D2015-02-041-0/+1
| | | | Also added an example to the NetworkTest plugin.
* Added network termination called at app exit.Mattes D2015-01-273-3/+38
| | | | This fixes a crash in MSVC runtime caused by joining a thread in a global var's destructor.
* cNetwork: Renamed callback to OnConnected()Mattes D2015-01-221-1/+1
|
* cNetwork: Added link creation callback.Mattes D2015-01-222-11/+48
| | | | This allows the callback classes to store the link inside them and use it internally later on, mainly for sending data.
* cNetwork: Changed listening API.Mattes D2015-01-221-22/+28
| | | | The link-callbacks for each new accepted link are now received from the OnIncomingConnection listen-callback.
* cNetwork: Added error message to error callbacks.Mattes D2015-01-223-8/+8
|
* cNetwork: Fixed race conditions with lookups; proper shutdown.Mattes D2015-01-221-0/+1
|
* cNetwork: Split the main cpp file into several files.Mattes D2015-01-221-2/+22
|
* cNetwork: Split cNetworkSingleton to a separate file.Mattes D2015-01-221-1/+12
|
* cNetwork: Added an OnError callback for listening servers.Mattes D2015-01-221-0/+5
| | | | The callback receives the error details.
* cNetwork: Added multithreading protection.Mattes D2015-01-221-1/+7
|
* cNetwork: Implemented connection shutdown and close.Mattes D2015-01-221-1/+15
|
* cNetwork: Fixed Linux compilation.Mattes D2015-01-221-1/+1
|
* cNetwork: Implemented link address getting.Mattes D2015-01-221-4/+4
|
* cNetwork: Implemented basic server functionality.Mattes D2015-01-221-1/+67
|
* cNetwork: Implemented IP-to-hostname lookup.Mattes D2015-01-221-3/+16
|
* cNetwork: Implemented HostnameToIP lookups.Mattes D2015-01-224-3/+115
|
* Extracted Google connection testTycho2015-01-223-0/+100
|
* Removed testTiger Wang2014-12-133-176/+0
|
* Fixed compilation?Tiger Wang2014-11-011-3/+4
|
* Update creatable.cppworktycho2014-09-271-0/+1
|
* Fix accedental c++11Tycho2014-09-171-6/+7
|
* Added first test to show the object can be createdTycho2014-09-173-0/+173
|
* CopyBlocks test: decreased the test size.madmaxoft2014-09-011-2/+2
| | | | It just needlessly ate up test time; there's no need for such rigorous testing once the test started succeeding.
* Merge branch 'master' of github.com:mc-server/MCServerTycho2014-06-165-14/+80
|
* Reduced the number of cChunkData::CopyBlockTypes() tests, added progress.Mattes D2014-05-301-7/+16
|
* Fix bugs in testTycho2014-05-301-3/+5
|
* Added a cChunkData::CopyBlockTypes() unit test.Mattes D2014-05-302-0/+68
|
* Fixed cChunkData nibble copying.madmaxoft2014-05-301-4/+4
|
* Test failures are reported verbosely and into the debug console on Win.madmaxoft2014-05-301-1/+1
|
* Fixed test return values.madmaxoft2014-05-302-38/+41
|
* Fixed wrong block sizes for copying / setting.madmaxoft2014-05-291-16/+16
|
* Fixed test compilation.madmaxoft2014-05-292-16/+16
|
* Fixed test globals to work with precompiled headersTycho2014-05-275-143/+4
|
* inject TestGlobals.h correctlyTycho2014-05-242-2/+3
|
* Implemented style changesTycho2014-05-243-176/+87
|
* Renamed cChunkBuffer to cChunkDataTycho2014-05-216-20/+20
|
* C++11Tycho2014-05-171-0/+8
|
* fixed assignment bugs and Skylight bugTycho2014-05-171-1/+1
|
* Fix assignment operators testworktycho2014-05-171-3/+3
|
* Add test for zerosworktycho2014-05-171-0/+35
|
* Add tests for assignment operatorworktycho2014-05-171-0/+11
|
* Rewrote array copies testworktycho2014-05-171-36/+51
| | | | Moved each patten test into its own scope to test all unallocated section code paths. Moved 0's around so that they test the allocated sections code paths.
* Added some more testsTycho2014-05-112-116/+242
|
* Added several more testsfor arrays and coordinatesTycho2014-05-112-1/+5
|
* test 0 valuesTycho2014-05-111-0/+45
|
* Cerated array copy tests for block and skylightTycho2014-05-111-0/+36
|
* Fixed a bug in writting zeros to a non-allocated sectionTycho2014-05-111-93/+111
|
* Fixed stupid buffer overflow in array setblocksTycho2014-05-101-8/+8
|
* Add arries copies testsTycho2014-05-101-0/+53
|
* Added new testTycho2014-05-101-0/+4
|
* Added some more testsTycho2014-05-102-6/+100
|
* Maybe coverage working?Tycho2014-05-102-0/+151
|
* cCHunkBuffer that compiles with TestGlobals.hTycho2014-05-033-1/+14
|
* Added Testing capabilityTycho2014-04-273-0/+19
|
* Moved some files.Alexander Harkness2013-12-215-0/+604