Кто как решил вопрос уведомления о сделках?

Страницы: Пред. 1 2 3
RSS
Кто как решил вопрос уведомления о сделках?
 
Цитата
SDL написал:
Цитата s_mike@rambler.ru  пишет: Серверов, не нуждающихся, например, в TLS/SSL, уже мало и количество их уменьшается. Обычно это древние сервера. Дописывать библиотеку для поддержки новых стандартов, как я понимаю, никто не собирается.Главное не отчаиваться и слишком быстро не сдаваться.Качаем модуль LuaSec:Проект:  https://github.com/brunoos/luasec Бинарники можно взять тут:  http://love2d.org/forums/viewtopic.php?f=5&t=76728 . Нужны 2 файла - ssl.dll и ssl.lua.Использует библиотеки OpenSSL libeay32.dll и ssleay32.dll. Скачать, если нет, и не забыть обеспечить к ним доступ - через окружение (PATH) или можно кинуть в папку с QUIK.Подключаем:
Код
package.path = ...
package.cpath = ...
ssl = require "ssl"
Добавляем вот такую функцию:
Код
function sslCreate()
  local conn =
  {
     sock = socket.tcp(),
     connect = function(self, host, port)
        local r, e = self.sock:connect(host, port)
        if not r then return r, e end
        self.sock = ssl.wrap(self.sock, {mode = 'client', protocol = 'tlsv1'})
        return self.sock:dohandshake()
     end
  }

  local fnIdx = function(t, key)
     return function(self, ...)
        return self.sock[key](self.sock, ...)
     end
  end

  return setmetatable(conn, {__index = fnIdx})
end
... и отправляем:Кодsocket.smtp.send
{
  from = ...,
  rcpt = ...,
  source = ...,
  server = "smtp.mail.ru",
  port = 465,
  user = "user",
  password = "password",
  create = sslCreate
}И еще вкратце, что это за безобразие такое. Вся соль в возможности smtp.send() luasocket'а (см. доки) задать свою функцию создания сокета для отправки сообщения (create = sslCreate), который по умолчанию делается библиотекой просто как socket.tcp(). Мы делаем то же самое, но только обертываем его в подмененном методе connect, где нужно "договориться" с сервером по протоколу SSL. Всё. Еще в этой функции код для доступа к остальным методам сокета, ведь далее luasocket будет работать с ним как со стандартным.С mail.ru, например, работает без проблем.
Здравствуйте, взял все что необходимо для работы с сокетами SMTP и SSL из ZerobraneStudio и закинул в QUIK, закинул все нужные библиотеки core.dll socket.lua smtp.lua ssl.dll ssl.lua по нужным местам, скопировал ssleay32.dll и libeay32.sdll, скопировал Qlua.dll в lua51.dll, сделал все по рецепту автора, при выполнении скрипт в QUIKе отваливается с сообщением " Lua run time error occurred.",  провел отладку выполнения скрипта через Decoda - результат такой мой скрипт выполняется нормально, потом доходит до отправки емейла - тут тоже все нормально, доходит до строчки create = sslCreate дальше переходит в функцию function sslCreate() дальше при идет нормально и в один из моментов когда в файле ssl.lua доходит до строчки № 134  registry[s] = ctx весь скрипт в QUIKе  тваливается с вот этой вот ошибкой " Lua run time error occurred."

ssl.lua  строчка 134 registry[s] = ctx
Код
local function wrap(sock, cfg)
   local ctx, msg
   if type(cfg) == "table" then
      ctx, msg = newcontext(cfg)
      if not ctx then return nil, msg end
   else
      ctx = cfg
   end
   local s, msg = core.create(ctx)
   if s then
      core.setfd(s, sock:getfd())
      sock:setfd(-1)
      registry[s] = ctx
      return s
   end
   return nil, msg 
