1.修复SSL connect error 问题
2.修复hos_create_bucket时,出现bucekt already exits的问题 3.修复upload时,远端地址无法解析的问题
This commit is contained in:
@@ -2,7 +2,10 @@ cmake_minimum_required(VERSION 3.5)
|
|||||||
set(CMAKE_BUILD_TYPE Debug)
|
set(CMAKE_BUILD_TYPE Debug)
|
||||||
project(singleThread)
|
project(singleThread)
|
||||||
|
|
||||||
|
SET(CMAKE_BUILD_TYPE Debug)
|
||||||
link_directories(/usr/local/lib64/)
|
link_directories(/usr/local/lib64/)
|
||||||
|
link_directories(/opt/MESA/lib/)
|
||||||
|
link_libraries(hos_client_cpp)
|
||||||
#set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
|
#set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
|
||||||
add_executable(singleThread single_thread.cpp)
|
add_executable(singleThread single_thread.cpp)
|
||||||
target_link_libraries(singleThread hos_client_cpp)
|
target_link_libraries(singleThread hos_client_cpp)
|
||||||
|
|||||||
@@ -4,21 +4,32 @@
|
|||||||
> Created Time: Fri 11 Sep 2020 09:52:05 AM CST
|
> Created Time: Fri 11 Sep 2020 09:52:05 AM CST
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
#include<stdio.h>
|
#include<stdio.h>
|
||||||
|
#include<unistd.h>
|
||||||
#include"../src/hos_client.h"
|
#include"../src/hos_client.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
hos_client_handle handle = hos_client_init("192.168.44.12:9098/hos", "default", "defalut");
|
char *bucket = argv[1];
|
||||||
|
printf("hos_client_init start ...\n");
|
||||||
|
hos_client_handle handle = hos_client_init("http://192.168.44.12:9098/hos", "default", "default");
|
||||||
if (handle == NULL)
|
if (handle == NULL)
|
||||||
{
|
{
|
||||||
printf("error:hos_client_handle\n");
|
printf("error:hos_client_handle\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
printf("hos_client_init success ...");
|
||||||
|
|
||||||
hos_create_bucket(handle, "my-first-bucket");
|
printf("hos_create_bucket start ... \n");
|
||||||
|
if(!hos_create_bucket(handle, bucket))
|
||||||
|
{
|
||||||
|
printf("hos_create_bucket failed ... \n");
|
||||||
|
}
|
||||||
|
printf("hos_create_bucket success ... \n");
|
||||||
|
|
||||||
hos_upload_async(handle, "my-first-bucket", "my-file.txt");
|
printf("hos_upload_async start ...\n");
|
||||||
|
hos_upload_async(handle, bucket, "my-file.txt");
|
||||||
|
|
||||||
|
//sleep(30);
|
||||||
hos_client_close(handle);
|
hos_client_close(handle);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include <aws/s3/model/PutObjectRequest.h>
|
#include <aws/s3/model/PutObjectRequest.h>
|
||||||
#include <aws/s3/model/CreateBucketRequest.h>
|
#include <aws/s3/model/CreateBucketRequest.h>
|
||||||
#include <aws/core/auth/AWSCredentials.h>
|
#include <aws/core/auth/AWSCredentials.h>
|
||||||
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@@ -26,51 +27,63 @@ static void PutObjectAsyncFinished(const Aws::S3::S3Client* s3Client,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
std::cout << "Error: PutObjectAsyncFinished: " <<
|
std::cout << "Error: PutObjectAsyncFinished: " <<
|
||||||
outcome.GetError().GetMessage() << std::endl;
|
outcome.GetError() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hos_client_handle hos_client_init(const char *endpoint, const char *accesskeyid, const char *secretkey)
|
hos_client_handle hos_client_init(const char *endpoint, const char *accesskeyid, const char *secretkey)
|
||||||
{
|
{
|
||||||
|
if (!endpoint || !accesskeyid || !secretkey)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
Aws::SDKOptions options;
|
Aws::SDKOptions options;
|
||||||
Aws::InitAPI(options);
|
Aws::InitAPI(options);
|
||||||
|
|
||||||
hos_client_handle handle = NULL;
|
hos_client_handle handle = NULL;
|
||||||
Aws::Client::ClientConfiguration config;
|
Aws::Client::ClientConfiguration config;
|
||||||
Aws::Auth::AWSCredentials credentials(accesskeyid, secretkey);
|
Aws::Auth::AWSCredentials credentials(accesskeyid, secretkey);
|
||||||
std::cout << "accesskeyid: " << credentials.GetAWSAccessKeyId() << "\n" << std::endl;
|
//std::cout << "accesskeyid: " << credentials.GetAWSAccessKeyId() << "\n" << std::endl;
|
||||||
std::cout << "secretkey: " << credentials.GetAWSSecretKey() << "\n" << std::endl;
|
//std::cout << "secretkey: " << credentials.GetAWSSecretKey() << "\n" << std::endl;
|
||||||
|
|
||||||
config.endpointOverride = endpoint;
|
config.endpointOverride = endpoint;
|
||||||
config.verifySSL = false;
|
config.verifySSL = false;
|
||||||
config.enableEndpointDiscovery = true;
|
config.enableEndpointDiscovery = true;
|
||||||
|
|
||||||
handle = new Aws::S3::S3Client(credentials, config);
|
handle = new Aws::S3::S3Client(credentials, config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false);
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hos_create_bucket(hos_client_handle handle, const char *bucket)
|
int hos_create_bucket(hos_client_handle handle, const char *bucket)
|
||||||
{
|
{
|
||||||
|
if (!bucket)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
Aws::S3::S3Client& s3Client = *(Aws::S3::S3Client *) handle;
|
Aws::S3::S3Client& s3Client = *(Aws::S3::S3Client *) handle;
|
||||||
Aws::S3::Model::CreateBucketRequest createBucketRequest;
|
Aws::S3::Model::CreateBucketRequest createBucketRequest;
|
||||||
createBucketRequest.SetBucket(bucket);
|
createBucketRequest.SetBucket(bucket);
|
||||||
std::cout << "bucket name: " << createBucketRequest.GetBucket() << "\n" << std::endl;
|
//std::cout << "bucket name: " << createBucketRequest.GetBucket() << "\n" << std::endl;
|
||||||
|
|
||||||
Aws::S3::Model::CreateBucketOutcome createBucketOutcome = s3Client.CreateBucket(createBucketRequest);
|
Aws::S3::Model::CreateBucketOutcome createBucketOutcome = s3Client.CreateBucket(createBucketRequest);
|
||||||
|
|
||||||
if (!createBucketOutcome.IsSuccess())
|
if (!createBucketOutcome.IsSuccess())
|
||||||
{
|
{
|
||||||
std::cout << "Failed to create bucket: " << bucket << "\n" << createBucketOutcome.GetError() << std::endl;
|
Aws::S3::S3Errors errorcode = createBucketOutcome.GetError().GetErrorType();
|
||||||
return false;
|
if (errorcode != Aws::S3::S3Errors::BUCKET_ALREADY_OWNED_BY_YOU)
|
||||||
|
{
|
||||||
|
//std::cout << "Failed to create bucket: " << bucket << "\n" << createBucketOutcome.GetError() << std::endl;
|
||||||
|
return errorcode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hos_upload_async(hos_client_handle handle, const char *bucket, const char *object)
|
bool hos_upload_async(hos_client_handle handle, const char *bucket, const char *object)
|
||||||
{
|
{
|
||||||
const Aws::S3::S3Client &s3Client = (Aws::S3::S3Client&) handle;
|
Aws::S3::S3Client& s3Client = *(Aws::S3::S3Client *) handle;
|
||||||
struct stat buffer;
|
struct stat buffer;
|
||||||
|
|
||||||
std::unique_lock<std::mutex> lock(upload_mutex);
|
std::unique_lock<std::mutex> lock(upload_mutex);
|
||||||
@@ -85,7 +98,15 @@ bool hos_upload_async(hos_client_handle handle, const char *bucket, const char *
|
|||||||
request.SetBucket(bucket);
|
request.SetBucket(bucket);
|
||||||
request.SetKey(object);
|
request.SetKey(object);
|
||||||
|
|
||||||
s3Client.PutObjectAsync(request, PutObjectAsyncFinished);
|
const std::shared_ptr<Aws::IOStream> input_data =
|
||||||
|
Aws::MakeShared<Aws::FStream>("SampleAllocationTag", object, std::ios_base::in | std::ios_base::binary);
|
||||||
|
|
||||||
|
request.SetBody(input_data);
|
||||||
|
|
||||||
|
std::shared_ptr<Aws::Client::AsyncCallerContext> context =
|
||||||
|
Aws::MakeShared<Aws::Client::AsyncCallerContext>("PutObjectAllocationTag");
|
||||||
|
context->SetUUID(object);
|
||||||
|
s3Client.PutObjectAsync(request, PutObjectAsyncFinished, context);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,7 +117,7 @@ void hos_client_close(hos_client_handle handle)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete (Aws::S3::S3Client*)&handle;
|
delete (Aws::S3::S3Client *)handle;
|
||||||
|
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,10 +6,84 @@
|
|||||||
#ifndef __HOS_CLIENT_INIT__
|
#ifndef __HOS_CLIENT_INIT__
|
||||||
#define __HOS_CLIENT_INIT__
|
#define __HOS_CLIENT_INIT__
|
||||||
|
|
||||||
|
/*hos client 句柄*/
|
||||||
typedef void* hos_client_handle;
|
typedef void* hos_client_handle;
|
||||||
|
|
||||||
|
#define HOS_CLINET_OK 0
|
||||||
|
#define HOS_CLIENT_ERR -1
|
||||||
|
|
||||||
|
/* s3 的错误码 */
|
||||||
|
enum s3errors
|
||||||
|
{
|
||||||
|
//From Core//
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
INCOMPLETE_SIGNATURE = 0,
|
||||||
|
INTERNAL_FAILURE = 1,
|
||||||
|
INVALID_ACTION = 2,
|
||||||
|
INVALID_CLIENT_TOKEN_ID = 3,
|
||||||
|
INVALID_PARAMETER_COMBINATION = 4,
|
||||||
|
INVALID_QUERY_PARAMETER = 5,
|
||||||
|
INVALID_PARAMETER_VALUE = 6,
|
||||||
|
MISSING_ACTION = 7, // SDK should never allow
|
||||||
|
MISSING_AUTHENTICATION_TOKEN = 8, // SDK should never allow
|
||||||
|
MISSING_PARAMETER = 9, // SDK should never allow
|
||||||
|
OPT_IN_REQUIRED = 10,
|
||||||
|
REQUEST_EXPIRED = 11,
|
||||||
|
SERVICE_UNAVAILABLE = 12,
|
||||||
|
THROTTLING = 13,
|
||||||
|
VALIDATION = 14,
|
||||||
|
ACCESS_DENIED = 15,
|
||||||
|
RESOURCE_NOT_FOUND = 16, // Shared with multiple services
|
||||||
|
UNRECOGNIZED_CLIENT = 17, // Most likely caused by an invalid access key or secret key
|
||||||
|
MALFORMED_QUERY_STRING = 18,
|
||||||
|
SLOW_DOWN = 19,
|
||||||
|
REQUEST_TIME_TOO_SKEWED = 20,
|
||||||
|
INVALID_SIGNATURE = 21,
|
||||||
|
SIGNATURE_DOES_NOT_MATCH = 22,
|
||||||
|
INVALID_ACCESS_KEY_ID = 23,
|
||||||
|
REQUEST_TIMEOUT = 24,
|
||||||
|
NETWORK_CONNECTION = 99, // General failure to send message to service
|
||||||
|
|
||||||
|
// These are needed for logical reasons
|
||||||
|
UNKNOWN = 100,
|
||||||
|
CLIENT_SIGNING_FAILURE = 101, // Client failed to sign the request
|
||||||
|
USER_CANCELLED = 102, // User cancelled the request
|
||||||
|
SERVICE_EXTENSION_START_RANGE = 128
|
||||||
|
BUCKET_ALREADY_EXISTS= SERVICE_EXTENSION_START_RANGE + 1,
|
||||||
|
BUCKET_ALREADY_OWNED_BY_YOU,
|
||||||
|
NO_SUCH_BUCKET,
|
||||||
|
NO_SUCH_KEY,
|
||||||
|
NO_SUCH_UPLOAD,
|
||||||
|
OBJECT_ALREADY_IN_ACTIVE_TIER,
|
||||||
|
OBJECT_NOT_IN_ACTIVE_TIER
|
||||||
|
};
|
||||||
|
|
||||||
|
/*************************************************************************************
|
||||||
|
* 函数名: hos_client_init
|
||||||
|
* 参数: const char *endpoint 目的地址,如”http://192.168.44.12:9098/hos“
|
||||||
|
* const char *accesskeyid AWS access key ID,如”default“
|
||||||
|
* const char *secretkey AWS secret key,如”secretkey“
|
||||||
|
* 返回值: 成功返回一个非空句柄,失败返回NULL。(失败原因都是因为输入参数为空)
|
||||||
|
*************************************************************************************/
|
||||||
hos_client_handle hos_client_init(const char *endpoint, const char *accesskeyid, const char *secretkey);
|
hos_client_handle hos_client_init(const char *endpoint, const char *accesskeyid, const char *secretkey);
|
||||||
|
/*************************************************************************************
|
||||||
|
* 函数名: hos_create_bucket
|
||||||
|
* 参数: hos_client_handle handle 非空句柄
|
||||||
|
* const char * bucket 桶名称
|
||||||
|
* 返回值: bool
|
||||||
|
*************************************************************************************/
|
||||||
bool hos_create_bucket(hos_client_handle handle, const char *bucket);
|
bool hos_create_bucket(hos_client_handle handle, const char *bucket);
|
||||||
|
/*************************************************************************************
|
||||||
|
* 函数名: hos_upload_async
|
||||||
|
* 参数: hos_client_handle handle 非空句柄
|
||||||
|
* const char * bucket 桶名称
|
||||||
|
* const char * object 上传对象名称
|
||||||
|
* 返回值 bool
|
||||||
|
*************************************************************************************/
|
||||||
bool hos_upload_async(hos_client_handle handle, const char *bucket, const char *object);
|
bool hos_upload_async(hos_client_handle handle, const char *bucket, const char *object);
|
||||||
|
/*************************************************************************************
|
||||||
|
* 函数名: hos_client_close
|
||||||
|
* 参数: hos_client_handle handle 非空句柄
|
||||||
|
*************************************************************************************/
|
||||||
void hos_client_close(hos_client_handle handle);
|
void hos_client_close(hos_client_handle handle);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user