@@ -381,14 +381,18 @@ class _RealWebSocket : public easywsclient::WebSocket
381
381
};
382
382
383
383
384
- easywsclient::WebSocket::pointer from_url (const std::string& url, bool useMask) {
384
+ easywsclient::WebSocket::pointer from_url (const std::string& url, bool useMask, const std::string& origin ) {
385
385
char host[128 ];
386
386
int port;
387
387
char path[128 ];
388
388
if (url.size () >= 128 ) {
389
389
fprintf (stderr, " ERROR: url size limit exceeded: %s\n " , url.c_str ());
390
390
return NULL ;
391
391
}
392
+ if (origin.size () >= 200 ) {
393
+ fprintf (stderr, " ERROR: origin size limit exceeded: %s\n " , origin.c_str ());
394
+ return NULL ;
395
+ }
392
396
if (false ) { }
393
397
else if (sscanf (url.c_str (), " ws://%[^:/]:%d/%s" , host, &port, path) == 3 ) {
394
398
}
@@ -426,6 +430,9 @@ easywsclient::WebSocket::pointer from_url(http://github.com/const%20std::string&%20url,%20bool%20useMask)
426
430
}
427
431
snprintf (line, 256 , " Upgrade: websocket\r\n " ); ::send (sockfd, line, strlen (line), 0 );
428
432
snprintf (line, 256 , " Connection: Upgrade\r\n " ); ::send (sockfd, line, strlen (line), 0 );
433
+ if (!origin.empty ()) {
434
+ snprintf (line, 256 , " Origin: %s\r\n " , origin.c_str ()); ::send (sockfd, line, strlen (line), 0 );
435
+ }
429
436
snprintf (line, 256 , " Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\r\n " ); ::send (sockfd, line, strlen (line), 0 );
430
437
snprintf (line, 256 , " Sec-WebSocket-Version: 13\r\n " ); ::send (sockfd, line, strlen (line), 0 );
431
438
snprintf (line, 256 , " \r\n " ); ::send (sockfd, line, strlen (line), 0 );
@@ -463,12 +470,12 @@ WebSocket::pointer WebSocket::create_dummy() {
463
470
}
464
471
465
472
466
- WebSocket::pointer WebSocket::from_url (const std::string& url) {
467
- return ::from_url (url, true );
473
+ WebSocket::pointer WebSocket::from_url (const std::string& url, const std::string& origin ) {
474
+ return ::from_url (url, true , origin );
468
475
}
469
476
470
- WebSocket::pointer WebSocket::from_url_no_mask (const std::string& url) {
471
- return ::from_url (url, false );
477
+ WebSocket::pointer WebSocket::from_url_no_mask (const std::string& url, const std::string& origin ) {
478
+ return ::from_url (url, false , origin );
472
479
}
473
480
474
481
0 commit comments