Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

M1456: Implement MIME Sniffing #4209

Closed
wants to merge 7 commits into from

Added mock sniffer task and fixed logic bug

  • Loading branch information
IdeaHat authored and djzager committed Dec 5, 2014
commit e5468d28cb0d63a052a1a27a1aa030dc1bafcdd5
@@ -93,7 +93,7 @@ fn assert_parse(url: &'static str,
use sniffer_task;

let (start_chan, start_port) = comm::channel();
let sniffer_task = sniffer_task::new_sniffer_task();
let sniffer_task = sniffer_task::new_mock_sniffer_task();
load(LoadData::new(Url::parse(url).unwrap(), start_chan), sniffer_task);

let response = start_port.recv();
@@ -291,13 +291,13 @@ struct BinaryOrPlaintextClassifier;
impl BinaryOrPlaintextClassifier {
fn classify_impl(&self, data: &Vec<u8>) -> Option<(&'static str,&'static str)> {
if (data.len() >=2 &&
(data[0] == 0xFFu8 && data[1] == 0xFEu8) ||
(data[0] == 0xFEu8 && data[1] == 0xFFu8)) ||
((data[0] == 0xFFu8 && data[1] == 0xFEu8) ||
(data[0] == 0xFEu8 && data[1] == 0xFFu8))) ||
(data.len() >= 3 && data[0] == 0xEFu8 && data[1] == 0xBBu8 && data[2] == 0xBFu8)
{
Some(("text", "plain"))
}
else if data.iter().any(|x| *x<=0x08u8 ||
else if data.len() >= 1 && data.iter().any(|x| *x<=0x08u8 ||
*x==0x0Bu8 ||
(*x>=0x0Eu8 && *x <= 0x1Au8) ||
(*x>=0x1Cu8 && *x <= 0x1Fu8)) {
@@ -85,3 +85,41 @@ impl SnifferManager {
}

}

#[cfg(test)]
pub fn new_mock_sniffer_task() -> SnifferTask {
let(sen, rec) = channel();
let builder = TaskBuilder::new().named("SnifferManager");
builder.spawn(proc() {
MockSnifferManager::new(rec).start();
});
sen
}

#[cfg(test)]
struct MockSnifferManager {
data_receiver: Receiver<TargetedLoadResponse>,
}

#[cfg(test)]
impl MockSnifferManager {
fn new(data_receiver: Receiver <TargetedLoadResponse>) -> MockSnifferManager {
MockSnifferManager {
data_receiver: data_receiver,
}
}
}

#[cfg(test)]
impl MockSnifferManager {
fn start(self) {
loop {
match self.data_receiver.recv_opt() {
Ok(snif_data) => {
let _ = snif_data.consumer.send_opt(snif_data.load_response);
}
Err(_) => break,
}
}
}
}
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.