[noPoll] Issue with using "protocols" field from the client

Francis Brosnan Blázquez francis en aspl.es
Jue Mayo 28 16:10:04 CEST 2015


Hello there Rahul,

Thanks for reporting. Now the issue is fixed in a consistent way at the
SVN 217 and
will be delivered on next stable release:

https://dolphin.aspl.es/svn/publico/nopoll/

Now, it will work for your case without any additional effort. Now I'm
on it, I've updated
the API to allow handling these configurations and to allow the listener
to select which
protocol is supported or take any other actions, including closing the
connection, when
the protocol requested by the client isn't supported:

- nopoll_conn_get_accepted_protocol  (listener and client)
- nopoll_conn_get_requested_protocol (listener)
- nopoll_conn_set_accepted_protocol (listener)

Added regression test (test_27) to reproduce bug reported, check fix
introduced and test
new API symbols added. 

Again, thanks for reporting ...and any twitter, web, etc, reference to
our noPoll site 
http://www.aspl.es/nopoll is more than welcome,

Best Regards,


> Hello,
> 
>  
> 
> After struggling with libwebsocket library for some days I switched to
> using the noPoll
> 
> library. So far things are going really well except I faced one issue
> very early on:
> 
>  
> 
> I am using the library to make a client connection to a websocket
> server.
> 
> After connecting to a websocket server, the connection is rejected. I
> see the following error
> 
> after enabling debug log.
> 
>  
> 
> (proc 23267): (critical) nopoll_conn.c:1858
> (nopoll_conn_check_mime_header_repeated) 
> 
> Provided header Sec-WebSocket-Protocol twice, closing connection
> 
>  
> 
> The code is using the API somewhat like this:
> 
>  
> 
> noPollConn * connection  = nopoll_conn_new(m_pContext, "127.0.0.1",
> "8080", NULL,
> 
>                 "/", "some-protocol", "some-origin");
> 
>                                                                 
> 
> Note that we are setting the "protocols" parameter. It seems the
> server responds with the
> 
> same protocol string set in the header for Sec-WebSocket-Protocol
> 
> but the library rejects this for some reason and closes the
> connection.
> 
>  
> 
> I am not sure if I am doing something wrong in how the library is used
> 
> or there is some other problem. Please advise.
> 
> According to the specification the client can send a list of supported
> protocols
> 
> and the server can respond with a subset. In our case we only need to
> use one protocol.
> 
>  
> 
> Anyway, after modifying the library (see below) I was able to make
> progress
> 
> with our implementation and have not seen any other issue yet.
> 
>  
> 
> To 'fix' the above issue I had to comment out two lines at line 2192
> in nopoll_conn.c:
> 
>  
> 
> #if 0
> 
>         if (nopoll_conn_check_mime_header_repeated (conn, header,
> value, "Sec-WebSocket-Protocol", conn->protocols))
> 
>                 return 0;
> 
> #endif
> 
>  
> 
> Also I had to later fix an associated memory leak:
> 
>  
> 
> else if (strcasecmp (header, "Sec-Websocket-Protocol") == 0) {
> 
>         nopoll_free (conn->protocols);
> 
>         conn->protocols = value;
> 
> }
> 
>  
> 
> This may not be the correct fix but allowed me to proceed with the
> rest of
> 
> the implementation.
> 
>  
> 
> Thanks,
> 
>  
> 
> Rahul
> 
>  
> 
> Rahul Kale
> 
>  
> 
> IP Video Systems
> 
> Barco, Inc
> 
> 1287 Anvilwood Ave
> 
> Sunnyvale, CA  94089
> 
>  
> 
> Tel  +1 408 400 4238
> 
>  
> 
> 
> 
> This message is subject to the following terms and conditions: MAIL
> DISCLAIMER 
> 
> _______________________________________________
> noPoll mailing list
> noPoll en lists.aspl.es
> http://lists.aspl.es/cgi-bin/mailman/listinfo/nopoll


-- 
Francis Brosnan Blázquez <francis en aspl.es>
ASPL
91 134 14 22 - 91 134 14 45 - 91 116 07 57

AVISO LEGAL
 
En virtud de lo dispuesto en la Ley Orgánica 15/1999, de 13 de
diciembre, de Protección de Datos de Carácter Personal, le informamos de
que sus datos de carácter personal, recogidos de fuentes accesibles al
público o datos que usted nos ha facilitado previamente, proceden de
bases de datos propiedad de Advanced Software Production Line, S.L.
(ASPL).
 
ASPL garantiza que los datos serán tratados con la finalidad de mantener
las oportunas relaciones comerciales o promocionales con usted o la
entidad que usted representa. No obstante, usted puede ejercitar sus
derechos de acceso, rectificación, cancelación y oposición dispuestos en
la mencionada Ley Orgánica, notificándolo por escrito a ASPL -
Protección Datos, C/Antonio Suárez 10 A-102, 28802, Alcalá de Henares
(Madrid).



------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.aspl.es/pipermail/nopoll/attachments/20150528/86fa5e23/attachment.html>


Más información sobre la lista de distribución noPoll