File Coverage

blib/lib/Net/WebSocket/HTTP.pm
Criterion Covered Total %
statement 22 22 100.0
branch 2 2 100.0
condition n/a
subroutine 5 5 100.0
pod 1 1 100.0
total 30 30 100.0


line stmt bran cond sub pod time code
1             package Net::WebSocket::HTTP;
2              
3 6     6   1555 use strict;
  6         11  
  6         182  
4 6     6   30 use warnings;
  6         11  
  6         141  
5              
6 6     6   2782 use Call::Context ();
  6         2377  
  6         120  
7              
8 6     6   2466 use Net::WebSocket::X ();
  6         18  
  6         1032  
9              
10             =encoding utf-8
11              
12             =head1 NAME
13              
14             Net::WebSocket::HTTP - HTTP utilities for Net::WebSocket
15              
16             =head1 SYNOPSIS
17              
18             @tokens = Net::WebSocket::HTTP::split_tokens($tokens_str);
19              
20             =head1 FUNCTIONS
21              
22             =head2 @tokens = split_tokens( TOKENS_STR )
23              
24             A parser for the C<1#token> format as defined in L. (C<1#> and C are defined independently of each other.)
25              
26             Returns a list of the HTTP tokens in TOKENS_STR. Throws an exception
27             if any of the tokens is invalid as per the RFC’s C definition.
28              
29             =cut
30              
31             #Would this be useful to publish separately? It seemed so at one point,
32             #but “#1token” doesn’t appear in the HTTP RFC.
33             sub split_tokens {
34 38     38 1 15502 my ($value) = @_;
35              
36 38         113 Call::Context::must_be_list();
37              
38 37         1661 $value =~ s<\A[ \t]+><>;
39 37         100 $value =~ s<[ \t]+\z><>;
40              
41 37         77 my @tokens;
42 37         142 for my $p ( split m<[ \t]*,[ \t]*>, $value ) {
43 41 100       126 if ($p =~ tr~()<>@,;:\\"/[]?={} \t~~) {
44 16         70 die Net::WebSocket::X->create('BadToken', $p);
45             }
46              
47 25         60 push @tokens, $p;
48             }
49              
50 21         78 return @tokens;
51             }
52              
53             1;