+  HandyCache форум
|-+  Главная категория» Общие вопросы» Расширения на языке Lua в HandyCache
Имя пользователя:
Пароль:
Страниц: 1 ... 26 27 [28] 29   Вниз
  Отправить эту тему    Печать  
Автор Тема: Расширения на языке Lua в HandyCache  (Прочитано 437448 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Anymore
Beta tester
*****

Репутация: +17/-0
Offline Offline

Сообщений: 339


« Ответ #540 : 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
Сообщить модератору   Записан
sunserg10
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 322


« Ответ #541 : 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

Что сделано не так?
Сообщить модератору   Записан
YuS
Ветеран
*****

Репутация: +30/-4
Offline Offline

Сообщений: 701


crazy


« Ответ #542 : 24 декабря 2014, 14:11:33 »

При загрузке онлайн-видео скорость 32,2 Кбайта в секунду.
Без расширения - более 2,5 Мбайт в секунду.
...
Что сделано не так?
Конечно, лучше дождаться ответа от автора, но есть легкое подозрение, что в описание закралась ошибка, т.е. судя по полученным цифрам, скорость там указывается не в байтах, а в битах:
256000 бит/с/8=32000 б/c
32000 б/с/1024=31,25 кб/с
« Последнее редактирование: 24 декабря 2014, 14:23:59 от YuS » Сообщить модератору   Записан
LordMerlin
Старожил
****

Репутация: +12/-8
Offline Offline

Сообщений: 488


« Ответ #543 : 24 декабря 2014, 14:55:21 »

По логике да, но вот тут пишут про байты
http://handycache.ru/content/view/8/5/1/5/
Сообщить модератору   Записан
YuS
Ветеран
*****

Репутация: +30/-4
Offline Offline

Сообщений: 701


crazy


« Ответ #544 : 24 декабря 2014, 19:39:13 »

По логике да, но вот тут пишут про байты
Это и было предположение, что в описании есть ошибка (байты-биты)... впрочем, предположение оказалось неверное. Дело в том, что если изменять скорость ограничения в большую сторону, то само ограничение, всё равно, не будет более 32 кб/c, но если использовать цифры соответствующие интервалу 0-32 кб/с, то ограничение приблизительно соответствует описанию, т.е. там именно байты. Так что надо подождать, что скажет автор, возможно там есть более глубокая проблема внутри кода.
Сообщить модератору   Записан
sunserg10
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 322


« Ответ #545 : 29 января 2015, 14:25:21 »

Нужен пример расширения, которое будет запрашивать определенный URL через определенный промежуток времени.
Сообщить модератору   Записан
Anymore
Beta tester
*****

Репутация: +17/-0
Offline Offline

Сообщений: 339


« Ответ #546 : 29 января 2015, 16:02:10 »

Нужен пример расширения, которое будет запрашивать определенный URL через определенный промежуток времени.
Например, pingProxy.lua http://handycache.ru/component/option,com_smf/Itemid,10/topic,2576.msg21473/#msg21473
« Последнее редактирование: 29 января 2015, 16:19:13 от Anymore » Сообщить модератору   Записан
sunserg10
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 322


« Ответ #547 : 30 января 2015, 09:39:22 »

В какую часть подставлять нужный мне URL?
В function timer (), или в function Answer() ?
Добился только того, что запрос URLа происходит один раз при инициализации расширения, а нужно через заданный интервал.

Задача расширения - обновлять внешний динамический IP-адрес:
http://rejector.ru/features/dynip/
Сообщить модератору   Записан
YuS
Ветеран
*****

Репутация: +30/-4
Offline Offline

Сообщений: 701


crazy


« Ответ #548 : 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

Этот таймер может не работать если включен автономный режим...
Сообщить модератору   Записан
sunserg10
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 322


« Ответ #549 : 30 января 2015, 14:24:55 »

Anymore, YuS, благодарю!
URL запрашивается через заданный интервал, задача решена.
Сообщить модератору   Записан
stealzy
Пользователь
**

Репутация: +1/-2
Offline Offline

Сообщений: 52


« Ответ #550 : 01 февраля 2015, 00:45:19 »

Пытаюсь поймать POST запрос.
Включил плагин:
Код:
--[[ <HCExtension>
@name           POST notification
@event           BeforeRequestBodySend/BeforeRequestBodySend
</HCExtension> ]]


function BeforeRequestBodySend()
hc.put_msg(10, 'POST')
end
Заполняю форму(POST, разумеется) на сайте, жму отправить. Почему оно не срабатывает?
« Последнее редактирование: 01 февраля 2015, 00:53:23 от stealzy » Сообщить модератору   Записан

HC 1.0.0.551
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #551 : 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
Сообщить модератору   Записан
YuS
Ветеран
*****

Репутация: +30/-4
Offline Offline

Сообщений: 701


crazy


« Ответ #552 : 25 мая 2015, 21:18:50 »

Не нашёл более-менее понятного описания функции WideCharToMultiByte на русском.
Можно так посмотреть - корявенько, но смысл понять можно.
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #553 : 26 мая 2015, 00:32:36 »

YuS, спасибо. Так и пробовал, но проглядел ссылку на дополнительную информацию внизу страницы.
Получилось так: если установлен флаг WC_COMPOSITECHECK, то символ, имеющийся во входной кодировке, но отсутствующий в выходной, будет преобразован в соответствии с дополнительно устанавленным флагом:
WC_DEFAULTCHAR - Заменён на символ по умолчанию.
WC_DISCARDNS - Отсутствующий символ будет отброшен.
WC_SEPCHARS - Будет произведена попытка подобрать подходящий символ в выходной кодировке, если такой не найдётся то будет заменён на символ по умолчанию.
 Если я всё понял правильно, то результатом использования флага WC_DISCARDNS (в расширении) должно быть не ##### 12345 abcde, и не ????? 12345 abcde, а 12345 abcde. Или ошибаюсь?
Сообщить модератору   Записан
YuS
Ветеран
*****

Репутация: +30/-4
Offline Offline

Сообщений: 701


crazy


« Ответ #554 : 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 или нет.
Сообщить модератору   Записан
ilgrin
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 6


« Ответ #555 : 31 августа 2015, 11:07:29 »

Подскажите, пожалуйста, можно ли и как вообще заблокировать все исходящие post-запросы, чтобы пользователи не могли отправлять данные с форм?
Не знаю, как закончить условие, if hc.method = "POST".. И будет ли это действенно для https?
« Последнее редактирование: 31 августа 2015, 11:17:22 от ilgrin » Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #556 : 31 августа 2015, 13:20:57 »

if hc.method = "POST" then hc.action = "stop"
Для https это будет работать, если включена опция Управление загрузкой/Обработка SSL. Если эта опция выключена, через НС будут проходить зашифрованные данные и он не получит доступа к заголовкам запроса.
Сообщить модератору   Записан
ilgrin
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 6


« Ответ #557 : 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

« Последнее редактирование: 01 сентября 2015, 07:16:47 от ilgrin » Сообщить модератору   Записан
ilgrin
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 6


« Ответ #558 : 01 сентября 2015, 08:47:03 »

Разобрался, работает) А как лучше написать не чтобы он вообще блочил страницу после нажатия "войти", а просто её обновлял, не логинясь?
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #559 : 01 сентября 2015, 11:54:43 »

Цитировать
А как лучше написать не чтобы он вообще блочил страницу после нажатия "войти", а просто её обновлял, не логинясь?
Как такое сделать я не знаю.
Сообщить модератору   Записан
Страниц: 1 ... 26 27 [28] 29   Вверх
  Отправить эту тему    Печать  

 
Перейти в: