Tverd
Дык давай задачу, может у кого-то была похожая )
ShadoWalkeR
Классика жанра - вывод программой своего кода. Только надо дергать из С - чтобы таблица, содержащая функцию вернула код этой функции. Исходники на диске трогать нельзя - только в рантайме
ShadoWalkeR
Хотя луа же в байткод компилирует - врятли получится
Tverd
Интересная задача... Квайн вроде как называется?
ShadoWalkeR
Да я в астериск хочу прикрутить чтобы dialplan show выводил что там в экстенах из луа лежит, а не просто [ Context 'incomming' created by 'pbx_lua' ] Alt. Switch => 'Lua/' [pbx_lua]
ShadoWalkeR
Вот например диалплан родного астерискового ЯП: [ Context 'default' created by 'pbx_ael' ] 'call_close_by_debt' => 1. Wait(2) [pbx_ael] 2. Playback(voicecon/service_messages/interrupted_call_by_debt) [pbx_ael] 3. Hangup() [pbx_ael]
ShadoWalkeR
Ну суть в том, что диалплан кладется в память и оттуда выводится как есть. А вот с Lua несколько сложней. На диске трогать не хочу потому что ктото диалплан может править и содержимое диска не соотвтествует содержимому в памяти
ShadoWalkeR
Еще нет
Tverd
string.dump(function() print "Hello" end)
ShadoWalkeR
Спасибо за наводку - поиграюсь
ShadoWalkeR
Походу замыкание нельзя через dump прогнать
mihacooper [МСК -2]
для этого в Lua есть upvalues
ShadoWalkeR
Ну да ладно - сейчас поважней задачи есть, главное есть наводка с чем играться
Group Butler [beta]
Hi White2Demon!
Group Butler [beta]
Hi Насибуллин!
ShadoWalkeR
Коллеги, а поясните разницу между function tbl:callPreCheck(exten) и tbl.callPreCheck = function(exten) Потому как в первом случае в функцию не передается параметр
tbl.callPreCheck = function(self, exten) Теперь и во втором не будет передаваться.
Вызывай через двоеточие, чтобы первым параметром приходила tbl.
ShadoWalkeR
Да - у меня через точку вызывается
Group Butler [beta]
Hi 5h4r3r!
fgntfg
#чтотынесешь
Mikhail
Ребят, нужно из LUA подключаться посредством SSH к удаленным серверам, слать команды и грабить корованы... если короче, с LIBSSH кто-нибудь работал в скриптах Lua?
Mikhail
Чувак, который сделал lpty для LUA ( http://tset.de/lpty/index.html ) как раз жаловался, что эко не отключается....в Ubuntu. у меня тупо не удается ничего.
Ilya
os.exec('ssh ... ') 😊
Mikhail
мне нужно держать сессию открытой. и интерактивно слать команды.. и принимать файлы там
Mikhail
os.exec('ssh ... ') 😊
и да... ты же в курсе, что в таком случае результат просто за кадром. и чтобы хоть что то получить делают io.popen("command",)
Ilya
Теперь в курсе, спасибо 😊
Mikhail
ну почему извращение. хочу на любимой Луа сделатьполлинг миллиона дивайсов. с запуском команд, чтением конфигов с них...
Ilya
Use Ansible.
Ilya
..., Luke.
Mikhail
это ебаный монстр
Mikhail
Luke? пошел читать. вообще с админами обсуждали вопрос...
Kukuzapa
luasec
Ilya
Luke - это из серии https://www.youtube.com/watch?v=o2we_B6hDrY
Kukuzapa
я с его помощью вроде подключался... или я путаю https и ssh?
Ilya
это ебаный монстр
То есть ты хочешь создать такого же монстра на Луа?
Kukuzapa
Мда... Стормознул.
Mikhail
нет. мой монстр простой бэкэнд. чтоыб мог крутиться на мини дивайсах. в теории
Ilya
нет. мой монстр простой бэкэнд. чтоыб мог крутиться на мини дивайсах. в теории
Может стоит использовать ssh тупо как транспорт? Делаешь туннель из SSH для секьюрности, а на той стороне какой-нибудь свой API или что там тебе угодно.
Ilya
Вот еще есть крутой модуль - правда, с нулем документации и на си. https://github.com/fnordpipe/lua-ssh
Mikhail
Вот еще есть крутой модуль - правда, с нулем документации и на си. https://github.com/fnordpipe/lua-ssh
он не крутой. я ж тоже гуглить могу )) весь день чекаю. этот модуль через luarocks не ставится. надо его собрать
Ilya
я не гуглил, я луароксил 😎
Mikhail
серьезно? у меня куча луарокс роков поставилась.. а этот даже с указанием адреса сервера не ставится и не находится
Ilya
в смысле искал через луарокс, а так тоже не ставится, да.
Vsevolod
поставить nginx + lua и дергать его по https
Mikhail
Mikhail
нашел нечто.. но на японском https://bitbucket.org/senanetworksinc/libssh/src
Mikhail
воу!!! а вот libssh японская СТАВИТСЯ через luarocks. потрогаю ее
Alexey
.как идея- curl
Alexey
Не пробовал ssh с curl вообще
Mikhail
.как идея- curl
curl хорошо, конечно... пока голый SSH попробую
ShadoWalkeR
Идея написать свою управлялку устройствами на луа так себе
ShadoWalkeR
Я это на питоне делал, где это проще чем на луа и решение было не очень
Tverd
https://github.com/fnordpipe/lua-ssh/blob/master/src/ssh.c
Tverd
а, уже было... По мне так не плохой модуль на первый взгляд, можно компильнуть попробовать
Mikhail
Я это на питоне делал, где это проще чем на луа и решение было не очень
понимаешь. питон жрет и памятьи ресурсы больше
Mikhail
https://github.com/fnordpipe/lua-ssh/blob/master/src/ssh.c
да. было. там не все, по-моему. попытаюсь японскими наработками попробовать воспользоваться
ShadoWalkeR
Жесть.
ShadoWalkeR
Просто жесть
ShadoWalkeR
if elseif else end и if else if else end end
Mikhail
@Snusmumriken привет!!! ставлю в 16ю Ubuntu пакет libssh с помощью luarocks luajit: /usr/local/share/lua/5.1/libssh/libssh.lua:164: libssh.so: cannot open shared object file: No such file or directory https://bitbucket.org/senanetworksinc/libssh этот. а он бинарники сук найти не может. Не подскажешь в чем затык? ((
Saphire
ls -s /lib/path/to/your/darn/libssh.so /usr/local/share/lua/5.1/libssh/libssh.so
Mikhail
ls -s /lib/path/to/your/darn/libssh.so /usr/local/share/lua/5.1/libssh/libssh.so
попробую )) но тупо копирование.. не помогало.
ShadoWalkeR
Господа, а как изнутри таблицы получить индекс который был вызван? Я вешаю метатаблицу на несуществующий индекс и хочу логировать что было вызвано.
ShadoWalkeR
Скорее всего я так до конца не вкуриваю что он от меня хочет - потому как __index все равно null, а если в параметрах указать что либо прилетает таблица в качестве значения
Snusmumriken
Логировать - через прокси. Но в целом, тут все описано.
Snusmumriken
Для тех кто ещё не освоил метатаблицы https://habrahabr.ru/post/346892/
ShadoWalkeR
Да как так
ShadoWalkeR
__index = function() - иногда работает __index __index = function(k,v) - в k и v одна и та же таблица - та на которую метатаблица навешана __index = function(self,key) - в key вызванный ключ
__index = function() - иногда работает __index __index = function(k,v) - в k и v одна и та же таблица - та на которую метатаблица навешана __index = function(self,key) - в key вызванный ключ
Функция __index(self, key) должна лежать в метатаблице, но она не будет вызываться, если в твоей таблице по этому ключу что-то уже лежит.
Обращайся к своей таблице через дополнительную пустую прокси-таблицу, у которой будет метатаблица с твоей __index.
ShadoWalkeR
У меня задача как раз стояла чтобы получить ключ при обращении к несуществующему индексу. Просто странно что иногда работает просто __index, иногда __index = function(k). А сегодня __index(self, key) Я и навешиваю её как положено: local tbl = {} local mt_t = { __index = function() .. end;} —заполнение tbl return setmetatable(tbl, mt_t)
Tverd
так работает, если во первых такого ключа еще нет в таблице, во вторых, если ты не присваиваешь а получаешь, то тогда newindex
Tverd
a = tbl[b] - это __index tbl[b] = a - это __newindex
ShadoWalkeR
Проехали
Kukuzapa
Добрый день. Пишу апи которая подключаются к серверу по хттпс через луасек. Сегодня заметил, что если два клиента обращаются одновременно, то одному из них приходится ждать пока другой не получит ответ от сервера. Кто-нибудь сталкивался с подобной проблемой в luasec?
Kukuzapa
Все это крутится на nginx