Версия: 0.2.1b (beta)
Описание:
Модуль является обёрткой над библиотекой libcurl, которая предназначена для того, чтобы взаимодействовать с различными серверами по множеству различных протоколов с синтаксисом URL.
Поддерживаемые протоколы: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, POP3, IMAP и SMTP.
Слинкованные библиотеки (win):
libcurl/7.37.1
OpenSSL/1.0.1h
zlib/1.2.8
WinIDN
libssh2/1.4.3
OpenSSL/1.0.1h
zlib/1.2.8
WinIDN
libssh2/1.4.3
История изменений:
0.1b - Первая версия
0.2b
1) Изменён прототип функции колбэка, которая указывается в curl_easy_perform, теперь он такой
complite(CURLcode:code, CURL:curl, data[], data_size);
2) Фикс функции curl_slist_append и curl_slist_free_all;
3) curl_easy_cleanup теперь можно вызывать в колбэке для curl_easy_perform
4) Модуль теперь сам НЕ очищает curl дескрипторы при смене карты! Вы должны сами следить за тем чтобы всё дескрипторы были освобождены;
5) Установка колбэка для curl_easy_perform является обязательным условием.
0.2.1b
1) Фикс неверных размеров массивов передаваемых в качестве параметров некоторым колбэкам.
0.2b
1) Изменён прототип функции колбэка, которая указывается в curl_easy_perform, теперь он такой
complite(CURLcode:code, CURL:curl, data[], data_size);
2) Фикс функции curl_slist_append и curl_slist_free_all;
3) curl_easy_cleanup теперь можно вызывать в колбэке для curl_easy_perform
4) Модуль теперь сам НЕ очищает curl дескрипторы при смене карты! Вы должны сами следить за тем чтобы всё дескрипторы были освобождены;
5) Установка колбэка для curl_easy_perform является обязательным условием.
0.2.1b
1) Фикс неверных размеров массивов передаваемых в качестве параметров некоторым колбэкам.
Функции:
Вы должны зарегистрироваться, чтобы видеть ссылки.(CURL:handle, url[], escapedUrl[], len)
Кодирует для URL выбранную строку.
Функция немного отличается от оригинальной. handle - curl дескриптор, url - строка для кодирования, escapedUrl - закодированная строка, len - размер escapedUrl. Возвращает реальный размер закодированной строки.
Примечание: Вам не нужно вызывать curl_free, как указано в документации. Это делает модуль.
Вы должны зарегистрироваться, чтобы видеть ссылки.()
Начинает новую easy-сессию libcurl.
Возвращает дескриптор curl.
Вы должны зарегистрироваться, чтобы видеть ссылки.(CURL:handle)
Завершает libcurl easy сессию.
CURLcode:Вы должны зарегистрироваться, чтобы видеть ссылки.(CURL:handle, CURLINFO:info, ...)
Получает информацию для указанного curl дескриптора. Информация записывается в переменную указанную 3-им аргументом.
handle - curl дескриптор, info - значение определяет какую информацию нужно получить, 3 аргумент - массив-строка (в этом случае 4-ым аргументом указывается размер), либо числовая переменная, либо переменная типа Float, либо числовая переменная с тэгом curl_slist (ставить тэг не обязательно, но вам будет проще ориентироваться в коде, тэг curl_slist означает, что в переменной содержится указатель на структуру curl_slist)
CURLcode:Вы должны зарегистрироваться, чтобы видеть ссылки.(CURL:handle, bitmask)
Приостанавливает или возобновляет передачу данных.
handle - curl дескриптор, bitmask - указывает новое состояние соединения.
Вы должны зарегистрироваться, чтобы видеть ссылки.(CURL:handle, callbackComplite[], data[] = {}, data_len = 0)
Начинает передачу данных.
Имеет отличие от оригинальной функции. Так во 2-ом параметре нужно указать имя функции, которая вызовется по завершении передачи, в 3-ем параметре можно указать массив, который будет передан в функцию колбэк (в этом случае необходимо указать 4-ый параметр - размер массива).
Прототип функции колбэка: public CurlCallback(CURLcode:code, CURL:curl, data[], data_size)
Примечание: Вызов функции не блокирует сервер, выполнение передачи идёт в отдельном потоке.
CURLcode:Вы должны зарегистрироваться, чтобы видеть ссылки.(CURL:handle, buffer[], len, &n)
Получает "сырые" (raw) данные.
buffer[] - здесь будут содержаться принятые данные, len - размер буфера, n - здесь будет содержаться реальное количество принятых байт.
Примечание: Эта функция уже работает в блокирующем режиме.
Вы должны зарегистрироваться, чтобы видеть ссылки.(CURL:handle)
Сбрасывает все параметры сессии.
CURLcode:Вы должны зарегистрироваться, чтобы видеть ссылки.(CURL:handle, buffer[], len, &n)
Передаёт "сырые" (raw) данные.
buffer[] - буфер с данными, которые необходимо отправить, len - размер буфера (укажите меньше, если требуется), n - будет содержать реальное количество отправленных байт.
Примечание: Функция работает в блокирующем режиме.
CURLcode:Вы должны зарегистрироваться, чтобы видеть ссылки.(CURL:handle, CURLoption:option, ...)
Смотрите в описании на сайте. Примечания под спойлером.
Неподдерживаемые опции:
CURLOPT_CONV_TO_NETWORK_FUNCTION
CURLOPT_CONV_FROM_NETWORK_FUNCTION
CURLOPT_CONV_FROM_UTF8_FUNCTION
CURLOPT_ERRORBUFFER (используйте CURLOPT_VERBOSE и CURLOPT_DEBUGFUNCTION)
CURLOPT_STDERR (используйте CURLOPT_DEBUGFUNCTION)
CURLOPT_POSTFIELDS (используйте CURLOPT_COPYPOSTFIELDS)
CURLOPT_RESUME_FROM_LARGE
CURLOPT_INFILESIZE_LARGE
CURLOPT_MAXFILESIZE_LARGE
CURLOPT_MAX_SEND_SPEED_LARGE
CURLOPT_MAX_RECV_SPEED_LARGE
CURLOPT_SSH_KEYFUNCTION
CURLOPT_SSH_KEYDATA
CURLOPT_SHARE
Поддержка опций с постфиксом _LARGE будет добавлена позднее, когда сделаю поддержку типа curl_off_t (8 байтовые целые).
CURLOPT_SSH_KEYFUNCTION - Этот колбэк скорее всего добавлю позднее.
У функции колбэка для опции CURLOPT_XFERINFOFUNCTION в параметрах аргументы типа curl_off_t, это значит значения не всегда будут корректными.
В качестве параметра т.н. датаопции (например CURLOPT_WRITEDATA) можно указать только число (например дескриптор файла).
CURLOPT_CONV_TO_NETWORK_FUNCTION
CURLOPT_CONV_FROM_NETWORK_FUNCTION
CURLOPT_CONV_FROM_UTF8_FUNCTION
CURLOPT_ERRORBUFFER (используйте CURLOPT_VERBOSE и CURLOPT_DEBUGFUNCTION)
CURLOPT_STDERR (используйте CURLOPT_DEBUGFUNCTION)
CURLOPT_POSTFIELDS (используйте CURLOPT_COPYPOSTFIELDS)
CURLOPT_RESUME_FROM_LARGE
CURLOPT_INFILESIZE_LARGE
CURLOPT_MAXFILESIZE_LARGE
CURLOPT_MAX_SEND_SPEED_LARGE
CURLOPT_MAX_RECV_SPEED_LARGE
CURLOPT_SSH_KEYFUNCTION
CURLOPT_SSH_KEYDATA
CURLOPT_SHARE
Поддержка опций с постфиксом _LARGE будет добавлена позднее, когда сделаю поддержку типа curl_off_t (8 байтовые целые).
CURLOPT_SSH_KEYFUNCTION - Этот колбэк скорее всего добавлю позднее.
У функции колбэка для опции CURLOPT_XFERINFOFUNCTION в параметрах аргументы типа curl_off_t, это значит значения не всегда будут корректными.
В качестве параметра т.н. датаопции (например CURLOPT_WRITEDATA) можно указать только число (например дескриптор файла).
Вы должны зарегистрироваться, чтобы видеть ссылки.(CURLcode:code, errorBuf[], len)
Возвращает строку, которая описывает код ошибки.
Отличается от оригинальной функции, 2-ым параметром укажите буфер, куда будет записано описание ошибки, параметр len - размер буфера.
Вы должны зарегистрироваться, чтобы видеть ссылки.(CURL:handle, url[], unescapedUrl[], len)
Возвращает декодированную строку URL-кодированной строки.
Немного отличается от оригинальной функции. url - строка для декодирования, unescapedUrl - здесь укажите буфер, куда будет записана декодированная строка, len - размер unescapedUrl.
Возвращает реальный размер декодированной строки.
Примечание: Вам не нужно вызывать curl_free, как указано в документации. Это делает модуль.
CURLFORMcode:Вы должны зарегистрироваться, чтобы видеть ссылки.(&curl_httppost:first, &curl_httppost:last, ...)
Добавляет раздел в multipart/formdata HTTP POST.
Подробное описание смотрите на сайте. Примечания под спойлером.
Неподдерживаемые опции:
CURLFORM_PTRNAME (используйте CURLFORM_COPYNAME)
CURLFORM_PTRCONTENTS (используйте CURLFORM_COPYCONTENTS)
CURLFORM_BUFFER (используйте CURLFORM_STREAM)
CURLFORM_BUFFERPTR (см выше)
CURLFORM_ARRAY
Поддержка CURLFORM_ARRAY будет добавлена позднее.
Так же из-за некоторых ограничений (не более 32 параметров для функции) вы не сможете передать более 14 опций.
Вы должны обязательно вызвать curl_formfree для первого curl_httppost, как и написано в документации. В будущем возможно сделаю чтобы после смены карты все чистилось, на случай если забудете.
CURLFORM_PTRNAME (используйте CURLFORM_COPYNAME)
CURLFORM_PTRCONTENTS (используйте CURLFORM_COPYCONTENTS)
CURLFORM_BUFFER (используйте CURLFORM_STREAM)
CURLFORM_BUFFERPTR (см выше)
CURLFORM_ARRAY
Поддержка CURLFORM_ARRAY будет добавлена позднее.
Так же из-за некоторых ограничений (не более 32 параметров для функции) вы не сможете передать более 14 опций.
Вы должны обязательно вызвать curl_formfree для первого curl_httppost, как и написано в документации. В будущем возможно сделаю чтобы после смены карты все чистилось, на случай если забудете.
Вы должны зарегистрироваться, чтобы видеть ссылки.(&curl_httppost:first)
Освобождает память, выделенную под список multipart/formdata HTTP POST параметров.
curl_slist:Вы должны зарегистрироваться, чтобы видеть ссылки.(curl_slist:list, buffer[])
Добавляет строку в конец связного списка curl_slist.
list - указатель на последний элемент списка, buffer - строка для добавления.
Возвращает указатель на новый последний элемент списка.
Вы должны обязательно вызвать curl_slist_free_all, после того как curl завершит работу со структурой.
Вы должны зарегистрироваться, чтобы видеть ссылки.(curl_slist:list)
Освобождает весь список curl_slist.
Вы должны зарегистрироваться, чтобы видеть ссылки.(buf[], len)
Возвращает версию curl, включенные библиотеки и их версии.
buf - буфер, куда положить информацию о версиях, len - размер буфера.
Общие примечания:
0) Модуль сам НЕ очищает curl дескрипторы, вы должны сами контролировать очистку (вызов curl_easy_cleanup для каждого открытого дескриптора), все курлы должны быть очищены к моменту смены карты. Так же, если есть активные передачи к моменту смены карты, то модуль попытается сгенерировать ошибку передачи чтобы как можно скорее завершить поток в котором выполняется передача и вызвать колбэк curl_easy_perform (вызовется после plugin_end()).
Проще всего проводить очистку в колбэке curl_easy_perform.
1) Вы НЕ должны вызывать curl_easy_cleanup и другие функции очистки пока передача не завершилась!
2) Пока нет возможности реально установить/получить значение переменной типа curl_off_t, сейчас происходит преобразование типа к cell (обычная ячейка amxx), но это не очень правильно. Значения зачастую будут некорректными.
3) Всегда определяйте опцию CURLOPT_BUFFERSIZE, если используете колбэк WRITEFUNCTION укажите в качестве параметра размер буфера не более 1024, иначе рискуете получить ошибки stack error, возможно даже повесить сервер. Если вы получаете ошибки stack error при использовании других колбэков, то можно определить в плагине #pragma dynamic 30000.
4) Не забывайте, что вам необходимо очищать память по указателям для curl_slist и curl_httppost с помощью функций curl_slist_free_all и curl_formfree соответственно.
5) Если будет что-то не так с опциями CURLAUTH_*, то сообщайте
Рекомендации:
1) Если планируется "долгосрочная" передача, то можно временно убрать лимит игры на карте, когда передача завершится восстановить;
2) Вы можете использовать 1 дескриптор curl несколько раз для одного url, однако при текущей реализации логики модуля будет сложнее очистить дескриптор в месте отличном от колбэка curl_easy_perform;
3) Используйте curl_easy_setopt(curl, CURLOPT_VERBOSE, 1) для отладки плагина, если затрудняетесь определить причину неполадки в плагине. (По-умолчания вывод дебаг информации будет осуществляться в консоль сервера, вы можете определить колбэк CURLOPT_DEBUGFUNCTION для изменения вывода)
Примеры кода:
1) Вы должны зарегистрироваться, чтобы видеть ссылки.;
2) Вы должны зарегистрироваться, чтобы видеть ссылки.;
3) Вы должны зарегистрироваться, чтобы видеть ссылки..
Для компиляции под linux нужно написать Makefile, в архиве с исходным кодом уже есть статическая библиотека libcurl и по идее код должен компилироваться под linux без допилов.
Windows версия не будет работать на Windows Server 2003 и Windows XP.