e070e8a51e
* 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.
88 lines
2.5 KiB
Go
88 lines
2.5 KiB
Go
package server
|
|
|
|
import (
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type ServerService struct {
|
|
Args *Args
|
|
}
|
|
|
|
type ServerFeatureService struct {
|
|
Args *Args
|
|
}
|
|
|
|
type ServerFeaturesReq struct{}
|
|
|
|
type ServerFeaturesRes struct {
|
|
Hosts map[string]string `json:"hosts"`
|
|
Pruning string `json:"pruning"`
|
|
ServerVersion string `json:"server_version"`
|
|
ProtocolMin string `json:"protocol_min"`
|
|
ProtocolMax string `json:"protocol_max"`
|
|
GenesisHash string `json:"genesis_hash"`
|
|
Description string `json:"description"`
|
|
PaymentAddress string `json:"payment_address"`
|
|
DonationAddress string `json:"donation_address"`
|
|
DailyFee string `json:"daily_fee"`
|
|
HashFunction string `json:"hash_function"`
|
|
TrendingAlgorithm string `json:"trending_algorithm"`
|
|
}
|
|
|
|
// Features is the json rpc endpoint for 'server.features'.
|
|
func (t *ServerService) Features(req *ServerFeaturesReq, res **ServerFeaturesRes) error {
|
|
log.Println("Features")
|
|
|
|
features := &ServerFeaturesRes{
|
|
Hosts: map[string]string{},
|
|
Pruning: "",
|
|
ServerVersion: HUB_PROTOCOL_VERSION,
|
|
ProtocolMin: PROTOCOL_MIN,
|
|
ProtocolMax: PROTOCOL_MAX,
|
|
GenesisHash: t.Args.GenesisHash,
|
|
Description: t.Args.ServerDescription,
|
|
PaymentAddress: t.Args.PaymentAddress,
|
|
DonationAddress: t.Args.DonationAddress,
|
|
DailyFee: t.Args.DailyFee,
|
|
HashFunction: "sha256",
|
|
TrendingAlgorithm: "fast_ar",
|
|
}
|
|
*res = features
|
|
|
|
return nil
|
|
}
|
|
|
|
type ServerBannerService struct {
|
|
Args *Args
|
|
}
|
|
|
|
type ServerBannerReq struct{}
|
|
|
|
type ServerBannerRes string
|
|
|
|
// Banner is the json rpc endpoint for 'server.banner'.
|
|
func (t *ServerService) Banner(req *ServerBannerReq, res **ServerBannerRes) error {
|
|
log.Println("Banner")
|
|
|
|
*res = (*ServerBannerRes)(t.Args.Banner)
|
|
|
|
return nil
|
|
}
|
|
|
|
type ServerVersionService struct {
|
|
Args *Args
|
|
}
|
|
|
|
type ServerVersionReq [2]string // [client_name, client_version]
|
|
|
|
type ServerVersionRes [2]string // [version, protocol_version]
|
|
|
|
// Version is the json rpc endpoint for 'server.version'.
|
|
func (t *ServerService) Version(req *ServerVersionReq, res **ServerVersionRes) error {
|
|
// FIXME: We may need to do the computation of a negotiated version here.
|
|
// Also return an error if client is not supported?
|
|
result := [2]string{t.Args.ServerVersion, t.Args.ServerVersion}
|
|
*res = (*ServerVersionRes)(&result)
|
|
log.Printf("Version(%v) -> %v", *req, **res)
|
|
return nil
|
|
}
|