end
При том что проверил в ZerobraneStudio мой кусок кода отправляющий емейл и функция автора sslCreate() работают нормально - емейл отправляется без проблем, у кого будут какие соображения в чем проблема?
 
В момент выполнения строки registry[s] = ctx:   ctx= SSL context: 0D72EE88    тип - userdata   s = SSL connection: 0D848F00  тип - userdata
sock = tcp{client}:0D846E88    setfd=nil
Вообщем мне кажется что это связано с квиковским интерпретатором луа, т.к. операция registry это сохранение любых значений C кода в специальной общей таблице для всех выполняемых С кодов, вот тут в чем о и проблема, т.к. в других интерпретаторах, том же Zerobrane, такой проблемы нет
 
Добрый день.

Я подключил все библиотеки, socket подключается нормально. Но при подключении ssl, не находит ssl.core. ssl.lua, собственно, и пытается его включить local core    = require("ssl.core")
Т.е. нужна папка \ssl а в ней файл core.dll

Попробовал взять сборку Телеграм бота, что здесь выкладывали, аналогичная проблема. Похоже какая-то библиотека все же отсутствует.
Кто-то встречал похожую ошибку? Я нашел упоминания, то это связано с libeay32 и ssleay32, но они есть, путь к ним прописан. Плюс пробовал класть их в разные папки.
 
А тоже самое из ZeroBraneStudio работает. ssl.core - ошибку не дает, письма отправляются. А Квик ошибку выдает на local core    = require("ssl.core") в  ssl.lua
 
Цитата
Nikolay написал:
Я подключил все библиотеки, socket подключается нормально. Но при подключении ssl, не находит ssl.core. ssl.lua, собственно, и пытается его включить local core    = require("ssl.core")Т.е. нужна папка \ssl а в ней файл core.dll
Скопируй из квика из окна "Ошибки выполнения скрипта" то что там пишется при твоей попытке выполнить скрипт и выложи это сюда"
 
Цитата
Анатолий написал:
Цитата
Nikolay написал:
Я подключил все библиотеки, socket подключается нормально. Но при подключении ssl, не находит ssl.core. ssl.lua, собственно, и пытается его включить local core    = require("ssl.core")Т.е. нужна папка \ssl а в ней файл core.dll
Скопируй из квика из окна "Ошибки выполнения скрипта" то что там пишется при твоей попытке выполнить скрипт и выложи это сюда"
Ну так и пишется, что не может загрузить модуль. Все пути прописаны, библиотека рабочая, взята из поставки ZeroBraneStudio. Из нее все прекрасно работает. При этом просто socket загружается нормально.

Код
error loading module 'ssl.core' from file 'ssl.dll':
   Не найден указанный модуль.
 
Цитата
Анатолий написал:
В момент выполнения строки registry = ctx:   ctx= SSL context: 0D72EE88    тип - userdata   s = SSL connection: 0D848F00  тип - userdatasock = tcp{client}:0D846E88    setfd=nilВообщем мне кажется что это связано с квиковским интерпретатором луа, т.к. операция registry это сохранение любых значений C кода в специальной общей таблице для всех выполняемых С кодов, вот тут в чем о и проблема, т.к. в других интерпретаторах, том же Zerobrane, такой проблемы нет
Я тоже подозреваю, что с интерпретатором lua в Квике не все ладно. У меня также из ZeroBraneStudio все работает.
Также не все библиотеки можно подключить в Квике, для примера strict -  Квик падает без слов.
Также обнаружил, что внутри фунции SearchItems (в функции проверки) у меня почему-то проверка nil как false не срабатывает. Приходится явно писать ~= nil
 
Цитата
Nikolay написал:
Я тоже подозреваю, что с интерпретатором lua в Квике не все ладно. У меня также из ZeroBraneStudio все работает.
С интерпретатором луа в квике все ладно, просто там есть нюансы, у меня были все эти проблемы и я их решил, помоему ты всетаки не все скопировал из окна ошибок, полностью все оттуда скопируй и вставь сюда, или лучше сделай скрин и выложи
 
