HandyCache форум

Главная категория => Общие вопросы => Тема начата: Wonderboy от 04 января 2008, 12:17:58



Название: Расширения на языке Lua в HandyCache
Отправлено: Wonderboy от 04 января 2008, 12:17:58
Собственно вышла уже новая версия НС, а на форуме затишье по этому поводу. Я понимаю, что программеры и так все поймут, но может кто-нибудь снизойдет к обыкновенным юзерам и накропает пару примеров на Lua? Конкретно, интересует обработка заголовков рисунков для автоматической фильтрации баннеров по размерам. Возможно, есть и еще какие-то полезные методы, но больше ничего не приходит в голову.



- Полное описание структуры расширений HandyCache, их глобальных переменных и функций находится в файле HCExtensions.html из свежего комплекта HC.
- О синтаксисе языка Lua можно почитать на сайте: http://www.lua.ru/doc/



Название: Расширения на языке Lua в HandyCache
Отправлено: alex208210 от 28 мая 2009, 12:51:58
нарпимер имеется такой скрипт:
function GetRelPath(s)
  _,_,x = string.find(s, "^http://[^/]+/(.*)")
  x,_ = string.gsub(x, "/", "\\")
  return x
end

function main()
  hc_answer_header=
  'HTTP/1.1 200 OK\r\n'..
  'Server: HandyCache\r\n'..
  'Content-Type: text/html\r\n'..
  'Pragma: no-cache\r\n'..
  'Cache-control: no-cache, must-revalidate, no-store\r\n'..
  'Connection: close\r\n\r\n'

  catalog = "C:\\Downloads\\"
  rel_path = GetRelPath(hc_url)
  hc_answer_body = "file="..catalog..rel_path
end

как будет выглядеть текст расширения?


Название: Расширения на языке Lua в HandyCache
Отправлено: 4e4ako от 28 мая 2009, 13:14:57
очень хорошая справка по расширениям - HC\Extensions\HCExtensions.html


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 28 мая 2009, 14:39:52
Цитировать
как будет выглядеть текст расширения?
Как-то так:
Код:
--[[ <HCExtension>
@name          Example
@author        alex208210
@version       0.01
@description   Проба
@event         RequestHeaderReceived/request
</HCExtension> ]]

function GetRelPath(s)
  _,_,x = string.find(s, "^http://[^/]+/(.*)")
  x,_ = string.gsub(x, "/", "\\")
  return x
end

function request()
  hc.answer_header=
  'HTTP/1.1 200 OK\r\n'..
  'Server: HandyCache\r\n'..
  'Content-Type: text/html\r\n'..
  'Pragma: no-cache\r\n'..
  'Cache-control: no-cache, must-revalidate, no-store\r\n'..
  'Connection: close\r\n\r\n'

  catalog = "C:\\Downloads\\"
  rel_path = GetRelPath(hc.url)
  hc.answer_body = "file="..catalog..rel_path
end


Название: Расширения на языке Lua в HandyCache
Отправлено: alex208210 от 28 мая 2009, 16:11:08
раньше для lua в luar.lst прописывалось
+stat.local/ <script=lua\_send_my_response.lua>

таким образом скрипт работал только при запросе http://stat.local
как это сделать для расширения?


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 28 мая 2009, 16:18:43
В заголовок добавь строку
Код:
@rule          http://stat\.local


Название: Расширения на языке Lua в HandyCache
Отправлено: alex208210 от 28 мая 2009, 16:20:20
спасибо.. все работает


Название: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 28 мая 2009, 20:00:33
В связи с появлением новой версии не поможете переделать скрипт?
Код:
function GetContentLength(s)
  _,_,x= string.find(s, "[cC]ontent%-[lL]ength: (%d*)")
  if x==nil then return 0 else return tonumber(x) end
end

function main()
  x= GetContentLength(hc_header)
  if x>999 then os.execute([["d:\Program\HandyCache\lua\invmp3.exe d:\Program\HandyCache\lua\beep.mp3"]]) end
end


Название: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 28 мая 2009, 20:51:44
Огромное спасибо!!! Да еще такая оперативность!!!  :good:


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 28 мая 2009, 20:53:29
Влад22
Код:
--[[ <HCExtension>
@name          Beeper
@author        ____
@version       0.02
@description   ____
@event         AnswerHeaderReceived/answer
</HCExtension> ]]

function GetContentLength(s)
  _,_,x= string.find(s, "[cC]ontent%-[lL]ength: (%d*)")
  if x==nil then return 0 else return tonumber(x) end
end

function answer()
  x= GetContentLength(hc.answer_header)
  if x>999 then os.execute([["d:\Program\HandyCache\lua\invmp3.exe d:\Program\HandyCache\lua\beep.mp3"]]) end
end


Название: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 28 мая 2009, 21:48:39
Спасибо. работает.
Попробовал заменить
os.execute([["d:\Program\HandyCache\lua\invmp3.exe d:\Program\HandyCache\lua\beep.mp3"]])
на
hc.shell_execute('d:\Program\HandyCache\Extensions\invmp3.exe', 'd:\Program\HandyCache\Extensions\beep.mp3', nil, 'SW_SHOW')
что бы окошко не выскакивало - не работает совсем. Не то, что бы для меня это очень критично - но хотелось бы разобраться где тут собака зарыта, что я не так делаю?


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 28 мая 2009, 22:02:33
Попробуй заменить \ на \\
Lua съедает одиночные символы \


Название: Расширения на языке Lua в HandyCache
Отправлено: hc_user от 29 мая 2009, 07:00:10
помогите с таким скриптом... очень нужно...

Код:
function main() 

 if hc_user_name == 'user_name' and hc_user_from_internet > 26214400 then
  hc_action = 'only_from_cache'
 end

end


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 29 мая 2009, 10:45:12
Dan Claimant
Покажи свое расширение, я же не знаю, что у тебя получилось.
hc_user
Код:
--[[ <HCExtension>
@name          For_hc_user
@author        ___
@version       0.01
@description   Блокирует пользователя при переборе трафика
@event         RequestHeaderReceived/request
</HCExtension> ]]
function request()

 if hc.user_name == 'user_name' and hc.user_from_internet > 26214400 then
  hc.action = 'only_from_cache'
 end

end


Название: Расширения на языке Lua в HandyCache
Отправлено: hc_user от 29 мая 2009, 12:02:51
mai62, спасибо


Название: Расширения на языке Lua в HandyCache
Отправлено: divinets от 29 мая 2009, 12:48:59
Помогите пожалуйста со скриптом вызываемым из луа.лст следующим образом:
Код:
!divinets.ru
#.* <script=lua\block_long_file_by_time.lua>
<new_block>



Код:
--*****************************************************************
-- Скрипт для HandyCache v 1.00 RC1 (1.0.0.11) и выше
-- Автор: DenZzz
-- Назначение: Блокировать загрузку больших файлов в зависимости
--             от системного времени
--*****************************************************************

function GetContentLength(s)
  _,_,x = string.find(s, "[cC]ontent%-[lL]ength: *(%d+)")
  if x==nil then return -1 else return tonumber(x) end
end


function main()
 
 -- Узнаем текущее системное время
  time = os.date("*t")

 if time.hour >= 18 then
 -- забираем размер файла из заголовка "Content-Length"
  len = GetContentLength(hc_header)
   -- если размер файла есть в заголовке и он больше 512 KБайт
      if len > 1048576 then
     -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку
      if hc_action=="" or hc_action==nil or hc_action=="save" then
        hc_action = "stop"
      end
    end
 end

 if time.hour >= 0 and time.hour < 3 then
 -- забираем размер файла из заголовка "Content-Length"
  len = GetContentLength(hc_header)
   -- если размер файла есть в заголовке и он больше 10 МБайт
      if len > 52428800 then
     -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку
      if hc_action=="" or hc_action==nil or hc_action=="save" then
        hc_action = "stop"
      end
    end
 end

 if time.hour >= 3 and time.hour < 6 then
 -- забираем размер файла из заголовка "Content-Length"
  len = GetContentLength(hc_header)
   -- если размер файла есть в заголовке и он больше 10 МБайт
      if len > 252428800 then
     -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку
      if hc_action=="" or hc_action==nil or hc_action=="save" then
        hc_action = "stop"
      end
    end
 end
 
 if time.hour >= 6 and time.hour < 20 then
 -- забираем размер файла из заголовка "Content-Length"
  len = GetContentLength(hc_header)
   -- если размер файла есть в заголовке и он больше 10 МБайт
      if len > 8388608 then
     -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку
      if hc_action=="" or hc_action==nil or hc_action=="save" then
        hc_action = "stop"
      end
    end
 end

end


Название: Расширения на языке Lua в HandyCache
Отправлено: Dan Claimant от 29 мая 2009, 12:50:51
mai62, раньше у меня работаловсе  (то есть обрезало все))) через "управление загрузкой" - script://lua/request и script://lua/answer
и luaR.lst и lua.lst у меня были вида такого:
Код:
; Файл-список скриптов LUA для обработки заголовков запросов клиентов
;--------------------------------------------------------------------

#.  <script=lua\_dont_update_image_by_type_in_cache.lua>

# !#\b(imageshack\.us|photofile\.ru|radikal\.ru)/
#.  <script=lua\_block_external_links.lua>
и
Код:
; Файл-список скриптов LUA для обработки заголовков ответов серверов
;-------------------------------------------------------------------

#.  <script=lua\save_or_block_403_and_404.lua>
#/favicon\.ico$  <script=lua\save_404.lua>
#.  <script=lua\dont_update_image_by_type.lua>
#.  <script=lua\dont_update_file_by_size.lua>
;#.  <script=lua\block_long_file.lua>

может быть стоит ещё добавить какой-нить скрипт к _dont_update_image_by_type_in_cache.lua?


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 29 мая 2009, 13:10:02
Dan Claimant
Строку url_host = GetHost(hc_url) нужно заменить на url_host = GetHost(hc.url) (моя недоработка в сообщении #9)
После строки hc.action = "stop" предлагаю добавить строку hc.monitor_string = hc.monitor_string.."BlockExternal "
Тогда заблокированные запросы будут видны в мониторе в колонке Правила.
Как исправишь файл расширения в НС не забудь нажать кнопку Перечитать расширение.

Добавлено: 29 Мая 2009, 12:59:08

divinets
Пробуй
Код:
--[[ <HCExtension>
@name          BlockLongFiles
@author        DenZzz
@version       0.02
@description   Блокировать загрузку больших файлов в зависимости от системного времени
@exception     divinets.ru
@event         AnswerHeaderReceived/answer
</HCExtension> ]]

function GetContentLength(s)
  _,_,x = string.find(s, "[cC]ontent%-[lL]ength: *(%d+)")
  if x==nil then return -1 else return tonumber(x) end
end


function answer()
 
 -- Узнаем текущее системное время
  time = os.date("*t")

 if time.hour >= 18 then
 -- забираем размер файла из заголовка "Content-Length"
  len = GetContentLength(hc.answer_header)
   -- если размер файла есть в заголовке и он больше 512 KБайт
      if len > 1048576 then
     -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку
      if hc.action=="" or hc.action==nil or hc.action=="save" then
        hc.action = "stop"
      end
    end
 end

 if time.hour >= 0 and time.hour < 3 then
 -- забираем размер файла из заголовка "Content-Length"
  len = GetContentLength(hc.answer_header)
   -- если размер файла есть в заголовке и он больше 10 МБайт
      if len > 52428800 then
     -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку
      if hc.action=="" or hc.action==nil or hc.action=="save" then
        hc.action = "stop"
      end
    end
 end

 if time.hour >= 3 and time.hour < 6 then
 -- забираем размер файла из заголовка "Content-Length"
  len = GetContentLength(hc.answer_header)
   -- если размер файла есть в заголовке и он больше 10 МБайт
      if len > 252428800 then
     -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку
      if hc.action=="" or hc.action==nil or hc.action=="save" then
        hc.action = "stop"
      end
    end
 end
 
 if time.hour >= 6 and time.hour < 20 then
 -- забираем размер файла из заголовка "Content-Length"
  len = GetContentLength(hc.answer_header)
   -- если размер файла есть в заголовке и он больше 10 МБайт
      if len > 8388608 then
     -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку
      if hc.action=="" or hc.action==nil or hc.action=="save" then
        hc.action = "stop"
      end
    end
 end

end


Название: Расширения на языке Lua в HandyCache
Отправлено: Dan Claimant от 29 мая 2009, 13:35:24
mai62, теперь всё работает отлично :) большое спасибо... осталось теперь понять, куда вписывать исключения, чтобы адреса некоторых сайтов проходили мимо скрипта...

Пы.Сы. за авотматическую очистку кэша - отдельный РЕСПЕКТ - очень удобно :)


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 29 мая 2009, 13:55:41
Про исключения. В заголовок расширения добавляешь строку вида
@exception     regex
regex - регулярное выражение, оно работает с полным (вместе с http://) входным URL.
Таких строк в заголовке может быть много.


Название: Расширения на языке Lua в HandyCache
Отправлено: Dan Claimant от 29 мая 2009, 13:57:49
mai62, ещё раз огромное спасибо :)


Название: Расширения на языке Lua в HandyCache
Отправлено: divinets от 29 мая 2009, 18:34:30
mai62, спасибо за помощь и замечательную программу.


Название: Расширения на языке Lua в HandyCache
Отправлено: rubel от 29 мая 2009, 18:39:24
mai62
Скрипты можно было отключить временно клавишей.
А вот расширения видимо нельзя?
Читаю страницу на новостном сайте, ссылки ведут на другие.Расширение
DontLoadExternalLinks.lua абсолютно всё блокирует.


Название: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 29 мая 2009, 18:54:01
Если добавить первой строкой обработчика в расширении что-то типа
Цитировать
if re.match(hc.get_keyboard_state(), 'VK_RSHIFT') then
   hc.put_msg('Обработчик ... отключен')
   return
end
то определим горячую клавишу отключения для этого обработчика правый Shift.


Название: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 31 мая 2009, 14:48:08
Выяснилось, что готового решения сейчас не получится, т.к. функция hc.get_keyboard_state() не дает реального расклада по нажатым клавишам. Может, к следующей сборке mai62 что-нибудь придумает.


Название: Расширения на языке Lua в HandyCache
Отправлено: rubel от 01 июня 2009, 09:23:30
Михаил
Цитировать
Выяснилось, что готового решения сейчас не получится
Придется тогда отключать сразу все расширения через значок в трее.
Конечно, это не совсем то.


Название: Расширения на языке Lua в HandyCache
Отправлено: Новичёк от 02 июня 2009, 20:33:22
Помогите со скриптом. Нужно поставить предельный размер, вне зависимости от расшерения файлов, для выбранных пользователей.


Название: Расширения на языке Lua в HandyCache
Отправлено: peleccom от 02 июня 2009, 22:16:10
Пытаюсь научится делать скрипты Lua но пока неочень поэтому возник вопрос
Имеется ли возможность через lua скрипт вести отладочную печать, т.е. вывод сообщений?

и еще:
Можно ли задать горячую клавишу которую сможет получить скрипт?


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 02 июня 2009, 22:27:26
Цитировать
Помогите со скриптом. Нужно поставить предельный размер, вне зависимости от расшерения файлов, для выбранных пользователей.
К этому сообщению прикреплено расширение SizeLimit. Нужно добавить расширение в список расширений (сборка НС 175 и старше), кнопкой Настройки расширения вызвать настройки, вписать туда пользователей и лимит и нажать ОК.
В папке НС должен лежать vcl.dll (находится в поставке 175 сборки). Обращаю внимание, что ограничение относится к файлам, у которых в заголовке указана длина.
Цитировать
Имеется ли возможность через lua скрипт вести отладочную печать, т.е. вывод сообщений?
Можно выводить сообщения в лог функцией hc.put_to_log и во всплывающем окне функцией hc.put_msg.
Читай файл HCExtensions.html из поставки 175 сборки и смотри примеры расширений.
Цитировать
Можно ли задать горячую клавишу которую сможет получить скрипт?
Можно будет в следующей сборке.


Название: Расширения на языке Lua в HandyCache
Отправлено: Новичёк от 02 июня 2009, 22:56:35
К этому сообщению прикреплено расширение SizeLimit. Нужно добавить расширение в список расширений (сборка НС 175 и старше), кнопкой Настройки расширения вызвать настройки, вписать туда пользователей и лимит и нажать ОК.
В папке НС должен лежать vcl.dll (находится в поставке 175 сборки). Обращаю внимание, что ограничение относится к файлам, у которых в заголовке указана длина.
Спасибо. Работает.


Название: Расширения на языке Lua в HandyCache
Отправлено: sk! от 03 июня 2009, 14:47:00
что то не получается сделать блок определённых url для некоторых пользователей.
перечитал справку но скрипт постоянно выдаёт ошибку. может кто то уже писал такое расширение и поделиться


Название: Расширения на языке Lua в HandyCache
Отправлено: Wonderboy от 03 июня 2009, 19:50:00
В последней версии НС появилась закладка "расширения". Нужно ли для использования включать серверы-посредники? Или это полностью отдельная опция и включается в закладке?


Название: Расширения на языке Lua в HandyCache
Отправлено: alex208210 от 03 июня 2009, 20:29:23
В последней версии НС появилась закладка "расширения". Нужно ли для использования включать серверы-посредники? Или это полностью отдельная опция и включается в закладке?
это полностью отдельная опция и она уже включена..(серверы посредники включать не надо) тебе надо только добавить необходимаое расширение кнопкой "+" и оно будет работать.


Название: Расширения на языке Lua в HandyCache
Отправлено: Wonderboy от 03 июня 2009, 20:44:11
А чем расширения отличаются от обычных скриптов? Или просто можно плюсиком добавить любой скрипт на lua?


Название: Расширения на языке Lua в HandyCache
Отправлено: alex208210 от 03 июня 2009, 20:56:54
что то не получается сделать блок определённых url для некоторых пользователей.
перечитал справку но скрипт постоянно выдаёт ошибку. может кто то уже писал такое расширение и поделиться
Код:
--[[ <HCExtension>
@name          block
@author        alex208210
@version       0.01
@description   Блокировка определенных url определенным пользователям
@event         RequestHeaderReceived/block
</HCExtension> ]]

function FindUrl(s)
  x,_ = string.find(hc.url, s)
  return x
end

function block()
 if (hc.user_name == "Alex" or hc.user_name == "user") and
   FindUrl("sex%.ru") or
   FindUrl("mail%.ru") then
  hc.action = "stop"
 end

end

Цитировать
А чем расширения отличаются от обычных скриптов? Или просто можно плюсиком добавить любой скрипт на lua?

Расширения НС по сравнению со старыми скриптами могут обрабатывать больше событий, возникающих в НС в процессе удовлетворения запросов клиентов, и использовать их гораздо удобнее

да можно просто добавить плюсиком любое расширение но не старый скрипт.. сначало скрипт необходимо переделать под формат расширения


Название: Расширения на языке Lua в HandyCache
Отправлено: sk! от 03 июня 2009, 21:23:20
alex208210 спасибо! всё работает просто на ура.


Название: Расширения на языке Lua в HandyCache
Отправлено: Wonderboy от 03 июня 2009, 21:39:44
Цитировать
да можно просто добавить плюсиком любое расширение но не старый скрипт.. сначало скрипт необходимо переделать под формат расширения

Тогда можно обьяснить, что делает стандартный скрипт save_404.lua (в lua.lst он повешен на правило favicon.ico)? И как он будет выглядеть уже в расширении? Просто этот скрипт тормозил загрузку favicon, когда весь сайт уже был загружен. Убираешь его - тормоза пропадают


Название: Расширения на языке Lua в HandyCache
Отправлено: Walder от 04 июня 2009, 06:31:14
Мож че не правильно сделал ошибку выдает при добавления расширение - Lua ошибка {tring"-{{<HCExtension>........"}:31: unexpected symbol near'=='

Скрипт -
--[[ <HCExtension>
@name          block
@author        alex208210
@version       0.01
@description   Блокировка определенных url определенным пользователям
@event         RequestHeaderReceived/block
</HCExtension> ]]


function FindUrl(s)
  x,_ = string.find(hc_url, s)
  return x
end

function block()

 if (hc_user_name == "xarakor") and
   FindUrl("net.kanal7%.ru")==nil and
   FindUrl("forum.kanal7%.ru")==nil and
   FindUrl("love.kanal7%.ru")==nil and
   FindUrl("news.kanal7%.ru")==nil and
   FindUrl("games.kanal7%.ru")==nil and
   FindUrl("video.kanal7%.ru")==nil and
   FindUrl("job.kanal7%.ru")==nil and
   FindUrl("foto.kanal7%.ru")==nil and
   FindUrl("job.kanal7%.ru")==nil and
   FindUrl("192.168.66.129")==nil and
   FindUrl("http://radio.kanal7.ru:")==nil and
   FindUrl("http://wsus.kanal7.ru/nod2/")==nil and
   FindUrl("cinema.kanal7%.ru")==nil then
   FindUrl("https://webim.qip.ru:5222")==nil and
   FindUrl("https://login.icq.com:443")==nil then
  hc_action = "stop"
 end
end


Название: Расширения на языке Lua в HandyCache
Отправлено: alex208210 от 04 июня 2009, 06:42:42
да много что не так))
в url перед точками везде ставь % (перед двоеточием тоже наверно.. незнаю)
после hc ставится точка а не подчеркивание
и вообще это расширение не блокирует определенные сайты а разрешает.. и автор у него Denzzz


Название: Расширения на языке Lua в HandyCache
Отправлено: Walder от 04 июня 2009, 06:52:56
да я знаю ребята кто автор, просто шаблон вставил, очень надо чтоб работало помогите как будет выглядеть Скрипт правильно  ? мне нужно чтоб разрешал тока то что в списе, а все остальное  блокировал  для xarakora !


Название: Расширения на языке Lua в HandyCache
Отправлено: alex208210 от 04 июня 2009, 07:37:40
Код:
--[[ <HCExtension>
@name          allow
@author        DenZzz
@version       0.01
@description   Разрешение определенных url определенным пользователям
@event         RequestHeaderReceived/allow
</HCExtension> ]]


function FindUrl(s)
  x,_ = string.find(hc.url, s)
  return x
end

function allow()

 if (hc.user_name == "xarakor") and
   FindUrl("net.kanal7%.ru")==nil and
   FindUrl("forum.kanal7%.ru")==nil and
   FindUrl("love.kanal7%.ru")==nil and
   FindUrl("news.kanal7%.ru")==nil and
   FindUrl("games.kanal7%.ru")==nil and
   FindUrl("video.kanal7%.ru")==nil and
 FindUrl("job.kanal7%.ru")==nil and
   FindUrl("foto.kanal7%.ru")==nil and
   FindUrl("job.kanal7%.ru")==nil and
   FindUrl("192.168.66.129")==nil and
   FindUrl("http://radio.kanal7.ru")==nil and
   FindUrl("http://wsus.kanal7.ru/nod2/")==nil and
   FindUrl("cinema.kanal7%.ru")==nil and
    FindUrl("https://webim.qip.ru:5222")==nil and
   FindUrl("https://login.icq.com:443")==nil then
  hc.action = "stop"
 end
end


Название: Расширения на языке Lua в HandyCache
Отправлено: mzr от 04 июня 2009, 13:27:20
Walder

Зачем так сложно? Читаем HCExtensions.html

Цитировать
Поля заголовка расширения

rule    Правило (регулярное выражение), которым будет проверяться URL запроса перед вызовом расширения. В заголовке может быть несколько полей rule.
 
exception   Исключение (регулярное выражение), которым будет проверяться URL запроса перед вызовом расширения. В заголовке может быть несколько полей exception.


Сюда вписываем URL.
 
А в самом обработчике расширения - проверяем пользователя и выбираем действие. Все.


Название: Расширения на языке Lua в HandyCache
Отправлено: peleccom от 04 июня 2009, 21:49:27
Если нужно заблокировать загрузку файла из интернета то какое значение нужно присвоить hc.action?
пытался присвоить
"dont_update" - опера еще долго пытается что-то загрузить
"stop"- загружается часть файла но потом соединение разрывается ( код ответа 403)

Может нужно модифицировать ответ сервера?



Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 04 июня 2009, 22:18:13
Если нужно заблокировать загрузку файла из интернета то какое значение нужно присвоить hc.action?

"stop"

Цитировать
"stop"- загружается часть файла но потом соединение разрывается ( код ответа 403)

Для какого события вызывается скрипт? Если для RequestHeaderReceived, то HC в инет вообще не полезет! Просто ответит браузеру 403 и все.


Название: Расширения на языке Lua в HandyCache
Отправлено: peleccom от 04 июня 2009, 22:51:04
Для какого события вызывается скрипт? Если для RequestHeaderReceived, то HC в инет вообще не полезет! Просто ответит браузеру 403 и все.
А по какому событию можно прочитать тип передаваемых данных(content-type)?


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 04 июня 2009, 23:19:27
А по какому событию можно прочитать тип передаваемых данных(content-type)?

Опять же, смотря откуда читать: из кэша или из инета?

Если из инета, то вместе с заголовками успевает загрузиться несколько килобайт тела файла, пока HC разрывает соединение с сервером, и с этим ничего не поделать...


Название: Расширения на языке Lua в HandyCache
Отправлено: peleccom от 04 июня 2009, 23:21:02
А ну тогда понятно.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 09 июня 2009, 09:22:59
Переделал свои скрипты в расширения для HC v1.00 RC2 (1.0.0.180).

Порядок следования расширений в списке extensions.lst у меня такой:

Названия расширений
Названия файлов
Блокировать внешние ссылки (R-ext)eR_Block_external_links.lua
Не обновлять картинки по типу в кэше (R-img)eR_Dont_update_image_by_type_in_cache.lua
Не обновлять видео по типу в кэше (R-vid)eR_Dont_update_video_by_type_in_cache.lua
Сохранять или блокировать ответы 403 и 404 (A-40X)eA_Save_or_block_403_and_404.lua
Сохранять нужные ответы 404 (A-404s)eA_Save_404.lua
Не обновлять картинки по типу с сервера (A-img)eA_Dont_update_image_by_type.lua
Не обновлять видео по типу с сервера (A-vid)eA_Dont_update_video_by_type.lua
Не обновлять файлы по размеру (A-size)eA_Dont_update_file_by_size.lua
Блокировать загрузку больших файлов (A-long)eA_Block_long_file.lua


Функционал тот же, что и у одноименных скриптов, но с парой дополнений:
1. Информация о том, какое расширение сработало теперь выводится в Монитор HC в колонку "Правила".
2. Расширения будут выполнять свои действия только в случае активности соответствующих списков.
Например: действие "stop-" заблокирует загрузку, только если Черный список не был отключен галкой "Разрешить", горячей клавишей или Белым списком. Таким образом, действия скриптов можно будет отключать горячими клавишами для списков, а правила из Белого списка будут распространяться и на скрипты. Это позволяет не дублировать исключения для обычных списков в расширениях.


Внимание!  

В версии HC 1.0.0.175 есть баг, из-за которого неправильно работает действие "dont_update" в расширениях, обрабатывающих ответы сервера, а именно:
- Не обновлять картинки по типу с сервера (A-img)
- Не обновлять видео по типу с сервера (A-vid)
- Не обновлять файлы по размеру (A-size)

Рекомендуется скачать новую версию HC RC2 1.0.0.180, в которой эти расширения работают, как им положено.


Название: Расширения на языке Lua в HandyCache
Отправлено: The Alex от 10 июня 2009, 18:31:20
После обновления HC до последней версии 1.0.0.175 серверы-посредники блокируют весь трафик...
Браузер выдает:
Цитировать
ОШИБКА
Запрошенный URL не может быть доставлен.

Во время доставки URL: script://lua/requestforum.qrz.ru/index.php

Произошла следующая ошибка:
Неправильный URL

