[Ovmsdev] A promiscous wifi client

Mark Webb-Johnson mark at webb-johnson.net
Sun Nov 19 21:54:26 HKT 2017


Strange. When I tested mongoose, I got a close event (MG_EV_CLOSE) for each open connection, when the interface went down.

Regards, Mark.

> On 18 Nov 2017, at 5:05 AM, Stephen Casner <casner at acm.org> wrote:
> 
> There is more to do on this conversion of the Telnet Console to use
> mongoose:
> 
>  - When wifi service is shut down by command, my old implementation
>    would close the connections to the clients cleanly.  The new
>    implementation with mongoose leaves them hanging.  The way to
>    improve this may lie in the shutdown steps in ovms_netmanager.
> 
>  - It looks like there may be a memory blocked leaked at each client
>    disconnection.  I need to find that.
> 
>  - I think I can improve how I handle the receive buffer and save
>    some more RAM.
> 
> I've also thought more about how to convert the SSH Console and will
> take a stab at that as well.
> 
>                                                        -- Steve
> 
> On Fri, 17 Nov 2017, Stephen Casner wrote:
> 
>> On Thu, 16 Nov 2017, Mark Webb-Johnson wrote:
>> 
>>> We don't seem to have this issue with the webserver listener; that
>>> uses mongoose (in netmanager). That doesn't have long-lived client
>>> side connections, but the socket listen/accept functionality should
>>> be similar. Not sure how mongoose handles it internally, but the
>>> library seems quite robust.
>> 
>> Mongoose wakes up from the select() periodically to do polling so the
>> deletion of the task would not happen while in select().
>> 
>>> I'm wondering if we can migrate to use that? It would probably save
>>> a bunch of ram (as it doesn't need a task for each thread). We are
>>> mostly single-user anyway.
>> 
>> I have converted console_telnet to use mongoose and netmanager in the
>> same manner as ovms_webserver.  This eliminates the TelnetServer and
>> TelnetReceiver tasks and saves about 3KB.  I have kept TelnetConsole
>> as a separate task from NetManTask.  I'm not convinced that combining
>> the console functionality into NetManTask is a good idea; I'm afraid
>> it would introduce some problems with interference between various
>> operations and may get into trouble with the Log() mechanism.  Even if
>> not, much more surgery would be required.
>> 
>>> Perhaps a generic extension to ovms_netmanager where you give it a
>>> tcp port and an object type. Then, it listens on that port and
>>> launches objects of that type (pre-configured to receive mongoose
>>> events as appropriate) for each new connection? Have a base virtual
>>> connection class, that gets inherited by each implementation (ssh,
>>> telnet, etc).
>> 
>> I didn't do it that way for this telnet conversion, but we could
>> evolve to that if appropriate.
>> 
>> Converting ssh may be possible but would be significantly harder.  The
>> libtelnet design calls for all the actual I/O (recv/send) to be done
>> outside of the library.  That fits with the design of mongoose where
>> it owns that I/O.  However, the wolfssh library is designed for the
>> library itself to be in control of the I/O.
>> 
>>                                                        -- Steve
>> _______________________________________________
>> OvmsDev mailing list
>> OvmsDev at lists.teslaclub.hk
>> http://lists.teslaclub.hk/mailman/listinfo/ovmsdev
> _______________________________________________
> OvmsDev mailing list
> OvmsDev at lists.teslaclub.hk
> http://lists.teslaclub.hk/mailman/listinfo/ovmsdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20171119/bc7bfe95/attachment.htm>


More information about the OvmsDev mailing list