initial support for kernel data download (#2765)
* initial support for kernel data download * fix vec backend for tests * cleanup after rebase
This commit is contained in:
@@ -33,6 +33,7 @@ use self::pool_api::PoolInfoHandler;
|
||||
use self::pool_api::PoolPushHandler;
|
||||
use self::server_api::IndexHandler;
|
||||
use self::server_api::StatusHandler;
|
||||
use self::server_api::KernelDownloadHandler;
|
||||
use self::transactions_api::TxHashSetHandler;
|
||||
use crate::auth::{BasicAuthMiddleware, GRIN_BASIC_REALM};
|
||||
use crate::chain;
|
||||
@@ -135,6 +136,9 @@ pub fn build_router(
|
||||
chain: Arc::downgrade(&chain),
|
||||
peers: Arc::downgrade(&peers),
|
||||
};
|
||||
let kernel_download_handler = KernelDownloadHandler {
|
||||
peers: Arc::downgrade(&peers),
|
||||
};
|
||||
let txhashset_handler = TxHashSetHandler {
|
||||
chain: Arc::downgrade(&chain),
|
||||
};
|
||||
@@ -165,6 +169,7 @@ pub fn build_router(
|
||||
router.add_route("/v1/chain/validate", Arc::new(chain_validation_handler))?;
|
||||
router.add_route("/v1/txhashset/*", Arc::new(txhashset_handler))?;
|
||||
router.add_route("/v1/status", Arc::new(status_handler))?;
|
||||
router.add_route("/v1/kerneldownload", Arc::new(kernel_download_handler))?;
|
||||
router.add_route("/v1/pool", Arc::new(pool_info_handler))?;
|
||||
router.add_route("/v1/pool/push", Arc::new(pool_push_handler))?;
|
||||
router.add_route("/v1/peers/all", Arc::new(peers_all_handler))?;
|
||||
|
||||
@@ -19,7 +19,7 @@ use crate::rest::*;
|
||||
use crate::router::{Handler, ResponseFuture};
|
||||
use crate::types::*;
|
||||
use crate::web::*;
|
||||
use hyper::{Body, Request};
|
||||
use hyper::{Body, Request, StatusCode};
|
||||
use std::sync::Weak;
|
||||
|
||||
// RESTful index of available api endpoints
|
||||
@@ -36,6 +36,29 @@ impl Handler for IndexHandler {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct KernelDownloadHandler {
|
||||
pub peers: Weak<p2p::Peers>,
|
||||
}
|
||||
|
||||
impl Handler for KernelDownloadHandler {
|
||||
fn post(&self, _req: Request<Body>) -> ResponseFuture {
|
||||
if let Some(peer) = w_fut!(&self.peers).most_work_peer() {
|
||||
match peer.send_kernel_data_request() {
|
||||
Ok(_) => response(StatusCode::OK, "{}"),
|
||||
Err(e) => response(
|
||||
StatusCode::INTERNAL_SERVER_ERROR,
|
||||
format!("requesting kernel data from peer failed: {:?}", e),
|
||||
),
|
||||
}
|
||||
} else {
|
||||
response(
|
||||
StatusCode::INTERNAL_SERVER_ERROR,
|
||||
format!("requesting kernel data from peer failed (no peers)"),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Status handler. Post a summary of the server status
|
||||
/// GET /v1/status
|
||||
pub struct StatusHandler {
|
||||
|
||||
Reference in New Issue
Block a user