| 1277 | } |
| 1278 | |
| 1279 | Result HttpWebSocketConnectionPump::attach(const HttpWebSocketTransportView& newTransport, |
| 1280 | HttpWebSocketEndpointRole endpointRole) |
| 1281 | { |
| 1282 | SC_TRY_MSG(newTransport.isValid(), "HttpWebSocketConnectionPump transport is invalid"); |
| 1283 | detach(); |
| 1284 | |
| 1285 | transport = newTransport; |
| 1286 | endpoint.reset(endpointRole); |
| 1287 | endpoint.onDataFramePayload.bind<HttpWebSocketConnectionPump, &HttpWebSocketConnectionPump::onEndpointDataFrame>( |
| 1288 | *this); |
| 1289 | |
| 1290 | dataListenerAdded = transport.readableStream->eventData |
| 1291 | .addListener<HttpWebSocketConnectionPump, &HttpWebSocketConnectionPump::onData>(*this); |
| 1292 | if (not dataListenerAdded) |
| 1293 | { |
| 1294 | detach(); |
| 1295 | return Result::Error("HttpWebSocketConnectionPump data listener limit reached"); |
| 1296 | } |
| 1297 | |
| 1298 | endListenerAdded = transport.readableStream->eventEnd |
| 1299 | .addListener<HttpWebSocketConnectionPump, &HttpWebSocketConnectionPump::onStreamEnd>(*this); |
| 1300 | if (not endListenerAdded) |
| 1301 | { |
| 1302 | detach(); |
| 1303 | return Result::Error("HttpWebSocketConnectionPump end listener limit reached"); |
| 1304 | } |
| 1305 | |
| 1306 | closeListenerAdded = |
| 1307 | transport.readableStream->eventClose |
| 1308 | .addListener<HttpWebSocketConnectionPump, &HttpWebSocketConnectionPump::onStreamEnd>(*this); |
| 1309 | if (not closeListenerAdded) |
| 1310 | { |
| 1311 | detach(); |
| 1312 | return Result::Error("HttpWebSocketConnectionPump close listener limit reached"); |
| 1313 | } |
| 1314 | return Result(true); |
| 1315 | } |
| 1316 | |
| 1317 | void HttpWebSocketConnectionPump::detach() |
| 1318 | { |