Sources/SLSIPA4Unity/SLSIPA4Unity.m (208 lines of code) (raw):

// // Copyright 2023 aliyun-sls Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #import "SLSIPA4Unity.h" #import "SLSCocoa.h" #import "SLSNetworkDiagnosis.h" #pragma mark - Interface for Unity bridge #ifdef __cplusplus extern "C"{ #endif static SLSUserInfo *userInfo; SLSCredentials* createCredentials(const char * instanceId, const char * endpoint, const char * project, const char * accesskeyId, const char * accessKeySecret, const char * securityToken, const char * secretKey, const char * siteId) { SLSCredentials *credentials = [SLSCredentials credentials]; if (instanceId) { credentials.instanceId = [NSString stringWithUTF8String:instanceId]; } if (endpoint) { credentials.endpoint = [NSString stringWithUTF8String:endpoint]; } if (project) { credentials.project = [NSString stringWithUTF8String:project]; } if (accesskeyId) { credentials.accessKeyId = [NSString stringWithUTF8String:accesskeyId]; } if (accessKeySecret) { credentials.accessKeySecret = [NSString stringWithUTF8String:accessKeySecret]; } if (securityToken) { credentials.securityToken = [NSString stringWithUTF8String:securityToken]; } SLSNetworkDiagnosisCredentials *networkCredentials = [credentials createNetworkDiagnosisCredentials]; if (secretKey) { networkCredentials.secretKey = [NSString stringWithUTF8String:secretKey]; } if (siteId) { networkCredentials.siteId = [NSString stringWithUTF8String:siteId]; } return credentials; } void _SLS_InitSLS(const char * instanceId, const char * endpoint, const char * project, const char * accesskeyId, const char * accessKeySecret, const char * securityToken, const char * secretKey, const char * siteId) { SLSCredentials *credentials = createCredentials(instanceId, endpoint, project, accesskeyId, accessKeySecret, securityToken, secretKey, siteId); [[SLSCocoa sharedInstance] initialize:credentials configuration:^(SLSConfiguration * _Nonnull configuration) { configuration.enableNetworkDiagnosis = YES; }]; } void _SLS_RegisterCredentialsCallback(cs_sls_callback callback) { [[SLSCocoa sharedInstance] registerCredentialsCallback:^(NSString * _Nonnull feature, NSString * _Nonnull result) { if (callback) { callback(feature.UTF8String, result.UTF8String); } }]; } void _SLS_SetLogLevel(int level) { // [SLSCocoa sharedInstance] } void _SLS_SetCredentials(const char * instanceId, const char * endpoint, const char * project, const char * accesskeyId, const char * accessKeySecret, const char * securityToken, const char * secretKey, const char * siteId) { SLSCredentials *credentials = createCredentials(instanceId, endpoint, project, accesskeyId, accessKeySecret, securityToken, secretKey, siteId); [[SLSCocoa sharedInstance] setCredentials:credentials]; } void _SLS_SetUserInfo(const char * uid, const char * channel) { if (!userInfo) { userInfo = [[SLSUserInfo alloc] init]; } if (uid) { userInfo.uid = [NSString stringWithUTF8String:uid]; } if (channel) { userInfo.channel = [NSString stringWithUTF8String:channel]; } [[SLSCocoa sharedInstance] setUserInfo: userInfo]; } void _SLS_SetExtraOfExt(const char * extKey, const char * extValue) { if (!userInfo) { return; } if (!extKey || !extValue) { return; } [userInfo addExt:[NSString stringWithUTF8String:extValue] key:[NSString stringWithUTF8String:extKey]]; [[SLSCocoa sharedInstance] setUserInfo:userInfo]; } void _SLS_SetExtra(const char * key, const char * value) { if (!key || !value) { return; } [[SLSCocoa sharedInstance] setExtra:[NSString stringWithUTF8String:key] value:[NSString stringWithUTF8String:value]]; } void _SLS_RemoveExtra(const char * key) { if (!key) { return; } [[SLSCocoa sharedInstance] removeExtra:[NSString stringWithUTF8String:key]]; } void _SLS_ClearExtra(void) { [[SLSCocoa sharedInstance] clearExtras]; } void call_response_callback(cs_sls_complete_callback callback, SLSResponse *response) { if (nil == response || nil == callback) { return; } const char * content = strdup(response.content.length > 0 ? response.content.UTF8String : ""); const char * context = strdup(nil != response.context ? ((NSString *)response.context).length > 0 ? ((NSString *)response.context).UTF8String : "": ""); const char * error = strdup(response.error.length > 0 ? response.error.UTF8String : ""); int type = 0; if ([@"http" isEqualToString:response.type]) { type = 0; } else if ([@"ping" isEqualToString:response.type]) { type = 1; } else if ([@"tcpping" isEqualToString:response.type]) { type = 2; } else if ([@"mtr" isEqualToString:response.type]) { type = 3; } else if ([@"dns" isEqualToString:response.type]) { type = 4; } callback(type, content, context, error); } void _SLS_Ping(const char * domain, const char * context, const int size, const int maxTimes, const int timeout, cs_sls_complete_callback callback) { SLSHttpRequest *request = [[SLSHttpRequest alloc] init]; request.domain = [NSString stringWithUTF8String:domain]; request.context = [NSString stringWithUTF8String:context]; request.size = size; request.maxTimes = maxTimes; request.timeout = timeout; [[SLSNetworkDiagnosis sharedInstance] ping2:request callback:^(SLSResponse * _Nonnull response) { call_response_callback(callback, response); }]; } void _SLS_TcpPing(const char * domain, const char * context, const int size, const int maxTimes, const int timeout, const int port, cs_sls_complete_callback callback) { SLSTcpPingRequest *request = [[SLSTcpPingRequest alloc] init]; request.domain = [NSString stringWithUTF8String:domain]; request.context = [NSString stringWithUTF8String:context]; request.size = size; request.maxTimes = maxTimes; request.timeout = timeout; request.port = port; [[SLSNetworkDiagnosis sharedInstance] tcpPing2:request callback:^(SLSResponse * _Nonnull response) { call_response_callback(callback, response); }]; } void _SLS_Dns(const char * domain, const char * context, const int size, const int maxTimes, const int timeout, const char * type, const char * nameServer, cs_sls_complete_callback callback) { SLSDnsRequest *request = [[SLSDnsRequest alloc] init]; request.domain = [NSString stringWithUTF8String:domain]; request.context = [NSString stringWithUTF8String:context]; request.size = size; request.maxTimes = maxTimes; request.timeout = timeout; request.type = [NSString stringWithUTF8String:type]; if (nil != nameServer) { request.nameServer = [NSString stringWithUTF8String:nameServer]; } [[SLSNetworkDiagnosis sharedInstance] dns2:request callback:^(SLSResponse * _Nonnull response) { call_response_callback(callback, response); }]; } void _SLS_Mtr(const char * domain, const char * context, const int size, const int maxTimes, const int timeout, const int maxTTL, const int maxPaths, cs_sls_complete_callback callback) { SLSMtrRequest *request = [[SLSMtrRequest alloc] init]; request.domain = [NSString stringWithUTF8String:domain]; request.context = [NSString stringWithUTF8String:context]; request.size = size; request.maxTimes = maxTimes; request.timeout = timeout; request.maxTTL = maxTTL; request.maxPaths = maxPaths; [[SLSNetworkDiagnosis sharedInstance] mtr2:request callback:^(SLSResponse * _Nonnull response) { call_response_callback(callback, response); }]; } void _SLS_Http(const char * domain, const char * context, const int size, const int maxTimes, const int timeout, const char *ip, const bool headerOnly, const int downloadBytesLimit, cs_sls_complete_callback callback) { SLSHttpRequest *request = [[SLSHttpRequest alloc] init]; request.domain = [NSString stringWithUTF8String:domain]; request.context = [NSString stringWithUTF8String:context]; request.size = size; request.maxTimes = maxTimes; request.timeout = timeout; if (nil != ip) { request.ip = [NSString stringWithUTF8String:ip]; } request.headerOnly = headerOnly; request.downloadBytesLimit = downloadBytesLimit; [[SLSNetworkDiagnosis sharedInstance] http2:request callback:^(SLSResponse * _Nonnull response) { call_response_callback(callback, response); }]; } void _SLS_DisableExNetworkInfo(void) { [[SLSNetworkDiagnosis sharedInstance] disableExNetworkInfo]; } void _SLS_SetMultiplePortsDetect(const bool enable) { [[SLSNetworkDiagnosis sharedInstance] setMultiplePortsDetect:enable]; } void _SLS_SetPolicyDomain(const char *domain) { [[SLSNetworkDiagnosis sharedInstance] setPolicyDomain:(nil != domain ? ([NSString stringWithUTF8String:domain]) : @"")]; } void _SLS_RegisterCallback(cs_sls_complete_callback callback) { [[SLSNetworkDiagnosis sharedInstance] registerCallback2:^(SLSResponse * _Nonnull response) { call_response_callback(callback, response); }]; } void _SLS_UpdateExtensions(const char *key, const char *value) { if (nil == key || nil == value) { return; } [[SLSNetworkDiagnosis sharedInstance] updateExtensions:@{[NSString stringWithUTF8String:key]: [NSString stringWithUTF8String:value]}]; } const char* _SLS_HelloFromiOS(void) { return @"hello from iOS.".UTF8String; } #ifdef __cplusplus } // extern "C" #endif #pragma mark -