| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 3 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 } | 167 } |
| 168 | 168 |
| 169 String WebSocketHandshake::clientOrigin() const | 169 String WebSocketHandshake::clientOrigin() const |
| 170 { | 170 { |
| 171 return m_document->securityOrigin()->toString(); | 171 return m_document->securityOrigin()->toString(); |
| 172 } | 172 } |
| 173 | 173 |
| 174 String WebSocketHandshake::clientLocation() const | 174 String WebSocketHandshake::clientLocation() const |
| 175 { | 175 { |
| 176 StringBuilder builder; | 176 StringBuilder builder; |
| 177 builder.append(m_secure ? "wss" : "ws"); | 177 if (m_secure) |
| 178 builder.append("://"); | 178 builder.appendLiteral("wss"); |
| 179 else |
| 180 builder.appendLiteral("ws"); |
| 181 builder.appendLiteral("://"); |
| 179 builder.append(hostName(m_url, m_secure)); | 182 builder.append(hostName(m_url, m_secure)); |
| 180 builder.append(resourceName(m_url)); | 183 builder.append(resourceName(m_url)); |
| 181 return builder.toString(); | 184 return builder.toString(); |
| 182 } | 185 } |
| 183 | 186 |
| 184 CString WebSocketHandshake::clientHandshakeMessage() const | 187 CString WebSocketHandshake::clientHandshakeMessage() const |
| 185 { | 188 { |
| 186 ASSERT(m_document); | 189 ASSERT(m_document); |
| 187 | 190 |
| 188 // Keep the following consistent with clientHandshakeRequest(). | 191 // Keep the following consistent with clientHandshakeRequest(). |
| 189 StringBuilder builder; | 192 StringBuilder builder; |
| 190 | 193 |
| 191 builder.append("GET "); | 194 builder.appendLiteral("GET "); |
| 192 builder.append(resourceName(m_url)); | 195 builder.append(resourceName(m_url)); |
| 193 builder.append(" HTTP/1.1\r\n"); | 196 builder.appendLiteral(" HTTP/1.1\r\n"); |
| 194 | 197 |
| 195 Vector<String> fields; | 198 Vector<String> fields; |
| 196 fields.append("Upgrade: websocket"); | 199 fields.append("Upgrade: websocket"); |
| 197 fields.append("Connection: Upgrade"); | 200 fields.append("Connection: Upgrade"); |
| 198 fields.append("Host: " + hostName(m_url, m_secure)); | 201 fields.append("Host: " + hostName(m_url, m_secure)); |
| 199 fields.append("Origin: " + clientOrigin()); | 202 fields.append("Origin: " + clientOrigin()); |
| 200 if (!m_clientProtocol.isEmpty()) | 203 if (!m_clientProtocol.isEmpty()) |
| 201 fields.append("Sec-WebSocket-Protocol: " + m_clientProtocol); | 204 fields.append("Sec-WebSocket-Protocol: " + m_clientProtocol); |
| 202 | 205 |
| 203 // Add no-cache headers to avoid compatibility issue. | 206 // Add no-cache headers to avoid compatibility issue. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 214 fields.append("Sec-WebSocket-Extensions: " + extensionValue); | 217 fields.append("Sec-WebSocket-Extensions: " + extensionValue); |
| 215 | 218 |
| 216 fields.append("User-Agent: " + m_document->userAgent(m_document->url())); | 219 fields.append("User-Agent: " + m_document->userAgent(m_document->url())); |
| 217 | 220 |
| 218 // Fields in the handshake are sent by the client in a random order; the | 221 // Fields in the handshake are sent by the client in a random order; the |
| 219 // order is not meaningful. Thus, it's ok to send the order we constructed | 222 // order is not meaningful. Thus, it's ok to send the order we constructed |
| 220 // the fields. | 223 // the fields. |
| 221 | 224 |
| 222 for (size_t i = 0; i < fields.size(); i++) { | 225 for (size_t i = 0; i < fields.size(); i++) { |
| 223 builder.append(fields[i]); | 226 builder.append(fields[i]); |
| 224 builder.append("\r\n"); | 227 builder.appendLiteral("\r\n"); |
| 225 } | 228 } |
| 226 | 229 |
| 227 builder.append("\r\n"); | 230 builder.appendLiteral("\r\n"); |
| 228 | 231 |
| 229 return builder.toString().utf8(); | 232 return builder.toString().utf8(); |
| 230 } | 233 } |
| 231 | 234 |
| 232 PassRefPtr<WebSocketHandshakeRequest> WebSocketHandshake::clientHandshakeRequest
() const | 235 PassRefPtr<WebSocketHandshakeRequest> WebSocketHandshake::clientHandshakeRequest
() const |
| 233 { | 236 { |
| 234 ASSERT(m_document); | 237 ASSERT(m_document); |
| 235 | 238 |
| 236 // Keep the following consistent with clientHandshakeMessage(). | 239 // Keep the following consistent with clientHandshakeMessage(). |
| 237 // FIXME: do we need to store m_secWebSocketKey1, m_secWebSocketKey2 and | 240 // FIXME: do we need to store m_secWebSocketKey1, m_secWebSocketKey2 and |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 } | 547 } |
| 545 return true; | 548 return true; |
| 546 } | 549 } |
| 547 | 550 |
| 548 void WebSocketHandshake::trace(Visitor* visitor) | 551 void WebSocketHandshake::trace(Visitor* visitor) |
| 549 { | 552 { |
| 550 visitor->trace(m_document); | 553 visitor->trace(m_document); |
| 551 } | 554 } |
| 552 | 555 |
| 553 } // namespace blink | 556 } // namespace blink |
| OLD | NEW |