コード例 #1
0
status_t
WebAppInterface::RetrievePackageIcon(const BString& packageName,
                                     BDataIO* stream)
{
    BString urlString = "https://depot.haiku-os.org/pkgicon/";
    urlString << packageName << ".hvif";

    BUrl url(urlString);

    ProtocolListener listener;
    listener.SetDownloadIO(stream);

    BHttpRequest request(url, true, "HTTP", &listener);
    request.SetMethod(B_HTTP_GET);

    thread_id thread = request.Run();
    wait_for_thread(thread, NULL);

    const BHttpResult& result = dynamic_cast<const BHttpResult&>(
                                    request.Result());

    int32 statusCode = result.StatusCode();

    if (statusCode == 200)
        return B_OK;

    return B_ERROR;
}
コード例 #2
0
status_t
WebAppInterface::_SendJsonRequest(BString jsonString, BMessage& reply) const
{
    BUrl url("https://depot.haiku-os.org/api/v1/pkg");

    ProtocolListener listener;
    BUrlContext context;
    BHttpHeaders headers;
    // Content-Type
    headers.AddHeader("Content-Type", "application/json");
    headers.AddHeader("User-Agent", "X-HDS-Client");

    BHttpRequest request(url, true, "HTTP", &listener, &context);

    // Authentication
    if (!fUsername.IsEmpty() && !fPassword.IsEmpty()) {
        request.SetUserName(fUsername);
        request.SetPassword(fPassword);
    }

    request.SetMethod(B_HTTP_POST);
    request.SetHeaders(headers);

    BMemoryIO* data = new BMemoryIO(
        jsonString.String(), jsonString.Length() - 1);

    request.AdoptInputData(data, jsonString.Length() - 1);

    BMallocIO replyData;
    listener.SetDownloadIO(&replyData);
//	listener.SetDebug(true);

    thread_id thread = request.Run();
    wait_for_thread(thread, NULL);

    const BHttpResult& result = dynamic_cast<const BHttpResult&>(
                                    request.Result());

    int32 statusCode = result.StatusCode();
    if (statusCode != 200) {
        printf("Response code: %" B_PRId32 "\n", statusCode);
        return B_ERROR;
    }

    jsonString.SetTo(static_cast<const char*>(replyData.Buffer()),
                     replyData.BufferLength());
    if (jsonString.Length() == 0)
        return B_ERROR;

    BJson parser;
    status_t status = parser.Parse(reply, jsonString);
    if (status == B_BAD_DATA) {
//		printf("Parser choked on JSON:\n%s\n", jsonString.String());
    }
    return status;
}
コード例 #3
0
ファイル: WebAppInterface.cpp プロジェクト: pipe0xffff/haiku
status_t
WebAppInterface::RetrievePackageInfo(const BString& packageName,
	BMessage& message)
{
	BUrl url("https://depot.haiku-os.org/api/v1/pkg");
	
	ProtocolListener listener;
	BUrlContext context;
	BHttpHeaders headers;	
	// Content-Type
	headers.AddHeader("Content-Type", "application/json");

	BHttpRequest request(url, true, "HTTP", &listener, &context);

	// Authentication
	if (!fUsername.IsEmpty() && !fPassword.IsEmpty()) {
		request.SetUserName(fUsername);
		request.SetPassword(fPassword);
	}

	request.SetMethod(B_HTTP_POST);
	request.SetHeaders(headers);

	BString jsonString = JsonBuilder()
		.AddValue("jsonrpc", "2.0")
		.AddValue("id", ++fRequestIndex)
		.AddValue("method", "getPkg")
		.AddArray("params")
			.AddObject()
				.AddValue("name", packageName)
				.AddValue("architectureCode", "x86_gcc2")
				.AddValue("naturalLanguageCode", "en")
				.AddValue("versionType", "NONE")
			.EndObject()
		.EndArray()
	.End();

	printf("Sending JSON:\n%s\n", jsonString.String());
	
	BMemoryIO* data = new BMemoryIO(
		jsonString.String(), jsonString.Length() - 1);

	request.AdoptInputData(data, jsonString.Length() - 1);

	BMallocIO replyData;
	listener.SetDownloadIO(&replyData);
//	listener.SetDebug(true);

	thread_id thread = request.Run();
	wait_for_thread(thread, NULL);

	const BHttpResult& result = dynamic_cast<const BHttpResult&>(
		request.Result());

	int32 statusCode = result.StatusCode();
	
	if (statusCode == 200)
		return B_OK;

       printf("Response code: %" B_PRId32 "\n", statusCode);

	return B_ERROR;
}