Некоторые аспекты URL неправильны. Возможные проблемы:
Отсутствует либо неверный протокол доступа (должен быть `http://'' или похожий)
Отсутствует имя сервера
Некорректный двойной управляющий символ в URL-пути
Недопустимый символ в имени сервера; подчёркивания недопустимы

Скрин монитора HC:
(http://s48.radikal.ru/i121/0906/4f/61602ee4b15c.jpg)

Возвращаюсь на предыдущую версию - все ОК!

Списки LUA во вложении:



Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 10 июня 2009, 18:53:10
The Alex
Старые скрипты не работают в новой версии. Читай это http://handycache.ru/content/view/38/26/


Название: Расширения на языке Lua в HandyCache
Отправлено: The Alex от 10 июня 2009, 19:08:06
mai62
ОК! Сори! Разобрался.... Спасибо!
Осталось понять как вводить исключения... :)


Название: Расширения на языке Lua в HandyCache
Отправлено: flash от 11 июня 2009, 15:09:37
DenZzz
Проблемка со скриптом eR_Block_external_links.lua... Не знаю только у меня так или нет, но происходит следующим образом: когда я смотрю какую-то страницу, на ней существуют ссылки на другие, не связанные с ней, если я клацаю по этой ссылке она открывается в новом окне и сразу же срабатывает блокировка ее R-ext. В опере стоит галка Отправлять данные о ссылающейся странице, может дело в этом? Хотя в мониторе хэндикэша таки ссылки отображаются как несвязанные с предыдущим сайтом, то есть в дереве идут отдельной строкой. Лечится это если на заблоканной странице по адресу нажать enter, тогда скрипт похоже адекватно воспринимает и  не блокирует, но както неудобно.На скрине видны 2 заблоканных адреса, и потом разрешенные после нажатия enter в адресной строке.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 11 июня 2009, 16:25:50
если я клацаю по этой ссылке она открывается в новом окне и сразу же срабатывает блокировка ее R-ext.

Да, этот так. Из HC нет возможности определить, кто иницировал запрос: пользователь или браузер.

Цитировать
В опере стоит галка Отправлять данные о ссылающейся странице, может дело в этом?

Если ее снимешь, то Опера вообще перестанет посылать рефереры и расширение работать не сможет вообще.

Цитировать
Хотя в мониторе хэндикэша таки ссылки отображаются как несвязанные с предыдущим сайтом, то есть в дереве идут отдельной строкой.

Это потому, что у этих ссылок появились зависимые, а посмотри в логе HC - реферер там есть.

Цитировать
Лечится это если на заблоканной странице по адресу нажать enter, тогда скрипт похоже адекватно воспринимает и  не блокирует

Да, в этом случае браузер считает, что адрес введен вручную пользователем и не шлет реферер.


В общем, фича известная и я о ней предупреждал, когда выкладывал первую версию этого скрипта. Жаль, что Опера не умеет по желанию пользователя слать нужные запросы без реферера. В Макстоне, например, это делается просто кликом средней кнопкой мыши по ссылке. В Опере ничего подобного я, к сожалению, не нашел. Если есть тут спецы по Опере подскажите, может ли она при клике мышью по ссылкам удалять реферер или хотя бы вставлять какой-нибудь свой заголовок-метку? Тогда я смогу в HC его обработать...

Как вариант, можно настроить горячую клавишу для "Черного списка" и в момент клика по ссылке ее зажимать, тогда расширение блокировать загрузку ссылки не станет.


Название: Расширения на языке Lua в HandyCache
Отправлено: flash от 11 июня 2009, 18:24:29
вот из лога с реферером, он подставляет тот сайт с которого клацнуто как реферер

11.06.09 13:43:06,937 # 143/1208 >>> URL: http://depositfiles.com/files/1076727
DeniedDo:
GET http://depositfiles.com/files/1076727 HTTP/1.1
User-Agent: Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0
Host: depositfiles.com
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://smallurl.ru/anonym/?http://depositfiles.com/files/1076727
Cookie: __utmz=10246176.1238524336.2.2.utmcsr=drivec.ru|utmccn=(referral)|utmcmd=referral|utmcct=/; __utma=10246176.777232328940154500.1236858154.1236858154.1238524336.2; v_auth=1244542453dc9e4cd9514cb696ff0815; autologin=c346ded259bf35d55bc86569fc40dd00
Cookie2: $Version=1
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 11 июня 2009, 18:32:15
вот из лога с реферером, он подставляет тот сайт с которого клацнуто как реферер

Да, поэтому расширение и срабатывает. Когда нет реферера, расширение не работает.


Название: Расширения на языке Lua в HandyCache
Отправлено: 4e4ako от 11 июня 2009, 19:36:29
В Макстоне, например, это делается просто кликом средней кнопкой мыши по ссылке. В Опере ничего подобного я, к сожалению, не нашел. Если есть тут спецы по Опере подскажите, может ли она при клике мышью по ссылкам удалять реферер или хотя бы вставлять какой-нибудь свой заголовок-метку? Тогда я смогу в HC его обработать...
ползовательские скрипты на яве могут все... - поищите на форуме проекта opera-ac


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 14 июня 2009, 17:31:52
Было бы здорово вообще не кешировать разные *.flv и иже с ними, но без расширения, а я не знаю, умеет уже НС анализировать хотя бы начало файла.

Можно анализировать "Content-Type" с сервера и запрещать писать файлы с типом "video" в кэш:

Код:
--[[ <HCExtension>
@name          Не сохранять видео по типу с сервера (A-vid Dont_save )
@author        DenZzz
@version       0.1 для HC v1.00 RC2 (1.0.0.180) и возможно выше
@description   Не сохранять видео по типу файла в заголовке ответа сервера
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]


function GetContentType(s)
  _,_,x = string.find(s, '[cC]ontent%-[tT]ype: *([^;\r\n]+)')
  if x~=nil then x = string.lower(x) end
  return x
end


function Answer()

 -- Только для GET-запросов
  if hc.method == 'GET' then

   -- забираем тип файла из заголовка 'Content-Type'
    type = GetContentType(hc.answer_header)
   -- есть ли в поле заголовка 'Content-Type' слово 'video'
    if type~=nil then vid = string.find(type,'video',1,true)
    else vid = nil  end

      if vid~=nil then
            hc.action = 'dont_save'
            hc.monitor_string = hc.monitor_string..'A-vid Dont_save '
      end
  end

end  -- Конец функции Answer




Название: Расширения на языке Lua в HandyCache
Отправлено: Wonderboy от 14 июня 2009, 17:35:55
DenZzz , большое спасибо! Предлагаю это расширение включить в дефолтные списки


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 14 июня 2009, 17:49:05
Предлагаю это расширение включить в дефолтные списки

Это расширение совсем не способствует экономии трафика, а в дефолтном списке расширений у меня как раз есть противоположное: "Не обновлять видео по типу с сервера (A-vid)". ;)


Название: Расширения на языке Lua в HandyCache
Отправлено: Wonderboy от 15 июня 2009, 08:18:56
DenZzz
Зато это расширение весьма способствует не превращению кеша в мусорною корзину. Есть много обладателей безлимиток и тем не менее пользователей НС. Если я на YouTube и иже с ними видео смотрю только для ознакомления - зачем мне его пихать в кеш? Хотя вам решать.


Название: Расширения на языке Lua в HandyCache
Отправлено: Zelen от 16 июня 2009, 23:02:00
Программу не удалось найти, а скрипт получился таким:
---
function GetContentLength(s)
  _,_,x= string.find(s, "[cC]ontent%-[lL]ength: (%d*)")
  if x==nil then return 0 else return tonumber(x) end
end

function main()
  x= GetContentLength(hc_header)
  if x>72 then os.execute([["d:\Program\HandyCache\lua\invmp3.exe d:\Program\HandyCache\lua\beep.mp3"]]) end
end
---
Все бы хорошо, но в момент срабатывания скрипта кратковременно появляется окошко cmd. Можно от этого как то избавиться? В мануалах ничего такого не нашел.  :help:

этот скрипт на новой версий работать будет? и нельзя ли сделать так что бы он срабатывал только на это правило в "Чёрном списке":
#4#~#True#~#adult|amateur|[^c]anal[^iy]|anus|babe[^l]|bitch|bondage|boob|clit|devk[iy]|dick|erohost|dildo|donne|eroti(c|k)|sperm|fuck|gay|intim|lesbian|nude|orgazm|orgy|porn|pussy|se(ks|x)[^=]|(c|s)ek(c|s)|slut|suck|tits|virgin|xxx#~##~#

кто нить из клиентов зайдёт на такой сайт и из колонок сразу сигнал , вот весело будет :)


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 17 июня 2009, 08:13:58
этот скрипт на новой версий работать будет?

Будет, если шапку добавишь и hc_header заменишь на hc.answer_header

Цитировать
и нельзя ли сделать так что бы он срабатывал только на это правило в "Чёрном списке":

Можно сделать, чтобы скрипт срабатывал вместо того правила, издавал звук и сам блокировал загрузку.
А если не проверять на сервере "Content-Length" (что разумно для блокируемых сайтов), то можно и просто звук издавать, а блокировать "Черным списком".


P.S. И вообще, неправильную тему ты выбрал для своего вопроса. Не место ему в разделе "Новых предложений". В "Общих вопросах" по скриптам есть своя тема.


Название: Расширения на языке Lua в HandyCache
Отправлено: Zelen от 17 июня 2009, 22:24:54
Будет, если шапку добавишь и hc_header заменишь на hc.answer_header
Можно сделать, чтобы скрипт срабатывал вместо того правила, издавал звук и сам блокировал загрузку.
А если не проверять на сервере "Content-Length" (что разумно для блокируемых сайтов), то можно и просто звук издавать, а блокировать "Черным списком".
о чёрт.... нифига не понял :) насчёт скриптов нечего не понимаю :) учить времени нет, работа ;)
ну ладно, может когда нибудь кто то сделает, скопирую :) спасибо.
P.S. И вообще, неправильную тему ты выбрал для своего вопроса. Не место ему в разделе "Новых предложений". В "Общих вопросах" по скриптам есть своя тема.
ну извиняи тогда. Я прочитал-процитировал, и спросил тут же.


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 17 июня 2009, 23:23:55
Zelen
Держи расширение
Код:
--[[ <HCExtension>
@name          block with sound
@author        mai62
@version       0.01
@description   Блокирует загрузку и выдает звуковой сигнал
@rule            sex
@event         RequestHeaderReceived/request
</HCExtension> ]]


function request()
  hc.action = "stop"
  hc.play_sound('Windows Critical Stop.wav')
  hc.monitor_string = hc.monitor_string.."block with sound "
end

Вместо Windows Critical Stop.wav напиши имя любого wav-файла (не забудь про кавычки) и положи его в папку НС.
В строке "@rule            sex" sex замени на правило из черного списка. Таких строк можно добавить сколько нужно.


Название: Расширения на языке Lua в HandyCache
Отправлено: Walder от 18 июня 2009, 08:08:55
Ребята извините но такой вопрос есть скрипт опять :))

--[[ <HCExtension>
@name          For_hc_user
@author        ___
@version       0.01
@description   Блокирует пользователя при переборе трафика
@event         RequestHeaderReceived/request
</HCExtension> ]]

!https://webim.qip.ru:5222
!https://login.icq.com:443

function request()

 if hc.user_name == 'ww' and hc.user_from_internet > 314527800 then
  hc.action = 'only_from_cache'
 end

 if hc.user_name == 'pecherer' and hc.user_from_internet > 209715200 then
  hc.action = 'only_from_cache'
 end

 if hc.user_name == 'taxist' and hc.user_from_internet > 209715200 then
  hc.action = 'only_from_cache'
 end
 
 if hc.user_name == 'puto' and hc.user_from_internet > 157286400 then
  hc.action = 'only_from_cache'
 end
end

Мне нужно чтоб он полностью блокировал пользователя после истичение трафика кроме исключение 2 сайта, подскажите как будет выглядеть скрипт ! Благодарю !


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 18 июня 2009, 08:37:39
Мне нужно чтоб он полностью блокировал пользователя после истичение трафика кроме исключение 2 сайта, подскажите как будет выглядеть скрипт ! Благодарю !

Исключения перенеси в шапку в поле @exception и замени действия на 'stop':

Код:
--[[ <HCExtension>
@name          For_hc_user
@author        ___
@version       0.01
@description   Блокирует пользователя при переборе трафика
@exception    webim\.qip\.ru:5222
@exception    login\.icq\.com:443
@event         RequestHeaderReceived/request
</HCExtension> ]]


function request()

 if hc.user_name == 'ww' and hc.user_from_internet > 30*1024*1024 then
  hc.action = 'stop'
 end

 if hc.user_name == 'pecherer' and hc.user_from_internet > 20*1024*1024 then
  hc.action = 'stop'
 end

 if hc.user_name == 'taxist' and hc.user_from_internet > 20*1024*1024 then
  hc.action = 'stop'
 end
 
 if hc.user_name == 'puto' and hc.user_from_internet > 15*1024*1024 then
  hc.action = 'stop'
 end

end


Название: Расширения на языке Lua в HandyCache
Отправлено: Walder от 18 июня 2009, 09:43:18
Спасибро !

 if hc.user_name == 'ww' and hc.user_from_internet > 30*1024*1024 then
  hc.action = 'stop'
 end

Не понял надо саму формулу пргописывать 30*1024*1024  или ты для вида показал ? У пользователя "ww"  300 mb  теперь пишем 300*1024*1024? = 314527800  или можно 314527800  оставить ?


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 18 июня 2009, 10:07:44
Не понял надо саму формулу пргописывать 30*1024*1024  или ты для вида показал ?

Для вида. Можешь писать 300*1024*1024 или 314527800 , как тебе удобнее.


Название: Расширения на языке Lua в HandyCache
Отправлено: Zelen от 18 июня 2009, 21:23:27
Zelen Держи расширение
большое спасибо :)


Название: Расширения на языке Lua в HandyCache
Отправлено: Walder от 19 июня 2009, 05:20:09
Благодарю все пашет :)


Название: Расширения на языке Lua в HandyCache
Отправлено: Zelen от 20 июня 2009, 19:44:44
Zelen
Держи расширение
Вместо Windows Critical Stop.wav напиши имя любого wav-файла (не забудь про кавычки) и положи его в папку НС.
В строке "@rule            sex" sex замени на правило из черного списка. Таких строк можно добавить сколько нужно.

какое исключение и как надо добавить в скрипт, чтобы вот такие url:
http://my.mail.ru/proxy-mrim-status?prostogirls@mail.ru,a.s.fox7@mail.ru,slavic_74@mail.ru,kadysheva-tatyan@mail.ru,vah_djandullaev@mail.ru,leprikon07@bk.ru,sangirl_87@mail.ru,goodies_88@mail.ru,txak_yulya@inbox.ru,zarinas89@mail.ru,kdyrbaev.kuanysh@mail.ru,aibechka@inbox.ru,u_rustam@bk.ru,akselerator@mail.ru,timon_vip@bk.ru,prorock010@mail.ru,kim_v_xxx_1985@mail.ru,wooferfunk_mik@inbox.ru,espanola@bk.ru,galim.gapparov@mail.ru,sitora555.87@mail.ru,princessdiana02@mail.ru,cuty86@mail.ru,sebeta@mail.ru
не "тилинкали"  :lol:, целый день "тиииннн!" из колонок звенит  :D
Или невозможно исключить? :)


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 20 июня 2009, 20:59:11
После строк, начинающихся с @rule добавь строку
@exception                             my\.mail\.ru
Если еще нужны будут исключения, добавляй еще строки.


Название: Расширения на языке Lua в HandyCache
Отправлено: Zelen от 20 июня 2009, 21:36:01
хорошо, спасибо :)


Название: Расширения на языке Lua в HandyCache
Отправлено: Fernand от 21 июня 2009, 06:44:21
Вопросик назрел по eR_Block_external_links.lua
Я добавил ru-board в исключения
Код:
if ref_host~='yandex' and ref_host~='google' and ref_host~='ru-board' then
с тем, чтобы картинки, запрашиваемые ru-board с других сайтов шли мимо скрипта, - каким образом сделать тоже самое с  translate.google.com, учитывая что отдаваемый перевод идет как, например,
http://74.125.77.132/translate_c?hl=ru&sl=auto&tl=ru&u=http://d-link.com/corporate/worldwideoffices/%3Fredirect%3D%252Fdefault.aspx&rurl=translate.google.com&usg=ALkJrhgzDDem4WCXEhNrwXXEnxhYtvowew
Естественно, что ресурсы сайта блокируются :(
Спасибо.
upd.
или нужно в @rule напихать адресов translate? Туплю что-то..


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 22 июня 2009, 07:57:48
каким образом сделать тоже самое с  translate.google.com, учитывая что отдаваемый перевод идет как, например,
http://74.125.77.132/translate_c...

А реферер был какой при переходе на эту страницу? Не translate.google.com?
Проверь монитор, возможно это Черный список срабатывает, а не скрипт.

Иначе приложи лог монитора и отладочный лог HC. Надо смотреть, что конкретно срабатывает и какие рефереры там были.


Название: Расширения на языке Lua в HandyCache
Отправлено: Fernand от 22 июня 2009, 14:40:36
Реферер в виде IP..
Ну вот сайт на который я ни разу не заходил (соответственно в кэше разве что реклама могла быть): http://miranda.com
(http://www.10pix.ru/img1/3315/129321.th.png) (http://www.10pix.ru/view/3315/129321/)
лог:


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 22 июня 2009, 18:29:32
Реферер в виде IP.

Понятно. И IP у серверов Гугла много.

Проще всего настроить горячую клавишу и зажимать ее при клике по ссылке с переводом, но можно и скрипт поправить. Например, так:

Замени в скрипте строки
   -- Если есть Referer, то
    if ref~=nil then   
на
   -- Если есть Referer и в нем нет '/translate_c', то
    if ref and not re.match(ref,[[/translate_c]]) then  



Название: Расширения на языке Lua в HandyCache
Отправлено: Sofos от 23 июня 2009, 12:08:33
В настройках вписан внешний прокси, получается опера-НС-внешний прокси. Хочу пустить через НС еще один браузер, только что бы он не использовал внешний прокси. Как это реализовать?


Название: Расширения на языке Lua в HandyCache
Отправлено: Fernand от 23 июня 2009, 12:39:10
DenZzz, спасибо - все работает.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 23 июня 2009, 12:54:18
В настройках вписан внешний прокси, получается опера-НС-внешний прокси. Хочу пустить через НС еще один браузер, только что бы он не использовал внешний прокси. Как это реализовать?

Только расширением. Текст расширения примерно такой:

Код:
--[[ <HCExtension>
@name          Разные внешние прокси для разных браузеров (R-Proxy)
@author        DenZzz
@version       0.1 для HC v1.00 RC2 (1.0.0.180) и возможно выше
@description   Переключает внешние прокси в зависимости от браузеров
@event         RequestHeaderReceived/Request
</HCExtension> ]]


function Request()

 if re.match(hc.request_header, [[User-Agent:[^\r\n]*Opera]]) then
  hc.use_proxy = '192.168.55.2:8080'
 end

 if re.match(hc.request_header, [[User-Agent:[^\r\n]*Firefox]]) then
  hc.use_proxy = '10.0.0.1:8080'
 end

end  -- Конец функции Request

Опера пойдет через один прокси, Firefox - через другой, а IE вообще пойдет мимо, если список внешних прокси отключен.


Название: Расширения на языке Lua в HandyCache
Отправлено: Fernand от 30 июня 2009, 23:02:01
Еще вопросик - указание в правилах белого списка галочки в первой колонке (ч.список) как отражается на работе расширения "блокирование внешних ссылок?
(http://www.10pix.ru/img1/1516/141940.th.png) (http://www.10pix.ru/view/1516/141940/)


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 01 июля 2009, 00:51:11
указание в правилах белого списка галочки в первой колонке (ч.список) как отражается на работе расширения "блокирование внешних ссылок?

Отменяет блокировку. На предыдущей странице я об этом писал.


Название: Расширения на языке Lua в HandyCache
Отправлено: 4e4ako от 02 июля 2009, 19:58:17
нужно расширение которое проверяет безусловные прокси (раз в n минут или если n-ое кол-во запросов подряд умерли по таймауту) и выбирает самый быстрый проксик по времени загрузки страницы n.
условие - запросы обрабатывать не в НС, а отдельно средствами скрипта или поключаемых bat-vbs скриптов, т.е. чтобы запросы шли не ч\з НС и не создавали помех, если он в данный момент работает нормально.

если кто располагает временем и возможностью - не откажите в любезности =)


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 02 июля 2009, 21:02:59
Такое lua по зубам. Можно использовать luasocket (http://luaforge.net/projects/luasocket/). Самому было бы интересно сделать такое, но времени совсем нет.


Название: Расширения на языке Lua в HandyCache
Отправлено: MAKeR от 05 июля 2009, 14:07:11
Подскажите пожалуйста что нужно прописать в eR_Block_external_links, чтобы не блокировались картинки с http://distrib.khv.data.cod.ru/ ?
Заранее спасибо.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 05 июля 2009, 14:45:18
Подскажите пожалуйста что нужно прописать в eR_Block_external_links, чтобы не блокировались картинки с http://distrib.khv.data.cod.ru/ ?

Добавь в шапку скрипта строку:

Код:
@exception     http://distrib\.khv\.data\.cod\.ru/


Название: Расширения на языке Lua в HandyCache
Отправлено: MAKeR от 05 июля 2009, 17:27:57
Добавь в шапку скрипта строку:
Код:
@exception     http://distrib\.khv\.data\.cod\.ru/
Не помогло, продолжает блокировать. Вот этот сайт http://khvload.net.ru/ , все картинки на нём берутся с http://distrib.khv.data.cod.ru/ . Подскажите еще.


Название: Расширения на языке Lua в HandyCache
Отправлено: Fernand от 05 июля 2009, 18:10:36
Подскажите пожалуйста, почему при включенном "игнорировать no-cache и no-store" заново загружаются отмеченные файлы? Файлы, соответственно, есть в кэше, контрольные суммы совпадают с конрольками загружаемых.. И расширение бездействует ("Не обновлять по размеру"). :(
(http://www.10pix.ru/img1/1565/147217.th.png) (http://www.10pix.ru/view/1565/147217/)
Правило "белого" списка относится к "не преобразовывать url".


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 05 июля 2009, 20:52:45
Не помогло, продолжает блокировать. Вот этот сайт http://khvload.net.ru/ , все картинки на нём берутся с http://distrib.khv.data.cod.ru/ . Подскажите еще.

Я проверял, помагает! Кнопку "Перечитать расширение" нажать не забыл? Или перезагрузи HC. Если не поможет, покажи шапку своего скрипта.
 


Название: Расширения на языке Lua в HandyCache
Отправлено: MAKeR от 05 июля 2009, 21:14:45
Я проверял, помагает! Кнопку "Перечитать расширение" нажать не забыл? Или перезагрузи HC. Если не поможет, покажи шапку своего скрипта.
 
Как раз про неё и забыл!)))
Спс огромное1


Название: Расширения на языке Lua в HandyCache
Отправлено: oit от 17 июля 2009, 11:19:29
Подскажите пожалуйста, можно ли при помощи скриптов сделать, чтобы пользователь мог смотреть сколько он скушал трафика с начала месяца? (или если есть такое не в скриптах, подскажите где).


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 17 июля 2009, 11:36:48
Посмотри это http://handycache.ru/component/option,com_smf/Itemid,10/topic,1709.msg19397/#msg19397


Название: Расширения на языке Lua в HandyCache
Отправлено: Walder от 21 июля 2009, 05:40:06
Извините такой вопрос !

5 пользователей у всех IE 7,8  каждый мес нам дают 1 гигабайт трафика, который разделен на 5 человек, стоит разрешение, но почему то оно срабатывает тока один раз, а потом отказывает блокировать, мож че не правильно делаю - в начале мес приходит один гиг, я чищу статистику, отрубаю скрипт, перезагружаю HC. И допустим одному  выделено 250 мб  разрешение не блокирует после перебора трафика ! Не подскажите что делать ?


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 21 июля 2009, 11:16:38
стоит разрешение, но почему то оно срабатывает тока один раз, а потом отказывает блокировать, мож че не правильно делаю

Покажи код своего расширения.

Цитировать
в начале мес приходит один гиг, я чищу статистику, отрубаю скрипт, перезагружаю HC. И допустим одному  выделено 250 мб  разрешение не блокирует после перебора трафика ! Не подскажите что делать ?

HC сообщает расширению объем дневного трафика, поэтому ограничение надо выставлять не на месяц, а на день.

Либо сохранять объем дневного трафика в файл и потом читать оттуда, либо анализировать stat.txt. Все это под силу сделать из расширения.

Либо попробуй уже готовую программу AnaServ: http://handycache.ru/component/option,com_smf/Itemid,10/topic,1709.20/


Название: Расширения на языке Lua в HandyCache
Отправлено: Wonderboy от 22 июля 2009, 17:39:41
mai62, в новой версии появилась новая фича:

  • Добавлено расширение Content Master;

Нельзя ли рассказать о ней подробнее?


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 22 июля 2009, 18:40:45
Wonderboy

Начал описывать здесь: "Content Master - расширение HC для очистки страниц от рекламы" (http://handycache.ru/component/option,com_smf/Itemid,10/topic,2453.0/).
Постепенно будем дополнять...


Название: Расширения на языке Lua в HandyCache
Отправлено: Wonderboy от 22 июля 2009, 18:43:51
DenZzz
Спасибо, будем ждать :)


Название: Расширения на языке Lua в HandyCache
Отправлено: Walder от 23 июля 2009, 05:42:57
Спасибо ! я пользуюсь обычным разрешением -

--[[ <HCExtension>
@name         Блокирует пользователя при переборе трафика
@author        ___
@version       0.01
@description  Блокирует пользователя при переборе трафика
@exception    webim\.qip\.ru:5222
@exception    login\.icq\.com:443
@event        RequestHeaderReceived/request
</HCExtension> ]]


function request()

 if hc.user_name == 'ww' and hc.user_from_internet > 30*1024*1024 then
  hc.action = 'stop'
 end

 if hc.user_name == 'pecherer' and hc.user_from_internet > 20*1024*1024 then
  hc.action = 'stop'
 end

 if hc.user_name == 'taxist' and hc.user_from_internet > 20*1024*1024 then
  hc.action = 'stop'
 end
 
 if hc.user_name == 'puto' and hc.user_from_internet > 15*1024*1024 then
  hc.action = 'stop'
 end

end

Сервер работает круглосуточно :)  А как будет выглядеть, чтоб на мес им поставить ? - за прогу спасибо но она пока тоже разделяет на день !


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 23 июля 2009, 11:11:18
А как будет выглядеть, чтоб на мес им поставить ? - за прогу спасибо но она пока тоже разделяет на день !

Автор AnaServ в следующей версии обещал сделать ограничение трафика на месяц. Так что ждите...

P.S. В расширении все это сделать при желании тоже можно, но понадобится много строк кода и управление будет выглядеть не так красиво...


Название: Расширения на языке Lua в HandyCache
Отправлено: Oleg от 30 июля 2009, 18:29:03
 Расширение "Block external" эффективнее (уменьшается количество ложных срабатываний) при

if ref_host~=nil and url_host~=nil and ref_host~='webwarper' then

и

-- Если домены в Referer и URL не совпадают, то запрещаем загрузку
if ref_host~=url_host and not re.find(hc.url, [[^(https?|ftp)://((www\.)?webwarper\.net/(ww|ru)/(~s/|(~s)?~av/|~fz/)?)?((?#domain)[-a-zA-Z0-9.]+)((?#file)/[-\w+&@#/%=~|!:,.;]*)?$]]) then


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 30 июля 2009, 23:54:19
 Расширение "Block external" эффективнее (уменьшается количество ложных срабатываний) при
if ref_host~=nil and url_host~=nil and ref_host~='webwarper' then

Webwarper из URL отбрасывается у меня в функции GetHost(s) при выделении домена и сравнение потом производится по "реальным" доменам, поэтому в твоих дополнениях нет необходимости!

А то, что ты предлагаешь, не увеличит эффективность расширения, а уменьшит ее, так как позволит внешним баннерам спокойно грузиться на страницах, сжатых WebWarper-ом.


Название: Расширения на языке Lua в HandyCache
Отправлено: hc_user от 03 августа 2009, 15:22:07
помогите с расширением... нужно для одного конкретного пользователя один конкретный сайт пустить через внешний прокси


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 04 августа 2009, 07:19:24
нужно для одного конкретного пользователя один конкретный сайт пустить через внешний прокси

Код:
--[[ <HCExtension>
@name          Внешний прокси в зависимости от пользователя и сайта (R-Proxy)
@author        DenZzz
@version       0.1 для HC v1.00 RC2 (1.0.0.193) и возможно выше
@description   Включает внешний прокси в зависимости от пользователя и сайта
@event         BeforeRequestHeaderSend/Request
</HCExtension> ]]

function Request()
 if hc.user_name == 'Vasay' and re.match(hc.url, [[site\.ru]]) then
  hc.use_proxy = '192.168.55.2:8080'
 end
end


Название: Расширения на языке Lua в HandyCache
Отправлено: hc_user от 04 августа 2009, 10:16:44
DenZzz, спасибо


Название: Расширения на языке Lua в HandyCache
Отправлено: zed от 05 августа 2009, 18:49:35
Подскажите, в LUA есть функции для работы с Base64 (кодирование/декодирование)?


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 05 августа 2009, 19:00:29
Набрал в гугле "lua Base64". Ссылки есть, например, эта http://lua-users.org/wiki/BaseSixtyFour


Название: Расширения на языке Lua в HandyCache
Отправлено: zed от 05 августа 2009, 19:03:45
Ага, я просто подумал, что может уже есть встроенная.


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 14 августа 2009, 01:10:46
При бесплатном скачивании практически со всех файлообменников приходится ждать несколько десятков секунд пока появится ссылка. Ссылка на самом деле уже находится в теле полученной страницы, но выводится на экран через заданное количество секунд с помощью js-скрипта. Может быть кто-нибудь возьмется написать расширение для отключения ожидания появления ссылки.


Название: Расширения на языке Lua в HandyCache
Отправлено: Enver от 14 сентября 2009, 14:58:02
Если подключаю такой фильтр в серверах посредниках то получаю "400 Bad Request", а в опере пишет "DNS error, can't resolve: lua"
подскажите пожалуйста что делать



Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 14 сентября 2009, 15:10:03
Enver

Скрипты старого формата не работают в последних версиях HC. Переделай свой скрипт в расширение (добавь шапку и поправь имена переменных) и вставь в список расширений. Примеры смотри выше и читай файл HCExtensions.html из комплекта HC.


Название: Расширения на языке Lua в HandyCache
Отправлено: flash от 14 сентября 2009, 15:12:54
При бесплатном скачивании практически со всех файлообменников приходится ждать несколько десятков секунд пока появится ссылка. Ссылка на самом деле уже находится в теле полученной страницы, но выводится на экран через заданное количество секунд с помощью js-скрипта. Может быть кто-нибудь возьмется написать расширение для отключения ожидания появления ссылки.
я пользуюсь оперой и для нее есть какраз такие скрипты java если кто возьмется есть скрипты где это реализуется для разных файлообменников, могу скинуть рабочие версии


Название: Расширения на языке Lua в HandyCache
Отправлено: Tessey от 15 сентября 2009, 08:57:01
Код:
--[[ <HCExtension>
@name          block
@author        alex208210
@version       0.01
@description   Блокировка определенных url определенным пользователям
@event         RequestHeaderReceived/block
</HCExtension> ]]

function FindUrl(s)
  x,_ = string.find(hc.url, s)
  return x
end

function block()
 if (hc.user_name == "Alex" or hc.user_name == "user") and
   FindUrl("sex%.ru") or
   FindUrl("mail%.ru") then
  hc.action = "stop"
 end

end


Почему-то в последней версии HC блокируется доступ всем пользователям, независимо от указанных в поле if (hc.user_name == "Alex" or hc.user_name == "user"...)

Может можно как-то переделать?

И еще вопрос: можно ли указывать в поле только часть наименования сайта, например ("mob"), чтобы блокировались mobile, mobile-review и т.п.?


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 15 сентября 2009, 11:15:18
Почему-то в последней версии HC блокируется доступ всем пользователям, независимо от указанных в поле if (hc.user_name == "Alex" or hc.user_name == "user"...)

В последней версии не было изменений, способных помешать работе твоего скрипта.

При таком написании mail.ru будет блокироваться для всех пользователей, sex.ru - только для указанных. Если тебе и mail.ru надо блокировать по пользователям, то заключи стоки с FindUrl в скобки.

Цитировать
И еще вопрос: можно ли указывать в поле только часть наименования сайта, например ("mob"), чтобы блокировались mobile, mobile-review и т.п.?

Можно.


Название: Расширения на языке Lua в HandyCache
Отправлено: Tessey от 15 сентября 2009, 13:57:53
Если тебе и mail.ru надо блокировать по пользователям, то заключи стоки с FindUrl в скобки.
Действительно, теперь все работает.
Большое спасибо


Название: Расширения на языке Lua в HandyCache
Отправлено: saitdjara от 17 сентября 2009, 16:33:33
Здравствуйте!

А можете помочь?


http://otvet.mail.ru/question/29589818/


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 17 сентября 2009, 19:09:45
Сейчас появилась возможность с помощью расширения сделать так, чтобы на выбранных сайтах НС не удалял старую страницу при закачке новой, а переименовывал ее. Тогда в кэше останется архив старых страниц.


Название: Расширения на языке Lua в HandyCache
Отправлено: igorek от 18 сентября 2009, 21:55:36
Мой код:
Код:
--[[ <HCExtension>
@name          Proxy (R-prx)
@author        igorek
@version       0.1
@description   Dinamic Proxy
@rule          test1.ru
@event         BeforeRequestHeaderSend/Request
</HCExtension> ]]

function Request()
      hc.put_to_log('Proxy='..hc.use_proxy) -- почему пустая строка,хотя включена прокси через toonel в безусловных прокси
      hc.use_proxy='localhost:80' --Server Apache
      if hc.offline_on then
         -- hc.execute_cmd('LoadURL') Не срабатывает
        hc.execute_cmd('OffLine off') -- тоже не срабатывает
     end
      hc.action='dont_save'     
      hc.monitor_string = hc.monitor_string..'R-Prx'
      end
end  -- Конец функции Request

Добавлено: 18 Сентября 2009, 21:13:58

Добавил в скрипт eA_Block_long_file_Ex.lua событие Options.
Правило и исключение пока заглушка. Для них уже есть @rule&@exception
На собственное авторство не претендую,всего лишь немного копи-пэйст из скрипта eCacheCleaner.lua
Теперь,мне кажется, окошко Настройки->Управление загрузкой->Не загружать большие файлы можно убрать
Расширение -это сила,мощь и минимализм!


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 19 сентября 2009, 03:03:14
Цитировать
hc.put_to_log('Proxy='..hc.use_proxy) -- почему пустая строка,хотя включена прокси через toonel в безусловных прокси
hc.use_proxy хранит значение, присвоенное расширением, то, что в настройках внешнего прокси сюда не попадает.
Цитировать
hc.execute_cmd('LoadURL') Не срабатывает
Эту команду надо применять, например, так
hc.execute_cmd('LoadURL http://mail.ru')
По этой команде указанный URL загрузится в кэш. Проверил, работает.
Цитировать
hc.execute_cmd('OffLine off') -- тоже не срабатывает
Проверил, у меня работает.


Название: Расширения на языке Lua в HandyCache
Отправлено: igorek от 19 сентября 2009, 21:28:15
Идея такая:Некоторые сайты пустить на локальный проскси-сервер,даже если ХэндиКэш в оффлайне
Тест 1
HC - Автономный режим=True
Код:
  hc.use_proxy='localhost:80' --Server Apache
  if hc.offline_on then
    hc.execute_cmd('OffLine off') --эффекта нет
    --hc.execute_cmd('OffLine off') -эффекта нет
    hc.execute_cmd('LoadURL'..hc.url)  
  end
 
Не пускает,в Мониторе в поле Правило -Offline
Автономный режим не переключается в False

Тест 2
HC - Автономный режим=False
Код:
  hc.use_proxy='localhost:80' --Server Apache
  if not hc.offline_on then    
    hc.execute_cmd('LoadURL'..hc.url)
    hc.execute_cmd('OffLine on') --переключается
    --hc.execute_cmd('OffLine switch') --переключается
  end
После загрузки hc.url с веб-апачи Автономный режим переключается в True

Test 3
Переключаемcя Offline в Off/On
Код:
  if not hc.offline_on then 
   hc.execute_cmd('OffLine switch') -- OffLine on
  else
    if hc.offline_on then
      hc.execute_cmd('OffLine switch') --Offline off
    end
  end
Итог: в Автономный режим переходит,обратно не хочет
Тут проще было одной командой hc.execute_cmd('OffLine switch') вместо этой кучи кода

В Опере есть кнопка с командой   
 Item, "HC: Offline On/Off" = Execute program, "D:\Internet\HandyCache\HCie\HCCmd.exe", "Offline switch"
Работает нормально


Название: Расширения на языке Lua в HandyCache
Отправлено: igorek от 19 сентября 2009, 22:48:41
Решил частично. Автономный режим переключается в событие RequestHeaderReceived
Код:
--[[ <HCExtension>
@name          Proxy (R-prx)
@author        igorek
@version       0.1
@description   Dinamic Proxy
@rule          test1.ru
@event         RequestHeaderReceived/Online
@event         BeforeRequestHeaderSend/Request
</HCExtension> ]]

function Online()
if hc.offline_on then hc.execute_cmd('OffLine Off')  end
end

function Request()
  hc.use_proxy='localhost:80' --Server Apache
-- hc.execute_cmd('LoadURL '..hc.url) --вылетает в цикл
  hc.action='dont_save'     
  hc.monitor_string = hc.monitor_string..'R-Prx'

end  -- Конец функции Request
Но загрузки страницы нет


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 20 сентября 2009, 13:08:25
Цитировать
-- hc.execute_cmd('LoadURL '..hc.url) --вылетает в цикл
Команда LoadURL вызывает появление нового запроса. Для него тоже вызывается твое расширение, снова комнда LoadURL... Поэтому и циклится.
Цитировать
hc.action='dont_save'
Из-за этого файл не будет писаться в кэш.
Цитировать
Но загрузки страницы нет
Попробуй написать hc.use_proxy='127.0.0.1:80'


Название: Расширения на языке Lua в HandyCache
Отправлено: igorek от 23 сентября 2009, 19:59:09
Небольшой скриптик,выводящий значение таблицы HC в файл.Полезен кодерам.
Есть вопрос автору HC.
Не выводятся некоторые значение,например hc.event. Пустые значения.
Kак получить POST-данные от клиента?
Если присвоить hc.use_proxy='' -- игнорируется пустое значение
Хотел для Опера Турбо не использовать прокси toonel



Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 23 сентября 2009, 21:41:45
Цитировать
Не выводятся некоторые значение,например hc.event. Пустые значения.
Спасибо, исправлю.
Цитировать
Kак получить POST-данные от клиента?
Никак.
Цитировать
Если присвоить hc.use_proxy='' -- игнорируется пустое значение
Хотел для Опера Турбо не использовать прокси toonel
Присвой значение 'direct'. Забыл написать об этом в описании.


Название: Расширения на языке Lua в HandyCache
Отправлено: VoyagerEternal от 27 сентября 2009, 06:19:27
как сделать поиск файла в кеше lua-скриптом?

задача такая:
загружаю видео отсюда http://www.youtube.com/watch?v=BEDvAGq2dEA
URL которого регулярно меняется:
Код:
http://v5.lscache7.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits
2Citag%2Cburst%2Cfactor&fexp=903204&itag=34&ipbits=0&signature=A8892B8F8616DDBD5028BDB0C0CA61871E69EC94.9C30AE82B8CFE9DDF6FEB54407FF1F968D85E986&sver=3&expire=1254042000&key=yt1&factor=1.25&burst=40&id=0440ef006ab67440

получается так что одинаковые файлы находятся в кеше в одной папке с разными именами
X:\InetCache\v5.lscache7.c.youtube.com\videoplayback^\37B928A9 
X:\InetCache\v5.lscache7.c.youtube.com\videoplayback^\8D4BC131 
X:\InetCache\v5.lscache7.c.youtube.com\videoplayback^\5F3AB822 

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

и ещё почему страница в 20 кбайт (http://www.youtube.com/watch?v=BEDvAGq2dEA) так долго грузится - минуты 2-3?
Добавлено: 27 Сентября 2009, 06:09:37

Как произвести поиск и замену подстроки в загружаемом файле?


Название: Расширения на языке Lua в HandyCache
Отправлено: VoyagerEternal от 27 сентября 2009, 08:25:57
Просмотр заблокированного содержимого одним кликом

Алгоритм: получаю URL блокированного содержимого, дописываю к нему '_ShowSpam_' и открываю его в новом окне. Настраиваю HandyCache на распознание URL с подстрокой '_ShowSpam_' и безпрепятственную загрузку.

В настройках черного списка указать html файл который будет заменять блокированное содержимое. Такого содержания:

<html>
<script type="text/javascript">
   function ShowSpam() {
       var s = document.URL;
         W = window.screen.availWidth;
         H = window.screen.availHeight;
         w = 400; h = 400;
      dx = -window.screenLeft; dy = -window.screenTop;
      window.open(s+'_ShowSpam_', 'newwin', 'top='+((H-h)/2+dy)+', left='+((W-w)/2+dx)+', menubar=1, toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, width='+w+', height='+h);   };
</script>
<body bgcolor=# topmargin=0 leftmargin=0 bottommargin=0 rightmargin=0>
<font color=#FFFF>
<a href='javascript: ShowSpam()'><img width=100% height=100% src="file://localhost/FreeInet/TurboGrabberPro/ok_/image/ozv/sea/CIM_.JPG" alt="РЕКЛАМА"></a>
</img>
</font>
</body>
</html>

В белый список нужно добавить строку _ShowSpam_ и поставить на ней галку 'черный список'
В переадресацию добавить ту же строчку и поставить галку только на 'заменить'

Это позволит кликом по заблокированной области загрузить содержимое в новом окне


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 27 сентября 2009, 10:54:03
Цитировать
задача такая:
загружаю видео отсюда http://www.youtube.com/watch?v=BEDvAGq2dEA
URL которого регулярно меняется
...
получается так что одинаковые файлы находятся в кеше в одной папке с разными именами

Эта проблема решается простым правилом в списке "Преобразование URL":

#5#~#True#~#^[^/]*(youtube\.com/videoplayback\?).*&(id=[^&]+).*#~#\1\2#~#False#~#True

Писать расширение тебе не нужно...


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 27 сентября 2009, 19:53:36
и ещё почему страница в 20 кбайт (http://www.youtube.com/watch?v=BEDvAGq2dEA) так долго грузится - минуты 2-3?

У меня быстро грузится, за пару секунд.

В переадресацию добавить ту же строчку и поставить галку только на 'заменить'

Без галки на "Обязательный" правило будет работать только вместе с предыдущим "Обязательным".

Цитировать
В белый список нужно добавить строку _ShowSpam_ и поставить на ней галку 'черный список'

После переадресации окончания _ShowSpam_ уже не будет и HC опять заблокирует эту загрузку.

Цитировать
Это позволит кликом по заблокированной области загрузить содержимое в новом окне

Ты сам-то тестировал свой алгоритм? Неужели работает с таким количеством недочетов?


P.S. Лично я предпочитаю грузить заблокированное не в новом окне, а в текущем на его законном месте через контекстное меню "Показать изображение", зажав горячую клавишу для временного отключения Черного списка.


Название: Расширения на языке Lua в HandyCache
Отправлено: VoyagerEternal от 28 сентября 2009, 05:49:36
Цитата: DenZzz
Ты сам-то тестировал свой алгоритм? Неужели работает с таким количеством недочетов?
У меня работает. Черный список блокировал после переадресации, пока галку на 'черный список' не поставил в белом списке.

Цитата: DenZzz
P.S. Лично я предпочитаю грузить заблокированное не в новом окне, а в текущем на его законном месте через контекстное меню "Показать изображение", зажав горячую клавишу для временного отключения Черного списка.

HandyCache стоит на другом компе, а на сервак горячую клавишу не пошлешь, и другим юзерам мешать не хочется, приходится вот так управлять.

Цитата: DenZzz
Проблема с загрузкой видео с youtube решается простым правилом в списке "Преобразование URL":
#5#~#True#~#^[^/]*(youtube\.com/videoplayback\?).*&(id=[^&]+).*#~#\1\2#~#False#~#True

но ведь есть мого других сайтов у которых ссылки динамические, это не только видео, для каждого чтоли правило сочинять, предлагаю написать расширение для всех.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 28 сентября 2009, 11:13:16
У меня работает. Черный список блокировал после переадресации, пока галку на 'черный список' не поставил в белом списке.

Т.е. после переадресации окончание _ShowSpam_ уже удалено, а правило _ShowSpam_ в "Белом списке" все срабатывает на уже измененный URL без этого окончания?
Это противоречит логике работы списков HC. Лог монитора покажи.

Цитировать
но ведь есть мого других сайтов у которых ссылки динамические, это не только видео, для каждого чтоли правило сочинять, предлагаю написать расширение для всех.

В Lua нет штатной функции для поиска и формирования списка всех файлов в папке. Возможно, для этого есть сторонние готовые модули для Lua. Надо поискать...

А без списка "Преобразование URL" в ряде случаев все равно не обойтись, т.к. меняться могут не только параметры в конце URL, но и домены в начале. Поиск в огромном кэше среди тысяч папок съест не мало времени и ресурсов...


Название: Расширения на языке Lua в HandyCache
Отправлено: Jarikk от 28 сентября 2009, 11:19:57
Можно ли написать расширение для сохранения логов монитора в папке Logs скажем только за последние 10 дней? А то она разрастается и иногда забываешь совсем про нее. Отключать не хочется ведение логов, иногда надо просмотреть.
И еще, часто бывает нужно по gprs сидеть, использую toonel для этого дела. Вот допустим по-умолчанию НС работает через toonel и если в ответе с сервера видно, что используется gzip отключать toonel и идти напрямую для этой страницы. Просто заметил при пережатии тонелем во второй раз размер получается страницы больше да и без него страница будет быстрей загружаться. Возможно ли такое сделать и как это будет работать при одновременной загрузки страницы с gzip и без?


Название: Расширения на языке Lua в HandyCache
Отправлено: VoyagerEternal от 28 сентября 2009, 12:15:57
Т.е. после переадресации окончание _ShowSpam_ уже удалено, а правило _ShowSpam_ в "Белом списке" все срабатывает на уже измененный URL без этого окончания?
Это противоречит логике работы списков HC. Лог монитора покажи.

Правда не работает, ошибся. Тогда придется обойтись без преобразования, просто дописывать в конец URL '?ShowSpam'. А в преобразовании URL его удалять (самое первое правило сделать)


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 28 сентября 2009, 14:33:33
Можно ли написать расширение для сохранения логов монитора в папке Logs скажем только за последние 10 дней?

Тут опять нужна функция для поиска файлов в папке, которой пока нет.

Цитировать
И еще, часто бывает нужно по gprs сидеть, использую toonel для этого дела. Вот допустим по-умолчанию НС работает через toonel и если в ответе с сервера видно, что используется gzip отключать toonel и идти напрямую для этой страницы.

Если Toonel не правит исходные заголовки ответов сервера и оставляет там упоминание о GZIP, то это возможно сделать. Только напрямую надо идти не для всех элементов на этой странице. Картинки, наверно, все равно через Toonel все должны идти? Иначе они не будут сжиматься...

Цитировать
Возможно ли такое сделать и как это будет работать при одновременной загрузки страницы с gzip и без?

Без проблем. Расширение задает прокси для каждого конкретного запроса, поэтому можно даже одновременно грузить две одинаковые страницы через прокси и напрямую.



Правда не работает, ошибся. Тогда придется обойтись без преобразования, просто дописывать в конец URL '?ShowSpam'. А в преобразовании URL его удалять (самое первое правило сделать)

И такой дописанный URL отправлять на сервер в инете? Подозреваю, что некоторые сервера не примут такой URL и ответят "404 Not Found".

Вообще, все это можно реализовать в расширении. Прямо там можно отключать "Черный список" для специально помеченных URL, править заголовки запроса перед отправкой в инет и преобразовывать URL для записи в кэш.


Название: Расширения на языке Lua в HandyCache
Отправлено: Jarikk от 30 сентября 2009, 10:11:05
Тут опять нужна функция для поиска файлов в папке, которой пока нет.
Ясно, ну тогда подождем когда появиться :) Или может проще mai62 уговорить, чтобы опцию соответствующую добавил в настройках

Цитировать
Если Toonel не правит исходные заголовки ответов сервера и оставляет там упоминание о GZIP, то это возможно сделать.
Эмм.. тогда наверное имеет смысл по-умолчанию проверять заголовки ответа напрямую, минуя тонель, т.е. по дефолту будет соеднение без прокси. и если в заголовке нету gzip, то пускать соединение через тонель?

Цитировать
Только напрямую надо идти не для всех элементов на этой странице. Картинки, наверно, все равно через Toonel все должны идти?
ну в принципе да, пусть бы картинки через тонель шли, хотя по gprs-у я картинки стараюсь вообще не загружать.

Цитировать
Без проблем.
Вот только я буду разбираться с этим долго да и не факт что напишу грамотно, подсобишь? :)

ПС. И еще маленький вопросик, как вставить в скрипт задержку, скажем в 5с? Просто в своем расширении хотелось бы вместо команды os.execute() для запуска батника и с появление командного окна использовать команду hc.shell_execute(.. 'SW_HIDE') без появления командного окна и продолжения через 5с, когда примерно батник выполниться.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 30 сентября 2009, 12:03:39
Цитировать
Тут опять нужна функция для поиска файлов в папке, которой пока нет.
Ясно, ну тогда подождем когда появиться. Или может проще mai62 уговорить, чтобы опцию соответствующую добавил в настройках

mai62 подсказал, что уже есть готовые DLL с такой функциональностью.
Например, вот эта: http://www.keplerproject.org/luafilesystem/

Цитировать
Эмм.. тогда наверное имеет смысл по-умолчанию проверять заголовки ответа напрямую, минуя тонель, т.е. по дефолту будет соеднение без прокси. и если в заголовке нету gzip, то пускать соединение через тонель?

Можно и так. Тогда первый запрос на сервер пойдет напрямую, а последующие в текущей сессии HC - через Toonel. При желании можно даже в файл сохранять список сайтов для сжатия, только он разрастется и замусорится быстро...

Цитировать
Вот только я буду разбираться с этим долго да и не факт что напишу грамотно, подсобишь?

Подсоблю в меру возможности. Грамотное написание расширения требует времени, которое не всегда есть в наличии. Тут важно, чтобы было желание с твоей стороны...

Цитировать
ПС. И еще маленький вопросик, как вставить в скрипт задержку, скажем в 5с? Просто в своем расширении хотелось бы вместо команды os.execute() для запуска батника и с появление командного окна использовать команду hc.shell_execute(.. 'SW_HIDE') без появления командного окна и продолжения через 5с, когда примерно батник выполниться.

Попробуй через событие Timer1s. Фиксируй системное время на старте hc.shell_execute(.. 'SW_HIDE') и через 5 срабатываний Timer1s запускай продолжение.

Видел в сторонней DLL более изящное решение через функцию sleep(int_msec), но мне страшно рекомендовать ту DLL, т.к. в ней 32 из 41 антивируса разглядели BackDoor.
Возможно, подобные функции есть и в других сторонних DLL. Надо искать...


Название: Расширения на языке Lua в HandyCache
Отправлено: igorek от 15 октября 2009, 20:44:39
Каким способом можно узнать хост и порт,куда уйдет запрос в событии BeforeRequestHeaderSend? Переменная hc.use_proxy -пустая строка,какие еще есть способы?


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 15 октября 2009, 21:10:39
А зачем это нужно узнавать? Уйдет в соответствии с настройками. Если ты знаешь куда оно должно уйти, то впиши это в hc.use_proxy.
Перед вызовом обработчика BeforeRequestHeaderSend НС и сам еще не знает куда пойдет запрос. Он выясняет это после работы обработчика BeforeRequestHeaderSend потому, что результат до и после обработчика может быть разным.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 15 октября 2009, 21:22:25
Переменная hc.use_proxy -пустая строка,какие еще есть способы?

Только самостоятельный парсинг файлов списков proxy.lst и condproxy.lst.
Да и вообще, можно перенести все выборы прокси в расширение, а списки эти отключить...


Название: Расширения на языке Lua в HandyCache
Отправлено: igorek от 15 октября 2009, 22:26:27
Дело в том что нужно анализировать ответ accept-encoding.Если запросы уходит через toonel,то вести лог,если через fastun,то не вести.Я уже нашел решение:анализ по ключевым словам в их ответе


Название: Расширения на языке Lua в HandyCache
Отправлено: igorek от 19 октября 2009, 21:16:02
Обращаюсь к гуру ХК.Какие еще преобразования в имени файла требуется в этом фрагменте кода
Код:
--[[ <HCExtension>
@name          Transform File
@author        igorek
@version       0.1
@description   Преобразовать имена файлов(и переместить) в связи с обновлением списка Преобразование URL
@event         Init/init
@event         Options/options
</HCExtension> ]]
function CacheToURL(str)
  local url=str
  url=string.gsub(url,hc.cache_path, "");
  --url=string.gsub(url,[[\|.*]], ""); -- удаляем имя файла внутри архива gzip
  url=string.gsub(url,"#_", ""); -- удаляем #_ в конце
  url=string.gsub(url,"^\\", "?",1); -- ^\ -> ?
  url=string.gsub(url,"!", ":",1); -- ! -> :
  url=string.gsub(url,"\\", "/"); -- \ -> /
  url='http://'..url;
  return url
end


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 19 октября 2009, 21:53:48
Какие еще преобразования в имени файла требуется в этом фрагменте кода

Много всяких. Посмотри в теме: http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.0/ . Там есть исходники и сводная таблица.


Название: Расширения на языке Lua в HandyCache
Отправлено: Jarikk от 20 октября 2009, 09:20:06
mai62 подсказал, что уже есть готовые DLL с такой функциональностью.
Например, вот эта: http://www.keplerproject.org/luafilesystem/
...
Попробуй через событие Timer1s. Фиксируй системное время на старте hc.shell_execute(.. 'SW_HIDE') и через 5 срабатываний Timer1s запускай продолжение.
спасибо mai62 за добавленную функцию hc.sleep() ! хотел было уже взяться делать по таймеру


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 23 октября 2009, 17:40:57
ALL

Обсуждение расширения MoveRenameFile перенесено в отдельную тему: "MoveRenameFile - расширение HC для конвертирования кэша" (http://handycache.ru/component/option,com_smf/Itemid,10/topic,2608.0/).


Название: Расширения на языке Lua в HandyCache
Отправлено: mirny от 29 октября 2009, 19:36:47
Стоит задача написать расширение (http://handycache.ru/component/option,com_smf/Itemid,10/topic,2615.0/), которое на старте запустит скрипт на питоне, а потом станет отвечать этому скрипту на его вопросы типа:

скажи текущий путь к кэшу (основному, только для чтения);
вот тебе URL, скажи где в кэше лежит этот файл;
возможно какие-то еще...

В общем нужно общение между процессами.

Хочется понять как его можно организовать.


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 29 октября 2009, 20:57:17
Цитировать
В общем нужно общение между процессами.

Хочется понять как его можно организовать.
Процесс может отправлять на НС http-запросы специального вида, а расширение перехватывать эти специальные запросы и отвечать на них.


Название: Расширения на языке Lua в HandyCache
Отправлено: mirny от 29 октября 2009, 21:06:43
Да, это первым в голову пришло. Потом еще наткнулся на luasocket. Просто хотелось уточнить.
Спасибо.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 04 ноября 2009, 17:26:02
ALL

Выложена новая версия расширения "Блокировать внешние ссылки (R-ext)".
Теперь в отдельной теме: http://handycache.ru/component/option,com_smf/Itemid,10/topic,2636.0/



Название: Расширения на языке Lua в HandyCache
Отправлено: Walder от 11 ноября 2009, 08:34:27
--[[ <HCExtension>
@name          traffic
@author        alex208210
@version       0.01
@description   Запрет подсчета трафика определенных сайтов
@event         RequestHeaderReceived/tr
</HCExtension> ]]

function FindUrl(s)
  x,_ = string.find(hc.url, s)
  return x
end

function tr()
 if FindUrl("norilsk.stream-info\.ru") then hc.ignore_traffic='IкО' end
 if FindUrl("ya\.ru") then hc.ignore_traffic='IкО' end
end

Ребята чет не пойму, не пашет подсчет трафика на данные адреса  все равно :идет мож че не правильно ? в место IkO мож че подставить надо ? Спасибо !


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 11 ноября 2009, 09:16:39
Ребята чет не пойму, не пашет подсчет трафика на данные адреса  все равно :идет мож че не правильно ? в место IkO мож че подставить надо ? Спасибо !

Есть расширение IgnoreTraffic с графическим окном настроек:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,2621.0/



Название: Расширения на языке Lua в HandyCache
Отправлено: tangi от 08 декабря 2009, 19:40:02
Помогите с расширение.
Нужно что бы каждые 10мин(если можно, что бы самому менять значение), общая статистика сохранялась в файл с расширением .html (путь куда сохранять можно было менять в расширении самому).
В том же виде как и на вкладке статистики (дата, столбец users и ниже его статистика), там есть конечно кнопка “сохранить как”, но хотелось бы, что бы это автоматически делалось в нужную мне папку.
а то я не умею писать расширения, а очень нужно.

Заранее СПАСИБО!!!


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 08 декабря 2009, 20:05:16
tangi
Статистика каждые 5 минут сохраняется в файл stat.txt.


Название: Расширения на языке Lua в HandyCache
Отправлено: tangi от 08 декабря 2009, 20:30:20
tangi
Статистика каждые 5 минут сохраняется в файл stat.txt.
но там нет подписи столбцов(users), да и как то нужно сделать, что бы автоматически в html файл конвертировалось.
а с этим наверное только расширение справится
просто этот бы файл(.html) пользователи загружать в брауэ. могли бы, т.е брали бы из кэша HC(в папку кэша автоматом бы и сохранялся бы)


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 08 декабря 2009, 20:39:34
Посмотри это http://handycache.ru/content/category/3/14/4/
Там есть подобная функция.


Название: Расширения на языке Lua в HandyCache
Отправлено: tangi от 08 декабря 2009, 21:49:28
Посмотри это http://handycache.ru/content/category/3/14/4/
Там есть подобная функция.
программа конечно хорошая, но чего та история по дням месяца не ведется(у меня эта функция не работает), толь ка статистика за день.
менял даты на компе и загружал странички из инета, история по дням 0


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 08 декабря 2009, 22:00:34
Вот тема по той программе http://handycache.ru/component/option,com_smf/Itemid,10/topic,1709.0/
Спроси у автора программы о том, что у тебя не получается.


Название: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 10 декабря 2009, 04:41:56
Помогите с расширением.

Нужно что бы в зависимости от типа браузера использовались различные внешние прокси.
Например для оперы - один, для ИЕ другой, для оперы другой версии - третий.

Заранее СПАСИБО!!!


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 10 декабря 2009, 11:20:06
Нужно что бы в зависимости от типа браузера использовались различные внешние прокси.


Код:
--[[ <HCExtension>
@name          Разные внешние прокси для разных браузеров (RS-Proxy)
@author        DenZzz
@version       0.3 для HC v1.00 RC2 (1.0.0.184) и выше
@description   Переключает внешние прокси в зависимости от браузеров
@event         BeforeRequestHeaderSend/RequestSend
</HCExtension> ]]


function RequestSend()
if re.match(hc.request_header, [[^User-Agent:[^\r\n]*Opera/9\.8]]) then
hc.use_proxy = '127.0.0.1:8081'
hc.monitor_string = hc.monitor_string..'RS-Proxy-1 '
elseif re.match(hc.request_header, [[^User-Agent:[^\r\n]*MSIE]]) then
hc.use_proxy = '10.0.0.1:8080'
hc.monitor_string = hc.monitor_string..'RS-Proxy-2 '
end
end


Название: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 10 декабря 2009, 18:25:47
DenZzz, спасибо огромное! Остался один вопрос: а куда и в каком формате вписывать логин и пароль для внешнего проси? так?
hc.use_proxy = '123.45.67.89:8080:login:pass'
или как-то иначе?


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 10 декабря 2009, 18:40:01
куда и в каком формате вписывать логин и пароль для внешнего проси?

Для этого есть отдельная переменная:
hc.use_proxy_login = 'user:password'

P.S. И на будущее - документацию HCExtensions.html почитай, там все описано!


Название: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 10 декабря 2009, 18:51:39

P.S. И на будущее - документацию HCExtensions.html почитай, там все описано!


Спасибо, почитаю!


Название: Расширения на языке Lua в HandyCache
Отправлено: gromaster от 25 декабря 2009, 12:29:20
ребят помогите, как можно сделать чтобы определенному пользователю можно было вместо некоторых сайтов выводить текст вроде доступ запрещен


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 25 декабря 2009, 18:23:08
ребят помогите, как можно сделать чтобы определенному пользователю можно было вместо некоторых сайтов выводить текст вроде доступ запрещен

http://handycache.ru/component/option,com_smf/Itemid,10/topic,2716.0/



Название: Расширения на языке Lua в HandyCache
Отправлено: gromaster от 25 декабря 2009, 19:06:14
http://handycache.ru/component/option,com_smf/Itemid,10/topic,2716.0/



а чтобы сообщение выдавалось с определенным текстом как реализовать?


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 25 декабря 2009, 19:20:02
а чтобы сообщение выдавалось с определенным текстом как реализовать?

Вместо hc.action = 'stop' нужно присваивать значения переменным hc.answer_header и hc.answer_body.



Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 27 декабря 2009, 13:38:24
  Уважаемый mai62, спасибо за классный продукт!
У меня к Вам просьба: сделайте, пожалуйста, для работы с расширениями ещё 3 таких Функции :

hc_user_from_internet_stopwatchКоличество данных, полученных пользователем из интернета с момента последнего обнуления.
hc_user_from_cache_stopwatchКоличество данных, полученных пользователем из кэша с момента последнего обнуления.
hc_user_to_internet_stopwatchКоличество данных, отправленных пользователем с момента последнего обнуления.

Аргументы функции:
stop - обнуление счётчика;
start - старт счётчика.

Возвращаемое значение: Количество данных в байтах, полученных\отправленных пользователем с момента последнего обнуления.

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



Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 27 декабря 2009, 14:08:55
k_ok_o_s

Новые предложения - в другом разделе. По динамическому распределению скорости есть уже такая тема:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,98.msg20929/#msg20929


Добавлено: 27 Декабря 2009, 14:54:49

Аргументы функции:
stop - обнуление счётчика;
start - старт счётчика.

Возвращаемое значение: Количество данных в байтах, полученных\отправленных пользователем с момента последнего обнуления.

Все это можно сделать уже сейчас в самом расширении без добавления новых функций в HC.


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 27 декабря 2009, 20:23:07
DenZzz, спасибо за обнадёживающий ответ! :-)

DenZzz, не могли бы Вы написать такое расширение (к сожалению, я не программер):

Код:
метка_А: 
Ждать n сек.
Начало цикла
  Если траффик клиента за последние n сек. >a КБ
     то        запустить bat1.bat
                переход на метка_Б
     иначе  ждать n сек.
                переход в начало цикла 
Конец цикла

метка_Б:
Ждать m сек.
Начало цикла
  Если траффик клиента за последние m сек. <b КБ
      то        запустить bat2.bat
                 переход на метка_А   
      иначе  ждать m сек.
                 переход в начало цикла 
Конец цикла
Расширение запускается при старте HC и постоянно работает



Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 27 декабря 2009, 22:58:35
DenZzz, не могли бы Вы написать такое расширение (к сожалению, я не программер):

Чтобы писать расширения на языке Lua, не обязательно быть программером. Язык очень прост и интуитивно понятен.



Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 30 декабря 2009, 11:27:58
Приветствую! С Рождеством! :-)

Пару вопросов агронома-программиста :-)

1. Как сделать вывод значения переменной ? Для сообщения я использовал hc.put_msg .
2. Чем отличается родная функция Lua sleep() от  hc.sleep() ?
3. Подскажите, пожалуйста, что в этой
Код:
   last_traffic=hc_user_to_internet+hc_user_from_cache+hc_user_from_internet
строке не нравится LuaTest :
(http://screenshotuploader.com/img/gzKbsTCus60.jpg) (http://screenshotuploader.com/screen/gzKbsTCus60/)

вот моё расширение:
Код:
--[[ <HCExtension>
@name          Сторож сетевой активности клиентов
@author        k_ok_o_s
@version       1.0
@description   Автоматическое изменения скорости работы FDM в зависимости от сетевой активности клиентов HC
@event         Init/Main
</HCExtension> ]]


function Main()
--если за n сек. траффик >a Кб., то скорость FDM снижается
n=3
a=10
--если за m сек. траффик <b Кб., то скорость FDM повышается
m=60
b=300

 while n~=nil do
  repeat
   last_traffic=hc_user_to_internet+hc_user_from_cache+hc_user_from_internet
   sleep(n)
   --print(last_traffic)
  until ((hc_user_to_internet+hc_user_from_cache+hc_user_from_internet-last_traffic)>a*1024)
  --hc.shell_execute('fdm_speed_down.exe', nil, nil, 'SW_HIDE')
  hc.put_msg(2, 'Скорость FDM снижена')
 
  repeat
   last_traffic=hc_user_to_internet+hc_user_from_cache+hc_user_from_internet
   sleep(m)
   --print(last_traffic)
  until ((hc_user_to_internet+hc_user_from_cache+hc_user_from_internet-last_traffic)<b*1024)
  --hc.shell_execute('fdm_speed_up.exe', nil, nil, 'SW_HIDE')
  hc.put_msg(2, 'Скорость FDM повышена')
 end
end


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 30 декабря 2009, 12:17:15
1. Как сделать вывод значения переменной ? Для сообщения я использовал hc.put_msg .

Вывод куда? В лог, трей? hc.put_msg формирует всплывающее сообщение в трее.

2. Чем отличается родная функция Lua sleep() от  hc.sleep() ?

У Lua нет родной функции sleep(), поэтому появилась hc.sleep()

3. Подскажите, пожалуйста, что в этой
Код:
   last_traffic=hc_user_to_internet+hc_user_from_cache+hc_user_from_internet
строке не нравится LuaTest :

Переменные таблицы hc сейчас имеют вид: hc.user_to_internet+hc.user_from_cache+hc.user_from_internet , т.е. после hc идет точка, а не "_".



Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 30 декабря 2009, 15:04:09
Спасибо за ответ.
Я хочу  сделать вывод на экран : За последние n сек. траффик составил a Кб.",
но чтобы вместо n и a  отобразилось значение этих переменных.
насколько я понял, вывод на экран можно организовать только функцией hc.put_msg


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 30 декабря 2009, 16:46:43
hc.put_msg("За последние "..n.." сек. траффик составил "..a.." Кб.")


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 30 декабря 2009, 17:08:21
mai62 Спасибо за ответ и за программу!!!  :)


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 30 декабря 2009, 22:49:35
HC 1.0.0.252 . Все расширения, кроме моего, выключены :-)

1. Подскажите, пожалуйста, почему пока не отключу "Серверы-посредники", браузер выдаёт:
Цитировать
HTTP-шлюз не отвечает (код ошибки: 504)
а в мониторе HC -
Цитировать
30.12.2009/21:36:46 local/127.0.0.1 http://www.promoroz.ru/raznoe/raznoe10.php 0 0/148 0 0 "504 Gateway Timeout (HC)" LuaR
LuaR

2. Моё расширение, поскольку запускается как обработчик события Init, не нужно прописывать ни в lua.lst, ни в luaR.lst ?

3. Это из-за вышеозначенных непоняток во всплывающем окошке выводится:
Цитировать
За последние 3 сек. траффик составил 0 Кб.
?
Галочка "Вести статистику" отмечена. Почему ж не подсчитывается траффик?

содержимое файла lua.lst:
Код:
; Файл-список скриптов LUA для обработки заголовков ответов серверов
;-------------------------------------------------------------------

#.  <script=lua\save_or_block_403_and_404.lua>
#/favicon\.ico$  <script=lua\save_404.lua>
#.  <script=lua\dont_update_image_by_type.lua>
#.  <script=lua\dont_update_file_by_size.lua>
#.  <script=lua\block_long_file.lua>
содержимое файла luaR.lst:
Код:
; Файл-список скриптов LUA для обработки заголовков запросов клиентов
;--------------------------------------------------------------------

#.  <script=lua\_dont_update_image_by_type_in_cache.lua>

!#\b(imageshack\.us|photofile\.ru|radikal\.ru)/
#.  <script=lua\_block_external_links.lua>

Код расширения (альфа :-) :
Код:
--[[ <HCExtension>
@name          Сторож сетевой активности клиентов
@author        k_ok_o_s
@version       1.0
@description   Автоматическое изменения скорости работы FDM в зависимости от сетевой активности клиентов HC
@event         Init/Main
</HCExtension> ]]


function Main()
--если за n сек. траффик >a Кб., то скорость FDM снижается
n=3
a=10
--если за m сек. траффик <b Кб., то скорость FDM повышается
m=60
b=300

 while n~=nil do
  repeat
   last_traffic=hc.user_to_internet+hc.user_from_cache+hc.user_from_internet
   hc.sleep(n)
   delta_traffic=hc.user_to_internet+hc.user_from_cache+hc.user_from_internet-last_traffic
   hc.put_msg(2, "За последние "..n.." сек. траффик составил "..delta_traffic.." Кб.")
  until ((hc.user_to_internet+hc.user_from_cache+hc.user_from_internet-last_traffic)>a*1024)
  --hc.shell_execute('fdm_speed_down.exe', nil, nil, 'SW_HIDE')
  hc.put_msg(2, 'Скорость FDM снижена')
 
  repeat
   last_traffic=hc.user_to_internet+hc.user_from_cache+hc.user_from_internet
   hc.sleep(m)
   hc.put_msg(2, "За последние "..m.." сек. траффик составил "..(hc.user_to_internet+hc.user_from_cache+hc.user_from_internet-last_traffic).." Кб.")
  until ((hc.user_to_internet+hc.user_from_cache+hc.user_from_internet-last_traffic)<b*1024)
  --hc.shell_execute('fdm_speed_up.exe', nil, nil, 'SW_HIDE')
  hc.put_msg(2, 'Скорость FDM повышена')
 end
end


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 31 декабря 2009, 00:33:24
В НС для использования расширений давно не нужны серверы посредники и файлы lua.lst, и в luaR.lst. Перейди на вкладку Настойки/Расширения. Там есть кнопка для добавления расширения. Нажми ее и выбери файл расширения.
Функция main тоже не нужна. В архиве, который ты скачал, есть папка Extensions. Там есть справка по написанию расширений и примеры расширений.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 31 декабря 2009, 00:47:43
1. Подскажите, пожалуйста, почему пока не отключу "Серверы-посредники", браузер выдаёт:

Потому что там прописаны старые списки lua.lst и luaR.lst, которые надо удалить совсем, чтобы не мешали.

Цитировать
3. Это из-за вышеозначенных непоняток во всплывающем окошке выводится: ?
Галочка "Вести статистику" отмечена. Почему ж не подсчитывается траффик?

Основная ошибка - переменные hc.user_to_internet+hc.user_from_cache+hc.user_from_internet не доступны из события Init и они содержат объем трафика только одного пользователя HC, а не всех (см. HCExtensions.html).

Есть и другие ошибки, но в данном случае надо пересматривать всю концепцию твоего расширения.
Сколько пользователей у тебя ходит через HC?

Хорошо, если только один. Если же их больше, то пока невозможно узнать реальную нагрузку на канал всех пользователей HC в конкретный момент времени. Я предложил создать новую функцию hc.active_users_list (http://handycache.ru/component/option,com_smf/Itemid,10/topic,98.msg20929/#msg20929), но это предложение пока не реализовано...


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 31 декабря 2009, 15:17:37
mai62
Цитировать
Перейди на вкладку Настойки/Расширения. Там есть кнопка для добавления расширения. Нажми ее и выбери файл расширения.
так я и делал
Цитировать
В архиве, который ты скачал, есть папка Extensions.
отдельно Extensions я не скачивал, в последний раз всё обновилось автоапдейтером, а до этого просто накатывал zip-ы сверху установленного HC (уже несколько лет)
Цитировать
Там есть справка по написанию расширений и примеры расширений.
а ещё в корневой папке HC у меня есть HC_Lua_scripts.html , я его вкладываю в сообщение.
Может, настроить Вам апдейтер так, чтоб он потёр этот старый файл и папку Lua ?


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 31 декабря 2009, 16:20:36
Цитировать
отдельно Extensions я не скачивал, в последний раз всё обновилось автоапдейтером, а до этого просто накатывал zip-ы сверху установленного HC (уже несколько лет)
Скачивать Extensions отдельно не нужно, эта папка находится в файле HandyCacheRC3.1.0.0.252.zip (доступен из раздела Файлы на сайте).
Установить автоапдейтом сборку 252 Вы не могли. Сейчас автоапдейт устанавливает только сборку 193.
В любом случае автоапдейт скачивает тот же архив, что и при ручном скачивании, а затем распаковывает и копирует файлы из архива. Скачанный автоапдейтом архив после обновления не удаляется, посмотрите может у Вас есть этот архив.
Цитировать
а ещё в корневой папке HC у меня есть HC_Lua_scripts.html , я его вкладываю в сообщение.
Может, настроить Вам апдейтер так, чтоб он потёр этот старый файл и папку Lua ?
Не считаю правильным что-то удалять автоматом на компьютере пользователя, а уж тем более целую папку. Мало ли, что там может находиться у пользователя, а я возьму да удалю. В той же папке lua у пользователя могут быть модифицированные или собственные файлы.
Основные изменения, происходящие в программе фиксируются в файле WhatsNew.txt. Более подробную информацию об изменениях можно найти на сайте. Например, информация о переходе от скриптов lua к расширениям на lua опубликована здесь http://handycache.ru/content/view/38/26/ Там же упоминается папка Extensions и файл HCExtensions.html.


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 06 января 2010, 19:17:53
С Рождеством!!! :)

mai62
 Смотрю на Ваш ответ и думаю: "Как я мог такие несерьёзные вещи предлагать в прошлом году?"  :oops:

DenZzz
1.
Цитировать
Основная ошибка - переменные hc.user_to_internet+hc.user_from_cache+hc.user_from_internet не доступны из события Init
Естесственно, ведь таблица, содержащая все переменные, создаётся перед первым вызовом к.-л. функции:
Цитировать
(из HCExtensions.html)Перед вызовом функций расширения HandyCache создает  в lua-машине две таблицы: hc и re. В первой собраны значения и функции, позволяющие получать информацию о значениях внутренних переменных HandyCache и изменять некоторые из них.
Как же они могут быть доступны из события Init, если оно
Цитировать
Возникает при загрузке расширений во время старта HandyCache
?
 Или я совсем не понял, о чём речь?

2.
Цитировать
Есть и другие ошибки, но в данном случае надо пересматривать всю концепцию твоего расширения.
В чём же не верна концепция? Или ответ на это кроется в пункте 1?

3.
Цитировать
Сколько пользователей у тебя ходит через HC?
Один.





Название: Расширения на языке Lua в HandyCache
Отправлено: MetersBonwe от 08 января 2010, 11:36:16
Доброго времени суток!
Сижу на работе в локалке, работаю через внешний безусловный прокси.
Периодически выхожу в И-нет через gprs, запарился галочку нажимать "резрешить" на вкладке "внешние прокси",
в связи с чем назрела необходимость:
можно ли создать расширение, которое будет переключать прокси по условию, например, имени содинения с И-нет, или отключать безусловный прокси при условии смены текущего соединения с И-нет.
В общем, разные внешние прокси для разных соединений.
Спасибо заранее


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 09 января 2010, 10:27:22
2.   В чём же не верна концепция? Или ответ на это кроется в пункте 1?

Ответ на это кроется в описании переменных в HCExtensions.html. Если лень вчитываться, то просто прими как аксиому: переменные hc.user_to_internet+hc.user_from_cache+hc.user_from_internet не доступны из события Init, а доступны только из событий: RequestHeaderReceived, BeforeRequestHeaderSend, AnswerHeaderReceived, BeforeAnswerHeaderSend, BeforeAnswerBodySend.



В общем, разные внешние прокси для разных соединений.

Это давно есть в штатных настройках HC: "Общие => Дозвон => Внешний прокси для этого подключения".


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 10 января 2010, 01:12:20
DenZzz Спасибо за ответ!
Цитировать
Если лень вчитываться,
А вот слона-то я и не приметил... :oops:
Кажется, я понял Ваши слова про пересмотр концепции :)


Название: Расширения на языке Lua в HandyCache
Отправлено: MetersBonwe от 10 января 2010, 04:26:41
Это давно есть в штатных настройках HC: "Общие => Дозвон => Внешний прокси для этого подключения".

Вы меня не поняли) если там убрать галку, то она слетает и на закладке "Внешние прокси" - я про это и писал, что все время приходится ее дергать туда-сюда. Внешний прокси у меня используется только при выходе через локалку, при дозвоне он не нужен. Я хотел спросить, можно ли это как-то автоматизировать, чтобы HC при дозвоне использовал свои настройки для дозвона, а не глобальные настройки безусловного внешнего прокси для HC? Например, с помощью расширения.
Я пытался сделать это через условные прокси, но там не нашел необходимого параметра, который нужно прописать ((


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 10 января 2010, 12:29:33
Я хотел спросить, можно ли это как-то автоматизировать, чтобы HC при дозвоне использовал свои настройки для дозвона, а не глобальные настройки безусловного внешнего прокси для HC? Например, с помощью расширения.

Из расширения можно менять внешние прокси, но нет возможности определить способ соединения с Инет.



Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 12 января 2010, 00:18:19
MetersBonwe

Цитировать
нет возможности определить способ соединения с Инет
я рекомендовал бы посмотреть в сторону AutoIt для ответа на этот вопрос. Может быть, там можно это узнать. И ещё - в AutoIt прекрасная русская справка.


Название: Расширения на языке Lua в HandyCache
Отправлено: MetersBonwe от 13 января 2010, 05:41:03
я рекомендовал бы посмотреть в сторону AutoIt для ответа на этот вопрос.

Спасибо, про него-то я совсем забыл)))


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 16 января 2010, 23:31:22
DenZzz Надеюсь на Вашу помощь!
Вроде пересмотрел концепцию, LuaTest.exe не ругается, но и килобайты не считает, а HC виснет :-(

Код:
--[[ <HCExtension>
@name          Сторож сетевой активности клиентов
@author        k_ok_o_s
@version       1.0
@description   Автоматическое изменения скорости работы FDM в зависимости от сетевой активности:
               1)клиентов HC (на локальном ПК)
   2)пользователя из локальной сети, совместно с кот. используется интернет-канал
@event    Init/Init
@event         BeforeAnswerBodySend/BeforeAnswerBodySend
</HCExtension> ]]

function Init()
   dir="C:\\Soft\\AU3_Client-Server_speed\\"              --папка со скриптами:
   
   n=3                                                    --если за n сек. траффик >a Кб. , то скорость FDM снижается
   a=10
   m=60                                                   --если за m сек. траффик <b Кб. , то скорость FDM повышается
   b=300
   
   last_traffic=0
   hc.set_global('current_traffic', 0)
   
   while 1 do
      repeat
         hc.sleep(n*1000)       
         traffic=hc.get_global('current_traffic')
         delta_traffic=traffic-last_traffic
         last_traffic=traffic
         hc.put_msg(2, "За последние "..n.." сек. траффик составил "..(delta_traffic/1024).." Кб.")
      until delta_traffic>(a*1024)
     
      --hc.shell_execute(dir..'FdmSpeedToMin.exe', nil, nil, 'SW_HIDE')
      hc.put_msg(2, 'Скорость FDM снижена')
   
      repeat
         hc.sleep(m*1000)
         traffic=hc.get_global('current_traffic')
         delta_traffic=traffic-last_traffic
         last_traffic=traffic
         hc.put_msg(2, "За последние "..m.." сек. траффик составил "..(delta_traffic/1024).." Кб.")
      until delta_traffic<(b*1024)
   
      ClientLowState = io.open(dir.."SpeedOfClientIsLow.tmp")     --Эта функция открывает файл в режиме, указанном в строке mode. Возвращает хендлер файла, или, в случае ошибок, nil и сообщение об ошибке.
      if not ClientLowState then
         --hc.shell_execute(dir..'FdmSpeedToMax.exe', nil, nil, 'SW_HIDE')
         hc.put_msg(2, 'Скорость FDM повышена')
      end
   end
end

function BeforeAnswerBodySend()
   hc.set_global('current_traffic', (hc.user_to_internet+hc.user_from_cache+hc.user_from_internet))
end


Название: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 17 января 2010, 00:02:19
HC виснет
Видимо, потому что расширение так и не может завершить инициализацию. Хорошо бы обработчик события Init завершать сразу, не создавая бесконечный цикл.
Всю работу я бы возложил на обработчики событий AnswerHeaderReceived и BeforeAnswerBodySend.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 17 января 2010, 11:58:34
Вроде пересмотрел концепцию, LuaTest.exe не ругается, но и килобайты не считает, а HC виснет :-(

Как уже сказал Михаил, Init нельзя бесконечно зацикливать.

Но есть и другая проблема - она в использовании функции hc.sleep(). Пока выполняется эта функция, HC приостанавливает обработку текущего потока до ее завершения, поэтому hc.sleep() нежелательно использовать в твоем случае, иначе клиенты HC долго не дождутся своих данных.

Для отсчета секунд рекомендую использовать функцию os.clock() и событие Timer1s.
От циклов while и repeat лучше отказаться совсем.

Сценарий примерно такой:
Раз в секунду твое расширение обрабатывает событие Timer1s. Оно запрашивает из глобальные переменных сохраненные там счетчики трафика и времени, и в случае срабатывания твоих условий (если за n сек. траффик >a Кб или если за m сек. траффик <b Кб) запускает нужные команды для внешних программ.

Счетчики трафика и метки времени пишет в глобальные переменные обработчик события RequestHeaderReceived.
Исходные настройки (dir, n, a, m, b) задаются в событии Init через таблицу hc_static.


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 18 января 2010, 03:38:59
Михаил, DenZzz спасибо за советы. Переделал расширение - HC уже не виснет, но и ничего вообще не происходит. Ткните, пожалуйста, где я ошибся.

Код:
--[[ <HCExtension>
@name          Сторож сетевой активности клиентов
@author        k_ok_o_s
@version       1.0
@description   Автоматическое изменения скорости работы FDM в зависимости от сетевой активности:
               1)клиентов HC (на локальном ПК)
   2)пользователя из локальной сети, совместно с кот. используется интернет-канал
@event    Init/Init
@event         Timer1s/Timer1s
@event         RequestHeaderReceived/RequestHeaderReceived
</HCExtension> ]]

function Init()
   dir="C:\\Soft\\AU3_Client-Server_speed\\"              --папка со скриптами:
   n=3                                                    --если за n сек. траффик >a Кб. , то скорость FDM снижается
   a=10
   m=60                                                   --если за m сек. траффик <b Кб. , то скорость FDM повышается
   b=300
   hc.set_global('last_traffic', 0)
   hc.set_global('current_traffic', 0)
   hc.set_global('time_counter', 0)
   hc.set_global('job_switch', 'wait_for_high_traffic')
   end

function Timer1s()
hc.set_global('time_counter', (hc.get_global('time_counter')+1))
   if job_switch=="wait_for_high_traffic" and hc.get_global('time_counter')==n then
      hc.put_msg(2, "За последние "..n.." сек. траффик составил "..((hc.get_global('current_traffic')-hc.get_global('last_traffic'))/1024).." Кб.")
  if (hc.get_global('current_traffic')-hc.get_global('last_traffic'))>(a*1024) then
     --hc.shell_execute(dir..'FdmSpeedToMin.exe', nil, nil, 'SW_HIDE')
         hc.put_msg(2, 'Скорость FDM снижена')
hc.set_global('job_switch', 'wait_for_low_traffic')
  end
  hc.set_global('last_traffic', hc.get_global('current_traffic'))
 
   elseif job_switch=="wait_for_low_traffic" and hc.get_global('time_counter')==m then
      hc.put_msg(2, "За последние "..m.." сек. траффик составил "..((hc.get_global('current_traffic')-hc.get_global('last_traffic'))/1024).." Кб.")
  if ((hc.get_global('current_traffic')-hc.get_global('last_traffic'))<(b*1024)) and not io.open(dir.."SpeedOfClientIsLow.tmp") then
     --hc.shell_execute(dir..'FdmSpeedToMax.exe', nil, nil, 'SW_HIDE')
         hc.put_msg(2, 'Скорость FDM повышена')
hc.set_global('job_switch', 'wait_for_high_traffic')
  end
  hc.set_global('last_traffic', hc.get_global('current_traffic'))
   end  
end

function RequestHeaderReceived()
   hc.set_global('current_traffic', (hc.user_to_internet+hc.user_from_cache+hc.user_from_internet))
end


Название: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 18 января 2010, 04:50:10
Навскидку вижу три момента:
- переменные dir,a,b,n,m используются только в Timer1s, поэтому там и должны объявляться/инициализироваться;
- т.к. имеем дело с глобальной переменной, то " if job_switch" недопустимо. Надо " if hc.get_global('job_switch')";
- глобальная переменная time_counter достигнет значения n или m и вызовет срабатывание определенных действий один раз. Далее эта переменная уходит в бесконечность, и последующих срабатываний не будет.


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 18 января 2010, 05:26:49
Михаил Спасибо! нашёл и другие ошибки. Главное - уже что-то работает!!! :-) Но пора спать. :-)
Цитировать
переменные dir,a,b,n,m используются только в Timer1s, поэтому там и должны объявляться/инициализироваться
это я просто "не въехал" в то, что посоветовал DenZzz
Цитировать
Исходные настройки (dir, n, a, m, b) задаются в событии Init через таблицу hc_static.
подумал, что достаточно присвоить значения переменным, и они попадут в таблицу hc_static :-)

   


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 24 января 2010, 21:00:46
Скажите, пожалйуста, вроде как нет простого пути чтобы в расширении заполучить дату и время создания к.-л. файла ?


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 24 января 2010, 22:26:07
Сейчас такой встроенной возможности, действительно, нет. Но можно поискать стороннюю lua-библиотеку для работы с файловой системой, например, здесь http://luaforge.net/
В следующей весии НС будет добавлена функция hc.file_last_modified_time(fn).


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 25 января 2010, 07:49:35
mai62
Цитировать
будет добавлена функция hc.file_last_modified_time(fn)
ЗдОрово! И она сможет возвращать табличку, как os.date ?
Цитировать
если format равен "*t", то date возвращает таблицу со следующими полями: year (год, четыре цифры), month (месяц, 1 – 12), day (день, 1 – 31), hour (час, 0 – 23), min (минуты, 0 – 59), sec (секунды, 0 – 61), wday (день недели, воскресенью соответствует 1), yday (день года)


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 25 января 2010, 10:46:26
Сейчас эта функция выдает время в числовом представлении (время в секундах, прошедшее после 0 часов 0 минут 1 января 1970 года). Когда значение времени в таком виде, его легко сравнивать с другим значением, например, с временем выдаваемым функцией os.time(). Легко, например, получить возраст файла в днях (hc.file_last_modified_time(fn)-os.time())/(24*60*60) или в минутах (hc.file_last_modified_time(fn)-os.time())/60.
Также легко получить время в строковом виде hc.systime_to_str(hc.file_last_modified_time(fn)).
А тебе нужна именно таблица?


Название: Расширения на языке Lua в HandyCache
Отправлено: k_ok_o_s от 25 января 2010, 20:32:26
Цитировать
А тебе нужна именно таблица?
Нет, как раз время в числовом представлении существенно упрощает алгоритм моей идеи :)  :good:


Название: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 31 января 2010, 13:53:14
Вроде везде посмотрел, но не нашёл.
Возможно ли с помощью расширения узнавать о разрыве соединения с сервером?
Если да, то как?


Название: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 15 апреля 2010, 04:53:45
 Здравствуйте, можно ли как-то с помощью скриптов сохранять и передавать cookie. Просто работяю на разных браузерах, точнее Opera и Offline Explorer. И если в Опере регистрирушься, то пропадает регистрация в OE. И наоборот.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 15 апреля 2010, 09:17:20
Здравствуйте, можно ли как-то с помощью скриптов сохранять и передавать cookie.

Теоретически, да.


Название: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 16 апреля 2010, 05:25:02
Теоретически, да.
А практически? Если можно то с небольшим примером, пожайлуста.


Название: Расширения на языке Lua в HandyCache
Отправлено: Ubiquitous_Nothing от 26 апреля 2010, 17:04:53
Главное - уже что-то работает!!!
k_ok_o_s, а не могли бы вы этим кое-чем поделиться? Вдруг оно еще кому-нибудь полезным будет ;)


Название: Расширения на языке Lua в HandyCache
Отправлено: toobig от 26 мая 2010, 19:20:02
что-то у меня скрипт, который блокирует загрузку больших файлов в зависимости от системного времени(в начале топика есть) вообще никак не работает. поставил специально 1мб на закачку, а реакции ноль. Может есть более новая версия скрипта?


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 26 мая 2010, 21:56:38
Может есть более новая версия скрипта?

Приложил к посту.

P.S. Эту тему лучше читать с конца. Скрипты с первых страниц не будут работать в свежих версиях HC.


Название: Расширения на языке Lua в HandyCache
Отправлено: toobig от 27 мая 2010, 12:02:45
Спасибо, похоже пора сделать что-то вроде закрепленного сообщения, где напечатать название скиптов, и что они делают.
Ну и само собой все их кучей прикрепить архивом или поодиночке...
Это я для удобства...
P.S. У меня еще один вопросик, или просьба...
А можно как-нибудь сделать блок по определенной фразе в ссылке, тоже по времени (запросы на торрент блокировать)- а то  в черный список внес правило, оно работает, но ведь не будешь его каждый раз включать-выключать...


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 27 мая 2010, 12:34:21
Это
Цитировать
блок по определенной фразе в ссылке
как понимать? Имеется ввиду фраза в URL или в получаемых данных?
Можно и то, и другое. Второе сложней, но тоже можно.


Название: Расширения на языке Lua в HandyCache
Отправлено: toobig от 27 мая 2010, 22:19:38
В URL конечно, торренты ведь проверяют себя периодически отсылая запросы вида
_http://torrent.com/announce?info_hash=%CNRQ8_
Думаю, если блокировать по фразе ( announce?info_hash=% ) то закачка просто заглохнет без подтверждения наличия файла на сервисе...


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 28 мая 2010, 14:45:21
toobig
Попробуй так
Код:
--[[ <HCExtension>
@name          block files by time
@author        mai62
@version       0.01
@description   Блокирует некоторые URL по времени
@rule          announce\?info_hash=%
@event         RequestHeaderReceived/request
</HCExtension> ]]

function request()
 -- Узнаем текущее системное время
  time = os.date("*t")
 -- Если системное время с 17:00 до 23:00, то
 if time.hour >= 17 and time.hour <= 23 then
    hc_action = "stop"
 end

end


Название: Расширения на языке Lua в HandyCache
Отправлено: toobig от 29 мая 2010, 08:40:49
Сделал, пока проверить некогда. Хочу уточнить момент один- стал смотреть ссылки, ну насчет фразы- там она присутствует, но с вариациями, есть прямо как (announce?info_hash=%) а есть (announce.php?passkey=5...&info_hash=%...)
Чтобы перехватить оба варианта как должна выглядеть фраза?


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 29 мая 2010, 12:34:07
Можно так
announce(?:\.php)?\?(?:.+)?info_hash=%


Название: Расширения на языке Lua в HandyCache
Отправлено: toobig от 29 мая 2010, 16:31:05
Спасибо, сейчас поправлю...


Название: Расширения на языке Lua в HandyCache
Отправлено: toobig от 29 мая 2010, 19:38:01
announce(?:\.php)?\?(?:.+)?info_hash=%
В таком виде не работает, пока остановился на упрощеной версии только если есть
info_hash=%
Блин, и так не блокирует...
А если в черный список вношу +info_hash= то да, работает....


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 29 мая 2010, 22:07:08
Блин, и так не блокирует...

Поправь строку:
    hc_action = "stop"
на:
    hc.action = "stop"


Название: Расширения на языке Lua в HandyCache
Отправлено: toobig от 30 мая 2010, 11:01:57
Поправил, теперь все заработало. Ура!!!
P.S. Спасибо.


Название: Расширения на языке Lua в HandyCache
Отправлено: Jenova от 02 июня 2010, 06:18:32
Помогите пожалуйста с расширением.
Нужно что бы UserAgent браузера заменялся на другой.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 02 июня 2010, 07:52:00
Нужно что бы UserAgent браузера заменялся на другой.

Код:
--[[ <HCExtension>
@name         Менять User-Agent в заголовках запросов на свой
@event        RequestHeaderReceived/Request
</HCExtension> ]]

function Request()
hc.request_header = re.replace(hc.request_header, [[^User-Agent: \K[^\r\n]+]], 'My_Agent')
end


Название: Расширения на языке Lua в HandyCache
Отправлено: Jenova от 02 июня 2010, 09:00:07
DenZzz премного благодарен :-) Всё работает отлично.


Название: Расширения на языке Lua в HandyCache
Отправлено: aurumkey от 06 июня 2010, 02:05:22
Нид хэлп

Есть адрес(например) http://r0.ru/
в теле есть тэг <title>Рамблер Легкая версия</title>

страница подгружает картинку http://i.rl0.ru/_projects/r0.ru/rambler.gif

Как сохранить эту картинку в кэш с названием 'Рамблер Легкая версия.gif'
т.е. на основе тэга выдрать строку из тела
local x = re.match(hc.answer_body, [[<title>(.*)</title>]])
local name=re.substr(1)
и сохранить с именем

local ext='gif'
local cache_file_name = string.format("somefolder\\%s.%s",name,ext)
hc.preform_cache_file_name(cache_file_name)


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 06 июня 2010, 14:45:48
Как сделать? Писать расширение. И это расширение не будет тривиальным. Возможно надо взять за основу Content Master и доделывать недостающий функционал.
Не совсем понял, что будет, если на странице несколько картинок? Им же всем не будешь одно имя давать.


Название: Расширения на языке Lua в HandyCache
Отправлено: the_ghost от 24 июня 2010, 16:32:19
Хочу выводить собственное сообщение о блокировке. Пробую использовать answer_body в таком скрипте:

Код:
--[[ <HCExtension>
@name          Блокировать загрузку больших файлов в зависимости от времени (A-long-T)
@author        DenZzz
@version       1.2 для HC v1.00 RC2 (1.0.0.175) и возможно выше
@description   Блокирует загрузку больших файлов в зависимости от системного времени
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]


function GetContentLength(s)
  _,_,x = string.find(s, '[cC]ontent%-[lL]ength: *(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end


function Answer()
 
 -- Узнаем текущее системное время
 local time = os.date("*t")
 -- Если системное время с 20:00 до 24:00, то
 if time.hour >= 10 then

  -- забираем размер файла из заголовка 'Content-Length'
  local len = GetContentLength(hc.answer_header)

   -- если размер файла есть в заголовке и он больше 10 МБайт
    if len > 10485760 then
     -- и действие HC еще не присвоено или присвоено 'Сохранять', то блокировать загрузку
      if hc.action=='' or hc.action==nil or hc.action=='save' or hc.action=='save-' then
        hc.answer_body = "file=c:\\obed.htm"
        hc.action = 'stop'
        hc.put_msg(10, GetContentLength(hc.answer_body))
        hc.monitor_string = hc.monitor_string ..'A-long-T'
      end
    end
 end
end  -- Конец функции Answer

  • Проверяю на этом урле - http://get.opera.com/pub/opera/win/1054/ru/Opera_1054_int_Setup.exe (на момент сообщения урл существует).
  • Получаю сообщение в браузере
    Цитировать
    Blocked
    Access to the requested URL http://get.opera.com/pub/opera/win/1054/ru/Opera_1054_int_Setup.exe was not allowed (answer script).
  • Всплывающее окошко содержит показыват "-1"

Содержимое файла obed.htm:
Код:
           <html>
             <head>
             </head>

             <body>
<b>xaxax</b>
             </body>

           </html>

Подскажите, пожалуйста, как правильно вывести свое сообщение об ошибке из html файла


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 24 июня 2010, 17:03:07
Подскажите, пожалуйста, как правильно вывести свое сообщение об ошибке из html файла

Вместо hc.action = 'stop' присваивай значения переменным hc.answer_header и hc.answer_body.


Название: Расширения на языке Lua в HandyCache
Отправлено: pmail от 09 июля 2010, 12:50:21
Добрый день! Может у кого есть скрипт для блокировки заданных типов файлов по размеру, Например, заблокировать загрузку изображений более 100 кбайт?*


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 09 июля 2010, 13:19:01
Возьми расширение eA_Dont_update_image_by_type.lua из дистрибутива НС и замени функцию Answer на эту
Код:
function Answer()

 -- Только для GET-запросов
  if hc.method == 'GET' then

   -- забираем тип файла из заголовка 'Content-Type'
    type = GetContentType(hc.answer_header)
   -- есть ли в поле заголовка 'Content-Type' слово 'image'
    if type~=nil then img = string.find(type,'image',1,true)
    else img = nil  end
   -- забираем размер файла из заголовка 'Content-Length'
    len = GetContentLength(hc.answer_header)

      if img~=nil then
         -- если это картинка и ее размер больше 100 кбайт
          if len > 100*1024 then
           -- то блокируем загрузку
            hc.action = 'stop-'
            hc.monitor_string = hc.monitor_string..'block-img '
          end 
      end
  end

end  -- Конец функции Answer


Название: Расширения на языке Lua в HandyCache
Отправлено: pmail от 09 июля 2010, 15:23:28
спасибо, работает, а не подскажете, как можно для определенных пользователей запретить закачку по типу файлов , например запретить user1 скачивать exe,zip,avi и пр


Название: Расширения на языке Lua в HandyCache
Отправлено: DenisVS от 09 июля 2010, 23:41:01
Расскажите, как работает Cache cleaner. Именно, что оно делает, чего именно и на сколько чистит.


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 10 июля 2010, 00:09:53
Cache cleaner автоматически через заданный промежуток времени "нажимает" кнопку Запустить на вкладке Очистка кэша.


Название: Расширения на языке Lua в HandyCache
Отправлено: Virus88 от 14 июля 2010, 14:54:51
нужно несколько скриптов...
1 замена страницы заблокированного файла
2 статистика(количество юзеров... не нашел в проге)
3) бан по ип


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 14 июля 2010, 16:01:26
А ты смотрел эту ветку? Ничего похожего не нашел?


Название: Расширения на языке Lua в HandyCache
Отправлено: Virus88 от 14 июля 2010, 16:21:34
смотрел в начале страниц 5.... подходящего не нашел... времени нет.... решил просто вопрос задать может помогут найти....


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 14 июля 2010, 16:48:44
Надо с конца смотреть.


Название: Расширения на языке Lua в HandyCache
Отправлено: Virus88 от 14 июля 2010, 17:28:24
Код:
--[[ <HCExtension>
@name          Блокировать загрузку больших файлов в зависимости от времени (A-long-T)
@author        DenZzz
@version       1.2 для HC v1.00 RC2 (1.0.0.175) и возможно выше
@description   Блокирует загрузку больших файлов в зависимости от системного времени
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]


function GetContentLength(s)
  _,_,x = string.find(s, '[cC]ontent%-[lL]ength: *(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end


function Answer()
 
 -- Узнаем текущее системное время
 local time = os.date("*t")
 -- Если системное время с 20:00 до 24:00, то
 if time.hour >= 10 then

  -- забираем размер файла из заголовка 'Content-Length'
  local len = GetContentLength(hc.answer_header)

   -- если размер файла есть в заголовке и он больше 10 МБайт
    if len > 10485760 then
     -- и действие HC еще не присвоено или присвоено 'Сохранять', то блокировать загрузку
      if hc.action=='' or hc.action==nil or hc.action=='save' or hc.action=='save-' then
        hc.answer_body = "file=c:\\obed.htm"
        hc.action = 'stop'
        hc.put_msg(10, GetContentLength(hc.answer_body))
        hc.monitor_string = hc.monitor_string ..'A-long-T'
      end
    end
 end
end  -- Конец функции Answer

нашел вот это но оно не работает((( и еще там по времени я удал время ниже прочел как справить чтобы заработало

Код:
--[[ <HCExtension>
@name          Блокировать загрузку больших файлов в зависимости от времени (A-long-T)
@author        DenZzz
@version       1.2 для HC v1.00 RC2 (1.0.0.175) и возможно выше
@description   Блокирует загрузку больших файлов в зависимости от системного времени
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]


function GetContentLength(s)
  _,_,x = string.find(s, '[cC]ontent%-[lL]ength: *(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end


function Answer()
 
 -- Узнаем текущее системное время
 
 -- Если системное время с 20:00 до 24:00, то
 

  -- забираем размер файла из заголовка 'Content-Length'
  local len = GetContentLength(hc.answer_header)

   -- если размер файла есть в заголовке и он больше 10 МБайт
    if len > 3000000 then
     -- и действие HC еще не присвоено или присвоено 'Сохранять', то блокировать загрузку
      if hc.action=='' or hc.action==nil or hc.action=='save' or hc.action=='save-' then
        hc.answer_body = "file=D:\\HandyCache\Extensions\obed.htm"
hc.answer_header = 'stop'
               
        hc.put_msg(10, GetContentLength(hc.answer_body))
        hc.monitor_string = hc.monitor_string ..'A-long-T'
      end
    end
 end
end  -- Конец функции Answer
но все равно не работает
и еще нужно както ограничить число пользователей на 1 акаунте...


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 14 июля 2010, 23:15:58
но все равно не работает

Править скрипты, не зная теории - дело не благодарное! Оба этих скрипта некорректны, поэтому и не работают.

1 замена страницы заблокированного файла

Штатная опция "Показывать файл" Черного списка не устроит?

Цитировать
2 статистика(количество юзеров... не нашел в проге)

Есть отдельная вкладка рядом с настройками.

Цитировать
3) бан по ип

Кого надо банить по IP - юзера или сайт? Есть и то и другое. Первое через скрипт или список Доступа, а второе можно просто в Черном списке прописать.

и еще нужно както ограничить число пользователей на 1 акаунте...

Проще завести каждому пользователю по своему акаунту и авторизовать их по IP или по логину с паролем.


Название: Расширения на языке Lua в HandyCache
Отправлено: Virus88 от 15 июля 2010, 11:34:43
DenZzz можешь поправить чтобы были коректны??

на счет замены в принципе можно перенаправление использовать.. но придется ставить вирт сервер... а так просто с кампа фаил указал и все....

количество юзеров... там показывает трафик.. .на вкладке о программе ипы... а я хочу чтобы количество пользователей в данный момент подключенных показывало...

каждому по Аккаунту... у меня их всего 5 а юзеров около 60)))


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 15 июля 2010, 14:40:43
DenZzz можешь поправить чтобы были коректны??

Могу, но зачем, когда есть более простое решение?

на счет замены в принципе можно перенаправление использовать.. но придется ставить вирт сервер... а так просто с кампа фаил указал и все....

Да не нужен никакой виртуальный сервер! Есть штатная опция "Показывать файл" в Черном списке, которая будет выдавать указанный файл вместо заблокированного - хоть картинку, хоть HTML.
Можно и через переадресацию сделать. Тогда кладешь файл в кэш в нужное место и заносишь путь в список "Не обновлять" и все, HC будет его выдавать и без всякого виртуального сервера!

Цитировать
количество юзеров... там показывает трафик.. .на вкладке о программе ипы... а я хочу чтобы количество пользователей в данный момент подключенных показывало...

На вкладке "О программе" нижний график показывает количество активных соединений. Количество активных пользователей можно узнать только через расширение, ну или просто в мониторе посмотреть, кто там запросы шлет.

Цитировать
каждому по Аккаунту... у меня их всего 5 а юзеров около 60

Купи HC и будет больше! А искать пути обхода ограничений бесплатной версии на оф.сайте - это совсем не скромно и не разумно...


Название: Расширения на языке Lua в HandyCache
Отправлено: Virus88 от 15 июля 2010, 16:57:53
я не ищу способы обхода... раз разрешено на 1 акаунте несколько юзеров, значит не запрещено...


Название: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 15 июля 2010, 17:05:45
Вообще-то в лицензии написано, что можно использовать в некоммерческих целях (у тебя дома 60 юзеров?) и если количество пользователей Программы не превышает пяти.
Цитировать
Пользователь имеет право
Использовать Программу для ознакомительных целей в течение 30 (тридцати) дней с момента ее первого запуска (инсталляции).
Использовать Программу для некоммерческих целей неограниченный срок в случае, если количество пользователей Программы не превышает пяти.


Название: Расширения на языке Lua в HandyCache
Отправлено: Virus88 от 15 июля 2010, 17:17:53
хм... ну пользователей программы всего 2... использую в не коммерческих целей.... просто сделал прокси для знакомых...


Название: Расширения на языке Lua в HandyCache
Отправлено: NataschaS от 09 августа 2010, 18:42:32
Извините совсем не продвинутого юзера.
Возвращаясь к вопросу с запретом vkontakte и odnoklassniki. Какой должен быть скрипт, чтобы запретить эти сайты в рабочие дни в рабочее время с 9-30 до 18-30 определенным товарищам?
Не поняла где это сделать "в список Серверов-посредников необходимо добавить 2 строки (использовать команду Добавить из буфера):"
Не нашла в скачанном архиве  hc_script.zip файл luaR.lst
Буду очень признательна за помощь.


Название: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 09 августа 2010, 19:46:21
Возвращаясь к вопросу с запретом vkontakte и odnoklassniki. Какой должен быть скрипт, чтобы запретить эти сайты в рабочие дни в рабочее время с 9-30 до 18-30 определенным товарищам?

Привел пример здесь: http://handycache.ru/component/option,com_smf/Itemid,10/topic,2716.msg26936/#msg26936
Сохрани его в файл с расширением .lua и добавь этот файл в список расширений HC через соответствующую вкладку в настройках HC.

Не поняла где это сделать "в список Серверов-посредников необходимо добавить 2 строки (использовать команду Добавить из буфера):"
Не нашла в скачанном архиве  hc_script.zip файл luaR.lst

Все это делать уже не надо! Устарело! Тему надо было читать с конца и еще читать файл HCExtensions.html из комплекта HandyCache версии RC3 1.0.0.295.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Sogenius от 15 августа 2010, 11:47:34
Добрый день! Можно ли с помощью расширения заменить, либо вообще удалить все слова, наподобие "ИМХО", "УМВР", "ЧЯДНТ" и тому подобный мусор со страницы?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 15 августа 2010, 12:55:30
Это можно сделать расширением СМ. Для этого нужно сделать свой файл с правилами замены. Первая строка файла должна быть такой:
## REPLACEMENTS
Дальше должны быть записи в таком формате:
правило для URL#~#Что заменить#~#Чем заменить
здесь "правило для URL" - регулярное выражение, которое будет выделять URL, где нужна замена;
Для твоей задачи нужно вписать такую строку:
.#~#ИМХО|УМВР|ЧЯДНТ#~#

Этот файл нужно положить в папку СМ. Дальше открыть настройки СМ и вписать имя нового файла с правилами в текстовое поле рядом с галкой ContentMaster через запятую после ContentMaster_Default.txt.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Sogenius от 15 августа 2010, 13:36:28
Спасибо, сделал, работает, правда не на всех ресурсах. На этом сайте срабатывает, на некоторых других - нет. Например на http://forum.sevastopol.info и  http://www.linux.org.ru почему-то не вырезает...


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 15 августа 2010, 14:01:25
Если СМ работает с этими сайтами, должна и замена работать.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Sogenius от 15 августа 2010, 14:10:57
В мониторе, в поле "Правила" имеется запись, например СМ:32 hits, СМ:6 hits.....если заходишь на сайты которые я указал выше, но замена не работает 


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 15 августа 2010, 14:37:55
Наверное, кодировка на этих сайтах отличается от той, в которой прописано правило для СМ.
Добавлено: 15 Августа 2010, 14:13:22

Попробовал улучшить ситуацию. Если будет работать без сбоев, внедрим этот экспериментальный вариант окончательно. Обновитесь, плз.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Sogenius от 15 августа 2010, 14:53:51
Да, теперь и на страницах с кодировкой utf-8 работает. Спасибо.

А нельзя сделать так, чтобы расширение рпаботало независимо от регистра символов? Сейчас получается что заменяемое слово ищется строго по регистру символов в котором оно записано в правиле, а если регистр отличается на странице то оно его пропускает.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 15 августа 2010, 17:13:07
А нельзя сделать так, чтобы расширение рпаботало независимо от регистра символов?
Попробовал и с этим побороться.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Sogenius от 15 августа 2010, 17:20:56
Теперь всё замечательно, походил по разным ресурсам - срабатывает везде! Еще раз спасибо.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Parcher от 21 августа 2010, 20:09:07
А нет случайно готового списка нецензурных и нежелательных слов? А то самому как-то тошно всякие гадости писать...


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 21 августа 2010, 20:36:34
http://www.google.ru/search?q=словарь+нецензурных+слов


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Parcher от 22 августа 2010, 01:51:25
Заметил интересную вещь: в слове пускает СМ заменяет выделенные буквы на *** (стоит замена текста). Для СМ без разницы в какой последовательности буквы? Или я где-то ошибся?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 22 августа 2010, 14:37:19
Покажи какую замену ты попросил СМ сделать.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Parcher от 22 августа 2010, 17:04:54
Делал вроде все по инструкции. Правило такое .#~#сука#~#***** (другие слова не пишу здесь)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 22 августа 2010, 17:27:36
На каком сайте такая проблема с этим правилом?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Parcher от 22 августа 2010, 20:42:34
http://vkopt.net.ru/forum/showpost.php?p=32357&postcount=7 и на ютюбе попробовал сделать поиск по слову "пускает" и тоже заменило на п*****ет. Но на этом сайте все нормально  ???


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 22 августа 2010, 21:03:02
Здесь это оффтоп. Ответил в теме.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: sunserg10 от 26 ноября 2010, 18:03:43
Пожалуйста, помогите написать расширение...
нужно, чтобы опция Кэш-Управление-Запись в кэш-"Игнорировать no-store"
была активна только для определенных URL.
Т.е. при выключенной опции "Игнорировать no-store",  при загрузке из интернета
по URL:finam\.ru/sp/=.*=42.jpg картинка должна принудительно записываться в кэш.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 26 ноября 2010, 20:37:00
Как-то так
Код:
--[[ <HCExtension>
@name          Ignore no-store
@rule          finam\.ru/sp/=.*=42.jpg
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]

function Answer()
  hc.action = 'save'
  hc.monitor_string = hc.monitor_string ..'Ignore no-store'
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: sunserg10 от 26 ноября 2010, 22:41:53
mai62, спасибо!
Все отлично работает! Держи +.  :good:

Немного переделал твое расширение.
Файл eA_Ignore no-store.lua
Код:
--[[ <HCExtension>
@name          Игнорировать no-store (A-Ignore no-store)
@author        mai62
@version       0.1 для HC v1.00 RC3 (1.0.0.303)
@rule          finam\.ru/sp/=.*=42.jpg
@description   Принудительно записывает в кэш файлы (при выключенной опции "Ignore no-store")
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]

function Answer()
  hc.action = 'save'
  hc.monitor_string = hc.monitor_string..'A-Ignore no-store '
end  -- Конец функции Answer


Название: Где ошибка в моем скрипте
Отправлено: Tsv от 06 января 2011, 09:42:44
Для моих нужд хочу сохранять результат с заголовком запроса. причем историю (т.е. не в кэш - а чтобы каждое обращение писалось в отдельный файл).
Сел, разобрался с LUA на примерах, написал простенький скрипт. В LuaTest все зашибительно работает - и файлы создаются и содержимое правильное пишется. А из самого HC - работает наполовину. Файлы создаются (т.е. скрипт вызывается), но пустые. Я попробовал допихать еще все вариации названий переменных какие смог придумать (в т.ч. как мануале) - но все равно пусто.
Где ошибка в скрипте?


--[[ <HCExtension>
@name          Сохранять файлы с header
@author        MY
@version       1.0
@description   Сохранить файл
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]

function GetContentType(s)
  _,_,x = string.find(s, '[cC]ontent%-ype: *(.-) *\r?\n')
  if x~=nil then x = string.lower(x) end
  return x
end

function Answer()

 type = GetContentType(hc.answer_header)
 if string.match(type,'text/html') == nil then
    return 1
 end

 local content = hc.header
 content = content..hc.answer_body

 urlname = string.match( hc.url, '([^/:]+)$' )
 if urlname == nil then
  urlname='_'
 end
 filename = 'Z:/hist/'..os.date('%Y-%m-%d_%H-%M-%S_')..urlname
 filename = string.gsub ( filename, "%?", "_")

 local f = assert(io.open(filename, "w"))
 local t = f:write(content)
 t = f:write(hc_answer_body)
 t = f:write(hc.answer_header)
 t = f:write(hc.answer_body)
 t = f:write(hc.hc_answer_body)
 f:close()

end  -- Конец функции Answer



Название: Re: Где ошибка в моем скрипте
Отправлено: mai62 от 06 января 2011, 11:51:19
Читайте файл HCExtensions.html (находится в архиве с НС в папке Extensions), там написано в обработчиках каких событий  можно использовать каждую переменную.
Для отладочных целей используйте функцию hc.put_to_log(). Она выводит строку в лог НС (лог ведется при нажатой кнопке Вести лог справа от Монитора).
Код:
hc.put_to_log('hc.url='..hc.url)
urlname = string.match( hc.url, '([^/:]+)$' )
hc.put_to_log('urlname='..urlname)
В лог также выводятся сообщения об ошибках.
Отрабатывать алгоритмы, знакомиться с работой функций удобно в программе LuaTest (находится в архиве с НС). В ней также можно использовать функцию hc.put_to_log().


Название: Re: Где ошибка в моем скрипте
Отправлено: Михаил от 06 января 2011, 23:58:30
Навскидку:
hc.header - такого нет. Есть hc.request_header и hc.answer_header.
hc.answer_body - в процедуре обработки AnswerHeaderReceived еще не определено, т.к. тело ответа еще не пришло, поступил только заголовок.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: SergS от 02 февраля 2011, 11:59:04
почему пример с user-agent (http://handycache.ru/component/option,com_smf/Itemid,10/topic,1120.msg25817/#msg25817) не работает с Referer?


(http://i011.radikal.ru/1102/40/903e981df3b5.jpg)


кстати, гугл-аналитик в чёрном списке, но почему-то он присутствует


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 02 февраля 2011, 13:22:05
почему пример с user-agent (http://handycache.ru/component/option,com_smf/Itemid,10/topic,1120.msg25817/#msg25817) не работает с Referer?

Если ты правильно изменил скрипт под Referer, то должно работать! Код своего расширения покажи.

Цитировать
кстати, гугл-аналитик в чёрном списке, но почему-то он присутствует

Где присутствует?

P.S. Хватит ребусы загадывать! Конкретику пиши!


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: SergS от 02 февраля 2011, 13:28:22
Если ты правильно изменил скрипт под Referer, то должно работать! Код своего расширения покажи.
Код:
function Request()
hc.request_header = re.replace(hc.request_header, [[^Referer: \K[^\r\n]+]], '\n')
end

Где присутствует?
в логе




Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 02 февраля 2011, 14:07:51
Код:
function Request()
hc.request_header = re.replace(hc.request_header, [[^Referer: \K[^\r\n]+]], '\n')
end

В замене '\n' быть не должно.

Цитировать
в логе

То, что блокируется Черным списком, должно быть видно в логе.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: SergS от 02 февраля 2011, 14:26:33
То, что блокируется Черным списком, должно быть видно в логе.

да я всё пробовал, не получается.

То, что блокируется Черным списком, должно быть видно в логе.


мне кажется, что отображение изображения отключено, но на всяк случай, в первом посте фотка лога )

зы: было бы удобней лог читать если раскрасить, как в мониторе HC (или как Proxomitron'e)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 02 февраля 2011, 16:24:37
да я всё пробовал, не получается.

Я тоже пробовал, у меня получается!

мне кажется, что отображение изображения отключено, но на всяк случай, в первом посте фотка лога )

Я видел. И в чем проблема? Из твоего лога видно только, что пришел запрос. А что его HC заблокировал должно быть видно дальше в логе. Где продолжение?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: maxnax от 12 февраля 2011, 21:40:34
Попытался переделать 'Сохранять нужные ответы 404 (A-404s)' на сохранение 500 ошибок , но жестоко обломился ... В связи с чем вопрос - а работает ли оно в принципе с 1.0.0.303


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 13 февраля 2011, 01:51:01
Попытался переделать 'Сохранять нужные ответы 404 (A-404s)' на сохранение 500 ошибок , но жестоко обломился ... В связи с чем вопрос - а работает ли оно в принципе с 1.0.0.303
Зачем переделывать когда тут есть.
eA_Save_500 Это оно?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: maxnax от 14 февраля 2011, 00:51:54
Так оно отличается только тем , что там 404 заменено на 500 , так я это и делал ...
А проблема в том , что не заметил поля @rule - прописал там , что надо , и всё заработало


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: popkov от 21 февраля 2011, 06:03:10
Помогите написать расширение, которое бы при успешном дозвоне встроенной звонилкой HC проигрывало, к примеру, файл "C:\WINNT\Media\УТОПИЯ - стандартный звук.WAV", а при неожиданном разрыве соединения - файл "C:\WINNT\Media\УТОПИЯ - ошибка.WAV", не отображая никаких окон и ничего не отображая в Мониторе. Проигрывать, как я понял, можно с помощью hc.play_sound('C:\WINNT\Media\УТОПИЯ - стандартный звук.WAV'), но как обнаружить и обработать установление и разрыв совдинения?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 21 февраля 2011, 15:16:39
но как обнаружить и обработать установление и разрыв совдинения?

Разрыв подключения к интернету в расширениях можно обнаружить, например, периодически шля HEAD-запросы функцией hc.send_request() на какой-нибудь URL.
Отдельной функции для обнаружения разрыва подключения к интернету, как для автономного режима, в расширениях нет.

Кстати, если у тебя включена опция "Переходить в автономный режим при отсутствии соединения с интернетом", то можешь просто проверять по таймеру состояние переменной hc.offline_on и при ее изменении выдавать звуковые сигналы.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 25 марта 2011, 21:26:12
Может кто-нибудь подсказать скрипт который бы записывал получаемый из интернета файл сразу в два места, при этом с разными именами. Интересует чтобы кроме обычного места куда записывается файл, была возможность записать файл также с датой, т.е. т.н. временной бэкап. т.е. файл с официальным названием перезаписывается, а вот с датой в имени файла нет, и таким образом появляется возможность просмостреть историю. при чём запись в два места должна осуществляться одновременно за один запрос. Естественно что это должно делаться только для определённых сайтов, но это я способен сделать и самостоятельно, проблема как раз в том чтобы нормально записывать файл на диск, а то у меня не получается.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 26 марта 2011, 00:23:08
Zoynels
Мне кажется что-то подобное кто-то делал. Что-то типа тайм-машины называется.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: itt от 28 апреля 2011, 19:52:25
Создал  тему в курилке, mai62 отправил за помощью сюда.
Цитирую написанное мною сообщение:

Цитировать
Здравствуйте, суть  ситуации такая, НС стоит на серваке  и  раздает инет пользователям.  Требуется решить задачу: как сделать так что бы каждый пользователь  мог получить  от меня  сообщение.  Для более ясного  понимания приведу пример:  десять  человек юзают инет через НС, под конец месяца все  должны  скинуться для  оплаты инета, но как обычно все (или некотороые) забывают и помнит только один человек (админ). Как  сделать так что бы админ сервака разослал   всем пользователем напоминание об этом? (сотовые, аськи,  электронная  почта не в  счет) Может  есть какое то расширение что человек выходит  в инет а ему бац  и сообщение "НЕ ЗАБУДЬ......" (типа такого когда просит ввести  имя  пользователя и пароль)он жмет кнопку ОК и работает дальше и так  при каждом выходе в инет  пока админ  не  отключит данное напоминание.

Кто что посоветует?



ПС, замучился  бегать и  напоминать что пора скидываться, ищу выход..


Может кто нить сможет написать такое расширение?
оригинал моего  топика http://handycache.ru/component/option,com_smf/Itemid,10/topic,3928.msg31517/topicseen,1/#msg31517

ответы если  буду прошу писать в это теме
Заранее благодарен за помощь


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: itt от 30 апреля 2011, 11:39:23
и тишинаааа...  Может  кто за деньги может написать такое расширение???
Ну помогите, нужно  очень


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: alex77 от 30 апреля 2011, 12:10:19
Может  есть какое то расширение что человек выходит  в инет а ему бац  и сообщение "НЕ ЗАБУДЬ......" (типа такого когда просит ввести  имя  пользователя и пароль)он жмет кнопку ОК и работает дальше и так  при каждом выходе в инет  пока админ  не  отключит данное напоминание.
без дополнительного софта, я (например) не представляю как это сделать.

А совет может быть такой: использовать Анасерв и раздавать инет по предоплате и трафику.
Человек платит на месяц вперед и говорит сколько ему трафа нужно на месяц. Вы выставляете это ограничение, а по окончании - юзер без инета до оплаты)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: itt от 01 мая 2011, 09:13:49
АнаСерв стоит, но это  проблему не решает, через АнаСерв можно отправить сообщение при окончание  трафа, мне это не надо, мне  надо что бы работало все без перебоев и  в то же  время  я мог отправить сообщение.
Ладно, буду думать, попробую разработчикам АнаСерв написать, что бы  они такую штуку внедрили. Думаю  полезная  вещь, не только мне пригодится.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: maxn от 04 мая 2011, 11:56:49
скажите, есть ли скрипты для ограничения пользователя по трафику, например 20Мб в день?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: alex77 от 04 мая 2011, 13:07:34
скажите, есть ли скрипты для ограничения пользователя по трафику, например 20Мб в день?
готового скрипта нет (если самому не написать), но есть утилита, которая с этим отлично справится - AnaServ (http://handycache.ru/component/option,com_remository/Itemid,2/func,fileinfo/id,35/)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 04 мая 2011, 13:22:39
скажите, есть ли скрипты для ограничения пользователя по трафику, например 20Мб в день?

Есть:

Код:
--[[ <HCExtension>
@name          Дневной лимит трафика (RS-lim)
@author        DenZzz
@version       1.2 для HC v1.00 RC2 (1.0.0.184) и выше
@description   Устанавливает лимит дневного трафика для пользователя Vasya на 20 Мб в день
@event         BeforeRequestHeaderSend/RequestSend
</HCExtension> ]]

function RequestSend()
 if hc.user_name == 'Vasya' and hc.user_from_internet > 20*1024*1024 then
  hc.action = 'stop'
  hc.monitor_string = hc.monitor_string..'RS-lim '
 end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: sergo от 25 июня 2011, 14:12:10
Со следующей усовершенствованойверсией lua НС работать не сможет?
Ставлю lua-5.2.0-beta-rc2 и никакой работы а одни вылеты


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 25 июня 2011, 19:30:00
Раз одни вылеты, значит не может.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: sergo от 25 июня 2011, 20:04:08
Что не может это налицо.
Вопрос был сможет ли? Новая lua декларирует повышение характеристик
Посмотрите отличия от 5.1 на http://www.lua.org/work/doc/manual.html#8 может поможет согласовать их работу


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 25 июня 2011, 20:54:43
Насколько я понимаю, опубликован кандидат в бета-версии. До финала еще многое поменяется. Когда сделают финал, будем адаптироваться.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 24 июля 2011, 13:00:30
Здравствуйте!
Как засечь в скрипте время выполнения куска скрипта Lua?
os.clock() не дает правильного результат, итог зависит от загруженности другими потоками и результат постоянно разный


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 24 июля 2011, 13:19:53
Как засечь в скрипте время выполнения куска скрипта Lua?
os.clock() не дает правильного результат, итог зависит от загруженности другими потоками и результат постоянно разный

Больше никак. Усредняй результат.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 24 июля 2011, 13:26:49
Усреднение не дает уверенного результата, комп все время нагружен по разному
жалко
спасибо тем не менее


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 07 августа 2011, 10:28:56
m = re.match('abc', '(b)|(a)')
в результате что должно дать: m[1]=nil и m[2]=подтаблица?
как ни крутил кроме m[0] ничего в таблице m больше нет.
если что-то не так делаю скажите пожалуста.
Если это ошибка НС исправьте, хотелось бы быстро


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 07 августа 2011, 13:57:23
Byfuglien
Похоже что-то там не так.
Можно использовать функции re.substr(), я проверил работает.
Для Вашего примера re.substr(0) выдаст "a", re.substr(1) выдаст пустую строку, re.substr(2) выдаст "a".
Положение и размер подстрок можно получить функциями re.substr_offset() и re.substr_length().


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 07 августа 2011, 16:28:09
попробовал и тоже не получиается с примером который я приводил
re.substr_count() выдает 2, хотя найдена должна быть всего одна подстрока. Может оно дает не количество подстрок как написано в хелпе, а максимальный номер из найденных подстрок?
re.substr(1) возвращает пустую строку хотя должно наверно быть nil


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 07 августа 2011, 18:48:41
Вы правы поведение отличестся от описанного в файле HCExtensions.html.
Файл HCExtensions.html будет исправлен:
1. re.substr_count() возвращает максимальный номер из найденных подстрок
2. если подстрока не найдена, возвращается пустая строка (а не nil? как написано сейчас).
Изменять поведение функций не буду, т.к. это может нарушить работоспособность уже имеющихся разрешений.

P.S. Вам + за найденную ошибку.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 07 августа 2011, 18:52:16
Цитировать
если подстрока не найдена, возвращается пустая строка
тогда не получится отличить случай если подстроки вообще не было от случая когда она найдена и равна пустой строкен
Цитировать
Вам + за найденную ошибку.
Спасибо.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 07 августа 2011, 20:05:14
Цитировать
тогда не получится отличить случай если подстроки вообще не было от случая когда она найдена и равна пустой строкен
Можно использовать функцию re.substr_offset(). Если она возвращает 0, то подстрока с этим номером не была найдена.
Тут тоже ошибка в файле HCExtensions.html, там написано -1. Номера символов в lua-строке начинаются с 1, нулевого символа не бывает.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 07 августа 2011, 20:39:09
Цитировать
Можно использовать функцию re.substr_offset(). Если она возвращает 0, то подстрока с этим номером не была найдена.
Тут тоже ошибка в файле HCExtensions.html, там написано -1. Номера символов в lua-строке начинаются с 1, нулевого символа не бывает.
и здесь не получается. После выражения
m = re.match('abc', '(b)|(d)')
re.substr_offset(2) выдает -1

и после re.substr() равного пустой строке дополнительно проверять, а есть лои в самом деле эта подстрока не красиво както
Добавлено: 07 Августа 2011, 20:29:25

мне кажется в описании правильно сказано и надо при отсутствии строки возвращать nil из re.substr()


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 07 августа 2011, 20:49:13
Цитировать
re.substr_offset(2) выдает -1
Это не принципиально. Можно делать проверку так: если смещение больше нуля, то подстрока найдена.
Цитировать
и после re.substr() равного пустой строке дополнительно проверять, а есть лои в самом деле эта подстрока не красиво както

Я попробовал возвращать nil, если подстрока не найдена, и Content Master перестал работать. Возможно и другие расширения перестанут работать.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 07 августа 2011, 23:13:08
re.substr_count() в хелпе полезно указать что возвращает если вообще регэкс не сработал
Цитировать
Я попробовал возвращать nil, если подстрока не найдена, и Content Master перестал работать. Возможно и другие расширения перестанут работать.
плохо. Ну тогда хотябы в хелпе исчерпывающее описание этих нюансов сделать можно
Добавлено: 07 Августа 2011, 22:49:03

еще скажите пожалуйста сферу применения функции re.offsets_vector_size()?
m = re.match('abc', 'a')
re.offsets_vector_size() выдает равным 6
Что это за число и когда его использовать неясно. Можно ли в хелпе это пояснить?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 07 августа 2011, 23:35:47
Цитировать
еще скажите пожалуйста сферу применения функции re.offsets_vector_size()?
Чтобы понять о каком векторе речь, нужно познакомиться с документацией на библиотеку PCRE. В этом векторе (массиве) PCRE хранит результаты выполнения регулярного выражения и собственно оттуда получают информацию функции re.substr_offset(), re.substr_length() и др. Использование этого вектора - это альтернативный способ доступа к результатам без посредников в лице названных функций. Однако, он требует от пользователя знание некоторых особенностей библиотеки, языков С (на нем написана PCRE) и lua.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 20 августа 2011, 18:57:39
В событии 1-минутного таймера не определена переменная hc.event


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 29 августа 2011, 23:16:01
Тихо. Не принято отвечать или просмотрели?
Попробовать еще надеюсь ответы будут.
1. Как сделать так: расширение в ходе инициализации или в ходе работы спрашивает пользователя, нужна ли ему предоставляемая им функциональность. Если да, то расширение работает дальше. Если нет то оно отключается на весь дальнейший сеанс работы НС. Как  это отключение осуществить, чтоб отключение было не псевдо а реальным, в том числе вызвался бы destroy?
2. Инициализация еще не завершилась, ждем ответ пользователя, а в расширении уже работают другие обработчики. По моему надо сделать чтобы все обработчики могли вызываться только после окончания инициализации.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 30 августа 2011, 11:40:08
Цитировать
В событии 1-минутного таймера не определена переменная hc.event
Спасибо, поправлю.
Цитировать
Как сделать так: расширение в ходе инициализации или в ходе работы спрашивает пользователя, нужна ли ему предоставляемая им функциональность.
Это вопрос не по НС, а по lua. Есть разные библиотеки для реализации пользовательского интерфейса для lua, какой пользоваться выбирайте сами. В файле HCExtensions.html есть ссылки на несколько примеров таких библиотек.
Цитировать
Если да, то расширение работает дальше. Если нет то оно отключается на весь дальнейший сеанс работы НС. Как  это отключение осуществить, чтоб отключение было не псевдо а реальным, в том числе вызвался бы destroy?
Можно завести в расширении переменную, от состояния которой будет зависеть выполнение функций расширением.
Функцию - обработчик события destroy расширение может вызвать в любой момент.
Цитировать
Инициализация еще не завершилась, ждем ответ пользователя, а в расширении уже работают другие обработчики. По моему надо сделать чтобы все обработчики могли вызываться только после окончания инициализации.
Вы это проверяли? В крайней версии не должны вызываться обработчики событий до конца инициализации.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 30 августа 2011, 19:33:47
Цитировать
Можно завести в расширении переменную, от состояния которой будет зависеть выполнение функций расширением.
Функцию - обработчик события destroy расширение может вызвать в любой момент.
Это как раз и имел в виду под "псевдо" отключением. На самом деле расширение не "разрегистрируется", а продолжает получать управление с каждым запросом
Цитировать
Вы это проверяли? В крайней версии не должны вызываться обработчики событий до конца инициализации.
Проверялось, вызывается RequestHeaderReceived. Другие не проверял, не исключено тоже вызываются


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 31 августа 2011, 12:39:07
Цитировать
Это как раз и имел в виду под "псевдо" отключением. На самом деле расширение не "разрегистрируется", а продолжает получать управление с каждым запросом
"Разрегистрировать" расширение можно функцией hc.enable_extension(), но тогда оно не запустится при следующем старте.
Количество вызываемых обработчиков можно радикально уменьшить с помощью переменной hc.extensions_on.
Цитировать
Проверялось, вызывается RequestHeaderReceived. Другие не проверял, не исключено тоже вызываются
А точно обработчик Init у Вас висит (не завершает выполнение)? Я предпринимал меры для того, чтобы обработчики в такой ситуации не вызывались. Надо будет проверить, возможно что-то и пролазит.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 31 августа 2011, 13:00:06
Цитировать
Проверялось, вызывается RequestHeaderReceived. Другие не проверял, не исключено тоже вызываются
А точно обработчик Init у Вас висит (не завершает выполнение)? Я предпринимал меры для того, чтобы обработчики в такой ситуации не вызывались. Надо будет проверить, возможно что-то и пролазит.

Подтверждаю. Во время работы Init расширение продолжает обрабатывать другие события.
Проверить легко: если сразу после загрузки обновления СМ пока идет переинициализация попытаться открыть какие-нибудь страницы, то получишь испорченные куски HTML кода от обработчика тела СМ.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Byfuglien от 01 сентября 2011, 09:23:18
Цитировать
"Разрегистрировать" расширение можно функцией hc.enable_extension(), но тогда оно не запустится при следующем старте.
Спасибо буду пробовать
Цитировать
А точно обработчик Init у Вас висит (не завершает выполнение)?
Точно, он ждет нажатия кнопки пользователем


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ViKtOrV от 13 сентября 2011, 21:45:01
И снова о старом.
Использую расширение
Цитировать
Код:--[[ <HCExtension>
@name BlackListDisabler
@author mai62
@version 0.01
@description Отключает Черный список для заданных пользователей
@event RequestHeaderReceived/request
</HCExtension> ]]

function request()
if hc.user_name == 'user1' then
 hc.white_mask="Ч"
 end
end

Работает хорошо, но всё же хотелось бы делать доступными не все сайты. Как будет выглядеть это расширение с блокировкой, например, всех социальных сетей?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 13 сентября 2011, 22:44:12
Измените расширение так
Код:
--[[ <HCExtension>
@name BlackListDisabler
@author mai62
@version 0.01
@description Отключает Черный список для заданных пользователей
@event RequestHeaderReceived/request
</HCExtension> ]]

function request()
if hc.user_name == 'user1'
 and not re.find(hc.url, [[vcontacte\.ru|twitter\.ru]], 0) then
 hc.white_mask="Ч"
 end
end
Список запрещенных сайтов расширяйте через символ |


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ViKtOrV от 14 сентября 2011, 00:00:56
Спасибо. Работает.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Enver от 22 октября 2011, 23:41:40
Как с помощью handycache сделать такое:
Я вписываю слова или выражения в текстовый файл построчно и каждое встреченное слово на сайтах выделяется цветом.

Очень прошу помочь с этой задачкой


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 23 октября 2011, 00:53:35
Пожалуй, только с помощью СМ...


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Enver от 23 октября 2011, 07:57:43
Хорошо, запощу в его топике. Здесь мой пост просьба удалить


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 26 декабря 2011, 10:06:55
Для чего нужно расширение My 407-answer? Из описания не очень понятно: "Заменяет запрос в ответе 407".


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 26 декабря 2011, 14:05:03
Ответ 407 выдается когда нужно запросить пароль у пользователя. Это расширение позволяет заменить текст, который выводится при запросе пароля.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 25 января 2012, 17:13:07
Подскажите пожайлуста, как можно определить кодировку принимаемого текста...
И вот мой скрипт "тайм-сервера". он сохраняет одновременно в два места, при чём второй файл сохраняется с датой, таким образом не потеряется затёртая информация... Может кому и пригодится...


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 25 января 2012, 18:48:06
Ищите в заголовке ответа строку типа
Content-Type: text/html; charset=utf-8


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 25 января 2012, 20:07:44
Так и думал, а другого способа нет? Просто не факт что кодировка записывается каждый раз, или всё таки всегда?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 25 января 2012, 21:22:26
Еще в коде страницы может быть строка вроде такой
<META content="text/html; charset=windows-1251" http-equiv=Content-Type>

Наличие и правильность этой информации, конечно, никто не гарантирует. Все зависит от добросовестности администратора сервера.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 08 февраля 2012, 13:17:53
Ещё вопросик. Может у кого-то уже имеется скрипт по алгоритму написанному в этой теме: http://handycache.ru/component/option,com_smf/Itemid,10/topic,72.msg508/#msg508 (Алгоритм работы опции "Индексные файлы"). Если не жалко то выложите пожайлуста.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ViKtOrV от 12 февраля 2012, 20:38:36
Почему-то не работает расширение BlackListDisabler от mai62 приведенное в ответе №306  стр.16 (http://handycache.ru/component/option,com_smf/Itemid,10/topic,1120.300/ (http://handycache.ru/component/option,com_smf/Itemid,10/topic,1120.300/)). НС  1.0 RC3 (1.0.0.377)
Буду признателен за рабочую версию.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 12 февраля 2012, 20:57:18
У меня оно работает. Или Вы его изменили и в таком виде оно не работает, или вы поставили неправильный диагноз.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 25 февраля 2012, 07:00:33
Имеется скрипт который в зависимости от URL и некоторых других параметров использует разные прокси, имеется список прокси и теперь вопрос: можно ли каким-то образом проверить перед использованием прокси доступен он или нет, и если не доступен то перейти к следующему по списку? Собственно вопрос как узнать рабочий прокси или нет...


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 25 февраля 2012, 12:30:10
Собственно вопрос как узнать рабочий прокси или нет...

Послать через этот прокси пробный HTTP-запрос с помощью hc.send_request()


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 25 февраля 2012, 12:50:11
Послать через этот прокси пробный HTTP-запрос с помощью hc.send_request()
А как понять есть ли ответ или нет, ведь hc.send_request() не возвращает никаких значений?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 25 февраля 2012, 15:04:11
Можно отправить запрос через текущий прокси и, если будет ошибка соединения (перехватить ответ и проанализировать), то следующий запрос отправить через другой прокси.
Другой вариант - взять lua-библиотеку для работы с сокетами и проверить работоспособность проси. Здесь где-то есть мое расширение, работющее с такой библиотекой.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 27 февраля 2012, 10:20:19
Буду пробывать, а пока заметил баг: не правильно работают hc.hide_in_active_list и hc.hide_in_monitor, либо я не понял функционал. Скриптом устанавливаешь в true, но они продолжают появляться, но если нажать в мониторе "Фильтрация записей в мониторе", а потом включить/выключить "Разрешить фильтрацию", то они действительно пропадают (даже после выключения! что есть правильно), а нужно чтобы они сразу пропадали или я не правильно понял? Если правильно, то это явно не доработка, хоть и не большая...

Ну и ещё хорошо было бы тогда добавить в execute_cmd, опцию для изменения режима фильтрации или уже имеется?
И если не будет нахальством ещё небольшая просьба: нельзя ли опцию "чтение из кеша" добавить в Белый Список, ну и тогда можно будет убрать hc.read_from_cache_on, тем более что и без скрипта также можно будет добавлять правила (дополнительный список создавать не нужно, пусть прямо в белом списке просто включается/выключается опция). Где такое может пригодиться? Ну сразу приходят на ум различные чаты, их не имеет смысла ни записывать, и запрашивать с диска, только из интернета...


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 27 февраля 2012, 13:16:50
Цитировать
Скриптом устанавливаешь в true, но они продолжают появляться, но если нажать в мониторе "Фильтрация записей в мониторе"
Вы в обработчике какого события hc.hide_in_active_list и hc.hide_in_monitor используете? Вы заметили, что их можно использовать только в обработчике BeforeViewInMonitor?
Цитировать
И если не будет нахальством ещё небольшая просьба: нельзя ли опцию "чтение из кеша" добавить в Белый Список
Там уже есть Запись в кэш. Заблокируйте запись и читать нечего будет.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 27 февраля 2012, 17:33:30
Цитировать
Скриптом устанавливаешь в true, но они продолжают появляться, но если нажать в мониторе "Фильтрация записей в мониторе"
Вы в обработчике какого события hc.hide_in_active_list и hc.hide_in_monitor используете? Вы заметили, что их можно использовать только в обработчике BeforeViewInMonitor?
Действительно оказалось что запрашивал из другого обработчика (RequestHeaderReceived)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 06 марта 2012, 09:49:39
хм, существуют расширения eR_Dont_update_image_by_type_in_cache.lua и eR_Dont_update_video_by_type_in_cache.lua, а как можно тоже самое сделать но с zip и прочими архивами, всё таки на форумах в аттачах бывают не только рисунки и видео, очень часто как раз архивы. Пока в hc.cache_file_content_type отображается пустая строка иначе сам бы сделал.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 08 марта 2012, 18:29:07
подскажите как сделать чтоб такое расширение срабатывала только тогда когда размер файла меньше килобайта.
--[[ <HCExtension>
@name          Çàïðåòèòü ÷òåíèå èç êýøà í WiiNet  (R-NoCache)
@author        DenZzz
@version       0.1
@description   Çàïðåùàåò ÷èòàòü èç êýøà. Óäàëÿåò IMS è INM èç çàãîëîâêîâ çàïðîñîâ.
@rule            attach
@event         RequestHeaderReceived/Request
</HCExtension> ]]

function Request()
   if re.find(hc.url, [[handycache.ru]]) then
      hc.request_header = re.replace(hc.request_header, [[^If-Modified-Since:[^\r\n]+\r\n]], '')
      hc.request_header = re.replace(hc.request_header, [[^If-None-Match:[^\r\n]+\r\n]], '')
      hc.read_from_cache_on = false
      hc.white_mask = 'Í'
      hc.monitor_string = hc.monitor_string..'R-NoCache WiiNet'
   end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 08 марта 2012, 23:33:41
Посмотрите расширение Extensions\eA_Dont_update_file_by_size.lua.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 09 марта 2012, 07:06:51
я работал с этим расширением но склеить их вместе у меня не получается. ПОМОГИТЕ
Добавлено: 09 Март 2012, 06:49:50

изначально брал за основу  расширение "блокировать загрузку больших файлов (A-long)" но нужного результата добиться не смог
Добавлено: 09 Март 2012, 06:58:11

--[[ <HCExtension>
@name          Áëîêèðîâàòü çàãðóçêó áîëüøèõ ôàéëîâ (A-long)
@author        DenZzz
@version       1.1 äëÿ HC v1.00 RC2 (1.0.0.175) è âîçìîæíî âûøå
@description   Áëîêèðóåò çàãðóçêó ôàéëîâ, êîòîðûå áîëüøå çàäàííîãî ïðåäåëüíîãî ðàçìåðà
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]



function GetContentLength(s)
  _,_,x = string.find(s, '[cC]ontent%-[lL]ength: *(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end



function Answer()

 -- çàáèðàåì ðàçìåð ôàéëà èç çàãîëîâêà 'Content-Length'
  len = GetContentLength(hc.answer_header)

   -- åñëè ðàçìåð ôàéëà åñòü â çàãîëîâêå è îí áîëüøå 200000 áàéò
    if len < 1024 then
     -- è äåéñòâèå HC åùå íå ïðèñâîåíî èëè ïðèñâîåíî 'Ñîõðàíÿòü', òî áëîêèðîâàòü çàãðóçêó
      function Request()
       if re.find(hc.url, [[handycache.ru]]) then
       hc.request_header = re.replace(hc.request_header, [[^If-Modified-Since:[^\r\n]+\r\n]], '')
       hc.request_header = re.replace(hc.request_header, [[^If-None-Match:[^\r\n]+\r\n]], '')
       hc.read_from_cache_on = false
       hc.white_mask = 'I''
       hc.monitor_string = hc.monitor_string..'R-NoCache WiiNet'
      end
    end
end

end  -- Êîíåö ôóíêöèè Answer




подскажите где я ошибся


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 09 марта 2012, 08:33:10
Что если вместо AnswerHeaderReceived использовать RequestHeaderReceived и вместо
len = GetContentLength(hc.answer_header)
написать
len = hc.cache_file_size


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 14 марта 2012, 14:37:52
Подскажите где ошибка




--[[ <HCExtension>
@name          WiiProxy WOW
@author        igorek
@version       0.2
@description   Ïðîâåðèòü äîñòóïíîñòü âíåøíåãî ïðîêñè
@event      Init/init
@event      Timer1m/timer
@rule      ^http://ping\.proxy/
@event         RequestHeaderReceived/Request
</HCExtension> ]]

function init()
   hc_static['count']=1
end

function timer ()
   if not hc.offline_on then
      if hc_static['count']<=1 then
         hc_static['count']=1 --ïèíãîâàòü êàæäûå x ìèíóò
         hc.execute_cmd('LoadURL http://ping.proxy/')
      else hc_static['count']=hc_static['count']-1   
      end
   else hc_static['count']=1   
   end
   
end

function GetAnswerCode(s)
  _,_,x = string.find(s, 'HTTP/1%.%d +(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

function Request()
   hc.use_proxy="127.0.0.1:8288" --Âíåøèíé ïðîêñè
   hc.request_header="HEAD http://www.google.de/ HTTP/1.0\13\10\13\10"
   hc.monitor_string = hc.monitor_string..'R-Ping '
   hc.call_me_for('BeforeAnswerHeaderSend', 'Answer')
end

function Answer()
   hc.action='dont_save'
   answ_code = GetAnswerCode(hc.answer_header)
   if answ_code==200 then
      hc.use_proxy="127.0.0.1:8288" --GLOBAX
   else hc.use_proxy="127.0.0.1:9202" --SPRINT
   end
   hc.monitor_string = hc.monitor_string..'A-Ping '
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 14 марта 2012, 15:55:49
Задавайте вопрос конкретно, берегите чужое время.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 14 марта 2012, 16:54:48
я взял за основу расширение pingProxy.lua мне нужно чтоб внешние прокси автоматом переключались при доступности (например пингует прокси - если он доступен то работает через него, если нет то через второй прокси)

вот что я понаписал

--[[ <HCExtension>
@name          WiiProxy WOW III
@author        igorek
@version       0.2
@description   Ïðîâåðèòü ïðîêñè
@event      Init/init
@event      Timer1m/timer
@rule      ^http://ping\.proxy/
@event         RequestHeaderReceived/Request
</HCExtension> ]]

function init()
   hc_static['count']=1
end

function timer ()
   if not hc.offline_on then
      if hc_static['count']<=1 then
         hc_static['count']=1 --ïèíãîâàòü êàæäûå x ìèíóò
         hc.execute_cmd('LoadURL http://ping.proxy/')
      else hc_static['count']=hc_static['count']-1
      end
   else hc_static['count']=1
   end

end

function GetAnswerCode(s)
  _,_,x = string.find(s, 'HTTP/1%.%d +(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

function Request()
   local s = s
   hc.use_proxy="127.0.0.1:8288" --Âíåøèíé ïðîêñè
   hc.request_header="HEAD http://www.google.de/ HTTP/1.0\13\10\13\10"
   hc.monitor_string = hc.monitor_string..'R-Ping '
   hc.call_me_for('BeforeAnswerHeaderSend', 'Answer')
end

function Answer()
   hc.action='dont_save'
   answ_code = GetAnswerCode(hc.answer_header)
   if answ_code==200 then
   s = 0
   else s = 1
    end   
   hc.monitor_string = hc.monitor_string..'A-Ping '
end


function Request()
    if s==0 then
   hc.use_proxy="127.0.0.1:9202" --SPRINT
   hc.monitor_string = hc.monitor_string..'SPRINT '
    end
    if s==1 then
   hc.use_proxy="127.0.0.1:8288" --GLOBAX
   hc.monitor_string = hc.monitor_string..'GLOBAX '
    end
end



lua только начил изучать , с переменными не как до меня недоходит - почему
они не срабатывают, уже незнаю где рыть. в луатест ошибок нет. как только вписываю последнию функцию в расширение

function Request()
    if s==0 then
   hc.use_proxy="127.0.0.1:9202" --SPRINT
   hc.monitor_string = hc.monitor_string..'SPRINT '
    end
    if s==1 then
   hc.use_proxy="127.0.0.1:8288" --GLOBAX
   hc.monitor_string = hc.monitor_string..'GLOBAX '
    end
end


все сразу втупляет.

Уважаемый mail62 помогите.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 14 марта 2012, 17:22:36
Делайте отладочный вывод сообщений в лог функцией hc.put_to_log(), поймете на каком шаге втупляет. Сделайте сначала вывод сообщений в обработчиках событий, чтобы понять какие события срабатывают, а какие нет.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 14 марта 2012, 17:40:24
это в расширение надо добавить


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 15 марта 2012, 03:00:40
Конечно, в расширение.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 15 марта 2012, 08:37:05
 и он будет в общий лог писать?
и как написать в расширении?
и где можно почитать о переменных в луа(как присвоить) в Extensions ничего об этом ненашол в интернете тож не че недогоняю, мнеб пример расширения где с переменными работают (присваевают и отрабатывают присвоенное значение)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 15 марта 2012, 09:52:09
--[[ <HCExtension>
@name          PingProxyMOD
@author        igorek
@version       0.2
@description   Ïðîâåðèòü äîñòóïíîñòü âíåøíåãî ïðîêñè
@rule      ^http://ping\.proxy/
@event      Init/init
@event      Timer1m/timer
@event         RequestHeaderReceived/Request
</HCExtension> ]]

function init()
      hc.put_to_log()
      hc_static['count']=1
end

function timer ()
   if not hc.offline_on then
      if hc_static['count']<=1 then
         hc_static['count']=1 --ïèíãîâàòü êàæäûå x ìèíóò
         hc.execute_cmd('LoadURL http://ping.proxy/')
      else hc_static['count']=hc_static['count']-1   
      end
   else hc_static['count']=1   
   end
   
end

function GetAnswerCode(s)
  _,_,x = string.find(s, 'HTTP/1%.%d +(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

function Request()
   hc.use_proxy="127.0.0.1:9202" --Âíåøèíé ïðîêñè
   hc.request_header="HEAD http://www.google.de/ HTTP/1.0\13\10\13\10"
   hc.monitor_string = hc.monitor_string..'R-Ping '
   hc.call_me_for('BeforeAnswerHeaderSend', 'Answer')
end
   
function Answer()
   hc.action='dont_save'
   answ_code = GetAnswerCode(hc.answer_header)
       if answ_code==200 then prox=1
       else prox=2
       end
   hc.monitor_string = prox
end





в логе такая строка
15.03.12 16:49:12,062 # 114 <<< URL: http://www.google.de/
R-SCRIPT "Request" ERROR:
[string "?"]:11: 'then' expected near '='

15.03.12 16:49:12,062 # 114:  Connect to proxy from script: (127.0.0.1:9202)

и что такое r-script у меня в расширениях токого нету


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 15 марта 2012, 14:48:30
R-SCRIPT - это скрипт, обрабатывающий событие RequestHeaderReceived, имя вызываемой функции Request.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 16 марта 2012, 14:13:37
подскажите как сделать переменную глобальной(чтоб несколько расширений работали с одной переменной. например создаю переменную soc и присваиваю ей значение 1

пишу так:

soc = 1

но в других расширениях переменная не срабатывает.

может у меня так происходит потому что в расширении где присваивается переменная есть роль (@rule      ^http://ping\.proxy/)   


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 16 марта 2012, 16:24:27
если это влияет роль, то можно ли и для переменной роль сделать?

Очень надо!


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 16 марта 2012, 16:30:00
Почитайте в файле HCExtensions.html в конце.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 16 марта 2012, 17:29:49
@event  Init/init

function init()
   hc_static['sot']=sot
end

это в расширение так будет выглядеть
Добавлено: 16 Март 2012, 17:26:46

или hc_static['sot'] использовать как переменную


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 16 марта 2012, 18:30:07
ни чего неполучается


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 17 марта 2012, 01:57:40
Таблица hc_static является общей для всех обработчиков событий одного расширения (эта таблица уже была использована в тексте расширения, которое Вы приводили ранее). Если Вам нужна переменная, которая будет доступна из разных расширений, то нужно использовать функции hc.set_global и hc.get_global. Примеры использования этих и других функций ищите в расширениях в папке Extensions.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 17 марта 2012, 18:39:44

Спасибо всё работает.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Норкин Евгений от 18 марта 2012, 08:57:25
подскажите возможно ли для определённого url задать свой тайм аут соединения, если возможно то какая команда для этого используется


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 18 марта 2012, 13:38:46
Не возможно.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Aleksei N от 10 апреля 2012, 16:44:37
Помогите пожалуйста. Нужно написать такое расширение:
В коде страници, URL которой имет вид:
steamcommunity.com/trade/цифирки/
Нужно найти строку вот такого вида:
UserThem.SetProfileURL( "http:\/\/steamcommunity.com\/profiles\/цифирки" );
Удалить в ней все, оставив только голый адрес http://steamcommunity.com/profiles/цифирки
Затем найти строку такого вида:
<h2>Предложение Ник:</h2>
И заменить ее на:
<a  href="http://"><h2>Предложение Ник:</h2></a>
Где http:// это адрес найденный сначала. Т.е. http://steamcommunity.com/profiles/цифирки


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 10 апреля 2012, 19:55:50
Написать расширение для правки содержимого страницы -  нетривиальная задача. Попробуйте решить задачу с помощью расширения Content Master.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Aleksei N от 10 апреля 2012, 20:05:38
Контент мастер не способен на то что мне надо


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 10 апреля 2012, 20:15:21
Тогда надо брать за основу Content Master и писать свое расширение. Или с помощью Content Master внедрить в тело страницы скрипт, который уже в браузере сделает то, что Вам нужно.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 10 апреля 2012, 22:04:42
Эти две строки
UserThem.SetProfileURL( "http:\/\/steamcommunity.com\/profiles\/цифирки" );
и
<h2>Предложение Ник:</h2>

в теле страницы в единственном числе? Вторая обязательно следует ниже первой?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Aleksei N от 11 апреля 2012, 03:24:32
Да, эти строки в единственном числе. Но UserThem.SetProfileURL( "http:\/\/steamcommunity.com\/profiles\/цифирки" ); стоит почти в самом конце страницы, а <h2>Предложение Ник:</h2> стоит раньше, примерно в середине. И эту страницу открывает не браузер а steam клиент, хотя по сути этот тот же браузер. Слово "Ник" - может быть любым.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 11 апреля 2012, 08:28:40
Что если в правила замены текста СМ добавить:

Код:
steamcommunity\.com/trade/\d++/#~#(?-x)(<h2>Предложение [^:]++:</h2>)(.*?)UserThem\.SetProfileURL\( "http:\\/\\/steamcommunity\.com\\/profiles\\(/\d++)" \);#~#<a  href="http://steamcommunity.com/profiles\3">\1</a>\2http://steamcommunity.com/profiles\3


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Aleksei N от 11 апреля 2012, 17:10:57
Нет, не работает.
Добавлено: 11 Апрель 2012, 19:47:14

Вот еще один возможный вариант алгоритма:
Адрес страницы:
http://steamcommunity.com/trade/76561198044668391
Из адреса берем только последнии цифры, это стим id.
Находим в теле страницы <h2>Предложение Ник:</h2>
И заменяем его на <a  href="http://steamcommunity.com/profiles/76561198044668391"><h2>Предложение Ник:</h2></a>  циферки в подставленной ссылке берем из адреса самой страници


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 11 апреля 2012, 19:20:17
Нет, не работает.
Должно. Давайте посмотрим лог СМ.

PS страница http://steamcommunity.com/trade/76561198044668391 у меня не грузится - с нее идет редирект.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Aleksei N от 11 апреля 2012, 19:59:14
Конечна не будет грузится ! У вас стим есть ? Играли в Team Fortress 2 ? Со стим трейдом знакомы ?
Эта страница и есть трейд, когда с кем то обмениваешся предметами, открывается страница такого вида.
Цифирки это steam id, уникальный номер каждого аккаунта. Эта страница работает только когда с кем то обмениваешся
Лог чистый, CM:0 hits


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 11 апреля 2012, 20:08:36
Эту страницу (файл) мне в личку киньте, плиз.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 12 апреля 2012, 19:52:55
Цитировать
В коде страници, URL которой имет вид:
steamcommunity.com/trade/цифирки/
Цитировать
Адрес страницы:
http://steamcommunity.com/trade/76561198044668391
Так есть слэш в конце или нет? Если нет, то правило будет выглядеть так:
Код:
steamcommunity\.com/trade/\d++#~#(?-x)(<h2>Предложение [^:]++:</h2>)(.*?)UserThem\.SetProfileURL\( "http:\\/\\/steamcommunity\.com\\/profiles\\(/\d++)" \);#~#<a  href="http://steamcommunity.com/profiles\3">\1</a>\2http://steamcommunity.com/profiles\3
Попробуйте, отпишитесь...
Цитировать
UserThem.SetProfileURL( "http:\/\/steamcommunity.com\/profiles\/цифирки" );
Удалить в ней все, оставив только голый адрес http://steamcommunity.com/profiles/цифирки
По-моему, скрипт не сохранит работоспособность при замене
UserThem.SetProfileURL( "http:\/\/steamcommunity.com\/profiles\/цифирки" );
на
http://steamcommunity.com/profiles/цифирки
Точно ли это то, что нужно?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Aleksei N от 12 апреля 2012, 20:24:34
Нет, не то что нужно. На страницы есть определенная надпись, ее нужно сделать кликабельной, ссылка на которую должна вести эта надпись, содержится в коде этой же страницы. Адрес не имеет в конце слеша.
Предложение Ник: - это и есть тот самый текст, из которого надо сделать ссылку. Я уже запутался в терминах и понятиях ))))) Кароче из простого текста надо сделать кликабельный текст ) Адрес на который должен ссылатся эта ссылка содержится в коде этой же страницы, в такой строке UserThem.SetProfileURL( "http:\/\/steamcommunity.com\/profiles\/цифирки" );


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 12 апреля 2012, 20:29:02
Пробуем:
Код:
steamcommunity\.com/trade/\d++#~#(?-x)(<h2>Предложение [^:]++:</h2>)(?=.*?UserThem\.SetProfileURL\( "http:\\/\\/steamcommunity\.com\\/profiles\\(/\d++)" \);)#~#<a  href="http://steamcommunity.com/profiles\2">\1</a>


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Aleksei N от 13 апреля 2012, 03:33:53
Не работает. Лог чистый. CM:0 hits


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 13 апреля 2012, 07:02:23
Проверьте, убрав из правила слово "Предложение".
Если появится срабатывание, то похоже имеют место проблемы с кодировкой.
Тогда сделайте, плиз, лог НС при загрузке этой страницы с отключенными опциями "Отладочная информация" и "Информация только из расширений".


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Aleksei N от 13 апреля 2012, 15:04:31
Убрал слово "Предложение" - 0 срабатываний


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 13 апреля 2012, 21:13:36
А пробел после этого слова убран?
Т.е. дает ли срабатывания такое правило:
Код:
steamcommunity\.com/trade/\d++#~#(?-x)(<h2>[^:]++:</h2>)(?=.*?UserThem\.SetProfileURL\( "http:\\/\\/steamcommunity\.com\\/profiles\\(/\d++)" \);)#~#<a  href="http://steamcommunity.com/profiles\2">\1</a>


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Aleksei N от 14 апреля 2012, 06:49:32
Убрал пробел, все равно 0 срабатываний.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 14 апреля 2012, 10:01:24
У меня с тем файлом, что Вы прислали, правило работает.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 28 мая 2012, 17:05:23
Здравствуйте.
Кто мне может помочь? Мой провайдер иногда портит страницы возвращая примерно такое:

Код:
URL: http://google.com/downloads?client=navclient-auto-ffox
HTTP/1.1 302 Found
Location: https://deneg.day.ru/overload/?h=google.com&u=/downloads&p=client=navclient-auto-ffox
Content-Type: text/html; charset=utf-8
Content-Length: 380
Connection: keep-alive

Как мне написать скрипт так, чтоб при обнаружении такого заголовка происходил reload?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 29 мая 2012, 03:01:55
Попробуйте так:
Код:
--[[ <HCExtension>
@name          antiprovider
@author        mai62
@version       0.1
@description   Correct answer from bad provider
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]


function GetAnswerCode()
  _,_,x = string.find(hc.answer_header, 'HTTP/1%.%d +(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

function Answer()
  answ_code = GetAnswerCode()
  if answ_code == 302 and re.find(hc.answer_header, [[deneg\.day\.ru]]) then
    hc.put_to_log('Correction')
    hc.answer_header=
    'HTTP/1.1 302\r\n'..
    'Server: HandyCache\r\n'..
    'Location: '..hc.url..'\r\n'..
    'Connection: close\r\n\r\n'
  end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 30 мая 2012, 00:07:02
Работает на УРА! Спасибо!


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: LordMerlin от 31 мая 2012, 10:31:17
Доброго дня.
Прошу ответить на вопрос, можно ли сделать расширение, которое работало по следующей логике:
Происходит запрос страницы, весь трафик направляется на основной прокси сервер.
В случае невозможности загрузить страницу либо же по определенному ответу от основного проксика расширение перекидывает запрос на запасной проксик, возможно что для уменьшения задержек не повторять со следующим запросом долбить основной а например продолжать использовать запасной минут 5, затем снова попытка соединиться на основной.
Если попытка прошла снова переключаем весь траффик на основной проксик и так до следующего инцидента.
Просто на основном проксике анлим а на запасном тариф по трафику, приходится постоянно сидеть и ручками клацать.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 31 мая 2012, 14:15:18
Прошу ответить на вопрос, можно ли сделать расширение, которое работало по следующей логике...
Меня интересует подобный вопрос. Рассматривая форум пришёл к выводу что можно, вот только писать его придётся самостоятельно. Странно что я не могу найти информацию о том как это сделать, например, какое событие вызывается в случае noanswer или как уменьшить таймаут до 20 секунд. Я так понимаю стоит создать тему типа "Автоматическое переключение интернет канала(Proxy & getway auto switch)" и выкладывать туда всё что может пригодиться.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 01 июня 2012, 01:26:39
Цитировать
например, какое событие вызывается в случае noanswer
Возвращается ответ с ошибкой, перед этим вызывается для этого ответа обработчик BeforeAnswerHeaderSend.
Цитировать
как уменьшить таймаут до 20 секунд
Из расширения нельзя.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 01 июня 2012, 22:24:09
to LordMerlin (глубокая альфа, ибо это моя первая программа на lua)

Код:
--[[ <HCExtension>
@name          Автопереключение на резевный прокси (#2)
@author        Anymore
@version       0.0.001
@description   http://handycache.ru/forum/index.php?topic=1120.msg35365#msg35365
@event         Init/init
@event        Timer1m/timer
@event         BeforeAnswerHeaderSend/Event
@event         RequestHeaderReceived/Request
</HCExtension> ]]

function init()
  hc_static['count']=0
  hc.set_global('sw2reserve', '')
  hc_static['CheckURL']='http://www.google.de/'
end

function GetAnswerCode()
  _,_,x = string.find(hc.answer_header, 'HTTP/1%.%d +(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

function Request()
  if hc.url==hc_static['CheckURL'] then
    hc.monitor_string = '#?'
  else
    if hc_static['count']>1 or hc.get_global('sw2reserve')=='sw' then
      hc.monitor_string = '#2 '..hc.monitor_string
      hc.use_proxy="127.0.0.1:80" --Внешинй прокси
      hc.use_proxy_login="user:password"
    end
  end
end

function timer()
  if not hc.offline_on and hc_static['count']>0 then
    hc_static['count']=hc_static['count']-1
  end
  if hc.get_global('sw2reserve')=='sw' then
    hc.put_msg(10, 'Резервный прокси')
    hc.set_global('sw2reserve', '')
    hc_static['count']=3
  end
  if hc_static['count']==2 then
    hc.execute_cmd('LoadURL '..hc_static['CheckURL'])
  end
  if hc_static['count']==1 then
    hc.put_msg(10, 'взврат на основной канал')
  end

end

function Event()
  answ_code = GetAnswerCode()
  if answ_code == 502 or answ_code == 504 then
    hc.set_global('sw2reserve', 'sw')
    hc.action='dont_save'
    if hc.url==hc_static['CheckURL'] then
    else
      hc.answer_header=
      'HTTP/1.1 302\r\n'..
      'Server: HandyCache\r\n'..
      'Location: '..hc.url..'\r\n'..
      'Connection: close\r\n\r\n'
    end
  end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 02 июня 2012, 02:02:34
Как ловили новый мега-вирус, написанный на lua. (http://www.cnews.ru/top/2012/05/31/kak_lovili_novyy_megavirus_podrobnosti_rassledovaniya_491394)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Dzhakandak от 02 июня 2012, 03:14:34
 :good:
Цитировать
Как ловили новый мега-вирус, написанный на lua.[/url]
;) Ребята, кто из ВАС балуется? Хватит баловаться. Сколько раз говорили: "Подглядывать - не хорошо!"  :D

З.Ы. Ну или скажите где взять, я себе тоже такое "расширение" поставлю, поподглядываю :)
З.Ы.2. Извиняюсь перед тем, у кого с чувством юмора не очень.  :thanks:


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: LordMerlin от 02 июня 2012, 10:03:21
to LordMerlin (глубокая альфа, ибо это моя первая программа на lua)
А можете пояснить логику работы. А то я в коде совсем тупой.
Правильно ли я понял, что идет работа напрямую и переодический пинг на гугль.де и если не отвечает подключается внешний проксик, потом при каждом запросе проверяется состояние ответов до него (гугл) и если получается нормальный ответ то проксик отключается и работает снова напрямую.
Добавлено: 02 Июнь 2012, 09:36:51

Как ловили новый мега-вирус, написанный на lua. (http://www.cnews.ru/top/2012/05/31/kak_lovili_novyy_megavirus_podrobnosti_rassledovaniya_491394)
Это только подтверждение того, что ЛУА мощный язык, но в то же время и достаточно простой для освоения.
Да и если быть до конца честным, то на ЛУА написана только обертка и логика, а все низкоуровневые таки на С.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 05 июня 2012, 17:59:16
> А можете пояснить логику работы...
При ответе 502 немедленно переводит все запросы на прокси указанный в скрипте.
И ждёт не502 ответа от www.goodle.de, как белого флага, для возврата на основной канал.
p.s. у скрипта ряд недостатков, принимай как есть, возможно скоро сделаю новую версию.

> ЛУА мощный язык
Да? ОК, вызови из под lua JavaScript интерпретатор, загрузи в него Auto-Proxy Configuration Script, передай функции FindProxyForURL url и host, после отдай результат функции переменной hc.use_proxy.
p.s. не русском языке тоже пишут вирусы, только мало кто об этом кричит.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 23 июня 2012, 22:37:35
Почему у меня HC вылетает от такого скрипта?

Код:
--[[ <HCExtension>
@name          *
@author        *
@version       *
@description   *
@event         URLToFileNameConverting/URLToFileNameConverting
</HCExtension> ]]

function URLToFileNameConverting() 
  m_path, present = hc.get_cache_file_name(hc.url)
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 24 июня 2012, 11:29:54
Заметил такую вещь, если качать сайт с помощью Offline Explorer'a через HC, то в случае если файлы не берутся из кеша, то после загрузки HC в OE закачки некоторое время продолжают висеть, если берётся непосредственно из кеша то всё окей. Также всё окей если OE берёт напрямую их интернета. Можно ускорить переход на загрузку следующего файла если в HC нажать кнопку "разорвать все активные соединения", в этом случае в логе появится строка
"24.06.12 13:24:36,500 # 5979:  Client Disconnection"...

можно ли создать какой-нибудь скрипт который бы при окончании загрузки файла HC (100% высвечивается в мониторе), разрывал соединение с клиентом?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 25 июня 2012, 00:50:39
можно ли создать какой-нибудь скрипт который бы при окончании загрузки файла HC (100% высвечивается в мониторе), разрывал соединение с клиентом?
Нет. Попробуй последние версии HC&OE, сделай ограничение 5 одновременных потоков.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: alex77 от 25 июня 2012, 02:44:48
Заметил такую вещь, если качать сайт с помощью Offline Explorer'a через HC, то в случае если файлы не берутся из кеша, то после загрузки HC в OE закачки некоторое время продолжают висеть, если берётся непосредственно из кеша то всё окей. Также всё окей если OE берёт напрямую их интернета. Можно ускорить переход на загрузку следующего файла если в HC нажать кнопку "разорвать все активные соединения", в этом случае в логе появится строка
"24.06.12 13:24:36,500 # 5979:  Client Disconnection"...

можно ли создать какой-нибудь скрипт который бы при окончании загрузки файла HC (100% высвечивается в мониторе), разрывал соединение с клиентом?
разве это проблема ХК? разрывать соединение после скачивания файла должен ОЕ, а не ХК.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 25 июня 2012, 05:21:18
Нет. Попробуй последние версии HC&OE, сделай ограничение 5 одновременных потоков.
и так последние, а колличество соединений можно ставить даже 1, разницы не будет.

разве это проблема ХК? разрывать соединение после скачивания файла должен ОЕ, а не ХК.
Вот если бы при взятии из интернета напрямую происходило бы то же самое (т.е. в OE висели бы уже загруженные закачки), то тогда бы проблема действительно была бы в OE, а так как такое происходит только если идёт загрузка через HC, то это проблема именно HC. При чём подобное происходит ТОЛЬКО если закачивается из инета, потому что если файл берётся из кеша то всё работает нормально.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 25 июня 2012, 19:46:00
Заметил такую вещь, если качать сайт с помощью Offline Explorer'a через HC, то в случае если файлы не берутся из кеша, то после загрузки HC в OE закачки некоторое время продолжают висеть, если берётся непосредственно из кеша то всё окей. Также всё окей если OE берёт напрямую их интернета. Можно ускорить переход на загрузку следующего файла если в HC нажать кнопку "разорвать все активные соединения", в этом случае в логе появится строка
"24.06.12 13:24:36,500 # 5979:  Client Disconnection"...

можно ли создать какой-нибудь скрипт который бы при окончании загрузки файла HC (100% высвечивается в мониторе), разрывал соединение с клиентом?

Сделайте отладочный лог и пришлите его в архиве мне на ящик mai62<>mail.ru. В архив положите также скриншот монитора (важны колонки URL, Правило, Ответ). Если возможно, напишите какие URL остались висеть в OE.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 26 июня 2012, 17:15:56
отправил, если нужно что-то ещё буду рад помочь, вот только не уверен что сделал именно отладочный лог.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 27 июня 2012, 17:47:02
Получил лог, спасибо. Это расширение должно помочь
Код:
--[[ <HCExtension>
@name          Offline Explorer helper
@author        mai62
@version       0.1
@description   Offline Explorer helper
@event         RequestHeaderReceived/request
</HCExtension> ]]

function request()
local x= hc.request_header
if re.find(x, [[^User-Agent:.*Offline\sExplorer]], 0) and
  not re.find(x, [[^Connection:]], 0) then
  local x = re.replace(x, "(.*)(\r\n\r\n)", "\\1\r\nConnection: Close\r\n\r\n")
  if x then
    hc.request_header= x
  end
  --hc.put_to_log(hc.request_header)
  end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 20 июля 2012, 23:32:38
Помогите написать расширение для работы с ProxHTTPSProxy в автономном режиме.
В автономном режиме нужно отправлять https запросы браузера, что бы браузер мог получить ответ-редирект от ProxHTTPSProxy.
Еще хорошо бы сделать, что бы расширение не работало, если не включен условный прокси. Конкретное условие(номер строки) или общее.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 22 июля 2012, 12:19:47
Такое расширение переключает в онлайн, но поздно. HahdyCache остается offline в момент запроса.
Код:
--[[ <HCExtension>
@name          ProxHTTPSProxy
@author        
@version       0
@description   fgdrhtrdrssrrrrrrrghdddddddf
@rule          ^https://
@event         RequestHeaderReceived/Online
</HCExtension> ]]

function Online()
if hc.offline_on then hc.execute_cmd('OffLine Off')  end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 22 июля 2012, 13:13:32
mai62, имхо, хорошо бы дать возможность расширению возможность переключать автономный режим в рамках запроса.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 22 июля 2012, 13:28:47
Используйте вместо автономного режима присвоение hc.action="only_from_cache". Тогда можно будет управлять каждым запросом отдельно.
Добавлено: 22 Июль 2012, 13:22:46

Цитировать
Еще хорошо бы сделать, что бы расширение не работало, если не включен условный прокси.
Вместо использования списка условных прокси можно переправлять запросы через внешний прокси с помощью расширения. Тогда можно будет сохранить нужную другому расширению информацию где-либо или все сделать в одном расширении.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 22 июля 2012, 15:33:32
Цитировать
Используйте вместо автономного режима присвоение hc.action="only_from_cache". Тогда можно будет управлять каждым запросом отдельно.
Задача - влиять на состояние АВТОНОМНОГО РЕЖИМА НС в рамках определенных запросов. Расширению не требуется эмулировать автономный режим, а хочется изменить (в рамках данного запроса) реально установленный режим.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 22 июля 2012, 17:07:47
Используйте вместо автономного режима присвоение hc.action="only_from_cache". Тогда можно будет управлять каждым запросом отдельно.

Подскажите как прикрутить к расширению (hc.get_keyboard_state(), 'VK_NUMLOCK') Или CapsLock если можно.
Ничего не блокировать если NumLock включен.
Код:
--[[ <HCExtension>
@name          Offline/Online
@author       
@version       
@description   
@rule          ^http://
@event         RequestHeaderReceived/request
</HCExtension> ]]

function request()
  hc.action="only_from_cache"
  hc.monitor_string = hc.monitor_string..'R-Offline'
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 22 июля 2012, 17:27:46
Если я правильно помню, hc.get_keyboard_state() выдает, нажата ли клавиша в данный момент. Статус CapsLock или NumLock эта функция по идее не выдаст.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 23 июля 2012, 07:51:57
Если я правильно помню, hc.get_keyboard_state() выдает, нажата ли клавиша в данный момент. Статус CapsLock или NumLock эта функция по идее не выдаст.
Тогда, как сделать переключение по нажатию любой клавиши? В Контент Мастере это как-то сделано.

А постоянную индикацию, теоретически, нельзя сделать? Например иконкой в трее или принудительно включать режим CapsLock или с помощью сторонней программы.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 23 июля 2012, 13:26:28
Цитировать
В Контент Мастере это как-то сделано
СМ не может узнать, горит в данный момент CapsLock или нет. Он знает только, нажат ли он в данный момент. Нажатие клавиш фиксирует вспомогательная функция:
Код:
local function keysPressed(keys, kbd_state)	-- функция возвращает, нажата ли комбинация клавиш keys (названия клавиш должны быть разделены пробелом) в состоянии клавиатуры kbd_state. Если kbd_state не задано, то функция сама проводит опрос состояния клавиатуры
if not keys then return end
kbd_state = ' '.. (kbd_state or hc.get_keyboard_state()) .. ' '
for key in keys:gmatch('%S+') do
if not kbd_state:find(' ' .. key .. ' ', 1, true) then return end
end
return true
end
Например, узнать, нажаты ли сейчас Ctrl+CapsLock, можно так:
if keysPressed('VK_CONTROL VK_CAPITAL') then ... end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 23 июля 2012, 20:21:09
Переключения срабатывают, но только после полсотни попыток. Один раз само переключилось, когда я отходил от компа минут на несколько. Почему так?
Код:
--[[ <HCExtension>
@name          Offline2/Online
@author        
@version       0
@description   0
@rule          ^http://
@event         RequestHeaderReceived/request
</HCExtension> ]]

local function keysPressed(keys, kbd_state) -- функция возвращает, нажата ли комбинация клавиш keys (названия клавиш должны быть разделены пробелом) в состоянии клавиатуры kbd_state. Если kbd_state не задано, то функция сама проводит опрос состояния клавиатуры
if not keys then return end
kbd_state = ' '.. (kbd_state or hc.get_keyboard_state()) .. ' '
for key in keys:gmatch('%S+') do
if not kbd_state:find(' ' .. key .. ' ', 1, true) then return end
end
return true
end

if keysPressed('VK_CONTROL VK_CAPITAL') then
  function request()
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
  end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 23 июля 2012, 23:04:12
Написал функцию в dll для запроса состояния клавиши. Пример использования в архиве.
Добавлено: 23 Июль 2012, 22:57:48

dll нужно положить в папку с НС и LuaTest, если он используется.
Добавлено: 23 Июль 2012, 22:58:42

Исходники dll на случай, если кто-то захочет свою dll написать.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 23 июля 2012, 23:24:51
Цитировать
Почему так?
Условие надо писать внутри обработчика:
Код:
function request()
  if keysPressed('VK_CONTROL VK_CAPITAL') then
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
  end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 24 июля 2012, 00:40:28
Написал функцию в dll для запроса состояния клавиши. Пример использования в архиве.
Добавлено: 23 Июль 2012, 22:57:48

dll нужно положить в папку с НС и LuaTest, если он используется.
Добавлено: 23 Июль 2012, 22:58:42

Исходники dll на случай, если кто-то захочет свою dll написать.
Еще бы примеров реального использования. Кажется все варианты перепробовал. Как правильно собрать?
Код:
--[[ <HCExtension>
@name          0
@author        mai62
@version       0.01
@description   0
@rule          ^http://
@event         Init/init
@event         RequestHeaderReceived/request
</HCExtension> ]]

function init()
  if x=1 then Caps Lock (20) is On
  x=keyboard.GetKeyState(20)
    hc.put_to_log(x)
end

function request()
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
  end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 24 июля 2012, 00:50:44
Вы потеряли строку
require 'keyboard'

Зачем-то раскомментировали строку комментария. В lua все, что находится после символов --, является комментарием.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 24 июля 2012, 08:02:15
Цитировать
Вы потеряли строку
require 'keyboard'
С ней тоже не работает.

Цитировать
Зачем-то раскомментировали строку комментария.
Это был только как вариант, поскольку все равно не работает.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 07 августа 2012, 14:42:20
при включении Test.lua выдает в лог 1 или 0. Это нормально?
А если я пытаюсь заменить    hc.put_to_log(x) на другие строчки, то получаю разные ошибки.
Код:
require 'keyboard'

--[[ <HCExtension>
@name          test
@author        mai62
@version       0.01
@description   0
@rule          ^http://
@event         Init/init
@event         RequestHeaderReceived/request
</HCExtension> ]]

--  VK_CAPITAL = 20
--  VK_NUMLOCK = 144
--  VK_SCROLL = 145


function init()
-- If x=1 then Caps Lock (20) is On
  x=keyboard.GetKeyState(20)
end
   function request()
     if x=1 then
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
  end
end
Это выдает ошибку в лог
Код:
07.08.12 18:36:06,601 # test "init" ERROR:
[string "require 'keyboard'..."]:23: 'then' expected near '='
Если в строчке "if x=1 then" делаю "if x==1 then" то ничего нет в логе, но и не работает.



Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 07 августа 2012, 18:50:21
при включении Test.lua выдает в лог 1 или 0. Это нормально?

Я же писал в тестовом примере
-- If x=1 then Caps Lock (20) is On

По русски это значит: если x = 1, то Caps Lock включен.

Это комментарий, не надо убирать -- в начале строки. Эта строка предназначена только для пояснения работы, это не часть программы.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 07 августа 2012, 19:13:14
Про комментарий я всегда знал, но тут много примеров расширений где используется похожая схема типа
function answer()
  x= GetContentLength(hc.answer_header)
  if x>999 then блаблабла end
end

А как правильно совместить эту dll с таким функционалом?
function request()
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
 end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 08 августа 2012, 00:37:59
Код:
function request()
  require 'keyboard'
  x=keyboard.GetKeyState(20)
  if x==1 then
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
  end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 09 августа 2012, 00:07:53
Спасибо! Тут еще какой-то конфликт, но разобрался уже. Если нажата клавиша врем. отключения черного списка, некоторые запросы проходят в инет. Те, где срабатывает расширение R-ext. В R-ext нужно либо снять галку слежение за черным и белым списками, либо назначить клавишу врем. отключения как в черном. (у меня win+shift)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 09 августа 2012, 20:48:49
Все равно остались ложные не срабатывания. Например пропускает, когда срабатывает одновременно R-Offline R-ext и Б.18.  В Б.18 стоит галка Ч.Список.
Можно это как то поправить?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 09 августа 2012, 22:35:39
Добавьте в свое расширение вывод в лог отладочной информации
hc.put_to_log('Тут напишите что-то полезное, можно вывести значение какой-то переменной, например'..hc.url)
Сделайте это таким образом, что бы эта информация помогла Вам понять почему расширение работает именно так, а не иначе.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ponand от 27 августа 2012, 09:08:08
Подскажите пожалуста есть ли пример расширение для замены загружаемой из интернета страницы?

необходимо в место ссылки вида (.*showtopic=\d+)&view=getnewpost
загружать страницу \1&st=0 или просто \1


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 27 августа 2012, 09:17:53
Есть расширение Content Master (по нему есть одельная тема на форуме). Это расширение "на лету" фильтрует содержимое загружаемых страниц на предмет удаления рекламы. Это расширение может также сделать замену одного текста на другой.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ponand от 27 августа 2012, 09:26:43
Мне нужно заменить саму загружаемую страницу Content Master поможет?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mirny от 01 октября 2012, 17:20:23
Захотел узнать про list comprehensions в Луа — Гугл вывел на их аналог КофеСкрипта (http://moonscript.org/reference/).
Кто-нибудь пользовался? Юзабельно? Есть смысл? Есть толк?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 10 октября 2012, 00:08:16
Здравствуйте!
Помогите пожалуйста разобраться с расширением.
Есть два пользователя, и они поочерёдно могут использовать канал без ограничений.
При одновременном использовании, одному из них необходимо ограничить скорость.
Пытался наваять :oops:, но не работает, и не знаю как проверить его работу не "на глаз".

Код:
--[[ <HCExtension>
@name         Авторегулировка скорости для клиента "Idle"
@event        BeforeRequestHeaderSend/Request
@event        BeforeAnswerHeaderSend/Answer
</HCExtension> ]]

function Request()
        if hc.user_name ~= 'Idle' then
hc.set_user_speed('Idle', 2048)
end
end

function Answer()
local t = hc.get_users_stat('#active')
if t and t[hc.user_name] ~= 'Idle' then
hc.set_user_speed('Idle', 0)
end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 10 октября 2012, 01:59:48
Может, как-нибудь так:
Код:
--[[ <HCExtension>
@name Авторегулировка скорости для клиента "Idle"
@event Timer1s
</HCExtension> ]]

function Timer1s()
local t = hc.get_users_stat('#active')
if not t or not t['Idle'] then return end
if next(t)~='Idle' or next(t, 'Idle') then
if t['Idle'].speed_limit==0 then hc.set_user_speed('Idle', 2048) end
elseif t['Idle'].speed_limit~=0 then hc.set_user_speed('Idle', 0)
end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 10 октября 2012, 02:11:42
Спасибо, попробую.
Но хотелось бы без Timer1s - система и так еле ползает.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 10 октября 2012, 02:35:13
Цитировать
Но хотелось бы без Timer1s
Тогда Вам скорей всего придется пройти тернистый путь синхронизации потоков. Если даже это удастся сделать, не берусь сказать, сколько ресурсов будет поедать такая реализация.
Добавлено: 10 Октябрь 2012, 02:27:51

И работать она не будет, как я понимаю, при использовании пользователем не-HTTP протоколов (HTTPS, SOCKS).

Правада, в предложенном мной варианте один "подводный камень" тоже вижу.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 10 октября 2012, 19:12:46
И работать она не будет, как я понимаю, при использовании пользователем не-HTTP протоколов (HTTPS, SOCKS).

Правда, в предложенном мной варианте один "подводный камень" тоже вижу.

Действительно с этими протоколами не работает, а для меня это критично. Но Timer1s оказался совсем не тяжёлым, и не плохо работает такой вариант:

Код:
--[[ <HCExtension>
@name          Авторегулировка скорости для клиента "Idle"
@event         Timer1s
</HCExtension> ]]

function Timer1s()
local t = hc.get_users_stat('#active')
if not t['local'] then
hc.set_user_speed('Idle', 0)
else hc.set_user_speed('Idle', 2048)
end
end

Ещё раз спасибо!
И хотелось бы узнать что это за "подводный камень", и есть ли он в этом варианте?

Добавлено: 10 Октябрь 2012, 19:31:51
Заметил, что иногда срабатывает с большыми задержками :(
Попробую ещё покопаться, но и это лучше чем ничего.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 10 октября 2012, 19:33:31
Цитировать
не плохо работает такой вариант
Хороший вариант. Забыли дописать, что делать при отсутствии активных пользователей.
Цитировать
хотелось бы узнать что это за "подводный камень", и есть ли он в этом варианте?
В этом варианте он тоже есть.
Многие сайты оставляют соединение активным, даже когда по нему ничего (или почти ничего) не передается. К примеру, если у 'local' включено ICQ, то 'idle' будет постоянно ограничен в скорости, хотя у 'local' 99,9% времени канал простаивает. Еще пример, на многих сайтах (http://my.opera.com/desktopteam/blog/) есть обращения по https, висящие неоправданно долго после выполнения. Некоторые сайты оставляют постоянно висящее соединение, по которому изредка передаются изменения в обстановке - это odnoklassniki.ru, vkontakte.ru и т.п.
Чтобы это все учитывать и не ограничивать 'idle' понапрасну, требуется более сложный алгоритм.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 11 октября 2012, 10:58:53
Цитировать
что делать при отсутствии активных пользователей

Это обязательно? Не подумал об этом, и не очень представляю как реализовать.
Пробовал разные комбинации - в отладочном логе ошибок не было, расширение срабатывало.

Про "висящие" соединения - спасибо, понял.
Сейчас больше неудобства доставляют задержки реального переключения (в логе и на графике HC показывает почти сразу, а реально, на графике модема - когда как), но это как я понимаю не от HC зависит.

P.S. Маленькая задачка и столько проблем.
Наверное лучше сделать расширение для переключения по горячей клавише.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 11 октября 2012, 12:13:44
Цитировать
Это обязательно? Не подумал об этом, и не очень представляю как реализовать.
Пробовал разные комбинации - в отладочном логе ошибок не было, расширение срабатывало.
Вместо
if not t['local'] then
написать
if t and not t['local'] then
Нынешний вариант при отсутствии активных пользователей (таблица t при этом не существует) будет раз в секунду выдавать в лог НС сообщение об ошибке - попытке индексирования несуществующей таблицы.
Цитировать
Сейчас больше неудобства доставляют задержки реального переключения (в логе и на графике HC показывает почти сразу, а реально, на графике модема - когда как), но это как я понимаю не от HC зависит.
Странно, откуда задержка. Она большая? С моим вариантом расширения тоже возникает задержка?
Кстати есть еще один недостаток. Если пользователь 'local' работает в оффлайне (внешний канал свободен), то Idle все равно ограничен.
Цитировать
Наверное лучше сделать расширение для переключения по горячей клавише.
Тут свои недостатки:
- если Вас нет у компьютера, что-то большое качается, и тут Idle активно вступает и забивает канал, оперативно отреагировать не получится;
- если даже Вы у компьюетра, задержка будет большая, пока поймете, что включился Idle;
- забудете вовремя отключить вручную - и Idle будет несправедливо страдать;
- не будете постоянно активно использовать канал - и Idle снова страдает.

Можно выбирать за показатель активности пользователя 'local' не наличие соединения, а ненулевое количество скачанных им за секунду байт.
Код:
function Timer1s()
local t = hc.get_users_stat('#all')
local trafic_local = t['local'].from_internet - (hc.get_global('_local_') or 0)
if trafic_local>0 then
if t['Idle'].speed_limit==0 then hc.set_user_speed('Idle', 2048) end
elseif t['Idle'].speed_limit~=0 then hc.set_user_speed('Idle', 0)
end
hc.set_global('_local_', t['local'].from_internet)
end
Мне кажется, такой вариант лучше прежнего. Все указанные недостатки ушли.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 11 октября 2012, 18:29:38
Всё больше проясняется  :)
В промежуточных вариантах я пробовал использовать
        if t['local'].connections_number > 0 then
вместо
        if t and t['local'].connections_number > 0 then
и в этом случае в лог действительно постоянно писалось:
# Авторегулировка скорости для клиента "Idle" "Timer1s" ERROR:
[string "--[[ <HCExtension>..."]:10: attempt to index local 't' (a nil value)


Сейчас, когда использую
        if not t['local'] then
даже при отключении всех пользователей в Настройки -> Доступ и остановке всех соединений, в логе не появляется ничего подобного.

Возникающая задержка небольшая (секунды), но первые запросы от "local" терпят фиаско (превышено время ожидания и страницу приходится обновлять).
Незнаю как HC ограничивает скорость, но предполагаю что посылкой соответствующей команды серверу, а как он отреагирует - другой вопрос.
Во вложении отладочный лог: каждое из соединений (7592, 7593, 7613, 7631, 7637, 7639, 7649, 7650) идёт на свой сервер, ограничение включалось вручную (установкой галочки) где-то на 20 сек.

Цитировать
Если пользователь 'local' работает в оффлайне (внешний канал свободен), то Idle все равно ограничен.
Тоже не учёл :oops: А вот у переключения по HotKey есть и преимущество: переключаем и ждём, наблюдая когда начнёт освобождаться канал.

Ваш вариант попробую позже и отпишусь. Спасибо!


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 11 октября 2012, 18:52:09
Цитировать
Сейчас, когда использую
        if not t['local'] then
даже при отключении всех пользователей в Настройки -> Доступ и остановке всех соединений, в логе не появляется ничего подобного.
Т.е. таблица t = hc.get_users_stat('#active') существует даже при отсутствии активных пользователей? Если так, то похоже на баг НС. Сообщите автору.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 11 октября 2012, 21:12:31
Попробовал и получил ошибку:

"Timer1s" ERROR:
[string "--[[ <HCExtension>..."]:10: attempt to index local 't' (a nil value)

Заменил
   local trafic_local = t['local'].from_internet - (hc.get_global('_local_') or 0)
на
   if t and local trafic_local = t['local'].from_internet - (hc.get_global('_local_') or 0)
и получил ошибку:

"Timer1s" ERROR:
[string "--[[ <HCExtension>..."]:10: unexpected symbol near 'local'

Заменил на
   if t and trafic_local = t['local'].from_internet - (hc.get_global('_local_') or 0)
и получил ошибку:

"Timer1s" ERROR:
[string "--[[ <HCExtension>..."]:10: 'then' expected near '='


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 11 октября 2012, 22:14:46
А Вы в точности скопировали расширение или вносили туда изменения? Дело в том, что такая ошибка не должна возникать в принципе.
После замены расширения давили "Перечитать расширение"?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 11 октября 2012, 22:48:50
Скопировал, вставил, сохранил, перечитал.
Ни одного соединения нет.
Очистил лог, включил "Вести лог", открыл лог, и там несколько однотипных строчек:

11.10.12 22:42:04,778 # Авторегулировка скорости для клиента "Idle" (3) "Timer1s" ERROR:
[string "--[[ <HCExtension>..."]:10: attempt to index field 'local' (a nil value)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 11 октября 2012, 23:38:00
Так это совсем другая ошибка, чем та, которую Вы приводили выше. В переводе значит, что в НС нет такого пользователя 'local'. Расширение написано исходя из того, что у Вас два пользователя - 'local' и 'Idle'. Если имена другие, переименуйте соответственно.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 12 октября 2012, 01:38:44
Прошу извинить, поспешил и перепутал.

Пользователя два - 'local' и 'Idle'. Запустил еще раз, строчки появляются каждую секунду.
Как только появляется соединение от 'local' - ошибки прекращаются, но после разрыва всех соединений 'local' они вновь лезут.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 12 октября 2012, 02:22:19
а строка точно выглядит так:
local t = hc.get_users_stat('#all')
а не так:
local t = hc.get_users_stat('#active')

Если ошибка не здесь, тогда остается, что написание имени пользователя 'local' в расширении и в разделе "Доступ" НС разное. Надо привести в соответствие.

Других причин появления этой ошибки не вижу.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 12 октября 2012, 13:45:25
Проверил - ничего не нашёл.
Ограничение по скорости в самом HC отключено, расширение перечитано и стоит первым (два прежних варианта отключены).
Во вложении используемое расширение и список пользователей - может что-то не вижу?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 12 октября 2012, 14:07:52
Разобрался. Это баг НС 1.0.0.377, который был исправлен автором в январе 2012. Я использую бета-версию 1.0.0.392, где это давно исправлено, поэтому расширение у меня работает как надо. У Вас оно правильно работать не будет.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: LordMerlin от 12 октября 2012, 17:55:36
Блин. Ну почему автор не выкладывает беты по принципу "Как есть". На совесть пользователей. Глядишь, намного больше бетатестеров стало бы.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 12 октября 2012, 19:51:44
Блин. Ну почему автор не выкладывает беты по принципу "Как есть". На совесть пользователей. Глядишь, намного больше бетатестеров стало бы.
Поддерживаю. Какой смысл обсуждать баги версии 377, когда часть их исправлена более полугода назад?


Название: I got butthurt.
Отправлено: mirny от 14 октября 2012, 23:56:36
Погрузился в Луа, пишу расширение; отладил, все работает. Выключаю комп, наутро включаю снова — расширение не пашет.
Скрипт расширения перестал видеть подключенный через require модуль, который лежит рядом в этой же папке.
Переложил модуль в другое место из прописанных в LUA_PATH — расширение стало видеть модуль.
Вернул модуль обратно — опять не видит.
Удалил расширение из списка расширений и добавил его снова — всё опять заработало.
На следующий день всё повторилось.

В системе установлен Lua for Windows (http://code.google.com/p/luaforwindows/), если это имеет значение, и прописаны переменные среды:

LUA_DEV=c:\Lua
LUA_PATH=.\?.lua;.\?\init.lua;%LUA_DEV%\lua\?.lua;%LUA_DEV%\lua\?\init.lua;

Путь к папке с расширением выглядит так: d:\Progs\HandyCache\Extensions\my_extension

Я где-то косячу или это таки баг?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 15 октября 2012, 00:25:00
Насчет бага разбираться не хочется - мне неизвестно, как Windows и LUA устанавливают/считывают переменные среды.
Попробуйте расширение делать независимым от переменных среды.
В СМ я обрамляю require такой оберткой:

local old_cpath = package.cpath
package.cpath = hc.script_name:match('.*\\') .. '?.dll'
require('vcl')
package.cpath = old_cpath

Вместо красного вставить свое. Вместо package.cpath может потребоваться использование package.path


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mirny от 15 октября 2012, 00:38:06
Oh shi~  :o

Михаил, спасибо.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 12 ноября 2012, 02:10:20
В заголовке ответа (для передачи клиенту) расширение должно менять URL,
заменяя httр://https.. на http://.
Поясните, почему расширение срабатывает (видно в мониторе), но отдаваемый URL не меняет?

Код:
--[[ <HCExtension>
@name          Меняет заголовок ответа
@description   Изменяет заголовок ответа по заданным правилам
@rule          ^http://https\.\.
@event         BeforeAnswerHeaderSend/Answer
</HCExtension> ]]

function Answer()
hc.answer_header = re.replace(hc.answer_header, [[https\.\.]], '')
        hc.monitor_string = hc.monitor_string..'A-CH '
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 12 ноября 2012, 09:26:49
Как Вы узнали, что не меняет? Если по колонке монитора URL, то он и не должен меняться. Чтобы увидеть измененный заголовок, выведите содержимое hc.answer_header в лог НС.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 12 ноября 2012, 16:54:55
Не учёл, что на страницах могут быть зависимые ссылки (типа href="//mail.google.com/favicon.ico" и подобные), а также как теперь понимаю - воплотить задуманное таким способом невозможно.

Цитировать
Как узнали, что не меняет?
Адресная строка FF всё равно показывает httр://https..accounts.google.com/Service...
Первоначально расширение и задумывалось для её подмены, но как оказалось (см.выше) это неверный путь.

Цитировать
выведите содержимое hc.answer_header в лог НС
Спасибо за подсказку! Изменил расширение:
Код:
function Answer()
hc.put_to_log('m1='..hc.answer_header)
hc.answer_header = re.replace(hc.answer_header, [[https\.\.]], '')
hc.put_to_log('m2='..hc.answer_header)
end
Результат во вложении.

P.S. Данная проблема не существенна (рабочие, но необычные ссылки в закладках, истории ...) пока сайт не потребует "куки" (предположение), а они сохраняютя не в Host, а в https..Host.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 27 декабря 2012, 07:37:50
Код:
--[[ <HCExtension>
@name         Менять User-Agent в заголовках запросов на свой
@event        RequestHeaderReceived/Request
</HCExtension> ]]

function Request()
hc.request_header = re.replace(hc.request_header, [[^User-Agent: \K[^\r\n]+]], 'My_Agent')
end

Можно ли доработать это расширение таким образом, что бы User-Agent выбирался случайным образом из заранее подготовленного массива User-Agent-ов?
Заранее спасибо


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mirny от 27 декабря 2012, 07:55:01
Можно. Заготовь массив и выбирай из него случайно.

Use math.random([n [, m]), Luke.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 27 декабря 2012, 08:48:51
Можно. Заготовь массив и выбирай из него случайно.

Use math.random([n [, m]), Luke.

Не силён в lua  :(
делаю так
Код:
--[[ <HCExtension>
@name         Менять User-Agent случайно заголовках запросов на свой
@event        RequestHeaderReceived/Request
</HCExtension> ]]

-- заготавливаем массив агентов
ua={'My_Agent1','My_Agent2','My_Agent3'}

function init()
  rua=math.random(ua)
end

function Request()
hc.request_header = re.replace(hc.request_header, [[^User-Agent: \K[^\r\n]+]], rua)
end
Получаю пустой агент  ???


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mirny от 27 декабря 2012, 09:28:42
Должно быть что-то вроде:
Код:
--[[ <HCExtension>
@name         Менять User-Agent случайно заголовках запросов на свой
@event        RequestHeaderReceived/Request
</HCExtension> ]]

-- заготавливаем массив агентов
ua={'My_Agent1','My_Agent2','My_Agent3'}

function Request()
  hc.request_header = re.replace(
    hc.request_header,
    [[^User-Agent: \K[^\r\n]+]],
    ua[math.random(#ua)]
  )
end



Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 27 декабря 2012, 10:29:29
Спасибо, так работает. Но выдаёт случайный User-Agent при каждом запросе. А хотелось бы чтобы смена User-Agent-а была через заданный интервал времени. Так можно?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mirny от 27 декабря 2012, 11:19:44
Спасибо, так работает. Но выдаёт случайный User-Agent при каждом запросе. А хотелось бы чтобы смена User-Agent-а была через заданный интервал времени. Так можно?
Можно. Я разрешаю.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 27 декабря 2012, 19:13:23
Можно. Я разрешаю.
Юмор конечно великая сила  :)
Перебрал все похожие расширения, прочитал инструкции... Мне не осилить за пару дней lua, и вряд-ли за пару месяцев тоже )
Попробую конкретизировать проблему:
Нужно что бы юзер-агент менялся единожды при запуске этого расширения.
Похожее решение делал многоуважаемый mai62 в теме http://handycache.ru/component/option,com_smf/Itemid,10/topic,5146.0/
Помогите, please...


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 27 декабря 2012, 20:15:22
тогда так. а зачем тебе это?
Код:
--[[ <HCExtension>
@name         Менять User-Agent случайно заголовках запросов на свой
@event        RequestHeaderReceived/Request
@event        Init/NewFakeUserAgent
</HCExtension> ]]

-- заготавливаем массив агентов
ua={'My_Agent1',
    'My_Agent2',
    'My_Agent3'}

function NewFakeUserAgent()
  hc.set_global('Fake-User-Agent', ua[math.random(#ua)])
end

function Request()
  hc.request_header = re.replace(hc.request_header, [[^User-Agent: \K[^\r\n]+]], hc.get_global('Fake-User-Agent'))
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Влад22 от 28 декабря 2012, 07:20:28
Anymore, спасибо огромное!  :thanks: Заработало сразу и уже на новой версии HandyCache RC3 1.0.0.408  :good:


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mirny от 30 декабря 2012, 15:29:55
Новые версии это хорошо, но вот то, что расширение, которое я пишу потихоньку, работало в 377, а теперь отвалилось, как-то настораживает.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 30 декабря 2012, 17:59:09
mirny, там lua5.x.dll обновился может в нём дело?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 30 декабря 2012, 18:27:10
Новые версии это хорошо, но вот то, что расширение, которое я пишу потихоньку, работало в 377, а теперь отвалилось, как-то настораживает.
Выкладывай, потестим если не жалко :)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 30 декабря 2012, 18:46:55
Цитировать
mirny, там lua5.x.dll обновился может в нём дело?
Библиотека lua5.1.dll заменена для обеспечения совместимости с новой версией расширения СМ, которая, вероятно, скоро будет доступна для тестирования.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mirny от 30 декабря 2012, 19:20:23
>mirny, там lua5.x.dll обновился может в нём дело?
Не, это вряд ли. Я ж им не пользуюсь.

Fun fact: Если lua5.x.dll и другие Lua модули поудалять из папки HC, то расширения все равно работают, при условии, что в системе стоит Lua for Windows.

>Выкладывай, потестим если не жалко
Hе жалко.

Там в зависимостях Penlight и LFS, поэтому чтобы оно работало нужно их скачать и скопировать куда-то там, чтобы расширение их видело, но проще установить Lua for Windows (http://code.google.com/p/luaforwindows/) и прописать переменные среды:
Код:
LUA_DEV=c:\Lua
LUA_PATH=.\?.lua;.\?\init.lua;%LUA_DEV%\lua\?.lua;%LUA_DEV%\lua\?\init.lua;
LUA_CPATH=.\?.dll;.\?51.dll;%LUA_DEV%\?.dll;%LUA_DEV%\?51.dll;%LUA_DEV%\clibs\?.dll;%LUA_DEV%\clibs\?51.dll;%LUA_DEV%\loadall.dll;%LUA_DEV%\clibs\loadall.dll;
В список переадресации добавить правило:
Код:
#5#~#True#~#(^.+?)--(/)?$#~#http://c.hc/_\1\2#~#False#~#True
Теперь, если в адресной строке браузера к адресу допечатать "--", то оно перенаправит на список файлов в кэше, это пока в качестве заглушки, а в перспективе я допилю нормальный файловый менеджер.

Кого вся эта хрень не запугала — хватай и тести.

http://rghost.net/42626145


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 03 января 2013, 23:48:26
help, как на lua из http://adshow.cmd/http://host/blablabla получить host


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 04 января 2013, 03:19:31
Как-то так
host= re.find(url, [[(?:\w+:\/\/)?(?:[^@/]+@)?([^/]+)/?.*$]], 1)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mirny от 04 января 2013, 09:26:57
Или так:
Код:
function url_parse(url)
  -- scheme://netloc/path;parameters?query#fragment
  local scheme, netloc, path = string.match(url, [[^(%a+://)([^/]+)(/.*)]])
  return {scheme=scheme, netloc=netloc, path=path}
end

url = [[http://adshow.cmd/http://host/blablabla]]
url_path = url_parse(url).path:sub(2)
url_host = url_parse(url_path).netloc


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 16 января 2013, 22:13:41
Прошу в тренажёре HC Version 1.00 RC3 (1.0.0.409) проверить ("Применить") правило
^http://[^:]+:443 для
url: http://addons.cdn.mozilla.net:443/media/img/app-icons/med/firefox.png
Перед проверкой галочку "Удалять лидирующий http://" необходимо снять.

У меня выдаёт следующий результат:
Код:
Mark: 
RegEx error - PCRE_ERROR_NOMATCH
Хотя должен быть:
Код:
0(1): http://addons.cdn.mozilla.net:443
Mark:

Проверил в старых версиях HC, там работает правильно.
Если правило изменить на ^http://[^:]+:44, то работает верно.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 16 января 2013, 22:54:22
Подтверждаю, точно так. olDjeka, ещё вариант http://[^:]+:443 работает.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 16 января 2013, 23:11:22
Это не хорошо. Заметил поскольку одни и те же запросы стали идти то через расширение, то мимо.
Если ошибка влияет и на списки правил, то это совсем плохо.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 17 января 2013, 00:19:29
Прошу в тренажёре HC Version 1.00 RC3 (1.0.0.409) проверить ("Применить") правило
^http://[^:]+:443 для
url: http://addons.cdn.mozilla.net:443/media/img/app-icons/med/firefox.png
Перед проверкой галочку "Удалять лидирующий http://" необходимо снять.
Вы нашли ошибку PCRE. Я написал разработчикам.
Для сохранения работоспособности в приведенном выше правиле используйте "\A" вместо "^": и оптимальней чуток, и ошибку обойдете.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 17 января 2013, 00:29:32
Заменять только второй символ или все?
В правилах тоже лучше заменить?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 17 января 2013, 00:33:24
Цитировать
Заменять только первый символ или все?
Только первый.
Цитировать
В правилах тоже лучше заменить?
??? Я ж не знаю, о каких правилах речь.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 17 января 2013, 00:39:12
Например:

ЧС
^bs\.yandex\.ru/

Не обновлять
^[^?]+[?/]\w*\d{4,}(\.(aspx?|txt))?/?$
исключая
^gismeteo\.ru/(weather/)?g?m?towns\d?/|/20[01]\d/|^soft\.softodrom\.ru/ap/|^inosmi\.ru/translation/|pogoda

Переадресация
^[^?]*%(2[56f]|3[adf])


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 17 января 2013, 00:48:53
Цитировать
В правилах тоже лучше заменить?
Строго говоря, да. Но эта строгость выигрыш дает малый, а удобочитаемость \A хуже, чем ^. Поэтому выбирайте, как Вам нравится.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 17 января 2013, 01:04:38
Михаил Спасибо :good:
Привёл правила в которых много попаданий, плюс ещё расширения надо посмотреть.
Нравится, не нравиться здесь дело десятое.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 17 января 2013, 01:24:12
Цитировать
Привёл правила в которых много попаданий
Выгода от использования \A в правиле происходит только при НЕпопадании. При попадании скорость работы будет одинакова. Число НЕпопаданий гораздо больше количества попаданий, поэтому эта замена дает практически одинаковый эффект в любом правиле Черного списка (т.к. каждое из них бОльшую часть попыток НЕ срабатывает).
Но на самом деле даже на глаз этой выгоды не увидите - очень уж она мала. Я столкнулся с реальными эффектами ускорения только при написании СМ, который регулярными выражениями лопатит гораздо большие объемы, чем списки НС.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 17 января 2013, 01:58:42
Полностью согласен, но многие ссылки состоят из двух url, типа
http://сайт-1/тра-та-та (=`~!:?$&! и т.д.) http://сайт-2/тру-ту-ту
Но самое главное, у меня несколько правил в списке "Преобразование URL" используют этот метасимвол, а это уже чревато проблемами.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 17 января 2013, 12:24:45
olDjeka, авторы PCRE отписались, что нашли и исправили ошибку. Опыт показывает, что примерно в течение месяца исправление может быть внедрено в НС.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 17 января 2013, 14:39:57
Хорошая новость, ещё раз спасибо. Проверил у себя всё в тренажёре, только это правило работало неверно. Заменил, и теперь порядок.
Но гложут сомнения (необоснованные, но гложут), PCRE наверно используется и для внутренних преобразований в самом HC. И осталось непонятно почему? то срабатывало, то нет. Вот начала отладочных логов, URL один и тот же, но в первом случае сработало, во втором нет.
* Пользователь один и тот же, долго ловил когда сработает и начало почему то не захватило.

