реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Работа web-сервера, Демо-программа от olimex
Twen
сообщение Aug 2 2011, 12:27
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Добрый день, имеется отладочная плата от Олимекс STM32 - P107, на сайте я скачал демо-программу работы веб-сервера http://olimex.com/dev/index.html , название файла Ethernet Demo software for EW-ARM 5.50.

Веб-сервер работает, но хотелось бы разобраться в алгоритме отображения веб-страниц...комментарий у программе не особо много...

Если, кто-то работал с веб-сервером пишите...
Спасибо.

Сообщение отредактировал Twen - Aug 2 2011, 12:29
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 2 2011, 12:38
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Twen @ Aug 2 2011, 16:27) *
Если, кто-то работал с веб-сервером пишите...

Пишу. Работал. Только веб-сервер сделал своими руками.
Или Вам нужна консультация конкретно по Олимексу?
Go to the top of the page
 
+Quote Post
Twen
сообщение Aug 2 2011, 13:51
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Это заслуживает уважения!

Есть пример реализации веб-сервера http://olimex.com/dev/index.html , я его запустил и он работает, но хотелось бы разобраться с его работой...например у примере под олимекс реализован сайт, который состоит из нескольких страниц, мне хотелось бы создать свой сайт (язык html знаю), но переделать сайт под свой не получается, так как сам алгоритм работы демо-программы не полностью разобрал...сейчас я могу реально у демо-программе изменить содержание текста страниц(там просто вписуется код на html у массив), а вот изменить главное меню или вывести какую-то переменную пока не знаю как...

Вообщем нужно разобраться с примером программы (выводом html страниц)...


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

Сообщение отредактировал Twen - Aug 2 2011, 14:02
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Arischenko Ivan
сообщение Aug 2 2011, 14:17
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 112
Регистрация: 29-10-06
Пользователь №: 21 768



Цитата(Twen @ Aug 2 2011, 17:51) *
Не могу понять где в программе постоенние сайта...в главном цикле программы происходит передача буфера uip_buf, а сам процесс его заполнения....


"Сам" сайт скорее всего находится в файле httpd-fs.c. Прроцесс примерно следующий : есть сайт на диске, существует утилита которая переводит html в с-код (стурктуры), код вставляется в файл httpd-fs.c.
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 2 2011, 14:53
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Twen @ Aug 2 2011, 17:51) *
мне хотелось бы создать свой сайт (язык html знаю), но переделать сайт под свой не получается, так как сам алгоритм работы демо-программы не полностью разобрал...сейчас я могу реально у демо-программе изменить содержание текста страниц(там просто вписуется код на html у массив), а вот изменить главное меню или вывести какую-то переменную пока не знаю как...

Вообщем нужно разобраться с примером программы (выводом html страниц)...

По-видимому, веб-сервер взят из uIP 1.0. Домашняя страница проекта здесь.
Исходный код веб-страниц лежит в папке httpd-fs. Его можно править (дабавлять/убирать файлы). Исходный код преобразуется в файл httpd-fs.c (который, собственно, и включается в прошивку) при помощи перлового скрипта makefsdata. Как это делать, можно посмотреть здесь.
Веб-сервер, судя по всему, поддерживает простенький SSI и CGI. Например, заглянув в исходники веб-страниц, видим "%! net-stats" - вызов функции CGI "net-stats" и "%!: /footer.html" - подстановка содержимого файла "footer.html". Функции CGI содержатся в файле httpd-cgi.c, его и правим под свои нужды.
Как-то так.
Go to the top of the page
 
+Quote Post
Twen
сообщение Aug 3 2011, 08:22
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Цитата
По-видимому, веб-сервер взят из uIP 1.0. Домашняя страница проекта здесь.


Скачал документацию на uIP 1.0 Web Server, почитал... документация состоит с вставок некоторых функций без ясного описания, это не радует...

Смотрите, структура сайта показана на рисунку 1:

У файле httpd_fsdata.c объявленные массивы с аски ссимволов для каждой из вкладок страницы:

static const unsigned char data_index_html[] = {
/* /index.html */
0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0,
0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20,
0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49,
.................
}
- массив с данными для закладки Front page

static const unsigned char data_files_shtml[] = {
/* /files.shtml */
0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,
0x25, 0x21, 0x3a, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65,
0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x68, 0x31,
0x3e, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74,
}
- массив с данными для второй закладки - File statistics

и так далее для всех вкладок. Здесь у массивах код на html - это понятно.

А если я хочу вывести какую-то переменную, то как это сделать?

