[asterisk-dev] [Code Review] 3541: res_http_websocket: Create a websocket client

wdoekes reviewboard at asterisk.org
Thu May 29 08:07:05 CDT 2014


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/3541/#review11993
-----------------------------------------------------------


I didn't check all of it.


trunk/include/asterisk/http.h
<https://reviewboard.asterisk.org/r/3541/#comment21906>

    This is case sensitive,
    
    while ast_http_header_match is sensitive.
    
    I don't see that explained here.



trunk/main/http.c
<https://reviewboard.asterisk.org/r/3541/#comment21900>

    In the purely hypothetical case of HTTP/1.11 we'd have a mismatch without knowing it.
    
    if (strncmp(buf, version, size) || buf[size] != ' ') {



trunk/main/http.c
<https://reviewboard.asterisk.org/r/3541/#comment21901>

    Why are you checking the reason phrase? Is that really necessary?
    
    
    6.1.1 Status Code and Reason Phrase
    
       The Status-Code element is a 3-digit integer result code of the
       attempt to understand and satisfy the request. These codes are fully
       defined in section 10. The Reason-Phrase is intended to give a short
       textual description of the Status-Code. The Status-Code is intended
       for use by automata and the Reason-Phrase is intended for the human
       user. The client is not required to examine or display the Reason-
       Phrase.



trunk/main/http.c
<https://reviewboard.asterisk.org/r/3541/#comment21903>

    So a header of:
    
     " x : bla "
    
    turns into:
    
     name="x", value="bla "
    
    But RFC says the inverse:
    
     field-value = *( field-content | LWS )
     ^-- unlimited white on both sides
    
     field-name = token
     ^-- no white on either side



trunk/main/http.c
<https://reviewboard.asterisk.org/r/3541/#comment21905>

    For extra fun:
    
       Any LWS
       that occurs between field-content MAY be replaced with a single SP
       before interpreting the field value or forwarding the message
       downstream.
    
    Perhaps excess space should be trimmed in header_parse. That should fix issues for both header_match and header_match_in.



trunk/main/http.c
<https://reviewboard.asterisk.org/r/3541/#comment21907>

    Perhaps strcasestr instead of strstr?



trunk/main/uri.c
<https://reviewboard.asterisk.org/r/3541/#comment21908>

    If !param, shouldn't field be set to NULL? Or does ao2_alloc zero everything?



trunk/main/uri.c
<https://reviewboard.asterisk.org/r/3541/#comment21909>

    You check for uri->scheme, but not for strlen(uri->scheme) >= 1.
    
    If scheme is "", you're looking at who knows what.



trunk/main/uri.c
<https://reviewboard.asterisk.org/r/3541/#comment21910>

    Perhaps a /* SAFE */ comment behind that sprintf.



trunk/main/uri.c
<https://reviewboard.asterisk.org/r/3541/#comment21913>

    This is .. nasty. I understand that you didn't want to memmove and whatnot. But this looks awkwards.
    
    Perhaps something like this instead?
    
    tmp = ast_uri_copy_replace(res, NULL, NULL, NULL, 
        ast_uri_is_secure(res) ? secure_port : port,
        NULL, NULL);



trunk/main/uri.c
<https://reviewboard.asterisk.org/r/3541/#comment21914>

    memcpy?



trunk/res/res_http_websocket.c
<https://reviewboard.asterisk.org/r/3541/#comment21916>

    +1 ?
    
    You're not adding a NUL.
    
    If we're being pedantic here, you should check that it gets (+sizeof(long)-1) so the memcpy below never overwrites the stack. (Depending on the value of CLIENT_KEY_SIZE%sizeof(long).)



trunk/res/res_http_websocket.c
<https://reviewboard.asterisk.org/r/3541/#comment21915>

    calloc? You're writing to it very soon.



trunk/res/res_http_websocket.c
<https://reviewboard.asterisk.org/r/3541/#comment21902>

    You're ignoring line folding here.
    
    A comment that you're doing so would probably suffice.
    
    
    
       HTTP/1.1 header field values can be folded onto multiple lines if the
       continuation line begins with a space or horizontal tab. All linear
       white space, including folding, has the same semantics as SP. A
       recipient MAY replace any linear white space with a single SP before
       interpreting the field value or forwarding the message downstream.


- wdoekes


On May 28, 2014, 10:58 p.m., Kevin Harwell wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/3541/
> -----------------------------------------------------------
> 
> (Updated May 28, 2014, 10:58 p.m.)
> 
> 
> Review request for Asterisk Developers and Joshua Colp.
> 
> 
> Bugs: ASTERISK-23742
>     https://issues.asterisk.org/jira/browse/ASTERISK-23742
> 
> 
> Repository: Asterisk
> 
> 
> Description
> -------
> 
> Add client websocket capabilities to Asterisk.
> 
> 
> Diffs
> -----
> 
>   trunk/tests/test_websocket_client.c PRE-CREATION 
>   trunk/res/res_http_websocket.exports.in 414797 
>   trunk/res/res_http_websocket.c 414797 
>   trunk/main/uri.c PRE-CREATION 
>   trunk/main/http.c 414797 
>   trunk/include/asterisk/uri.h PRE-CREATION 
>   trunk/include/asterisk/http_websocket.h 414797 
>   trunk/include/asterisk/http.h 414797 
> 
> Diff: https://reviewboard.asterisk.org/r/3541/diff/
> 
> 
> Testing
> -------
> 
> Created some unit tests.
> 
> 
> Thanks,
> 
> Kevin Harwell
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20140529/504abac8/attachment-0001.html>


More information about the asterisk-dev mailing list