Код:
16.01.13 21:16:01,554 # 9
MappedPortExecute_begin

16.01.13 21:16:01,554 # 9
MappedPortExecuteDo_begin/476

16.01.13 21:16:01,564 # 9 <<< URL: http://addons.cdn.mozilla.net:443/media/img/app-icons/med/firefox.png
*** IdConnectionIntercept1SendDo/476 SInd=2 ***

16.01.13 21:16:01,564 # 9:  Connect to proxy from script: (127.0.0.1:8192)

Код:
16.01.13 21:17:23,242 # 10: Start connection from client

16.01.13 21:17:23,252 # 10: Connection from 127.1.1.1:2601 to HC Version 1.00 RC3 (1.0.0.409)

16.01.13 21:17:23,252 # 10: User name: local

16.01.13 21:17:23,262 # 10
MappedPortExecute_begin

16.01.13 21:17:23,272 # 10
MappedPortExecuteDo_begin/476

16.01.13 21:17:23,382 # 10 <<< URL: http://addons.cdn.mozilla.net:443/media/img/app-icons/med/firefox.png
*** IdConnectionIntercept1SendDo/476 SInd=0 ***

16.01.13 21:17:23,392 # 10: DNS resolve addons.cdn.mozilla.net --> 23.61.212.61 (From cache)

