Инструмент для скачивания игр, софта и другого прямо на консоли PS3
Внимание! Весь игровой контент (исключение: игры PS1, PS2 на ), представленный в приложении, скачивается напрямую с CDN серверов SONY! В приложении, в основном, только официальные цифровые версии PSN-игр. Просим учитывать это, перед тем, как задавать вопрос - почему игра на английском, а ISO-образ на торрент-трекере на русском, либо, почему игры нет в приложении, когда в ISO-образе она есть.
Если вы не нашли в приложении нужной вам игры/DLC, но вы хотите, чтобы она была там, решение есть - приобретите игру/DLC в PS Store и предоставьте ссылки на контент, согласно инструкции в ДАННОЙ теме. По вопросам наполнения приложения дисковыми играми, просим ознакомиться с ЭТОЙ информацией.
Основные функции:
Прост в использовании: список доступных загрузок, включая поиск, фильтрацию и сортировку.
Автономен: ПК не требуется, все происходит непосредственно на PS3.
Автоматические загрузки: просто выберите элемент, и он будет загружен приложением на ваш жесткий диск (прямой режим) или помещен в очередь для фоновой загрузки (фоновый режим) с помощью внутреннего диспетчера загрузки.
Возобновляет прерванную загрузку: вы можете в любой момент остановить загрузку, переключить приложения и вернуться, чтобы возобновить загрузку позже.
Примечание: поскольку игры качаются из псн в основной своей массе, в которые нельзя играть онлайн, то при включении игры отключайте интернет, дабы избежать ненужных попыток игры подключится к серверам и чтобы поиграть в оффлайне.
Особая благодарность 'PluSan' за облачное хранилище и составление баз для Themes и miniS.
Особая благодарность 'Z0rdan' за составление баз PS1 и PS2 игр.
Особая благодарность 'Serp87' за поддержку и наполнение базы читов.
Особая благодарность 'PluSan' и 'max_maysky' за составление базы русских игр!
База постоянно пополняется и поставляется в комплекте с программой!
Короткие ссылки через браузер PS3 или ПК на последний релиз (можно качать и ставить любой):
v1.2.5.X - версия на движке новой качалки cURL + проверка обновлений:
(если у Вас установлен русский HEN, PKGi можно скачать через Инструменты HEN в разделе Сеть)
bit.ly/3z1u7zg - Debug PKG неподписанный (для HEN и старых CFW прошивок).
При выходе новой версии, PKGi при запуске автоматически её скачивает.
Вам нужно затем зайти в ★ Управление файлами PKG и оттуда его установить.
После установки приложения - оно будет находиться в меню Сеть.
Если ярлыка не будет - читаем вкладку Ошибки.
Инструкция по использованию
Использовать приложение просто: двигайте / и нажмите для скачивания.
Чтобы просмотреть сведения об элементе, нажмите .
Для поиска, сортировки по TitleID, регионам, названиям или размерам, фильтрации по регионам или контенту, параметрам загрузки, нажмите - откроется контекстное меню.
Нажмите еще раз - чтобы применить новые настройки.
Нажмите - чтобы отменить любые изменения.
Нажмите левую или правую кнопку ( / ) для перемещения страницами вверх или вниз.
Нажмите левую или правую кнопку ( / ) для перемещения по категориям.
База игр не обновляется через кнопку Обновить базу - база поставляется вместе с программой!
Активируйте консоль - обязательно нужно сделать 1 раз, чтобы создалась структура папок профиля с ключом активации профиля act.dat, этим ключом впоследствии будут шифроваться пароли RAP в официальный RIF-формат.
Прямая загрузка - будет производиться прямая загрузка в /dev_hdd0/tmp/pkgi/
После загрузки, готовый закачанный PKG перемещается в /dev_hdd0/vsh/game_pkg/
Нажмите - справа откроется шторка меню, перейдите в Парамерты и выберите Прямую загрузку.
После удачной загрузки, игра/софт/другое переместится в ★ Управление файлами PKG ⇒ ★ Контент PlayStation™Network
Заходите в это месторасположение закачанной игры и устанавливайте.
После установки, установщик PKG автоматически сам удаляется.
Фоновая загрузка - задачи будут добавляться до перезагрузки консоли в /dev_hdd0/vsh/task/ (скрин)
После загрузки, готовый закачанный PKG перемещается в папку /dev_hdd0/vsh/game_pkg/
Имейте в виду! Фоновая загрузка использует официальный метод установки, поэтому, таким образом можно скачивать любые PKG, но устанавливать только официальные Retail PKG или кастомные PKG, но обязательно подписанные в Retail (signed)! То есть, если вы в фоне скачаете неофициальный неподписанный Debug PKG, то при попытке установки получите ошибку 8002AE04.(Решение ошибки)
Нажмите - справа откроется шторка меню, перейдите в Парамерты и выберите Фоновую загрузку.
На выбранной игре нажимаете , тем самым помещая её в задачи загрузок.
Выходите из приложения через и перезагружаете консоль.
При новом включении, в разделе Сеть ⇒ Управление загрузкой вы можете наблюдать свой список загрузок.
После удачной загрузки, игра/софт/другое перемещается в ★ Управление файлами PKG ⇒ ★ Контент PlayStation™Network
Заходите в это месторасположение закачанной игры и устанавливайте.
После установки, установщик PKG автоматически сам удаляется.
МЕНЮ v1.1.9.X (неактуально - версия устарела)
МЕНЮ v1.1.9.X
Колонки в меню v1.1.9.X:
Столбик №1 - отображает TitleID контента. Это главный идентификатор (ID), по которому различаются игры, дополнения, темы и т.п., а также, он записан в PARAM.SFO и извлекается контент на PS3 в папку под этим названием.
Столбик №2 - отображает Категорию контента. Это сокращённое название категории из 3-х символов:
APP - это приложения или по-другому программы, от слова Application.
AVA - это Аватары, от слова Avatar. Иконки персонажей к игре, модели машин, зомби, ящеров и т.п..
CHT - это Читы, от слова Cheat. В общем готовые перманентные читы к играм.
DEM - это Демо, от слова Demo. То есть, демонстрационные сокращённые игры для пробы.
DLC - это Дополнения, сокращение от сочетания DownLoadable Content (Загружаемый контент).
GAM - это Игры, от слова Game. В прямом смысле те самые игры, в которые играем.
MGR - это Менеджеры, от слова Manager. То есть, всякие бэкап-менеджеры, файловые менеджеры и т.п.
MNS - это Минисы, от слова Minis. Такие добротные игры, которые небольшие по размеру.
PS1 - это конвертированные игры для PS3 от консоли PS1
PS2 - это конвертированные игры для PS3 от консоли PS2
RUS - это Игры на русском, от слова Russian. То есть, любые игры, в которых присутствует русский язык.
Столбик №3 - отображает символ Ромбика, когда контент был ранее скачан. Допустим, если в списке идут игра, патч, русификатор и фикс с таким же TitleID как у игры, тогда, при загрузке игры, остальные строки также будут помечены ромбиками. Но, это совсем не означает, что все файлы были скачаны. Каждый файл необходимо скачивать отдельно.
В верии v1.2.3.X во втором столибке отображаются Регионы контента, вместо Категорий, которые перенесены в заголовок окна, после отображаемой версии.
Категории меняются, нажав в Главном меню , затем выбираете категорию и, при закрытии бокового меню, снова через - происходит сохранение этой конфигурации, которая потом открывается сразу по умолчанию.
Категории в программе: - далее всё касательно обеих версий
Категории
Примечания: что отображает каждая категория
Все
В этой первой категории отображаются все при все приложения APP, аватары AVA, читы CHT, демки DEM, дополения DLC, игры GAM, менеджеры MGR, игры PS1, игры PS2, Игры на Русском.
Не стоит в этой вкладке искать русские игры, потому что вам отобразятся все категории вперемешку и вам трудно будет понять, что скачивать и в каком порядке устанавливать, тогда, как во вкладке "Игры на русском", все игры специально выстроены в порядке установки.
Игры из регионов
Здесь отображаются только игры и только из тех регионов, которые были отмечены ниже в боковом меню ромбиками - Азия, Европа, Япония, Америка
Игры на русском
Здесь отображаются только те игры, в которых присутствует русский язык.
Имейте в виду, что в этой категории весь контент у каждой игры выстроен друг за другом в порядке установки. Поэтому, качайте и устанавливайте там игры по порядку, сначала саму игру [GAME], затем обновление [Апдейт], потом [Дополнения] и в конце [Фикс], чтобы пофиксить игру или дополнения.
Игры PS2 для PS3
Конвертированные игры PS2 для PS3. Не забудьте поставить RAP для PS2-игр
Игры PS1 для PS3
Конвертированные игры PS1 для PS3
miniS для PS3
Конвертированные мини-игры PSP для PS3
Дополнения DLC
Дополнительно загружаемый контент для игр
Темы оформления
Темы оформления меню XMB для PS3
Аватары
Аватары для игр
Демо
Демонстрационные игры с урезанными уровнями
Тюнинг
Изменение интерфейса пс3 (coldboot, wawe, xmb меню и другое)
Приложения
Программы для консоли PS3 в том числе бэкап-менеджеры и файловые менеджеры
Читы к играм
Перманентные читы к играм. Делайте бэкап EBOOT.BIN/SELF, если захотите вернуть оригиналы
Обновления
Здесь отображаются обновления к играм, если вы их проверяли через
Зависла консоль или чёрный экран - удерживать кнопку выключения до тех пор, пока зависшие процессы не отвиснут и консоль сама не выключится.
Не видно ярлыка или Отсутствует фоновая загрузка - признаки: в разделе Сеть есть пункт Install HEN. Установите HEN еще раз и сделайте в браузере PS3 домашнюю страницу пустой, чтобы у Вас не срабатывал установщик HENа и не менял меню сеть.
pkgi.txt файл(ы) отсутствуют или неверный файл - вы установили английскую версию без баз (этого файла там нет). Скачайте и установите наш мод.
Черный экран - конфликт с webman, выгрузите его из памяти через пункт "выгрузить webman" (++) (лучше это сделать после перезагрузки пс3 - дабы память очистилась от других остатков)
Ошибка возникает, при достижении лимитов Яндекса. Решение: скачать из темы Прямое скачивание на свой Диск и скачать со своего диска без лимитов и ожиданий, либо ждать когда лимиты будут сняты.
Яндекс Диск, на котором находятся файлы, заблокирован в вашей стране. Решение: настроить VPN, Например так, либо поменять DNS: Первичный 1.1.1.1 и вторичный 1.0.0.1
80010006 - Ошибка при попытке запуска, невозможность чтения нестандартных символов в названии или испорченных битых файлов. Переименуйте, если присутствуют нестандартные символы или повторно загрузите файл по кабелю.
80010007 - Неверный ключ-пароль RAP. Решение - поискать фикс в теме Прямое скачивание или скачать дисковую версию на торрент-трекерах (ссылки наверху справа по кнопке ПОИСК).
80010017 - HEN не активирован, перезапустите консоль и активируйте снова! Либо просто игра испорчена, скорее всего образ шифрован.
8001003A - Проверьте, не стоит ли галочка в настройках webMan "Отключить CFW syscalls и очищать файлы истории при запуске".
80028F14 - Ошибка при попытке запуска игры, не активирован HEN.
80028F22 - Ошибка при попытке запуска неподдерживаемых игр ISO (ps3)
80029513 - Ключ DRM разлочки не подходит! Либо фикс не установлен, либо RAP не ставили. Возможна ошибка при неактивированном профиле - активируйте консоль из меню "Сеть".
80029519 - Ошибка при попытке активации системы. Деактивируйте консоль, создайте нового пользователя на консоли, войдите в него и снова активируйте систему. Либо удалите папку /dev_hdd0/home/000000XX/exdata и снова активируйте систему. Либо создайте нового пользователя на консоли, войдите в него и активируйте снова систему.
8002951D - Игра шифрована онлайн лицензией (Network №1), требуется доступ в PSN.
80029530 - Невозможно запустить SCE-модуль игры. Отсутствует ключ, либо не установлен фикс или файл испорчен.
80029563 - Ошибка при установке PKG, файл испорчен или скачался битым, либо не активирован HEN.
80029564 - Ошибка при установке PKG, файл испорчен или скачался битым, либо не активирован HEN.
80029567 - Ошибка при установке PKG, файл испорчен или скачался битым, либо не активирован HEN.
8002A231 - Бан аккаунта - создайте новый аккаунт и "ведите себя прилично".
8002А240 - Ошибка входа в PSN. Выберите [PSN] > [Войти в сеть] > Примите условия Лицензионного соглашения.
8002AE04 - Фоновая загрузка использует официальный метод загрузки, поэтому, таким образом можно устанавливать только официальные Retail PKG или кастомные PKG, но обязательно подписанные в Retail (signed)! То есть, если вы в фоне скачаете неофициальный Debug PKG, то при попытке установки получите эту ошибку. Решение - качайте такой PKG в обычном режиме - Прямая загрузка, либо, в случае с Фоновой загрузкой неподписанных Debug PKG, воспользуйтесь Альтернативным методом установки, вместо официального установщика.
8002F957 - Ошибка при попытке установить CFW на OFW. Пропатчите консоль для перехода OFW2CFW
80130407 - Стоит галочка автовхода в PSN, следует снимать.
80710101 - Отображение страницы невозможно. Неверно введён адрес сайта или сайт недоступен.
80710102 - Проблемы подключения к сети могут возникать по многим причинам, выключен интернет, с настройками DNS, с WiFi подключением к роутеру, файл на стороне сервера может быть недоступен.
Прежде всего подключайте PS3 к роутеру кабелем, ибо протокол WiFi у пс3 не позволяет качать на высокой скорости.
Для ускорения скорости скачивания PSN-игр с серверов сони сделайте фоновую загрузку через меню pkgi и попробуйте изменить DNS или использовать прокси:
Батник проверяет правильность строки и её параметров. Все неверные значения помещаются по папкам в отдельные файлы по их параметрам. Так вы можете сразу увидеть в чём была в строке ошибка. Обычно, либо не хватает RAP-а, либо ссылка битая неверная и т.п..
Запускайте любой батник, который вам больше понравится:
1 Parser NoPlayStation.bat - самый простой скрипт, работает очень быстро, за 1 минуту сконвертирует вам 5 баз по соответствующим папкам.
2 Parser NoPlayStation SHA256.bat - батник тяжёлый, добавляет в конец каждой строки контрольную сумму SHA256, работает очень долго!
Забирайте потом готовую базу для PKGi в следующих файлах:
pkgi_avatars.txt
pkgi_demos.txt
pkgi_dlcs.txt
pkgi_games.txt
pkgi_themes.txt
Подкиньте их в папку программы: /dev_hdd0/game/NP00PKGI3/USRDIR/ и пользуйтесь правильными базами для PKGi.
Также, в папках вы увидите другие текстовые MISSING-файлы. Туда попадают испорченные строки из баз TSV. Это такие строчки, в которых присутствуют синтаксические ошибки или отсутствуют необходимые денные. Вам нужно открыть такие файлы в редакторе Notepad++, каждая строка в начале имеет указатель на номер испорченной строки в TSV, найти испорченные данные в TSV и поправить их по-фэншую, затем заново сконвертировать батником правильные базы данных. Вы можете обнаружить испорченные данные в следующих файлах:
*_MISSING_CID.txt - содержит строки с неверным ContentID. Исправьте это.
*_MISSING_RAP.txt - содержит строки с неверным ключом RAP. Если у вас нету верного ключа, значит вся строка не стоит и гроша.
*_MISSING_RAP_NOT16BYTE.txt - сюда попадают строки не то чтобы с неверными RAP, а строки, у которых перепутан порядок или RAP не равен ровно 16 байт. Попробуйте исправить.
*_MISSING_URL.txt - содержит строки с отсутствующей ссылкой URL, либо порядок перепутан. Исправьте это.
И что мешает это сделать ? в шапке давно этот метод описан:
На Playstation3 открываем настройки сети, выбираем специальные, пролистываем до пункта "Использовать прокси" , нажимаем использовать.
Вводим адрес, который указан в exposed via (в данном примере 192.168.и далее), порт ставим 8080.
#define PKGI_USER_AGENT "Mozilla/5.0 (PLAYSTATION 3; 1.00)"
...
void pkgi_curl_init(CURL *curl)
{
// Set user agent string
curl_easy_setopt(curl, CURLOPT_USERAGENT, PKGI_USER_AGENT);
// don't verify the certificate's name against host
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
// don't verify the peer's SSL certificate
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
// Set SSL VERSION to TLS 1.2
curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
// Set timeout for the connection to build
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 20L);
// Follow redirects
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
// maximum number of redirects allowed
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 20L);
// Fail the request if the HTTP code returned is equal to or larger than 400
curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L);
}
Изменения USER_AGENT ничего не дало, как я писал ранее
И что мешает это сделать ? в шапке давно этот метод описан:
На Playstation3 открываем настройки сети, выбираем специальные, пролистываем до пункта "Использовать прокси" , нажимаем использовать.
Вводим адрес, который указан в exposed via (в данном примере 192.168.и далее), порт ставим 8080.
Это такая шутка, да? Я спрашивал, как это сделать программно? Как из кода PKGi обратиться к системе и вытащить структуру с параметрами сети, где проверить (в коде, а не глазами), есть ли прокся и, если есть, то взять хост и порт, конкатенацией составить строку "http://хост:порт" и передать в
Inpos, Да Вас не поймешь. Тут Вы писали, что не хотите делать это в pkgi.
Я, наверное, пишу на инопланетном. Или одно из двух. Я писал, что не хочу делать "настройки". "Настройки"... Такие окошечки с полями для ввода адреса прокси и кнопочками ОК и Отменить. Вторым пунктом в том же сообщении, что Вы указываете, сказано - использовать хост и порт из настроек ОС. Оба эти пункта являются вариантами решения одной единственной цели:
В инициализацию lubcurl, в PKGi можно добавить set_opt для использования прокси. Здесь есть два варианта
О чём написано в самом начале того сообщения.
Как Вы же мне сами и написали, есть исходный код и мне надо дерзать. Я готов дерзать, но в SDK PS3 я не шарю от слова "совсем".
Для фоновой загрузки не надо ничего править в коде pkgi, там прокси уже из системы берется (если он есть), ибо это официальный метод скачки.
Мне кажется (или это только в моей голове), что я достаточно объяснил причины доработки прямой загрузки. Даже, если Вы с ними не согласны, не вижу причин отказать мне, хотя бы, в спортивном интересе.
Inpos добавил 10.10.2023 в 09:02
Уже который день мы топчемся на одном месте. Народ, кто-нибудь знает, какой Си-шный заголовок подключить и какую функцию вызвать, чтобы получить хост и порт прокси из параметров сети ОС PS3?
Последний раз редактировалось Inpos; 10.10.2023 в 09:02.
Причина: добавил, подумав
Объясните проще, что вы хотите добавить в исходном коде в эту секцию?
Т.е. ответа на вопрос "какой функцией прочитать параметры прокси из системных настроек ОС" мне не получить тут, как я понимаю. В указанной секции кода можно добавить:
- обращение к ОС, чтобы получить параметры сети
- извлечение из параметров сети строк хоста и порта прокси
- если эти строки есть и не пустые, тогда сформировать строку http://хост:порт (например, http://192.168.1.1:8080) и вызвать:
Это не команда, а опция. Не думаю, что порт на PS3 урезали для чего-то. Сама libcurl поддерживает прокси с самого своего рождения.
И вообще, какой ты хочешгь прокси? 192.168.1.1 не пойдёт, это локальный адрес в домашней сети.
Ещё чуть-чуть и я начну между строк ругаться матом. Хост и порт прокси брать вызовом функции (мне никто здесь так и не ответил, какой) из параметров ОС. 192.168.1.1 здесь, как пример. Если пользователь в ОС задал ходить через прокси, то libcurl, увидев, что прокси прописан в системе, задаёт опцию у себя, используя хост и порт из параметров системы. АВТОМАТОМ.
Ещё чуть-чуть и я начну между строк ругаться матом. Хост и порт прокси брать вызовом функции (мне никто здесь так и не ответил, какой) из параметров ОС.
Какие параметры ОС ты пропишешь в настройках сети, такие и будет брать программа при соединении. Пропишешь там соединение через прокси, значит прога так и будет соединяться. Я щас точно начну кричать матом.
Сообщение от Inpos
Это не команда, а опция.
Хорошо, через прогу тоже можно выставить опцию. Например, если там указана опция PKGI_USER_AGENT, то в начале файла исходников видно что подставляется:
Какие параметры ОС ты пропишешь в настройках сети, такие и будет брать программа при соединении. Пропишешь там соединение через прокси, значит прога так и будет соединяться
Это было, когда PKGi использовал встроенный клиент ОС. После переезда на libcurl, за соединения теперь отвечает сама libcurl. Вы можете сами убедиться, прописав в системе проксю и попробовав скачать прямой загрузкой из PKGi. Соединение пойдёт не через проксю. Я не пойму, это так трудно? Трудно ответить, какой функцией из ОС можно взять параметры прокси? Я всё оформлю в пулреквесте и Вы увидите, какие изменения кода я внёс.
Простой вопрос: какой функцией можно получить параметры прокси из сетевых настроек системы?
Хочу простой ответ. Без убеждения меня, что это не надо и я хочу странного.
Какой-то странный вопрос от человека, знающего программирование. Смотрите какой язык программирования используется, смотрите библиотеки, которые используются.
Формируете в программе запрос, обрабатываете ответ.
Примеры обработки запросов можете увидеть в pkgi-master\source\pkgi_ps3.c
Какой-то странный вопрос от человека, знающего программирование. Смотрите какой язык программирования используется, смотрите библиотеки, которые используются.
Я написал, что в SDK PS3 не разбираюсь. Опыт разработки ПО не дают все знания мира. Все SDK и фреймворки имеют свои особенности. Поэтому и спросил здесь, в ветке разработчиков отечественного форка.
Формируете в программе запрос, обрабатываете ответ.
Спасибо, Кэп.
Примеры обработки запросов можете увидеть в pkgi-master\source\pkgi_ps3.c
Там нет получения сетевых параметров (или я не нашёл в силу незнания SDK PS3).
В общем, не парьтесь. Я запросил эту информацию у разработчика PKGi.
Здравствуйте, я задался очень сложным вопросом. Вот игры с регионом EUR контента: "игры из регионов" будут на русском языке либо русской озвучке? Например я хотел скачать с этого контента AC creed 2 и там два региона:EUR и USA, то по логике EUR будет на русском?
Provodnik1337, всё что на русском в разделе на русском. И не надо голову ломать. В американках русского языка обычно нет. Ну и всегда можно зайти в тему прямого скачивания и посмотреть русский текст там с озвучкой или без или вообще нет.
Ang3l42, мне нужно скачать именно с "игры из регионов", ибо в "игры на русском" AC 2 выбивает ошибку "http запрос не удался" и поэтому я спрашиваю будут ли в регионе EUR "игры из регионов" на русском языке либо с русской озвучкой
void pkgi_curl_init(CURL *curl)
{
// Set user agent string
curl_easy_setopt(curl, CURLOPT_USERAGENT, PKGI_USER_AGENT);
// don't verify the certificate's name against host
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
// don't verify the peer's SSL certificate
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
// Set SSL VERSION to TLS 1.2
curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
// Set timeout for the connection to build
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 20L);
// Follow redirects
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
// maximum number of redirects allowed
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 20L);
// Fail the request if the HTTP code returned is equal to or larger than 400
curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L);
}
pkgi_http* pkgi_http_get(const char* url, const char* content, uint64_t offset)
{
LOG("http get");
if (!pkgi_validate_url(url))
{
LOG("unsupported URL (%s)", url);
return NULL;
}
pkgi_http* http = NULL;
for (size_t i = 0; i < 4; i++)
{
if (g_http[i].used == 0)
{
http = &g_http[i];
break;
}
}
if (!http)
{
LOG("too many simultaneous http requests");
return NULL;
}
http->curl = curl_easy_init();
if (!http->curl)
{
LOG("curl init error");
return NULL;
}
pkgi_curl_init(http->curl);
curl_easy_setopt(http->curl, CURLOPT_URL, url);
LOG("starting http GET request for %s", url);
if (offset != 0)
{
LOG("setting http offset %ld", offset);
/* resuming upload at this position */
curl_easy_setopt(http->curl, CURLOPT_RESUME_FROM_LARGE, (curl_off_t) offset);
}
http->used = 1;
return(http);
}
int pkgi_http_response_length(pkgi_http* http, int64_t* length)
{
CURLcode res;
// do the download request without getting the body
curl_easy_setopt(http->curl, CURLOPT_NOBODY, 1L);
curl_easy_setopt(http->curl, CURLOPT_NOPROGRESS, 1L);
// Perform the request
res = curl_easy_perform(http->curl);
if(res != CURLE_OK)
{
LOG("curl_easy_perform() failed: %s", curl_easy_strerror(res));
return 0;
}
long status = 0;
curl_easy_getinfo(http->curl, CURLINFO_RESPONSE_CODE, &status);
LOG("http status code = %d", status);
curl_easy_getinfo(http->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, length);
LOG("http response length = %llu", *length);
http->size = *length;
return 1;
}
int pkgi_http_read(pkgi_http* http, void* write_func, void* xferinfo_func)
{
CURLcode res;
curl_easy_setopt(http->curl, CURLOPT_NOBODY, 0L);
// The function that will be used to write the data
curl_easy_setopt(http->curl, CURLOPT_WRITEFUNCTION, write_func);
// The data file descriptor which will be written to
curl_easy_setopt(http->curl, CURLOPT_WRITEDATA, NULL);
if (xferinfo_func)
{
/* pass the struct pointer into the xferinfo function */
curl_easy_setopt(http->curl, CURLOPT_XFERINFOFUNCTION, xferinfo_func);
curl_easy_setopt(http->curl, CURLOPT_XFERINFODATA, NULL);
curl_easy_setopt(http->curl, CURLOPT_NOPROGRESS, 0L);
}
// Perform the request
res = curl_easy_perform(http->curl);
if(res != CURLE_OK)
{
LOG("curl_easy_perform() failed: %s", curl_easy_strerror(res));
return 0;
}
return 1;
}
void pkgi_http_close(pkgi_http* http)
{
LOG("http close");
curl_easy_cleanup(http->curl);
http->used = 0;
}