void EventSource::parseEventStreamLine(unsigned bufPos, int fieldLength, int lineLength) { if (!lineLength) { if (!m_data.isEmpty()) { m_data.removeLast(); if (!m_currentlyParsedEventId.isNull()) { m_lastEventId = m_currentlyParsedEventId; m_currentlyParsedEventId = nullAtom; } InspectorInstrumentation::willDispachEventSourceEvent(executionContext(), this, m_eventName.isEmpty() ? EventTypeNames::message : m_eventName, m_lastEventId, m_data); dispatchEvent(createMessageEvent()); } if (!m_eventName.isEmpty()) m_eventName = emptyAtom; } else if (fieldLength) { bool noValue = fieldLength < 0; String field(&m_receiveBuf[bufPos], noValue ? lineLength : fieldLength); int step; if (noValue) step = lineLength; else if (m_receiveBuf[bufPos + fieldLength + 1] != ' ') step = fieldLength + 1; else step = fieldLength + 2; bufPos += step; int valueLength = lineLength - step; if (field == "data") { if (valueLength) m_data.append(&m_receiveBuf[bufPos], valueLength); m_data.append('\n'); } else if (field == "event") { m_eventName = valueLength ? AtomicString(&m_receiveBuf[bufPos], valueLength) : ""; } else if (field == "id") { m_currentlyParsedEventId = valueLength ? AtomicString(&m_receiveBuf[bufPos], valueLength) : ""; } else if (field == "retry") { if (!valueLength) m_reconnectDelay = defaultReconnectDelay; else { String value(&m_receiveBuf[bufPos], valueLength); bool ok; unsigned long long retry = value.toUInt64(&ok); if (ok) m_reconnectDelay = retry; } } } }
void EventSource::parseEventStreamLine(unsigned bufPos, int fieldLength, int lineLength) { if (!lineLength) { if (!m_data.isEmpty()) { m_data.removeLast(); if (!m_currentlyParsedEventId.isNull()) { m_lastEventId.swap(m_currentlyParsedEventId); m_currentlyParsedEventId = String(); } dispatchEvent(createMessageEvent()); } if (!m_eventName.isEmpty()) m_eventName = ""; } else if (fieldLength) { bool noValue = fieldLength < 0; String field(&m_receiveBuf[bufPos], noValue ? lineLength : fieldLength); int step; if (noValue) step = lineLength; else if (m_receiveBuf[bufPos + fieldLength + 1] != ' ') step = fieldLength + 1; else step = fieldLength + 2; bufPos += step; int valueLength = lineLength - step; if (field == "data") { if (valueLength) m_data.append(&m_receiveBuf[bufPos], valueLength); m_data.append('\n'); } else if (field == "event") m_eventName = valueLength ? String(&m_receiveBuf[bufPos], valueLength) : ""; else if (field == "id") m_currentlyParsedEventId = valueLength ? String(&m_receiveBuf[bufPos], valueLength) : ""; else if (field == "retry") { if (!valueLength) m_reconnectDelay = defaultReconnectDelay; else { String value(&m_receiveBuf[bufPos], valueLength); bool ok; unsigned long long retry = value.toUInt64(&ok); if (ok) m_reconnectDelay = retry; } } } }