Цитата: Михаил
используйте "\A" вместо "^": и оптимальней чуток
А чем оптимальней  ???


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 17 января 2013, 15:38:46
А чем оптимальней  ???
Я бы спросил: откуда такие глубокие познания? LinkPlease!


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 17 января 2013, 22:41:09
Цитировать
F чем оптимальней?
PCRE изучает строку (в нашем случае http://addons.cdn.mozilla.net:443/media/img/app-icons/med/firefox.png) слева направо, начиная с первого символа. Если заданному регулярному выражению соответствия нет, то таким же образом эта строка изучается, начиная со второго, третьего и т.д. до последнего символов.
Если в начале стоит \A, это дает PCRE дполнительную информацию о том, что изучать строку нужно только с первого символа и все.
Если в начале стоит ^, то строка штудируется по полной программе.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 17 января 2013, 23:14:09
Михаил  :thanks:
Отсюда (http://www.pcre.ru/docs/perl/text/intro/) об этом не додумался.
Цитировать
начало строки '^' и конец строки '$' действуют для каждой строки в многосторочной строке, то \A и \Z обозначают начало и конец всей многосторчной строки.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 18 января 2013, 00:49:39
Чтобы увидеть разницу воочию можете подцепить такое тестовое расширение:
Код:
--[[ <HCExtension>
@name Test2
@event Options
</HCExtension> ]]

function Options()
local subj = [[http://addons.cdn.mozilla.net/media/img/app-icons/med/firefox.png]]
local regex1 = [[^http://[^:]+:443]]
local regex2 = [[\Ahttp://[^:]+:443]]
local count = 1
re.set_subj(subj:rep(1000000))
local function timer(regex)
re.set_regex(regex)
local clck = - os.clock()
for _=1,count do
re.find()
end
return clck + os.clock()
end
hc.put_msg(string.format('regex1 execution time = %g\r\nregex2 execution time = %g', timer(regex1), timer(regex2)))
end
При вызове настроек расширения всплывет окно с информацией о времени выполнения регулярных выражений, заданных в переменных regex1 и regex2.
Для получения приемлемых глазу цифр времени (а не наносекунд) исходный УРЛ http://addons.cdn.mozilla.net/media/img/app-icons/med/firefox.png увеличивается в 1000000 раз.

Этим расширением если есть желание можете сравнивать эффективность разных вариантов своих регулярных выражений, подставляя соответствующие значения в переменные subj, regex1 и regex2.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 22 января 2013, 17:00:39
При обработке события BeforeAnswerBodySend, чтение заголовка запроса (request_header) выдаёт пустую строку. Можно ли как-то получить заголовок запроса при обработке события BeforeAnswerBodySend?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 22 января 2013, 20:03:17
Цитировать
выдаёт пустую строку
следует читать как "выдаёт соответствующее ошибке сообщение".
Но сути вопроса это не меняет.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 22 января 2013, 20:27:28
Что за  сообщение о соответствующей ошибке?
Какие переменные в каких обработчиках можно использовать читайте в файле HCExtensions.html


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 22 января 2013, 20:39:30
Как получить заголовок запроса при обработке события BeforeAnswerBodySend, если в обработчике BeforeAnswerBodySend нельзя использовать переменную request_header?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 23 января 2013, 04:26:36
Пока проверял - ошибся, и напутал в предидущих постах :oops:

Эксперементируя с расширениями заметил что request_header работает и для BeforeAnswerBodySend.
В HCExtensions.html такой "пары" нет, поэтому хотел выяснить - можно её использовать или нет (возможны проблемы)?

Код:
--[[ <HCExtension>
@name          ### Temp ###
@event         BeforeAnswerBodySend
</HCExtension> ]]

function BeforeAnswerBodySend()
  x=hc.request_header
  hc.put_to_log('R-Header '..x)
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 23 января 2013, 13:27:47
Пока я не вижу причин ломать это, раз уж оно сейчас работает. Вообще предполагалось, что работа с заголовком будет в обработчике события RequestHeaderReceived или BeforeRequestHeaderSend.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 23 января 2013, 20:05:16
Цитировать
не вижу причин ломать
И не стоит :) Может кто-то найдёт и другие применения, но одно уже можно использовать:
при загрузке содержимого страницы (в FireFox), запросы в поле "Accept" содержат формат ресурса, что иногда может пригодиться и после получения ответа. Например, при блокировании или отсутствии картинки можно заменить её именно картинкой.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 23 января 2013, 20:53:24
Написал в HCExtensions.html, что можно request_header доступен для чтения в этом обработчике.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 26 января 2013, 07:08:16
Есть скрипт:
Код:
--[[ <HCExtension>
@name          caching
@author        zoynels@yandex.ru
@version       0.01
@description   caching
@rule          bits\.wikimedia\.org/
@event URLToFileNameConverting/conv
</HCExtension> ]]



function conv()

 if not conv_url then conv_url = {} end
 local url = conv_url[hc.monitor_index] or hc.url

  hc.put_to_log('url: ' .. url)
local cache_file_name = hc.prepare_url(url,false)
hc.put_to_log('Cache_file_name:' .. cache_file_name)
hc.preform_cache_file_name(cache_file_name)
hc.monitor_string = hc.monitor_string .. ', Cache Extention ' .. cache_file_name
conv_url[hc.monitor_index] = url

end

при запросе URL например
http://bits.wikimedia.org/ru.wikipedia.org/load.php?debug=false&lang=ru&modules=ext.flaggedRevs.basic%7Cext.gadget.collapserefs%2CdirectLinkToCommons%2Cpreview%2CreferenceTooltips%7Cext.wikihiero%7Cmediawiki.legacy.commonPrint%2Cshared%7Cmw.PopUpMediaTransform%7Cskins.vector&only=styles&skin=vector&*

в логе выходят сообщения:
Цитировать
26.01.13 09:07:09,703 # 0 -=< MESSAGE FROM EXTENSION >=- C:\[F]\HandyCache\Extensions\Wikipedia\w12.txt
url: http://bits.wikimedia.org/ru.wikipedia.org/load.php?debug=false&lang=ru&modules=ext.flaggedRevs.basic%7Cext.gadget.collapserefs%2CdirectLinkToCommons%2Cpreview%2CreferenceTooltips%7Cext.wikihiero%7Cmediawiki.legacy.commonPrint%2Cshared%7Cmw.PopUpMediaTransform%7Cskins.vector&only=styles&skin=vector&*

26.01.13 09:07:09,703 # 0 -=< MESSAGE FROM EXTENSION >=- C:\[F]\HandyCache\Extensions\Wikipedia\w12.txt
Cache_file_name:bits.wikimedia.org\ru.wikipedia.org\load.php^\D1F2CEC0


проблема собственно в имени файла "D1F2CEC0" которое записывается на диск и потом узнать по данному имени что за URL запрашивался не представляется возможным, это ошибка или так и должно быть? и если это всё таки должно быть именно так, то как можно получить читабельное имя?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 26 января 2013, 13:01:39
В файловой системе есть ограничение на длину полного имени файла в 250 байт. Когда имя файла получается длинным, как в Вашем случае, часть имени файла заменяется MD5-хэшем. Восстановить из хэша измененную часть уже нельзя.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 02 февраля 2013, 16:54:21
Подскажите, как при блокировании запроса определённым расширением, заменить тело ответа своим и
получить цвет строки монитора для этого запроса как для заблокированного (красный) или недоступного (белый).

Первое расширение срабатывает и выдаёт заданную картинку, но выводит в монитор строку зелёного цвета (пробовались различные варианты заголовков ответа для hc.answer_header).

Код:
--[[ <HCExtension>
@name          ### Temp-1 ###
@event         BeforeRequestHeaderSend/T001
</HCExtension> ]]


function T001()
if re.find(hc.request_header, [[^Accept: text/html,]]) then return
else
hc.action = 'stop'
end
hc.answer_header = 'HTTP/1.1 403 lock (R-ext-FF)\r\nConnection: Close\r\nContent-Type: image/png\r\n\r\n'
hc.answer_body= 'file=D:\\HandyCache\\R-ext-FF.png'
hc.monitor_string = hc.monitor_string..'R-ext-FF '
end

Второе расширение срабатывает, выводит в монитор строку как для заблокированного (красную), но отдаёт браузеру пустую строку (ни заданной картинки, ни картинки заданной для чёрного списка).
* При проверке использовались копии одной и той же картинки, но с разными именами.

Код:
--[[ <HCExtension>
@name          ### Temp-2 ###
@event         BeforeRequestHeaderSend/T001
</HCExtension> ]]


function body()
-- if not hc.last_part then
hc.answer_body= 'file=D:\\HandyCache\\R-ext-FF.png'
-- end
hc.put_to_log('B - '..hc.answer_body)
end


function T001()

local function Stop()
if re.find(hc.request_header, [[^Accept: text/html,]]) then return
else
   hc.call_me_for('BeforeAnswerBodySend', 'body') end
   hc.action = 'stop'
   hc.monitor_string = hc.monitor_string..'R-ext-FF '
end

if not re.find(hc.request_header, [[^Referer:]]) then return
else
  Stop() -- Блокируем загрузку
end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 03 февраля 2013, 15:16:37
Не могу понять, почему не выдаётся заданная в расширении картинка?
Может кто знает в чём дело?
Цитировать
Изображение «http://nirsoft.net/» не может быть показано, так как содержит ошибки.

В "Чёрном списке" задано "Показывать файл:" 'D:\HandyCache\bHC-i.png'.
Файл 'D:\HandyCache\R-ext-FF.png' является копией этого файла.

Код:
--[[ <HCExtension>
@name          ### Temp ###
@event         BeforeRequestHeaderSend/T001
@event         BeforeAnswerBodySend/body
</HCExtension> ]]

function body()
hc.put_to_log('B1 - '..hc.answer_body)
-- if not hc.last_part then
-- hc.answer_body= 'file=D:\\HandyCache\\R-ext-FF.png'
-- end
hc.put_to_log('B2 - '..hc.answer_body)
end

function T001()
hc.action = 'stop'
end

Во вложениях логи использования трёх вариантов расширения:

1.log - строки 9,10,11 закомментированны (по умолчанию).
Браузеры показывают картинку заданную для 'ЧС'.

2.log - строка 10 раскомментированна, строки 9 и 11 закомментированны.
Исходный код страницы в IE8:
Код:
file=D:\HandyCache\R-ext-FF.pngfile=D:\HandyCache\R-ext-FF.png

3.log - строки 9,10,11 раскомментированны.
Исходный код страницы в IE8:
Код:
file=D:\HandyCache\R-ext-FF.png


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mirny от 03 февраля 2013, 16:40:51
> hc.answer_body= 'file=D:\\HandyCache\\R-ext-FF.png'
Сударь, вы фееричны. Читайте про I/O в Луа. Я верю что это поможет.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 03 февраля 2013, 17:14:21
Цитировать
верю что это поможет
С англиЦким не дружу, потому вера безосновательна.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 03 февраля 2013, 17:29:23
Читайте внимательно HCExtensions.html.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 03 февраля 2013, 18:11:14
Цитата: HCExtensions.html
Переменные таблицы hc, доступные в расширениях
  • Имя                 Доп.действия       События                         Доп.значения
  • answer_body    чтение, запись     BeforeAnswerBodySend    "file=<имя файла>"
Что не так? Может кто просто выложит рабочий пример?
Добавлено: 03 Февраль 2013, 17:53:08

И почему в первом расширении, несколькими постами выше, эта строка работала?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 03 февраля 2013, 18:45:56
Цитировать
Что не так?

1. Судя по Вашему примеру, это баг НС или неправильное описание в HCExtensions.html.
Согласно описанию, hc.answer_body= 'file=D:\\HandyCache\\R-ext-FF.png' должно грузить файл, а не саму эту строку.
mai62, а если файла нет, что должен выдать НС в переменную hc.answer_body?

2. Если б все отмеченное в п.1 работало правильно, все равно результат был бы ошибочным. Надо очищать hc.answer_body в каждом куске ответа кроме последнего:
hc.answer_body = hc.last_part and 'file=E:\\Progr\\HandyCache\\R-ext-FF.png' or ''


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 03 февраля 2013, 19:19:41
olDjeka

1. В обработчике BeforeAnswerBodySend переменной hc.answer_body нельзя присвоить имя файла, там она воспринимается как порция данных (кусок тела).

2. В других обработчиках (кроме BeforeRequestBodySend и BeforeAnswerBodySend) hc.answer_body должна идти в паре с hc.answer_header, иначе она игнорируется.

3. Использовать hc.action = 'stop' вместе с тандемом (hc.answer_header + hc.answer_body) крайне не желательно. В некоторых событиях hc.action будет в приоритете и HC отдаст браузеру свой ответ.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 03 февраля 2013, 20:07:35
Михаил, спасибо.
Только не совсем понял последняю строку, вернее пока совсем не понял :oops:
DenZzz, бладарю за подробное объяснение, пойду думать как "выкрутится" :)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Михаил от 03 февраля 2013, 20:31:42
Цитировать
Только не совсем понял последняю строку
Это более короткая запись такого фрагмента:
if hc.last_part then
   hc.answer_body = 'file=E:\\Progr\\HandyCache\\R-ext-FF.png'
else
   hc.answer_body = ''
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 03 февраля 2013, 20:46:17
Михаил :good:
Но мне бы стандартные то научится понимать ???


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 10 февраля 2013, 18:29:31
Почему  ??? Если stop используется во время RequestHeaderReceived или BeforeRequestHeaderSend, то
строка монитора меняется.
Код:
10.02.2013/17:41:32 local/127.0.0.1 http://ya.ru/gfeg.5gtr 0 0/73 0 0 "430 lock (A-40X)" 

Если во время AnswerHeaderReceived, то нет.
Код:
10.02.2013/17:50:51 local/127.0.0.1 http://ya.ru/gfeg.5gtr 4373 4373/585 100% 331 "403 Forbidden (HC)" 

Код:
--[[ <HCExtension>
@name ### Temp ###
@rule \Ahttp://ya\.ru
@event AnswerHeaderReceived/Stop
@event BeforeAnswerHeaderSend
</HCExtension> ]]

function BeforeAnswerHeaderSend()
hc.answer_header = 'HTTP/1.1 430 lock (A-40X)\r\nConnection: Close\r\nContent-Type: text/html\r\n\r\n'
end

function Stop()
hc.action = 'stop'
end

Перед проверкой все другие расширения были отключены.

p.s. В версии 409 ещё и заголовок ответа менялся временно, только до BeforeAnswerBodySend (во время события выдавался пустой).


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: GregoryPek от 11 февраля 2013, 14:44:50
Всем привет, у меня вот вопрос ламерский (все инструкции прочитал, ответа не нашел):

- ищу аналог "window.location.href" , есть здесь такое? чем заменить можно? 


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 11 февраля 2013, 14:53:29
hc.url, это написано в HCExtensions.html


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: GregoryPek от 11 февраля 2013, 14:55:29
hc.url, это написано в HCExtensions.html
hc.url меняется во время загрузки страницы, а "window.location.href" нет


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 11 февраля 2013, 15:00:14
hc.url меняется во время загрузки страницы
Докажите это, пожалуйста.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: GregoryPek от 11 февраля 2013, 16:01:42
Докажите это, пожалуйста.


сузьте пожалуйста задачу, доказать что :

1) hc.url меняется во время загрузки страницы

или

2) "window.location.href" нет
Добавлено: 11 Февраль 2013, 15:05:00

Докажите это, пожалуйста.
вот вроде:
Код:
--[[ <HCExtension>
@name         TEST
@event        RequestHeaderReceived/Request
@rule   handycache.ru/forum/
</HCExtension> ]]

function Request()
hc.put_to_log('URL_TEST - '..hc.url)
end
лог приложил



Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 11 февраля 2013, 16:22:03
Работает, согласно документации.
Возможно, вам нужен рефер?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: GregoryPek от 11 февраля 2013, 16:27:15
Работает, согласно документации.
я вот не понял, я доказал вам или нет, меняется или нет?  :)

Возможно, вам нужен рефер?
рефер тоже не то, а вот что нибудь типа "window.location.href", чтобы не менялось всю загрузку страницы


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 11 февраля 2013, 22:48:22
рефер тоже не то, а вот что нибудь типа "window.location.href", чтобы не менялось всю загрузку страницы

HC не может точно знать, какая страница сформировала запрос. В расширении можно использовать переменную hc.monitor_parent_url, но она берется из реферера, если он есть.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: GregoryPek от 12 февраля 2013, 07:18:40
HC не может точно знать, какая страница сформировала запрос.
Ясно, жаль, благодарю.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: GregoryPek от 12 февраля 2013, 14:57:32
Подскажите товарищи, а в адресной строке браузера можно менять URL на URL1 который получился после изменений через hc.request_header?

т.е. к примеру в адресной строке было :  http://1.jpg , через request_header я поменял на http://2.jpg , все это загрузилось в браузер, а как эти изменения отразить в адресной строке браузера? через answer_header не получается.

Выложите пожалуйста образец кому не лень.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 12 февраля 2013, 17:05:32
а как эти изменения отразить в адресной строке браузера?

Через переадресацию с помощью ответа "302 Found". Больше никак браузер не узнает, что URL изменился.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: GregoryPek от 13 февраля 2013, 10:04:47
DenZzz понял, благодарю.

Вопрос по мере изучения Lua:
я так понял что ".lua" понимает только в кодировке ANSI (я сужу по Notepad++) или не так?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: DenZzz от 13 февраля 2013, 14:16:26
В каком смысле "понимает"?

Библиотека функций языка Lua написана на языке С (точнее на подмножестве ANSI C и C++).
Расширение на Lua может обрабатывать тексты в любых кодировках. Например, расширение Content Master работает с HTML в кодировках windows-1251 (ANSI), utf-8 и koi8-r.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: GregoryPek от 13 февраля 2013, 20:54:35
В каком смысле "понимает"?

Библиотека функций языка Lua написана на языке С (точнее на подмножестве ANSI C и C++).
Расширение на Lua может обрабатывать тексты в любых кодировках. Например, расширение Content Master работает с HTML в кодировках windows-1251 (ANSI), utf-8 и koi8-r.
я имел ввиду сам текст программы, текстовый файл


Название: Получить содержимое файла
Отправлено: wenny от 27 февраля 2013, 16:41:42
Доброго времени суток. Можно ли посредством lua из дополнения получить содержимое файла, находящегося на винте? Спасибо


Название: Re: Получить содержимое файла
Отправлено: DenZzz от 28 февраля 2013, 02:20:46
Можно.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ThermIt от 26 марта 2013, 16:10:19
Искал, не нашёл, может кто подскажет, как используя Lua разорвать соединение ICQ в заданное время? Или любое другое соединение.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 26 марта 2013, 23:15:21
Так
 hc.client_disconnect(ind)

ind - индекс соединения.

Индекс текущего соединения (соединения, для которого вызван текущий обработчик события) можно прочитать из переменной hc.connection_index.

Получается такая схема: в обработчике RequestHeaderReceived отловить соединение с ICQ и сохранить где-то индекс соединения. Когда наступит время, взять сохраненный индекс и по нему разорвать нужное соединение.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ThermIt от 27 марта 2013, 09:32:00
О, спасибо. Стал копать в эту сторону и наткнулся на hc.user_disconnect, которого для моих нужд за глаза хватит. :) Осталось придумать как запустить код в определённое время и понять как это будет себя вести при включении-выключении дополнения.

ps: получилось что-то типа такого (формат дурной, потому что форум в нормальном формате не пропускает):
Код:
AnswerHeaderReceived/Answer
Timer1m/Timer

function Answer()
  time = os.date("*t")
  if time.hour >= 21 or time.hour < 7 then
      if hc.action=="" or hc.action==nil or hc.action=="save" then
        hc.action = "stop"
      end
  end
end

function Timer()
  time = os.date("*t")
  if time.hour >= 21 or time.hour < 7 then
    hc.user_disconnect('user1');
  end
end
pps: как получить список имён пользователей? Нашёл только таблицу статистики, но не понимаю как из неё получить имена.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 27 марта 2013, 12:00:35
Так
Код:
--[[ <HCExtension>
@name Test_users_stat
@event Options
</HCExtension> ]]

function Options()
  local users = hc.get_users_stat('#all') or {}
  local s=''
  for user,v in pairs(users) do
    s= s..user..'\r\n'
  end
  hc.put_to_log(s)
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mirny от 28 марта 2013, 15:40:51
mai62, зачем вы так длинно пишете table.concat(users, '\r\n')?
Код:
function Options()
  local users = hc.get_users_stat('#all') or {}
  hc.put_to_log(users:concat'\r\n')
end
     
[/autism]
upd: А, понял. Не посмотрел что там словарь.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ThermIt от 28 марта 2013, 20:28:49
Да не, всё правильно и работает. :)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Andrey_04.05 от 16 августа 2013, 15:26:59
Выдалось немного времени, попробовал накидать расширение для сбора статистики обращения к файлам. С луа абсолютно незнаком, пробовал делать по аналогии с "IgnoreOnceVisitedSites" от Inversion. Первый блин - по моей задумке в файл пишется имя файла целиком, вместе с путем. В получившемся варианте пишутся все время только пустые строки. Где-то не попал ))) И сразу второй вопрос - следом за файлом в эту же строку хочу писать дату и время обращения. Кто подскажет?
Результат моего "труда":

