WebSocketHandshakeRequest.cpp [plain text]
#include "config.h"
#if ENABLE(WEB_SOCKETS)
#include "WebSocketHandshakeRequest.h"
#include "AtomicString.h"
#include "StringBuilder.h"
#include <utility>
#include <wtf/Assertions.h>
using namespace std;
namespace WebCore {
WebSocketHandshakeRequest::WebSocketHandshakeRequest(const KURL& url, const String& origin, const String& webSocketProtocol)
: m_url(url)
, m_secure(m_url.protocolIs("wss"))
, m_origin(origin)
, m_webSocketProtocol(webSocketProtocol)
{
ASSERT(!origin.isNull());
}
WebSocketHandshakeRequest::~WebSocketHandshakeRequest()
{
}
void WebSocketHandshakeRequest::addExtraHeaderField(const AtomicString& name, const String& value)
{
m_extraHeaderFields.append(HeaderField(name, value));
}
void WebSocketHandshakeRequest::addExtraHeaderField(const char* name, const String& value)
{
m_extraHeaderFields.append(HeaderField(name, value));
}
Vector<WebSocketHandshakeRequest::HeaderField> WebSocketHandshakeRequest::headerFields() const
{
Vector<HeaderField> fields;
fields.append(HeaderField("Upgrade", "WebSocket"));
fields.append(HeaderField("Connection", "Upgrade"));
fields.append(HeaderField("Host", host()));
fields.append(HeaderField("Origin", m_origin));
if (!m_webSocketProtocol.isEmpty())
fields.append(HeaderField("WebSocket-Protocol", m_webSocketProtocol));
fields.append(m_extraHeaderFields);
return fields;
}
String WebSocketHandshakeRequest::host() const
{
StringBuilder builder;
builder.append(m_url.host().lower());
if ((!m_secure && m_url.port() != 80) || (m_secure && m_url.port() != 443)) {
builder.append(":");
builder.append(String::number(m_url.port()));
}
return builder.toString();
}
}
#endif // ENABLE(WEB_SOCKETS)