Цитата
Анатолий написал:
Цитата
Nikolay написал:
Я тоже подозреваю, что с интерпретатором lua в Квике не все ладно. У меня также из ZeroBraneStudio все работает.
С интерпретатором луа в квике все ладно, просто там есть нюансы, у меня были все эти проблемы и я их решил, помоему ты всетаки не все скопировал из окна ошибок, полностью все оттуда скопируй и вставь сюда, или лучше сделай скрин и выложи
Я скопировал все, кроме полного пути до файла ssl.dll. Больше ошибок нет. Выше по сообщениям этой темы были аналогичные сообщения.Если бы интерпретатор луа был чист, то типовая библиотека strict не приводила бы к падению терминала.
 
Сложно так сказать не видя что у тебя в скрипте и в папках квика, покажи тогда свой кусок скрипта где обьявляются пути

package.cpath  = ...
package.path  = ...

и идет подключение библиотек командой require
 
Цитата
Анатолий написал:
Сложно так сказать не видя что у тебя в скрипте и в папках квика, покажи тогда свой кусок скрипта где обьявляются пути

package.cpath  = ...
package.path  = ...

и идет подключение библиотек командой require
Так а что здесь такого при подключении... Я же говорю, что этот же скрипт ZeroBraneStudio в работает.
Отличие в том, что у него свои пути к библиотекам. А здесь такие.
Попытка поставить пути из ZeroBraneStudio для Квика приводит к аналогичной ошибке.

gSPath = 'D:\\Projects\\qlua_work'
gPath  = 'C:\\QUIK-Junior'
package.cpath = gPath.."\\?.dll;"..gSPath .."\\lua_socket_ssl\\?.dll;" ..gSPath .."\\lua_socket_ssl\\clibs\\?.dll;" ..gSPath .."\\lua_socket_ssl\\clibs\\mime\\?.dll;" ..gSPath .."\\lua_socket_ssl\\clibs\\socket\\?.dll;" .. package.cpath
package.path  = gSPath .."\\lua_socket_ssl\\?.lua;"..gSPath .."\\lua_socket_ssl\\socket\\?.lua;"..gSPath .."\\lua_socket_ssl\\ssl\\?.lua;" ..package.path

print(package.cpath)
print(package.path)

socket  = require("socket")
smtp    = require("socket.smtp")
ssl     = require("ssl") --- вот здесь и падает в Квике
 
Цитата
Nikolay написал:
socket  = require("socket")
А у меня такой строчки нету и все работает, короче у меня все прописано вот так:
package.cpath  =  getScriptPath () .. "\\ssl\\?.dll;C:\\ZeroBraneStudio\\bin\\clibs\\?.dll;C:\\ZeroBraneStudio\\bin\\?.dll;C:\\ZeroBraneStudio\\bin\\socket\\?.dll"
package.path  =   getScriptPath () .. "\\?.lua;"..package.path

smtp = require("socket.smtp")
mime = require("mime")
ltn12 = require("ltn12")
ssl = require("ssl")
https = require("ssl.https")

В папке квика - папка lua, в ней папки socket и ssl в них я закинул dll'ки, ssl.lua в самой папке lua, надо подумать какой прогой можно сделать чтобы сделать удобный листинг папок и закинуть их сюда,
Но есть еще один удобный выход который я и предпочел т.к. у меня либа ssl хоть и подключилась и работает однако она доставляет неудобства - с ней скрипт очень долго стартует - минут 5 наверно, почему непонятно, поэтому я от неё отказался и воспользовался прогой Stunnel, ищи в инете, она создает прокси SSL туннель и переправляет направляемый на неё траффик по ssl, и тогда в скрипте


ты отправляешь через неё мыло вот так:


function sendmail (message)
local r,e