--[[ <HCEXTENSION>
@name            Statistika
@author          Andrey_04.05@mail.ru
@version         0.1
@description     Собирает информацию об обращениях к файлам в текстовом виде для вычисления "рейтинга".
@event           BeforeRequestHeaderSend/on_BeforeRequestHeaderSend
</HCEXTENSION> ]]

g_name = re.find(hc.script_name, [[([^\\]+)\.lua$]], 1)
g_extensionRoot = re.replace(hc.script_name, g_name..[[\.lua$]], '')

function on_BeforeRequestHeaderSend()
   hc.monitor_string = hc.monitor_string ..'Test'
      f = io.open(g_extensionRoot..g_name..'DB.txt', 'a')
      if (f) then
         f:write(hc.cache_file_name..'\n')
         f:close()
      else                                                hc.put_to_log('Save failed')
         hc.monitor_string = hc.monitor_string ..' Save failed'
      end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 26 августа 2013, 21:46:36
Поправьте пожалуйста расширение. Новый RC3 1.0.0.469 зависает из-за него.
Цитировать
--[[ <HCExtension>
@name          Online/Offline
@author        mai62
@version       0.01
@description   0
@rule          ^http://
@event         Init/init
@event         RequestHeaderReceived/request
</HCExtension> ]]

--  VK_CAPITAL = 20
--  VK_NUMLOCK = 144
--  VK_SCROLL = 145

