#! perl # mandatory # over-the-air update # TODO: same face, different hashes, face needs new number cf::register_async_exticmd ota_update => sub { my ($ns, $reply, $urlader, $exe_id, $exe_ver) = @_; Coro::async_pool { my ($face, $ver, $size, $md5, $changes); if ($face = cf::face::find "res/ota_update/$urlader,$exe_id.pck") { my $meta = cf::face::get_meta $face; if ($meta->{exe_ver} gt $exe_ver) { $size = cf::face::get_size $face; $ver = $meta->{exe_ver}; $md5 = $meta->{md5}; if (my $changes_face = cf::face::find "res/ota_update/Changes") { $changes = cf::face::get_data $changes_face; $changes =~ s/^\(\Q$exe_ver\E\).*$//sm; } } } cf::info "ota update request for <$urlader, $exe_id, $exe_ver> replying <$face,$ver,$size,*>"; $reply->(1, $face, $ver, $size, $md5, $changes); }; };