r, e = smtp.send{
 from = "somemail@mail.ru",
 rcpt = "recepient@mail.ru",
 source = smtp.message(message),
 password = "password",
 user = "somemail",
 domain = "mail.ru",
 server = "127.0.0.1",
 port = 25,
}

return r,e

end

а в настройках Stunnel указываешь:

[mail-pop3]
client = yes
accept = 127.0.0.1:110
connect = pop.mail.ru:995
verifyChain = yes
CAfile = ca-certs.pem
checkHost = pop.gmail.com
OCSPaia = yes

[mail-smtp]
client = yes
accept = 127.0.0.1:25
connect = smtp.mail.ru:465
verifyChain = yes
CAfile = ca-certs.pem
checkHost = smtp.mail.ru
OCSPaia = yes

Все просто и понятно
И тогда твое мыло и без подключения ssl.dll уйдет на почту на порт 465 по SSL
 
Цитата
Анатолий написал:
Цитата
Nikolay написал:
socket  = require("socket")
А у меня такой строчки нету и все работает, короче у меня все прописано вот так:
Ну я хочу использовать эту библиотеку не для отправки почты. Для почты я написал на C# програмульку на 10 строк, вызываю ее из Квика и все.
А вот для других целей хочется запустить. Ясно, что дело в путях, т.к. в другом месте работает. Будем копать...
 
Проблему решил.
Пришлось скомпилировать самому luaSec 0.8-1 под lua 5.1, используя Open SSL.
Файлы libeay32 и ssleay32 обязаны быть рядом с файлом lua 5.1, т.е. в папке установки Quik.

У меня отправка почты совершается за секунду, две. Не более. Никаких задержек.

Теперь можно приступать к использованию библиотеки для интересных вещей, типа чтения Twitter и т.д.

Если кому интересно, готовая сборка с примером отправки почты с моего Гита:
https://github.com/nick-nh/qlua/tree/master/lua_socket_ssl
 
Цитата
Nikolay написал:
Я тоже подозреваю, что с интерпретатором lua в Квике не все ладно. У меня также из ZeroBraneStudio все работает. Также не все библиотеки можно подключить в Квике, для примера strict -  Квик падает без слов. Также обнаружил, что внутри фунции SearchItems (в функции проверки) у меня почему-то проверка nil как false не срабатывает. Приходится явно писать ~= nil
Кстати забыл сразу рассказать: у меня тоже по началу были такие проблемы с квиковским интерпретатором луа, но они решились все и больше не появлялись, а вызваны как мне кажется следующим - ты как и все остальные делаете так:
В папку со сторонними библиотеками ложите файл qlua.dll переименовав его в lua51.dll, еще хуже если люди берут lua51.dll откуда нибудь со стороны, из Zerobrane например, не переименовав оригинальный qlua.dll, тогда всякие глюки 100% будут, но и в первом случае - с помощью переименовывания qlua.dll  в lua51.dll я тоже наблюдал различные глюки и сообщения о некоторых ошибках во время выполнения скрипта, все эти ошибки у меня решились так:
1. В каждую папку со сторонними библиотеками ложится оригинальный qlua.dll а всякие lua51.dll удаляются.
2. Есть такая хорошая программка Dependency walker, с её помощь можно посмотреть с какими другими dll связана нужная тебе dll библиотека, но еще удобнее это посмотреть с помощью Total Commander Extended - просто становишся на dll'ку курсором, жамкаешь F3, вкладка Dll Dependency - смотрим - эта библиотека, к примеру ssl.dll требует для своей работы библиотеку lua51.dll, и кстати там будет показано - может ли нужная тебе библиотека связаться со всеми далее необходимыми ей библиотеками, если нет то возле нее будет гореть красный крестик
3. Далее любым HEX редактором, например WinHex, открываем ssl.dll для записи, ищем текст - lua51.dll
находим, далее осторожно! Необходимо стать курсором в текстовое поле отображения файла! не в шестнадцатиричное!  необходимо написать qlua вместо lua51, но при этом существующее положение точки т.е. символа разделения имени файла и расширения не должно измениться, т.е. точку трогать нельзя! qlua это на один символ меньше чем lua51, поэтому "q" писываем вместо "u" и т.д. итого у нас должно получится - lqlua.dll,  после того как писали qlua осторожно переходим в шестнадцатиричное поле и в ту позицию (байт) в которой содержится шестнадцатиричное значение буквы l ставим два нуля - "00" и буква l должна исчезнуть, сохраняем все изменения, открываем ssl.dll в Total'е, или в Dependency walker, смотрим - ssl.dll уже запрашивает не библиотеку lua51.dll а qlua.dll! Так проделываем со всеми своими сторонними библиотеками подключаемыми в скрипте самостоятельно - после этого у меня все проблемы с интерпретатором луа в квике пропали!
 
