use std::sync::Arc;
use crate::errors::*;
use crate::message::stomp_message::*;
use crate::message::stomp_message::StompCommand;
use crate::message::stomp_message::MessageType::Http;
pub const SERVER_TAG: &str = "romp/0.4";
pub fn get_response_connected(ecg_hdr: Header) -> Arc<StompMessage> {
let mut message = StompMessage::new(Ownership::Session);
message.command = StompCommand::Connected;
message.add_header("server", "romp");
message.add_header("version", "1.0");
message.push_header(ecg_hdr);
Arc::new(message)
}
pub fn get_response_error_general() -> Arc<StompMessage> {
let mut message = StompMessage::new(Ownership::Session);
message.command = StompCommand::Error;
message.add_header("message", "general");
Arc::new(message)
}
pub fn get_response_error_server(_err: ServerError) -> Arc<StompMessage> {
let mut message = StompMessage::new(Ownership::Session);
message.command = StompCommand::Error;
message.add_header("message", "general");
Arc::new(message)
}
pub fn get_response_error(text: &str) -> Arc<StompMessage> {
let mut message = StompMessage::new(Ownership::Session);
message.command = StompCommand::Error;
message.add_header_clone("message", text);
Arc::new(message)
}
pub fn get_response_receipt(id: &str) -> Arc<StompMessage> {
let mut message = StompMessage::new(Ownership::Session);
message.command = StompCommand::Receipt;
message.add_header_clone("receipt-id", id);
Arc::new(message)
}
pub fn get_response_error_client(err: ClientError) -> Arc<StompMessage> {
let mut message = StompMessage::new(Ownership::Session);
message.command = StompCommand::Error;
match err {
ClientError::Syntax => {
message.add_header("message", "syntax");
}
ClientError::BodyFlup => {
message.add_header("message", "msg flup");
}
ClientError::HdrFlup => {
message.add_header("message", "hdr flup");
}
ClientError::Timeout => {
message.add_header("message", "timeout");
}
ClientError::SubsFlup => {
message.add_header("message", "subs flup");
}
}
Arc::new(message)
}
pub fn get_response_ok(text: String) -> Arc<StompMessage> {
let mut message = StompMessage::new(Ownership::Session);
message.command = StompCommand::Message;
message.add_header_clone("message", text.as_str());
message.add_body("\n".as_bytes());
Arc::new(message)
}
pub fn get_response_stats_msg(destination_name: &str, size: usize, q_size: usize, delta: usize, total: usize) -> StompMessage {
let mut message = StompMessage::new(Ownership::Session);
message.command = StompCommand::Message;
message.add_header("destination", "/xtomp/stat");
message.add_body(format!("{{\n \"dest\":\"{}\",\n \"sz\":{},\n \"q\":{},\n \"Δ\":{},\n \"Σ\":{}\n}}\n", destination_name, size, q_size, delta, total).as_bytes());
message
}
pub fn get_response_cc_msg(concurrent_connections: usize, uptime: i64, total_connections: usize, total_messages: usize) -> StompMessage {
let mut message = StompMessage::new(Ownership::Session);
message.command = StompCommand::Message;
message.add_header("destination", "/xtomp/stat");
message.add_body(format!("{{\n \"cc\":{{\n \"sz\":{},\n \"up\":{},\n \"Σ\":{},\n \"Σµ\":{},\n \"m\":{}\n }}\n}}\n", concurrent_connections, uptime, total_connections, total_messages, 0).as_bytes());
message
}
pub fn get_http_ok_msg() -> StompMessage {
let mut message = StompMessage::new(Ownership::Session);
message.message_type = Http;
message.command = StompCommand::Ok;
message.add_header("Access-Control-Allow-Origin", "*");
message.add_header("Access-Control-Expose-Headers", "server");
message.add_header("server", SERVER_TAG);
message.add_header("content-length", "0");
message
}
pub fn get_http_ok_text_content(text: String, content_type: &'static str) -> Arc<StompMessage> {
let mut message = StompMessage::new(Ownership::Session);
message.message_type = Http;
message.command = StompCommand::Ok;
message.add_header("Access-Control-Allow-Origin", "*");
message.add_header("Access-Control-Expose-Headers", "server");
message.add_header("server", SERVER_TAG);
let bytes = text.as_bytes();
message.push_header(Header::from_string("content-length", bytes.len().to_string()));
message.add_header("content-type", content_type);
message.add_body(bytes);
Arc::new(message)
}
pub fn get_http_err_msg() -> StompMessage {
let mut message = StompMessage::new(Ownership::Session);
message.message_type = Http;
message.command = StompCommand::ServerError;
message.add_header("server", SERVER_TAG);
message
}
pub fn get_http_404_msg() -> StompMessage {
let mut message = StompMessage::new(Ownership::Session);
message.message_type = Http;
message.command = StompCommand::NotFound;
message.add_header("server", SERVER_TAG);
message
}
pub fn get_http_503_msg() -> StompMessage {
let mut message = StompMessage::new(Ownership::Session);
message.message_type = Http;
message.command = StompCommand::ServiceUnavailable;
message.add_header("server", SERVER_TAG);
message
}
pub fn get_http_client_err_msg() -> StompMessage {
let mut message = StompMessage::new(Ownership::Session);
message.message_type = Http;
message.command = StompCommand::ClientError;
message.add_header("server", SERVER_TAG);
message
}
pub fn get_http_upgrade_msg(websocket_accept: &String) -> StompMessage {
let mut message = StompMessage::new(Ownership::Session);
message.message_type = Http;
message.command = StompCommand::Upgrade;
message.add_header("Upgrade", "websocket");
message.add_header("Connection", "Upgrade");
message.add_header("Sec-WebSocket-Protocol", "stomp");
message.add_header_clone("Sec-WebSocket-Accept", websocket_accept);
message
}