* Cleanup shutdown and peers subscribe
this has errors currently, need to figure out data race
* fixed data race finally....
* getclaimbyid and search
* hook jsonrpc peers subcribe into current federation
* cleanup some peers stuff
* remove commented code
* tie into session manager in jsonrpc peers subscribe
* use int for port args
* cleanup and fix a bunch of compiler warnings
* use logrus everywhere
* cleanup test
* Partial blockchain.transaction.yyy RPC implementations.
* Register RPC service object.
* Move session manager start/stop to a better place.
* Attempt to fill in the details of transaction.get_batch,
including merkle path.
* Correct interpretation of DBStateValue Genesis hash.
* Convert Args.Port to int and validate. Run UDP ping server on JSONRPCPort too.
* Add BlockHeader to HeightHash notification.
* Limit session-based JSON RPC service to IPv4.
Client not ready for IPv6.
* Adapt to new HeightHash struct.
* Fine tune JSON RPC handlers and types to match lbry-sdk expectations.
Implement UnmarshalJSON()/MarshalJSON() for several types.
* Add more special handling of DBStateValue.Genesis hash.
* Set IncludeStop=false generally to avoid returning extra rows.
Other misc fixes.
* Fix log spam (Already shutting down...)
* Workaround to allow lbry-sdk to call server.version and server.features.
Incoming/outgoing JSON is patched using yet another codec (jsonPatchingCodec).
Add more logging of raw/patched JSON.
* Elaborate comment on jsonPatchingCodec.
* server.xxx endpoints
Additional server endpoints in jsonrpc and also some refactoring
* server.banner
* more endpoints
* use lbry.go stop pattern
* set genesis hash properly
* updates and refactors
* remove shutdowncalled and itmut
* remove OpenIterators
* remove shutdown and done channels from db and use stop group
* currently broken, incorporated stop groups into the session manager
* set the rest of the default args for tests
* add default json rpc http port and cleanup
* tests for new jsonrpc endpoints
* cleanup and add manage goroutine to stopper pattern
* cleanup
* NewDebug
* asdf
* fix
* Move and rename BlockchainCodec, BlockchainCodecRequest.
These are not specifically "blockchain", rather they are
specific to how gorilla/rpc works.
* Move claimtrie-related service/handlers to jsonrpc_claimtrie.go.
* Pull out decode logic into named func newBlockHeaderElectrum().
* Rename BlockchainService -> BlockchainBlockService.
* Drop http.Request arg from handlers, and use RegisterTCPService().
* Implement GetStatus() to pull data from HashXStatus table.
* Make the service objects independent, so we don't have inheritance.
* Add core session/subscription logic (session.go).
Implement subsribe/unsubscribe handlers.
* Support both pure JSON and JSON-over-HTTP services.
Forward NotifierChan messages to sessionManager.
* Only assign default port (50001) if neither --json-rpc-port nor
--json-rpc-http-port are specified.
* Handle failures with goto instead of break. Update error logging.
* Add --max-sessions, --session-timeout args. Enforce max sessions.
* Changes to make session.go testable. Conn created with Pipe()
used in testing has no unique Addr.
* Add tests for headers, headers.subscribe, address.subscribe.
* HashXStatus, HashXMempoolStatus not populated by default. Fix GetStatus().
* Use time.Ticker object to drive management activity.