Цитата
Анатолий написал:

Далее любым HEX редактором ...
Есть более гуманный способ. Вот небольшой технологический дайджест по теме:

1. qlua.dll - реализация lua5.1.dll специально для Квика с целью добавления потокобезопасных методов работы с таблицами из разных потоков (sinsert(), sremove() и т.п. - см. документацию по QLua). В остальном это полноценная Lua, с которой можно линковать и свои модули.
2. Чтобы всё работало, процесс вне зависимости от числа созданных в нем потоков должен загрузить только один экземпляр qlua.dll. Почему? В DLL помимо кода (количество экземпляров которого безразлично) есть еще и глобальные переменные, в числе которых необходимые примитивы синхронизации. Если они будут созданы в нескольких экземплярах, толку от них никакого и все труды по обеспечению потокобезопасности - впустую.
3. Так как сторонние библиотеки едва что-нибудь слыхивали про Квик про QLua в нем, то слинкованы они с  lua5.1.dll или нечто подобным. Чтобы такие модули работали со скриптами в Квике, в комплекте программы поставляется  lua5.1.dll - модуль-прокси, который полезного кода не содержит, но перенаправляет все вызовы API к qlua.dll, таким образом решая две задачи: 1) внешние модули, слинкованные с   lua5.1.dll, успешно его находят и загружают; 2) обеспечивается загрузка только одного экземпляра API  Lua, а именно qlua.dll.

Выводы, для того чтобы всё находилось, загружалось и не падал терминал:
1. Из папок с файлами сторонних модулей можно удалить все  lua5.1.dll, чтобы гарантированно обеспечить загрузку   lua5.1.dll именно из папки Квика, то есть нашу заботливо изготовленную прокси.
2. Если внешние модули слинкованы не с lua5.1.dll, а с  lua51.dll,  lua.dll или подобным, скопируйте прокси lua5.1.dll из поставки Квика (!) в ту же его папку и обзовите файл как надо. Внимание, еще раз: qlua.dll копировать нельзя, прокси   lua5.1.dll - можно! А еще лучше не копировать, а создать символическую ссылку (symlink) на lua5.1.dll, если у вас файловая система NTFS. Это избавит от лишних хлопот, если внезапно  lua5.1.dll обновится вместе в Квиком.
3. Кто использует LuaSSL, библиотеки libeay32.dll и ssleay32.dll кладите в папку Квика, так как LuaSSL сделан так, чтобы эти библиотеки и lua5.1.dll находились в одном месте.
 
Как я выше написал, я решил проблему просто - сам скомпилировал библиотеки. И все заработало. Никаких переименований библиотек я не делал.
 
Кто  нибудь смог запустить этот вариант? https://quikluacsharp.ru/instruments/otpravka-sms-email-iz-qlua-ili-c/comment-page-4/#comment-28183
 
alexeyseikin, Где то есть такая же тема тут как делать. Но уже сам автор сделал новый файл для почты. Или речь об смс?
Страницы: Пред. 1 2 3
Читают тему (гостей: 1)
Наверх