void SessionTracer::printData(char direction, const SafeByteArray& data) {
	std::cerr << direction << direction << " " << session->getLocalJID() << " ";
	for (unsigned int i = 0; i < 72 - session->getLocalJID().toString().size() - session->getRemoteJID().toString().size(); ++i) {
		std::cerr << direction;
	}
	std::cerr << " " << session->getRemoteJID()<< " " << direction << direction << std::endl;
	std::cerr << byteArrayToString(ByteArray(data.begin(), data.end())) << std::endl;
}
Example #2
0
void ClientXMLTracer::printData(char direction, const SafeByteArray& data) {
	printLine(direction);
	if (bosh) {
		std::string line = byteArrayToString(ByteArray(data.begin(), data.end())); 
// Disabled because it swallows bits of XML (namespaces, if I recall)
//		size_t endOfHTTP = line.find("\r\n\r\n");
//		if (false && endOfHTTP != std::string::npos) {
//			std::cerr << line.substr(0, endOfHTTP) << std::endl << beautifier->beautify(line.substr(endOfHTTP)) << std::endl;
//		}
//		else {
			std::cerr << line << std::endl;
//		}
	}
	else {
		std::cerr << beautifier->beautify(byteArrayToString(ByteArray(data.begin(), data.end()))) << std::endl;
	}
}
Example #3
0
std::pair<SafeByteArray, size_t> BOSHConnection::createHTTPRequest(const SafeByteArray& data, bool streamRestart, bool terminate, unsigned long long rid, const std::string& sid, const URL& boshURL) {
    size_t size;
    std::stringstream content;
    SafeByteArray contentTail = createSafeByteArray("</body>");
    std::stringstream header;

    content << "<body rid='" << rid << "' sid='" << sid << "'";
    if (streamRestart) {
        content << " xmpp:restart='true' xmlns:xmpp='urn:xmpp:xbosh'";
    }
    if (terminate) {
        content << " type='terminate'";
    }
    content << " xmlns='http://jabber.org/protocol/httpbind'>";

    SafeByteArray safeContent = createSafeByteArray(content.str());
    safeContent.insert(safeContent.end(), data.begin(), data.end());
    safeContent.insert(safeContent.end(), contentTail.begin(), contentTail.end());

    size = safeContent.size();

    header    << "POST " << boshURL.getPath() << " HTTP/1.1\r\n"
            << "Host: " << boshURL.getHost();
    if (boshURL.getPort()) {
            header << ":" << *boshURL.getPort();
    }
    header    << "\r\n"
        // << "Accept-Encoding: deflate\r\n"
            << "Content-Type: text/xml; charset=utf-8\r\n"
            << "Content-Length: " << size << "\r\n\r\n";

    SafeByteArray safeHeader = createSafeByteArray(header.str());
    safeHeader.insert(safeHeader.end(), safeContent.begin(), safeContent.end());

    return std::pair<SafeByteArray, size_t>(safeHeader, size);
}
Example #4
0
void XMPPLayer::handleDataRead(const SafeByteArray& data) {
	onDataRead(data);
	inParser_ = true;
	// FIXME: Converting to unsafe string. Should be ok, since we don't take passwords
	// from the stream in clients. If servers start using this, and require safe storage,
	// we need to fix this.
	if (!xmppParser_->parse(byteArrayToString(ByteArray(data.begin(), data.end())))) {
		inParser_ = false;
		onError();
		return;
	}
	inParser_ = false;
	if (resetParserAfterParse_) {
		doResetParser();
	}
}