function request()
  require 'keyboard'
  x=keyboard.GetKeyState(20)
--    hc.put_to_log('..hc.url')
  if x==0 then
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline '
   end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 26 августа 2013, 22:39:25
Попробуйте keyboard.dll заменить на этот файл.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 27 августа 2013, 01:24:30
С ним так же зависает в момент получения запроса от браузера. В логе видно еррор


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 27 августа 2013, 09:36:50
С этим файлом у меня работает.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: HKLM от 27 августа 2013, 14:34:34
Работает!


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 23 января 2014, 17:31:01
Возможно ли добавить hc.last_part в событие BeforeRequestHeaderSend? или подскажите способ каким образом можно сначала получить весь запрос от браузера и только после получения всего запроса отправить его на сервер. а то когда post-запроc достаточно велик (десятки а то и сотни кб), то он их отправляет частями а нужно получить его полностью чтобы иметь возможность нормально обработать. Заранее спс.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 23 января 2014, 17:47:58
Посмотрите в файле HCExtensions.html пример расширения для обработки тела запроса.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: juku от 23 января 2014, 20:50:44
Добрый вечер всем.

Возможно ли сделать  исключение для определенных пользователей переадресацию?  Если да то как должен выглядеть скрипт в lua. Я просто совсем непонимаю как работает он, что-то сам пробовал химичить, но так и не получилось....