Я также искал по Аски символам где прописаны названия вкладок :
Front page File statistics Network statistics Network connections

но так и не нашел...где эти названия выводятся?

Потом для каждой из вкладок объявляются структуры:

const struct httpd_fsdata_file file_index_html = {&file_header_html, (char const*)data_index_html, (char const*)data_index_html + 12, sizeof(data_index_html) - 12};

Параметры структуры: адрес следующей структуры, имя вкладки, данные(массив), длинна массива)...

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



Сообщение отредактировал Twen - Aug 3 2011, 12:13
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Twen
сообщение Aug 3 2011, 11:03
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Цитата
По-видимому, веб-сервер взят из uIP 1.0. Домашняя страница проекта здесь.
Исходный код веб-страниц лежит в папке httpd-fs.с


Я посмотрел файл httpd-fs.с, в нем находится 4 функции
static u8_t
httpd_fs_strcmp(const char *str1, const char *str2)
- функция сравнения строк

int
httpd_fs_open(const char *name, struct httpd_fs_file *file)
, параметры : имя файла и адрес структуры файла - функция открытия файла по имени
в переменную count[i] сохраняется количество открытий определенной закладки (Для статистики)

void
httpd_fs_init(void)
- инициализация, количество открытий = 0; (Для статистики)

u16_t httpd_fs_count
(char *name)
- функция определения количества открытий закладок, параметр - имя закладки


Вот, с файлом httpd-fs.c разобрался, осталось разобраться еще с 2 файлами: httpd-cgi.c и httpd.c.

Сообщение отредактировал Twen - Aug 3 2011, 11:05
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 3 2011, 11:31
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Мне кажется, этот топик к АРМам не имеет практически никакого отношения. Модератор, перенесите в раздел для начинающих, пожалуйста.

Цитата(Twen @ Aug 3 2011, 12:22) *
Мне хотя бы пока что понять как например вывести на веб-страницу значение переменной web_var.

Мне казалось, что я всё уже написал выше. Разъяснений вплоть до уровня "нажмите эту кнопочку, потом вот эту" вряд ли дождётесь.
Go to the top of the page
 
+Quote Post
Twen
сообщение Aug 3 2011, 12:18
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Можно узнать по поводу этой функции?

s->scriptpt - это выходит мы показываем, что мы передаем скрипт...кстати, скрипт - это и есть сам код страницы?

static
PT_THREAD(handle_script(struct httpd_state *s))
{
char *ptr;

PT_BEGIN(&s->scriptpt);


while(s->file.len > 0) {

/* Check if we should start executing a script. */
if(*s->file.data == ISO_percent &&
*(s->file.data + 1) == ISO_bang) {
s->scriptptr = s->file.data + 3;
s->scriptlen = s->file.len - 3;
if(*(s->scriptptr - 1) == ISO_colon) {
httpd_fs_open(s->scriptptr + 1, &s->file);
PT_WAIT_THREAD(&s->scriptpt, send_file(s));
} else {
PT_WAIT_THREAD(&s->scriptpt,
httpd_cgi(s->scriptptr)(s, s->scriptptr));
}
next_scriptstate(s);

/* The script is over, so we reset the pointers and continue
sending the rest of the file. */
s->file.data = s->scriptptr;
s->file.len = s->scriptlen;
} else {
/* See if we find the start of script marker in the block of HTML
to be sent. */

if(s->file.len > uip_mss()) {
s->len = uip_mss();
} else {
s->len = s->file.len;
}

if(*s->file.data == ISO_percent) {
ptr = strchr(s->file.data + 1, ISO_percent);
} else {
ptr = strchr(s->file.data, ISO_percent);
}
if(ptr != NULL &&
ptr != s->file.data) {
s->len = (int)(ptr - s->file.data);
if(s->len >= uip_mss()) {
s->len = uip_mss();
}
}
PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s));
s->file.data += s->len;
s->file.len -= s->len;

}
}

PT_END(&s->scriptpt);
}




Цитата
Разъяснений вплоть до уровня "нажмите эту кнопочку, потом вот эту" вряд ли дождётесь


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

Сообщение отредактировал Twen - Aug 3 2011, 12:39
Go to the top of the page
 
+Quote Post
promelectronshch...
сообщение Aug 4 2011, 12:48
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 8-11-10
Из: Украмна
Пользователь №: 60 714



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

Сообщение отредактировал promelectronshchic - Aug 4 2011, 12:49
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 10:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01433 секунд с 7
ELECTRONIX ©2004-2016