Ok, so I finally figured it out, I needed to add "--http-raw-body", the
issue was with me using the http plugin.

Now, how do I handle disconnects correctly? What should I return from
"application", and what is the proper way to shutdown the endless loop?


On Thu, May 30, 2013 at 2:28 PM, Igor Katson <[email protected]> wrote:

> Need help here.
>
> I tried doing what you suggested, but it doesn't work for me at some point.
> The select call somewhy does not return anything and is always showing
> that both sockets are in "writable" state, but not in "readable".
> tcpdump, instead, shows some data coming from the client, but this select
> call does not see it.
> Here is a public gist.
>
> https://gist.github.com/ikatson/5681365 (set this script as HTTPS proxy
> in firefox to test).
>
> I also replaced "server_fd.write" and "client_fd.write" calls with
> uwsgi.send/recv and socket.send/recv calls, cause fd's are integers.
> I tried os.write/os.read, but the result is the same.
>
> What am I doing wrong?
>
> Thanks!
>
>
> On Thu, May 30, 2013 at 12:27 PM, Roberto De Ioris <[email protected]>wrote:
>
>>
>> > Hi, Roberto and list readers,
>> >
>> > I have a need to implement SSL proxying via web proxy tunelling
>> ("CONNECT"
>> > method) http://en.wikipedia.org/wiki/HTTP_tunnel.
>> > I'm thinking if it's possible to do it inside the existing
>> > nginx-uwsgi-gevent-django application.
>> >
>> > The whole idea of it is a big hack, but I'm curious if it's at all
>> > possible.
>> >
>> > To implement it, one should relay all the trafic between the target
>> server
>> > and the client.
>> > Can I do it with uWSGI?
>> >
>> > Basically, I need something like a couple of threads or greenlets
>> reading
>> > and writing to the raw socket when data is available on either end.
>> >
>> > Thanks for your reply.
>> >
>>
>> I do not see particular problems implementing it with uWSGI+gevent, but
>> you cannot use django for it (its view subsystem will make mess with
>> realtime sockets).
>>
>> basically you will end with something like:
>>
>> if environ['REQUEST_METHOD'] == 'CONNECT':
>>     s = gevent.ssl.SSLSocket(..)
>>     s.connect()
>>     client_fd = uwsgi.connection_fd()
>>     server_fd = s.fileno()
>>     # wait for data on both end
>>     ready = gevent.select.select([client_fd, server_fd], [], [], timeout)
>>     ...
>>     # if it is the client send data to the server
>>     ... server_fd.write(client_fd.read(4096))
>>     # else...
>>     ... client_fd.write(server_fd.read(4096)
>>
>> you need to add better check for non blocking writes, but generally this
>> is the approach i would follow
>>
>>
>>
>> --
>> Roberto De Ioris
>> http://unbit.it
>> _______________________________________________
>> uWSGI mailing list
>> [email protected]
>> http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
>>
>
>
_______________________________________________
uWSGI mailing list
[email protected]
http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi

Reply via email to