Мне надо просто сделать переадресацию на социальные сети. Однако некоторым пользователям разрешить. Если есть у кого-то идее как сделать кроме переадресации, я буду рад.

Система выглядит так

1) Уровень - обычные пользователи на уровне черного списка
2) 2 Уровень - люди у которых игнорируется черный список( За что спасибо mai62 который скинул игнорирование черного списка для определенных пользователей), но закрыты некоторые сайты (проще говоря переадресация на социальные сети)
и хочется сделать так сказать 3 уровень у кого будет игнорироватся переадресация.

Как то так. Заранее спасибо.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zoynels от 23 января 2014, 21:55:35
Посмотрите в файле HCExtensions.html пример расширения для обработки тела запроса.

Смотрел, почему-то когда делал в самом начале то запрос зависал и ничего не происходило, поэтому подумал что там что-то не то или сайт не поддерживается (?) и пришлось реализовать довольно мудрённый код. А сейчас с первого раза сработало как надо. Чудеса да и только. Спасибо за замечательную программу!


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 24 января 2014, 00:09:05
juku
Код:
--[[ <HCExtension>
@name          WhiteUser
@author        mai62
@version       0.1
@description   Отключение Черного списка или переадресации для заданных пользователей
@event         RequestHeaderReceived/RequestReceived
</HCExtension> ]]

