Делаем сайт на асме.

Тема в разделе "WASM.ARTICLES", создана пользователем Олег, 22 янв 2018.

  1. Олег

    Олег New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2017
    Сообщения:
    10
    Передаём браузеру Hello World!
    Продолжим конфигурацию, полученную в разделе «Первый запуск». В контейнере создадим объект типа Website:
    [​IMG]

    Создадим сайту директорию «/» с действием «запуск функции», название функции «HelloWorld»:
    [​IMG]
    В описании созданной директории сайта "Запуск" будет выделено красным цветом, что означает ошибку:
    [​IMG]
    Для расшифровки ошибки нужно посмотреть свойства директории:
    [​IMG]
    Создадим в контейнере объект типа Scripts:
    [​IMG]
    Внутри него создадим файл:
    [​IMG]
    Если щёлкнуть по строке с описанием файла, то увидим ошибку, т.к. физически файл ещё не существует:
    [​IMG]
    Физически создадим файл в любой программе (я использую Notepad++). Объявляем функцию "HelloWorld с параметром hWorker". Внутри функции осуществляется вывод 'Hello World!' и возврат в регистре eax http кода состояния, в данном случае 200-OK:
    Код (ASM):
    1. HelloWorld proc hWorker:dword
    2. echo 'Hello World!'; mov eax,200
    3. HelloWorld endp
    Теперь, если в браузере обратиться по локальному адресу сервера, будет получен такой ответ:
    [​IMG]
    Немного усложним функцию, после вывода 'Hello World!', допишем проверку уровня доступа пользователя запрашивающего страничку и, если уровень отличен от нуля, вывод дополнительного текста на страничку:
    Код (ASM):
    1. mov esi,hWorker; cmp [esi].wstReadAL,0; je exit; echo ' Привет пользователю!'
    2. exit: mov eax,200
    Полностью это будет выглядеть так (Notepad++):
    [​IMG]
    При обновлении странички по локальному адресу сервера, авторизованный пользователь увидит:
    [​IMG]
    Очевидно, что браузер отображает страничку не в той кодировке. Для решения этой проблемы нужно добавить мета тэг:
    [​IMG]
    Обработчики http запросов получают адрес структуры wst (данные об обрабатываемом запросе текущего воркера) в виде параметра hWorker и адрес для формирования ответа в регистре edi. На выходе регистр edi должен содержать следующий после сформированного ответа адрес, а регистр eax http код ответа.

    Hello World конфигурация для скачивания, распаковывать в папку с программой. Логин/пароль админа - admin/admin, юзера - 12345/12345.
     
  2. Олег

    Олег New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2017
    Сообщения:
    10
    Динамическое формирование файлов
    Продолжим конфигурацию, полученную в "Hello world!". В начале функции добавим проверки: имя запрашиваемого файла равно 4, расширение запрашиваемого файла равно 3, имя файла равно 'test', расширение файла равно 'bmp'. В случае успеха проверок произведём отключение "вывода скорости обработки запроса и генерации ответа" и приступим к формированию файла, иначе переход на генерацию 'Hello world!':
    [​IMG]
    Есть алтернативный способ обнаружения запроса, содержащего 'test.bmp'. Для этого нужно в веб директории создать соответствующиее правило, вызывающее свой обработчик в случае срабатывания, например:
    [​IMG]
    Но мы ограничимся одним обработчиком, внутри которого и будет формироваться 'test.bmp'. Для начала нужно сформировать все информационные структуры файла, очистить растр. Выведем в него число '1234567890' у верхнего края, а у нижнего выведем время в тактах, затраченное на обработку запроса и формирование ответа. Кроме этого файлу нужно присвоить MIME тип (в данном случае это 'image/bmp'). Но нужно сохранить значение регистра edi и восстановить перед выходом из обработчика, чтобы воркер сумел корректно определить размер сформированного ответа. Отступим после сформированного ответа на 8192 байт, чтобы воркер мог на этом месте сгенерировать http заголовки ответа. Поместим текст 'image/bmp', а адрес текста передадим в поле wstRespMIMEtype структуры wst, заменив указатель на 'text/html':
    [​IMG]
    Добавим запрос 'test.bmp' на основной страничке, обернув изображение в однопиксельную рамку:
    [​IMG]
    Посмотрим результат в браузере:
    [​IMG]
    Create BMP конфигурация для скачивания, распаковывать в папку с программой. Логин/пароль админа - admin/admin, юзера - 12345/12345.