This commit is contained in:
biosvos
2026-08-07 17:38:18 +09:00
commit 873193a243
9613 changed files with 2755992 additions and 0 deletions
@@ -0,0 +1,757 @@
// test_agent.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#ifdef WIN32
#include <windows.h>
#include <atlstr.h>
#else
#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
#define GetLastError() errno
#endif //WIN32
#include "../../SHCSDK.h"
#include "../../SHSSDK.h"
#if 0 //토토디스크 & QC망 테스트
#define SERVICE "totodisk05"
#define ID "totodisk05"
#define PWD "toto379"
#define AUTHSTR "icstoto05"
//#define AUTHSTR "totodisk05"
#define FILE_PATH "D:/cert/totodisk05238.cert"
#endif
#if 0 //SBFS 04
#define ID "sbfstest"
#define PWD "sbfstest"
#define FILE_PATH "D:/cert/sbfstest260.cert"
#define AUTHSTR "sbfstest001"
#define SERVICE "sbfstest001"
#endif
#if 0 //SBFS 04 - solboxsvc1
#define ID "solboxsvc1"
#define PWD "5emffld)"
#define FILE_PATH "D:/cert/solboxsvc1298.cert"
#define AUTHSTR "svc1bd04"
#define SERVICE "svc1bd04"
#endif
#if 0 //SBFS 04 - svc1test05
#define ID "solboxsvc1"
#define PWD "5emffld)"
#define FILE_PATH "D:/cert/solboxsvc1326.cert"
#define AUTHSTR "svc1test05"
#define SERVICE "svc1test05"
#endif
#if 1 //BD-16 - nctest
#define SERVICE "nctest2"
#define ID "nctest"
#define PWD "nctest123"
#define AUTHSTR "icstmxmflald"
#define FILE_PATH "D:/cert/nctest348.cert"
#endif
#if 0 //토토디스크 & QC망 테스트
#define SERVICE "softline2009"
#define ID "totodisk05"
#define PWD "toto379"
#define AUTHSTR "icssoftline09"
#define FILE_PATH "D:/cert/totodisk05240.cert"
#endif
#if 0 //BD-04 - nctest
#define SERVICE "nctest"
#define ID "nctest"
#define PWD "nctest123"
#define AUTHSTR "icstmxmflald"
#define FILE_PATH "D:/cert/nctest347.cert"
#endif
#if 0 //SBFS 03 & X-CDN
#define ID "solboxtest"
#define PWD "solboxtest"
#define FILE_PATH "D:/cert/solboxtest186.cert"
#define AUTHSTR "solboxtest"
#define SERVICE "solboxtest"
#endif
HSHSDK g_hshsdk;
bool g_bUp = false;
size_t g_total = 0;
size_t g_buffertotal = 0;
#ifdef WIN32
int __stdcall CallbackProc(void *param, INT64 result)
#else // WIN32
int CallbackProc(void *param, INT64 result)
#endif // WIN32
{
static time_t start_time = time(0);
time_t gap, current_time = time(0);
gap = current_time - start_time;
printf("CallbackProc elapsed[%ld] sec\n", gap);
// 파일 업로드 중…
#ifdef WIN32
printf("%s loading : %I64d\n", g_bUp ? "Up" : "Down", result);
#else // WIN32
printf("%s loading : %lld\n", g_bUp ? "Up" : "Down", result);
#endif // WIN32
//Sleep(10000);
// 1 : 계속 진행
// 0 : 멈춤
return 1;
}
int Download_Func(void* userdata, const char* buf, size_t len)
{
printf("downloading : %d\n", len);
// 1 : 멈춤 // 0 : 계속진행
g_total += len;
if(g_total >= (1024*1024))
return 1;
return 0;
}
ssize_t Upload_Func(void *userval, char *buf, size_t len)
{
if(buf == 0x00)
return 0; // 버퍼 할당이 되있지 않다.
if (g_total > g_buffertotal)
return 0; // 설정한 용량이다. 종료
strncpy(buf, "1234567890", 10);
//strncpy(buf, "0000000000", 10);
g_total += 10; // 전송된 용량증가
printf("uploading : %d\n", g_total);
return 10; // 전송된 용량 리턴
}
int InitSDK()
{
int r = 0;
//sh_set_cache_file("C:/test.log");
char* astring = NULL;
char *host = (char*)sh_get_service_host(ID, PWD, SERVICE);
if(!host)
{
printf("sh_get_service_host ERROR : %d\n", GetLastError());
r = 1;
goto ERR_EXIT;
}
printf("host: %s\n", host);
static bool first_time = true;
if(first_time == true)
{
#ifndef _SP_SDK_
astring = (char*)sh_get_auth_string(ID, PWD, SERVICE, AUTHSTR, FILE_PATH, time(NULL) + 86400);
#else // _SP_SDK_
char userid[256] = {0};
sprintf(userid,"%s@%s", SERVICE, ID);
astring = (char*)sh_get_auth_sp_string(userid, PWD);
#endif // _SP_SDK_
if (!astring)
{
printf("sh_get_auth_string ERROR : %d\n", GetLastError());
r = 1;
goto ERR_EXIT;
}
g_hshsdk =NULL;
sh_set_response_timeout(3);
g_hshsdk = sh_init(host, astring, CallbackProc, NULL);
if (!g_hshsdk)
{
printf("sh_init ERROR : %d\n", GetLastError());
r = 1;
goto ERR_EXIT;
}
sh_set_sntp_timeout(3);
sh_set_limit(g_hshsdk,10240);
sh_set_sessionID(g_hshsdk,"testID");
}
else
{
g_hshsdk = sh_init(host, astring, CallbackProc, NULL);
if (!g_hshsdk)
{
printf("sh_init ERROR : %d\n", GetLastError());
r = 1;
goto ERR_EXIT;
}
}
ERR_EXIT:
if(host)
sh_mem_free(host);
if(astring)
sh_mem_free(astring);
return r;
}
void FreeSDK()
{
sh_free(g_hshsdk);
}
bool makedir()
{
if (sh_make_directory(g_hshsdk, "/SVC1_TEST") == 0)
{
if ( sh_get_error_number(g_hshsdk) == SHCERRNO_ALREADYEXIST )
return true;
printf("sh_make_directory ERROR : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return false;
}
else
{
printf("sh_make_directory SUCCESS\n");
return true;
}
}
bool makedirex(char * path)
{
if (sh_make_directory(g_hshsdk, path) == 0)
{
if ( sh_get_error_number(g_hshsdk) == SHCERRNO_ALREADYEXIST )
return true;
printf("sh_make_directory ERROR : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return false;
}
else
{
printf("sh_make_directory SUCCESS\n");
return true;
}
}
void upload_buffer(int mode, int c)
{
g_bUp = true;
char szFilename[256];
if ( makedir() == false )
return;
for( int i = 0; i < c; i++ ) {
sprintf(szFilename, "/SVC1_TEST/test_buffer%d%c", i, '\0');
g_total = 0; g_buffertotal = 2000;
if(!sh_upload_buffer(g_hshsdk, szFilename, mode, Upload_Func, g_buffertotal, NULL)) {
printf("upload_buffer : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return;
}
else
printf("sh_upload SUCCESS\n");
}
}
// 업로드
void upload(int mode, int c)
{
g_bUp = true;
char szFilename[256];
// -- 2013-03-25
char extQuery[600] = {0};
//strcpy(extQuery, "&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10");
strcpy(extQuery, "a=10&werfgwerf=123!@#$%^&*()테스트");
if ( makedir() == false )
return;
for( int i = 0; i < c; i++ ) {
sprintf(szFilename, "/SVC1_TEST/test_%d%c", i, '\0');
//sprintf(szFilename, "/k/kji777/( 完結 _ 2007 ) _ 수신연무.Jyushinenbu 03.avi", i, '\0');
if (!sh_upload(g_hshsdk, "D:/test_10k.txt", szFilename, mode, -1, extQuery))
{
printf("sh_upload ERROR 1: %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return;
}
else
printf("sh_upload SUCCESS\n");
}
}
void uploadex(int mode, char *path, int c)
{
g_bUp = true;
char szFilename[256];
// -- 2013-03-25
char extQuery[600] = {0};
//strcpy(extQuery, "&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10");
strcpy(extQuery, "a=10&werfgwerf=123!@#$%^&*()테스트");
if ( makedirex(path) == false )
return;
for( int i = 0; i < c; i++ ) {
sprintf(szFilename, "%s/test_%d%c", path, i, '\0');
//sprintf(szFilename, "/k/kji777/( 完結 _ 2007 ) _ 수신연무.Jyushinenbu 03.avi", i, '\0');
//if (!sh_upload(g_hshsdk, "D:/output.html", szFilename, mode, -1, extQuery))
if (!sh_upload(g_hshsdk, "D:/fhs.data.check", szFilename, mode, -1, extQuery))
{
printf("sh_upload ERROR 1: %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return;
}
else
printf("sh_upload SUCCESS\n");
}
}
void download_buffer(int c)
{
g_bUp = false;
char szFilename[1024];
for( int i = 0; i < c; i++ ) {
sprintf(szFilename, "/SVC1_TEST/test_%d%c", i, '\0');
if (!sh_download_buffer(g_hshsdk, szFilename, Download_Func, 0, NULL)) {
printf("download_buffer : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return;
} else {
printf("download_buffer SUCCESS\n");
}
}
}
void download_buffer_r(int c)
{
g_bUp = false;
char szFilename[1024];
for( int i = 0; i < c; i++ ) {
sprintf(szFilename, "/SVC1_TEST/test_%d%c", i, '\0');
INT64 nBytes = 1024, offset = 1;
if (!sh_download_buffer_r(g_hshsdk, szFilename, Download_Func, offset, nBytes, NULL)) {
printf("download_buffer_r : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return;
} else {
printf("download_buffer_r SUCCESS\n");
}
}
}
/*
void download(char * filename, int mode, int c)
{
g_bUp = false;
char local_location[1024];
char dav_location[1024];
for( int i = 0; i < c; i++ ) {
sprintf(dav_location, "%s/test_%d%c", filename, i, '\0');
sprintf(local_location, "D:/temp/down_%d.xml%c", i, '\0');
if (!sh_download(g_hshsdk, dav_location, local_location, mode, -1))
{
printf("sh_download ERROR : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return;
}
else{
printf("sh_download SUCCESS\n");
}
}
return;
} */
void download(char * filename, int mode, int c)
{
g_bUp = false;
char local_location[1024];
char dav_location[1024];
// -- 2013-03-25
char extQuery[600] = {0};
//strcpy(extQuery, "&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10&a=10");
strcpy(extQuery, "a=10&werfgwerf=123!@#$%^&*()테스트");
sprintf(dav_location, "%s", filename, '\0');
sprintf(local_location, "D:/cert/aa.txt", '\0');
if (!sh_download(g_hshsdk, dav_location, local_location, mode, -1, extQuery))
{
printf("sh_download ERROR : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return;
}
else{
printf("sh_download SUCCESS\n");
}
return;
}
void getdirex(char * path)
{
HSHFILELIST h = sh_get_filelist(g_hshsdk, path, 1);
if (h == 0 )
{
printf("sh_get_filelist ERROR : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
}
else
{
int n = sh_get_filelist_count(g_hshsdk, h);
printf("sh_get_filelist CNT = %d SUCCESS\n", n);
sh_free_filelist(g_hshsdk, h);
}
}
void getdir()
{
HSHFILELIST h = sh_get_filelist(g_hshsdk, "/SVC1_TEST/", 1);
if (h == 0 )
{
printf("sh_get_filelist ERROR : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
}
else
{
int n = sh_get_filelist_count(g_hshsdk, h);
printf("sh_get_filelist CNT = %d SUCCESS\n", n);
sh_free_filelist(g_hshsdk, h);
}
}
void deldirex(char * path)
{
if (sh_delete(g_hshsdk, path) == 0)
{
printf("sh_delete ERROR : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return;
}
else
printf("sh_delete SUCCESS\n");
}
void deldir()
{
if (sh_delete(g_hshsdk, "/SVC1_TEST/") == 0)
{
printf("sh_delete ERROR : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
return;
}
else
printf("sh_delete SUCCESS\n");
}
#if defined(WIN32) && defined( _DEBUG)
#define _CRTDBG_MAP_ALLOC
#include <malloc.h>
#include <crtdbg.h>
#define SET_CRT_DEBUG_FIELD(a) \
_CrtSetDbgFlag((a) | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG))
#define CLEAR_CRT_DEBUG_FIELD(a) \
_CrtSetDbgFlag(~(a) & _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG))
#else
#define SET_CRT_DEBUG_FIELD(a) ((void) 0)
#define CLEAR_CRT_DEBUG_FIELD(a) ((void) 0)
#endif
#define _ONCE_INIT_
//#define _MULT_THRAD_
#ifndef _MULT_THRAD_
int main(int argc, char* argv[])
{
time_t time_start, time_end;
time_start = time(0);
#ifdef WIN32
//SET_CRT_DEBUG_FIELD( _CRTDBG_LEAK_CHECK_DF | _CRTDBG_DELAY_FREE_MEM_DF );
SET_CRT_DEBUG_FIELD( _CRTDBG_LEAK_CHECK_DF );
//_CrtSetBreakAlloc(75);
#endif // _WIN32
int i = 0, maxc = 1, nc = 1;
#ifdef _ONCE_INIT_
if(InitSDK()) return -1;
#endif // _ONCE_INIT_
char path[256] = {0};
if(argc > 1 && argv[1])
strcpy(path, argv[1]);
else
strcpy(path, "/SVC1_TEST");
//strcpy(path, "/u/u9912168/2011091017553163316_MisfitsS01E05WSPDTVXviDBiA_IPHONE.mp4");
//strcpy(path, "/test/install.ini");
//strcpy(path, "/msvcr71.dll");
//strcpy(path, "D:\\x_interactive\\trunk\\SDK\\version_3\\WIN_SDK\\test_agent\\ReadMe.txt");
if(argc > 2 && argv[2] && atoi(argv[2]) > 0 )
maxc = atoi(argv[2]);
if(argc > 3 && argv[3] && atoi(argv[3]) > 0 )
nc = atoi(argv[3]);
srand ( time(NULL) );
while(1)
{
#ifndef _ONCE_INIT_
if(InitSDK()) break;
#endif //!_ONCE_INIT_
time_end = time(0);
if(nc < 0)
nc = (rand() % 1000) + 1;
// uploadex(SHWRITEPOLICY_OVERWRITE, path , nc);
upload(SHWRITEPOLICY_OVERWRITE, nc);
// download(path, SHWRITEPOLICY_OVERWRITE, nc);
// deldirex(path);
printf("소요된 시간 [%d]초\n, %s" ,(time(0) - time_end) , path);
#ifndef _ONCE_INIT_
FreeSDK();
#endif //!_ONCE_INIT_
if(++i >= maxc)
break;
}
printf("총 소요된 시간 [%d]초\n" ,(time(0) - time_start) );
#ifdef _ONCE_INIT_
FreeSDK();
#endif // _ONCE_INIT_
#ifdef WIN32
_CrtDumpMemoryLeaks();
#endif // WIN32
return 0;
}
#else // _MULT_THRAD_
char g_szServiceHost[1024];
#ifdef WIN32
#define NUM_OF_THREADS MAXIMUM_WAIT_OBJECTS
HANDLE g_hStart = NULL;
DWORD WINAPI TestThread(LPVOID lpParam)
{
char szAuthString[1024], szRemotePath[1024], szLocalPath[1024];
::WaitForSingleObject(g_hStart, INFINITE);
#ifndef _SP_SDK_
const char* pAuthString = sh_get_auth_string(ID, PWD, SERVICE, AUTHSTR, FILE_PATH, time(NULL) + 86400);
strcpy_s(szAuthString, sizeof(szAuthString), pAuthString);
sh_mem_free((void *)pAuthString);
#else // _SP_SDK_
char userid[256] = {0};
sprintf(userid,"%s@%s", SERVICE, ID);
const char* pAuthString = (char*)sh_get_auth_sp_string(userid, PWD);
strcpy_s(szAuthString, sizeof(szAuthString), pAuthString);
sh_mem_free((void *)pAuthString);
#endif // _SP_SDK_
g_bUp = true;
HSHSDK hSDK = sh_init(g_szServiceHost, szAuthString, 0, 0);
// upload
sprintf_s(szRemotePath, sizeof(szRemotePath), "/testx/test%d", (int)lpParam);
if(!sh_upload(hSDK, "D:/test_10k.txt", szRemotePath, SHWRITEPOLICY_OVERWRITE, -1))
printf("sh_upload ERROR 1: %d, %s\n", sh_get_error_number(hSDK), sh_get_error_message(hSDK));
else
printf("sh_upload SUCCESS\n");
// download
sprintf_s(szLocalPath, sizeof(szLocalPath), "D:/temp/test%d", (int)lpParam);
if (!sh_download(hSDK, szRemotePath, szLocalPath, SHWRITEPOLICY_OVERWRITE, -1))
{
printf("sh_download ERROR : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
}
else{
printf("sh_download SUCCESS\n");
}
sh_free(hSDK);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
const char *pServiceHost = sh_get_service_host(ID, PWD, SERVICE);
if(!pServiceHost)
{
fprintf(stderr, "Error : get service host.\n");
return 1;
}
strcpy_s(g_szServiceHost, sizeof(g_szServiceHost), pServiceHost);
sh_mem_free((void *)pServiceHost);
puts(g_szServiceHost);
g_hStart = ::CreateEvent(NULL, TRUE, FALSE, NULL);
HANDLE hThread[NUM_OF_THREADS];
DWORD dwThreadId[NUM_OF_THREADS];
for (int i = 0; i < NUM_OF_THREADS; ++i)
{
hThread[i] = CreateThread(NULL, 0, TestThread, (PVOID)i, 0, &dwThreadId[i]);
}
puts("Ready. press enter key to start.");
getchar();
DWORD dwStart = ::GetTickCount();
::SetEvent(g_hStart);
::WaitForMultipleObjects(NUM_OF_THREADS, hThread, TRUE, INFINITE);
printf("Done : %dms elapsed.\n", ::GetTickCount() - dwStart);
getchar();
return 0;
}
#else // WIN32
#include <pthread.h>
#include <unistd.h>
#define NUM_OF_THREADS 100 // file open count
void *t_function(void *data)
{
pthread_t id = pthread_self();
size_t i = (size_t) data;
//printf("therad : %d \n",i);
//pthread_exit((void *) 0);
char szAuthString[1024], szRemotePath[1024], szLocalPath[1024];
char* pAuthString = NULL;
#ifndef _SP_SDK_
pAuthString = (char*) sh_get_auth_string(ID, PWD, SERVICE, AUTHSTR, FILE_PATH, time(NULL) + 86400);
#else // _SP_SDK_
char userid[256] = {0};
sprintf(userid,"%s@%s", SERVICE, ID);
pAuthString = (char*) sh_get_auth_sp_string(userid, PWD);
#endif // _SP_SDK_
if(!pAuthString)
{
fprintf(stderr, "error : get auth string \n");
return (void *) 0;
}
strcpy(szAuthString, pAuthString);
sh_mem_free((void *)pAuthString);
g_bUp = true;
HSHSDK hSDK = sh_init(g_szServiceHost, szAuthString, 0, 0);
// upload
sprintf(szRemotePath, "/testx/test_%d", i);
if(!sh_upload(hSDK, "D:/test_10k.txt", szRemotePath, SHWRITEPOLICY_OVERWRITE, -1))
printf("sh_upload ERROR 1: %d, %s\n", sh_get_error_number(hSDK), sh_get_error_message(hSDK));
else
printf("sh_upload SUCCESS\n");
//download
sprintf(szLocalPath, "D:/temp/test_%d", i);
if (!sh_download(hSDK, szRemotePath, szLocalPath, SHWRITEPOLICY_OVERWRITE, -1))
{
printf("sh_download ERROR : %d, %s\n", sh_get_error_number(g_hshsdk), sh_get_error_message(g_hshsdk));
}
else{
printf("sh_download SUCCESS\n");
}
sh_free(hSDK);
return (void *) 0;
}
int main(int argc, char* argv[])
{
const char *pServiceHost = sh_get_service_host(ID, PWD, SERVICE);
if(!pServiceHost)
{
fprintf(stderr, "Error : get service host.\n");
return 1;
}
strcpy(g_szServiceHost, pServiceHost);
sh_mem_free((void *)pServiceHost);
puts(g_szServiceHost);
puts("Ready. press enter key to start.");
getchar();
int thr_id,i;
pthread_t p_thread[NUM_OF_THREADS];
static time_t tstart = time(0);
for (i = 0; i < NUM_OF_THREADS; ++i)
{
thr_id = pthread_create(&p_thread[i], NULL, t_function, (void *)((int)i));
if (thr_id < 0)
{
perror("thread create error : ");
exit(0);
}
sleep(0);
//pthread_detach(p_thread[i]);
}
int rc,status;
for(i = (NUM_OF_THREADS-1); i >= 0; i--)
{
rc = pthread_join(p_thread[i], (void **)&status);
if( rc == 0 )
{
//printf("Completed join with thread %d status= %d\n",i, status);
}
else
{
printf("ERROR; return code from pthread_join() is %d, thread %d\n", rc, i);
return -1;
}
}
printf("Done : %dsec elapsed.\n", time(0) - tstart);
getchar();
return 0;
}
#endif // WIN32
#endif // _MULT_THRAD_