bool FB::SimpleStreamHelper::onStreamCompleted( FB::StreamCompletedEvent *evt, FB::BrowserStream * ) { if (!evt->success) { if (callback) callback(false, FB::HeaderMap(), boost::shared_array<uint8_t>(), received); callback.clear(); return false; } if (!data) { data = boost::shared_array<uint8_t>(new uint8_t[received]); int i = 0; for (BlockList::const_iterator it = blocks.begin(); it != blocks.end(); ++it) { size_t offset(i * blockSize); size_t len(received - offset); if (len > blockSize) len = blockSize; std::copy(it->get(), it->get()+len, data.get()+offset); ++i; } // Free all the old blocks blocks.clear(); } if (callback) callback(true, parse_http_headers(stream->getHeaders()), data, received); callback.clear(); return true; }
bool FB::SimpleStreamHelper::onStreamCompleted( FB::StreamCompletedEvent *evt, FB::BrowserStream *stream ) { if (!evt->success) { if (callback) callback(false, FB::HeaderMap(), boost::shared_array<uint8_t>(), received); callback.clear(); self.reset(); return false; } if (!data) { data = boost::shared_array<uint8_t>(new uint8_t[received]); int i = 0; for (BlockList::const_iterator it = blocks.begin(); it != blocks.end(); ++it) { size_t offset(i * blockSize); size_t len(received - offset); if (len > blockSize) len = blockSize; std::copy(it->get(), it->get()+len, data.get()+offset); ++i; } // Free all the old blocks blocks.clear(); } if (callback && stream) { std::multimap<std::string, std::string> headers; headers = parse_http_headers(stream->getHeaders()); callback(true, headers, data, received); } callback.clear(); self.reset(); return false; // Always return false to make sure the browserhost knows to let go of the object }