Всем привет
static char* szHeader = "GET /demo HTTP/1.1\r\n"
"Upgrade: WebSocket\r\n"
"Connection: Upgrade\r\n"
"Sec-WebSocket-Key2: 4 @1 46546xW%0l 1 5\r\n"
"Host: example.com\r\n"
"Sec-WebSocket-Key1: 12998 5 Y3 1 .P00\r\n"
"Origin: http://example.com\r\n"
"WebSocket-Protocol: sample\r\n"
"\r\n"
"^n:ds[4U";
Нужно из поля Sec-WebSocket-Key1: вытащить значение . Т.е. 12998 5 Y3 1 .P00
Я делаю так
int WsciService::getHeaders(char* szHeaders, WEBSOCKET_HEADER* wsHeaderInOut){
if ( szHeaders==(char*)NULL || wsHeaderInOut==(WEBSOCKET_HEADER*)NULL ) return -1;
char* szKey1Pattern = "(Sec-WebSocket-Key1  .*";
//char* szKey1Pattern = "(Sec-WebSocket-Key1  [[:s:]](.+\\r\\n)";
//char* szKey1Pattern = "(Sec-WebSocket-Key1  ([:print:])(.+\\r\\n)";
//char* szKey1Pattern = "(Sec-WebSocket-Key1  (.*)(.+\\r\\n)";
//char* p = strstr(szHeaders, "Sec-WebSocket-Key1:");
//if ( p!=(char*)NULL ) printf("%s", p);
regex_t regex;
int rc = regcomp(®ex, szKey1Pattern, 0);
if ( rc==0 ) {
regmatch_t pm[1];
rc = regexec(®ex, szHeaders, 1, pm, 0);
if ( rc==0 ) {
::memcpy(wsHeaderInOut->szK1, szHeaders + pm[0].rm_so, pm[0].rm_eo - pm[0].rm_so);
printf("Begin: %d\nEnd: %d\n", pm[0].rm_so, pm[0].rm_eo);
} else {
char szError[1024];
regerror(rc, ®ex, szError, sizeof(szError));
printf("Exec error: %s\n", szError);
}
} else {
char szError[1024];
regerror(rc, ®ex, szError, sizeof(szError));
printf("Compile error: %s\n", szError);
}
regfree(®ex);
Структура WEBSOCKET_HEADER это просто тесктовые поля
Перепробовал много вариантов, получается ерунда
|