function RequestReceived()
  local mask=''
  if hc.user_name=='user1' or
     hc.user_name=='user2'
  then
    mask='B'
  end
  if hc.user_name=='user31' or
     hc.user_name=='user32'
  then
    mask=mask..'R'
  end
  if #mask>0
  then
    hc.monitor_string = hc.monitor_string.."WU "
    hc.white_mask=mask
  end
end
Уровень 2 - пользователи user1 и user2;
Уровень 3 - пользователи user31 и user32;


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: juku от 24 января 2014, 12:09:56
Спасибо огромное =)


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: spapok от 11 февраля 2014, 21:41:11
скажите пожалуйста
как сделать так что бы разрывались все существующие соединения раз в час?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: KPu3uC B Poccuu от 12 марта 2014, 14:25:20
У меня такой вопрос: пользуется ли автор HC какой-то библиотекой/компонентом для подлючения Lua в Дельфи? Я сам пытаюсь уже кучу времени найти что-то рабочее (не под древний D7, желательно с поддержкой хотя бы Delphi XE). Есть просто перевод исходников C на Паскаль, но прежде чем засесть за документацию их и Lua решил выяснить, вдруг тут уже есть готовый компонент, умеющий автоматически сам связывать Дельфи-переменные и классы с переменными на стороне скрипта.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 25 апреля 2014, 17:44:20
Поскольку многие сайты стали часто менять стили и скрипты решил отключить соответствующие правила списка "Не обновлять" и подключить своё расширение (приведено ниже). По замыслу оно не должно обновлять только файлы подпадающие под заданные правила и размер которых не указан в заголовке ответа.
И почти сразу нарвался на "неприятность": при посещении handycache.ru перестал загружаться один из файлов стилей. Т.е. в мониторе показывает что всё в порядке - файл загрузился из кэша, а в действительности он не загружается. Это особенно отчётливо видно при загрузке только этого файла - после появления строки в мониторе браузер ещё в течении нескольких секунд ожидает ответа, но в итоге показывает пустую страницу.

Подскажите в чём может быть проблема?

Строка монитора:
Код:
25.04.2014/17:03:03 local/127.0.0.1 http://handycache.ru/forum/Themes/SlickPro_Graphite/style.css?fin11 3514 3514/340 100% 457 "200 From cache (HC)gzip" П.295, П.297, A-Rs
П.295 (Преобразование URL): /.+\.\w{2,}(/?\?.*|/$)\K 
П.297 (Преобразование URL): (\.(css|js|gif|jpe?g|png|swf))(/?\?.*|/$) 
A-Rs

Расширенние:
Код:
--[[ <HCExtension>
@name          Не обновлять файлы по заданным правилам и по размеру (A-Rs)
@description   Не обновляет файл только если его размер не указан
@rule          \.(css|js)(\?|$||)
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]

function GetContentLength(s)
  _,_,x = string.find(s, '[cC]ontent%-[lL]ength: *(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

function Answer()
  -- Забираем размер файла из заголовка 'Content-Length'
  local Len = GetContentLength(hc.answer_header)
   -- и если в заголовке нет размера файла,
   if Len == -1 then
    -- то прерываем загрузку с сервера и загружаем файл из кэша
    hc.action = 'dont_update-'
    hc.monitor_string = hc.monitor_string..'A-Rs '
   end  -- Конец блока проверки размера и принятия решения
end  -- Конец функции Answer


Название: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 25 апреля 2014, 23:40:15
Причину не выяснил, но после перезапуска HC проблема исчезла ???


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zarall от 04 декабря 2014, 17:07:16
Здравствуйте, поделитесь пожалуйста расширением которое ограничивало бы скорость интернета у конкретного пользователя. За ранее благодарен.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 04 декабря 2014, 21:35:38
Цитировать
поделитесь пожалуйста расширением которое ограничивало бы скорость интернета у конкретного пользователя
Это расширение ограничивает скорость пользователей user1 и user2 до 20 кбайт/с.
Код:
--[[ <HCExtension>
@name          Ограничение скорости по пользователям
@author        mai62
@version       0.01
@description  Ограничивает скорость загрузки пользователя
@event         RequestHeaderReceived/request
</HCExtension> ]]


function request()

if hc.user_name == 'user1' or hc.user_name == 'user2'  then
  hc.user_speed_limit=20*1024
end



Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zarall от 05 декабря 2014, 13:00:50
Большое спасибо! Но у нас возникает следующая проблема, мы пользуемся вашим расширением по "отключению Черного списка или переадресации для заданных пользователей" помогите пожалуйста связать его с расширением  "Ограничение скорости по пользователям"
Если просто добавить его как новое расширения то никакого результата нет, пробовал несколькими способами объединить код нечего не вышло.  :( Надеюсь на вашу поддержку,за раннее благодарен.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 05 декабря 2014, 14:30:53
"отключению Черного списка или переадресации для заданных пользователей"
сомневаюсь, что кому-то понятно какое именно расширение Вы имеете ввиду, давайте так: найдите в нём строку
function request()
и сразу после вставьте
Код:
if hc.user_name == 'user1' or hc.user_name == 'user2'  then
  hc.user_speed_limit=20*1024
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Zarall от 05 декабря 2014, 21:45:23
Прошу меня извинить, расширение о котором идет речь находится на несколько постов выше, посмотрите пожалуйста.
P.s. при попытке цитировать или вставить код, выдает сообщение "В сообщении слишком много внешних ссылок.", извините за неудобство.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 06 декабря 2014, 08:50:51
То что никак это оч странно...
Код:
--[[ <HCExtension>
@name          WhiteUser
@author        mai62
@version       0.11
@description   Отключение Черного списка или переадресации для заданных пользователей
@event         RequestHeaderReceived/RequestReceived
</HCExtension> ]]

function RequestReceived()
  local mask=''
  if hc.user_name=='user1' or
     hc.user_name=='user2'
  then
    mask='B'
    hc.user_speed_limit=20*1024
  end
  if hc.user_name=='user31' or
     hc.user_name=='user32'
  then
    mask=mask..'R'
  end
  if #mask>0
  then
    hc.monitor_string = hc.monitor_string.."WU "
    hc.white_mask=mask
  end
end


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: sunserg10 от 24 декабря 2014, 11:19:16
HC RC3 1.0.0.551.
Есть расширение
Код:
--[[ <HCExtension>
@name          Ограничить скорость доступа к определенным ресурсам (Videohostings)
@rule          videoplay|lscache|youtube|playback
@rule          \.(flv|mp4)(\?|$)
@event         RequestHeaderReceived/Request
</HCExtension> ]]

function Request()
hc.file_speed_limit = 256000  -- 250 кбайт в секунду
end
При загрузке онлайн-видео скорость 32,2 Кбайта в секунду.
Без расширения - более 2,5 Мбайт в секунду.
Пример видеоролика - URL: http://e2.dtln.1internet.tv/promorolik/2014/12/PUSTGOV-20141223.mp4

Что сделано не так?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: YuS от 24 декабря 2014, 14:11:33
При загрузке онлайн-видео скорость 32,2 Кбайта в секунду.
Без расширения - более 2,5 Мбайт в секунду.
...
Что сделано не так?
Конечно, лучше дождаться ответа от автора, но есть легкое подозрение, что в описание закралась ошибка, т.е. судя по полученным цифрам, скорость там указывается не в байтах, а в битах:
256000 бит/с/8=32000 б/c
32000 б/с/1024=31,25 кб/с


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: LordMerlin от 24 декабря 2014, 14:55:21
По логике да, но вот тут пишут про байты
http://handycache.ru/content/view/8/5/1/5/


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: YuS от 24 декабря 2014, 19:39:13
По логике да, но вот тут пишут про байты
Это и было предположение, что в описании есть ошибка (байты-биты)... впрочем, предположение оказалось неверное. Дело в том, что если изменять скорость ограничения в большую сторону, то само ограничение, всё равно, не будет более 32 кб/c, но если использовать цифры соответствующие интервалу 0-32 кб/с, то ограничение приблизительно соответствует описанию, т.е. там именно байты. Так что надо подождать, что скажет автор, возможно там есть более глубокая проблема внутри кода.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: sunserg10 от 29 января 2015, 14:25:21
Нужен пример расширения, которое будет запрашивать определенный URL через определенный промежуток времени.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 29 января 2015, 16:02:10
Нужен пример расширения, которое будет запрашивать определенный URL через определенный промежуток времени.
Например, pingProxy.lua http://handycache.ru/component/option,com_smf/Itemid,10/topic,2576.msg21473/#msg21473


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: sunserg10 от 30 января 2015, 09:39:22
Например, pingProxy.lua http://handycache.ru/component/option,com_smf/Itemid,10/topic,2576.msg21473/#msg21473
В какую часть подставлять нужный мне URL?
В function timer (), или в function Answer() ?
Добился только того, что запрос URLа происходит один раз при инициализации расширения, а нужно через заданный интервал.

Задача расширения - обновлять внешний динамический IP-адрес:
http://rejector.ru/features/dynip/


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: YuS от 30 января 2015, 13:47:39
В какую часть подставлять нужный мне URL?
В function timer (), или в function Answer() ?
Добился только того, что запрос URLа происходит один раз при инициализации расширения, а нужно через заданный интервал.

В функцию таймера. Этот таймер запускается по событию Timer1m, каждую минуту, а функция уже ведет свой счетчик от 5 до 1 с записью в переменную hc_static['count'] и поэтому загружает в кэш URL один раз из пяти:
Код:
hc.execute_cmd('LoadURL http://ping.proxy/')

т.е. при выполнении условия:
Код:
hc_static['count']<=1

Этот таймер может не работать если включен автономный режим...


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: sunserg10 от 30 января 2015, 14:24:55
Anymore, YuS, благодарю!
URL запрашивается через заданный интервал, задача решена.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: stealzy от 01 февраля 2015, 00:45:19
Пытаюсь поймать POST запрос.
Включил плагин:
Код:
--[[ <HCExtension>
@name           POST notification
@event           BeforeRequestBodySend/BeforeRequestBodySend
</HCExtension> ]]


function BeforeRequestBodySend()
hc.put_msg(10, 'POST')
end
Заполняю форму(POST, разумеется) на сайте, жму отправить. Почему оно не срабатывает?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 25 мая 2015, 00:06:56
 Не нашёл более-менее понятного описания функции WideCharToMultiByte на русском. Возможно кто-то может прояснить значения её флагов WC_COMPOSITECHECK, WC_DISCARDNS, WC_SEPCHARS и WC_DEFAULTCHAR.
 Взяв за основу пример из файла HCExtensions.html, и выполняя нижепривежённое расширение в программе Lua Test, выяснил что флаг WC_COMPOSITECHECK обязателен, а вот в чём различие остальных флагов не понял, поскольку все результаты оказались одинаковы.

Расширение:
Код:
--[[ <HCExtension>
@name          Test extension
@event         Init/init
</HCExtension> ]]

function init()
      local WC_COMPOSITECHECK = 512
      local WC_DEFAULTCHAR = 64
      local WC_DISCARDNS = 16
      local WC_SEPCHARS = 32
 local s1,b1 = hc.recode('абвгд 12345 abcde', 1251, 28591, WC_COMPOSITECHECK, '#')
  hc.put_msg(s1)
 local s2,b2 = hc.recode('абвгд 12345 abcde', 1251, 28591, WC_COMPOSITECHECK+WC_DEFAULTCHAR, '#')
  hc.put_msg(s2)
 local s3,b3 = hc.recode('абвгд 12345 abcde', 1251, 28591, WC_COMPOSITECHECK+WC_DISCARDNS, '#')
  hc.put_msg(s3)
 local s4,b4 = hc.recode('абвгд 12345 abcde', 1251, 28591, WC_COMPOSITECHECK+WC_SEPCHARS, '#')
  hc.put_msg(s4)

 local s5,b5 = hc.recode('абвгд 12345 abcde', 1251, 28591, WC_COMPOSITECHECK)
  hc.put_msg(s5)
 local s6,b6 = hc.recode('абвгд 12345 abcde', 1251, 28591, WC_COMPOSITECHECK+WC_DEFAULTCHAR)
  hc.put_msg(s6)
 local s7,b7 = hc.recode('абвгд 12345 abcde', 1251, 28591, WC_COMPOSITECHECK+WC_DISCARDNS)
  hc.put_msg(s7)
 local s8,b8 = hc.recode('абвгд 12345 abcde', 1251, 28591, WC_COMPOSITECHECK+WC_SEPCHARS)
  hc.put_msg(s8)

end

Результат:
Код:
Put Info Window:
##### 12345 abcde

Put Info Window:
##### 12345 abcde

Put Info Window:
##### 12345 abcde

Put Info Window:
##### 12345 abcde

Put Info Window:
????? 12345 abcde

Put Info Window:
????? 12345 abcde

Put Info Window:
????? 12345 abcde

Put Info Window:
????? 12345 abcde


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: YuS от 25 мая 2015, 21:18:50
Не нашёл более-менее понятного описания функции WideCharToMultiByte на русском.
Можно так посмотреть (http://translate.google.com/translate?langpair=auto%7Cru&u=https://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v%3Dvs.85).aspx) - корявенько, но смысл понять можно.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: olDjeka от 26 мая 2015, 00:32:36
YuS, спасибо. Так и пробовал, но проглядел ссылку на дополнительную информацию (https://translate.googleusercontent.com/translate_c?depth=1&langpair=auto%7Cru&rurl=translate.google.com&u=https://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v%3Dvs.85).aspx#wc_compositecheck_and_related_flags) внизу страницы.
Получилось так: если установлен флаг WC_COMPOSITECHECK, то символ, имеющийся во входной кодировке, но отсутствующий в выходной, будет преобразован в соответствии с дополнительно устанавленным флагом:
WC_DEFAULTCHAR - Заменён на символ по умолчанию.
WC_DISCARDNS - Отсутствующий символ будет отброшен.
WC_SEPCHARS - Будет произведена попытка подобрать подходящий символ в выходной кодировке, если такой не найдётся то будет заменён на символ по умолчанию.
 Если я всё понял правильно, то результатом использования флага WC_DISCARDNS (в расширении) должно быть не ##### 12345 abcde, и не ????? 12345 abcde, а 12345 abcde. Или ошибаюсь?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: YuS от 26 мая 2015, 20:43:09
Если я всё понял правильно, то результатом использования флага WC_DISCARDNS (в расширении) должно быть не ##### 12345 abcde, и не ????? 12345 abcde, а 12345 abcde. Или ошибаюсь?
Не совсем так...
Вообще, WC_COMPOSITECHECK касается составных символов (умляуты и т.п.), с помощью этого флага их конвертируем на составляющие: базовый символ и непробельный символ. А WC_DISCARDNS отбрасывает непробельные символы во время конвертирования, но опять же, это касается составных символов.
Так что, результатом
Код:
local s7,b7 = hc.recode('абвгд 12345 abcde', 1251, 28591, WC_COMPOSITECHECK+WC_DISCARDNS)
будет именно:
Код:
s7 = ????? 12345 abcde
b7 = true
т.к.:
1.
Цитировать
DefaultChar - символ, который будет помещен в строку, если в указанной кодировке символ не может быть представлен; если аргумент пропущен, то выводится символ '?'.
2.
Цитировать
Вторым значением является true или false в зависимости от того потебовалось использовать символ DefaultChar или нет.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ilgrin от 31 августа 2015, 11:07:29
Подскажите, пожалуйста, можно ли и как вообще заблокировать все исходящие post-запросы, чтобы пользователи не могли отправлять данные с форм?
Не знаю, как закончить условие, if hc.method = "POST".. И будет ли это действенно для https?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 31 августа 2015, 13:20:57
if hc.method = "POST" then hc.action = "stop"
Для https это будет работать, если включена опция Управление загрузкой/Обработка SSL. Если эта опция выключена, через НС будут проходить зашифрованные данные и он не получит доступа к заголовкам запроса.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ilgrin от 01 сентября 2015, 05:30:43
В таком виде? собаку перед name и event не даёт вставить в пост)

Код:
--[[ <HCExtension>
name POST_break
event BeforeRequestBodySend/stop_action
</HCExtension> ]]

function stop_action()
if hc.method == "POST" then hc.action = "stop" end
end



Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ilgrin от 01 сентября 2015, 08:47:03
Разобрался, работает) А как лучше написать не чтобы он вообще блочил страницу после нажатия "войти", а просто её обновлял, не логинясь?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: mai62 от 01 сентября 2015, 11:54:43
Цитировать
А как лучше написать не чтобы он вообще блочил страницу после нажатия "войти", а просто её обновлял, не логинясь?
Как такое сделать я не знаю.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: YuS от 01 сентября 2015, 14:41:27
Такое можно сделать с помощью Content Master-а, подменив текст скрипта на странице, но переписывать скрипт придется самостоятельно ... ну, или попросить помощи у тех кто захочет это сделать. Правда очень высока вероятность того, что рано или поздно страницу могут изменить и замена перестанет срабатывать, т.е. придется видоизменять либо правила подмены, либо сам скрипт...


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ilgrin от 02 сентября 2015, 07:47:04
Мда, решили таким не заморачиваться. Поблочит вообще авторизацию - привыкнут и не будут пытаться даже. Тут встал новый вопрос.. Необходимо, чтобы в момент перехода пользователем в браузере на страницу хттп stat.local, НС открывал бы ему сгенерившуюся html страничку с табличкой с исходящим, входящим и прочим трафиком. Как вывести всплывающими сообщениями - разобрался. А как перенаправление на файл и вообще генерацию файла в момент запроса провернуть?
Добавлено: 02 Сентябрь 2015, 07:08:00

да даже  если просто txt файл только что записанный.. Как открыть файл по stat.local - на 1 же странице темы написано. А вот как корректно записать в файл что-то - не нашёл(


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ilgrin от 28 сентября 2015, 09:35:35
и снова доброго времени суток. С прошлыми вопросами как-то разобрались. Но назрел новый. В целом идея была без стороннего приложения только расширениями заменить АнаСерв. Если б у всех были локальные копии НС - то всё было б норм. А как-то можно будучи под пользователем "Админ", например, получать на экран, ну к примеру, hc.user_from_internet пользователя "local"?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: ilgrin от 28 сентября 2015, 12:12:40
либо ещё проще. Чтобы из расширения при заходе на опр. адрес создавался Отчёт хендикеша, типа как при нажатии "Подготовить отчёт" и тут же открывался.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: silealio от 12 января 2016, 01:05:35
Просьба к специалистам, можно ли сделать расширение, чтобы все запросы к например к <<здесь ссылка на заблокированный билайном, сайт BetCity>> - шли через сценарий <<здесь ссылка к автоматическому сценарию на неком нейтральном сайте>>   ?

пс.
Мля, что в этом странном форуме со ссылками не так?! Первый раз встречаю такой бред. Постоянно брыкается: "В сообщении слишком много внешних ссылок."


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: YuS от 12 января 2016, 06:17:53
можно ли сделать расширение, чтобы все запросы к например к <<здесь ссылка на заблокированный билайном, сайт BetCity>> - шли через сценарий <<здесь ссылка к автоматическому сценарию на неком нейтральном сайте>>   ?
Можно содержимое сценария перенести в HC и только вручную, т.е. автоматически изменяемый сценарий поддерживаться не будет. Если необходим именно сценарий, то настройте браузер. Практически, многие современные браузеры поддерживают сценарии.

что в этом странном форуме со ссылками не так?!
Нормальный форум и со ссылками всё в порядке. Это защита от ботоспама...


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: silealio от 12 января 2016, 08:33:26
Ну, все мои браузеры(Фоксоподобные и Хромоногие) настроены на "Брать настройки из системы" - а в "настройках системы"\свойствах подключения IE - настроено на HC\127.0.0....

А можно набросать расширение?, вот содержимое сценария:
прикрепил


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 12 января 2016, 09:08:56
в условные прокси добавьте
Код:
#8#~#True#~##~#HTTP#~#178.62.152.181#~#443#~##~##~#(cdnbetcity.com|betcity-rus.com|bk-betcity.com|bkbetcity.com|betcityrus.com)

P.S. МОДЕРАТОРАМ давайте удалим сообщения связанные с этими сомнительными сайтами


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: silealio от 12 января 2016, 09:27:10
Anymore
-спасибо, коллега, работает!


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: YuS от 12 января 2016, 10:09:35
в условные прокси добавьте
Только надо не забыть, что "." - любой символ, т.е. его надо экранировать...  и вроде скобки в таком варианте необязательны.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: reanimator от 14 апреля 2017, 15:56:34
Добрый день. Подскажите пожалуйста как определенному пользователю разрешить открывать сайт который в черном списке. только 1 и ли 2 сайта из черного списка.


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Anymore от 17 октября 2017, 19:20:12
Добрый день.

В хелпе по написанию расширений есть пример обработки POST запроса. На всякий случай продублирую его.
Код:
--[[ <HCExtension>
@name ReqBody
@author mai
@version 0.2
@description Example
@min_HC_version 1.0.0.310
@rule mmm\.ru/form/
@event BeforeRequestHeaderSend/header
@event BeforeRequestBodySend/body
</HCExtension> ]]
 
function header()
  if hc.method == 'POST' then
    local s1= re.find(hc.request_header, [[[^\r]*\r\n]], 0)
    local s2= re.replace(hc.request_header, [[[^\r]*\r\n]], '')
    hc.request_header = s1
    hc_static['req_header']= s2
  end
end
 
function body()
  if not hc_static['req_body'] then hc_static['req_body']= '' end
  hc_static['req_body']= hc_static['req_body']..hc.request_body
  hc.request_body= ''
  if hc.last_part then
    -- Здесь выполняются необходимые действия над телом запроса
    -- Затем корректируется заголовок запроса, например, заменяется
    -- длина тела запроса
    hc.request_body= hc_static['req_header']..hc_static['req_body']
    hc_static['req_header']= nil
    hc_static['req_body']= nil
  end
end

Мне же нужно, чтоб НС возвращал за ранее подготовленный файл зависимо от содержания POST запроса.
Вопрос, как так прервать запрос, передав браузеру(флешке) нужное содержимое?


Название: Re: Расширения на языке Lua в HandyCache
Отправлено: Вовочка от 17 апреля 2018, 08:52:26
У меня такой вопрос: А можно с помощью НС с помощью расширений на Lua сделать нечто подобное на ZiProxy чтоб можно было вместо ZiProxy использовать старый добрый HandyCache ??! чтобы при получении НС определённого типа файлов JPG например он их сохранял на диск, затем запускал программу перепаковывающую их из JPG в WebP c пониженым качеством, а затем отправлял эти перепакованые файлы клиенту вместо оригинальных JPG с таким же названием и расширением, я почитал про этот язык вроде можно но вот только непонял как сделать так чтоб файл от сервера не сразу отправлялся клиенту, а сначало сохранялся на диск а потом уже когда НС его полностью принял тогда модифицировался и отправлялся уже клиенту, не могли бы вы накидать примерный код этой части приложения которая будет отвечать за сохранение целиком файла на диске (в кеше допустим) и затем отправку его из этого сохранённого файла уже клиенту, а там я уже с преобразованием его как мне надо сам думаю разберусь, просто НС пересылает сразу файлы пользователю по мере получения их частей от сервера, а не после того как он их полностью получит и сохранит к себе в кеш.