/// <summary> /// Basic post request. /// </summary> /// <returns>The post response.</returns> /// <param name="url">URL.</param> /// <param name="args">Arguments.</param> /// <param name="headers">Headers.</param> public static string BasicPostRequest(string url, Dictionary <string, string> args, Dictionary <string, string> headers = null) { NSString urlString = (NSString)url; NSMutableUrlRequest request = new NSMutableUrlRequest(); request.Url = new NSUrl(urlString); request.HttpMethod = "POST"; string boundary = "---------------------------14737809831466499882746641449"; NSString contentType = new NSString(string.Format("multipart/form-data; boundary={0}", boundary)); var keys = new List <object> { "Content-Type" }; var objects = new List <object> { contentType }; if (headers != null) { foreach (KeyValuePair <string, string> kvp in headers) { keys.Add(kvp.Key); objects.Add(kvp.Value); } } var dictionary = NSDictionary.FromObjectsAndKeys(objects.ToArray(), keys.ToArray()); request.Headers = dictionary; NSMutableData body = new NSMutableData(); foreach (KeyValuePair <string, string> kvp in args) { body.AppendData(NSData.FromString(new NSString(string.Format("\r\n--{0}\r\n", boundary)))); body.AppendData(NSData.FromString(new NSString(string.Format("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n", kvp.Key)))); body.AppendData(NSData.FromString(new NSString(kvp.Value))); body.AppendData(NSData.FromString(new NSString(string.Format("\r\n--{0}--\r\n", boundary)))); } request.Body = body; NSUrlResponse resp; NSError err; NSData returnData = NSUrlConnection.SendSynchronousRequest(request, out resp, out err); return(NSString.FromData(returnData, NSStringEncoding.UTF8).ToString()); }
public override void ReceivedData(NSUrlConnection connection, NSData data) { if (_data == null) { _data = new NSMutableData(); } _data.AppendData(data); }
public virtual void ReceivedData(NSUrlConnection connection, NSData data) { if (connectionData == null) { connectionData = new NSMutableData(); connectionData.AppendData(data); } else { connectionData.AppendData(data); } }
public override void DidReceiveData(NSUrlSession session, NSUrlSessionDataTask dataTask, NSData data) { System.Diagnostics.Debug.WriteLine("DidReceiveData..."); if (uploadData.ContainsKey(dataTask.TaskIdentifier)) { uploadData[dataTask.TaskIdentifier].AppendData(data); } else { var uData = new NSMutableData(); uData.AppendData(data); uploadData.Add(dataTask.TaskIdentifier, uData); } // _data.AppendData(data); }
public override void ReceivedData(NSUrlConnection connection, NSData data) { buffer.AppendData(data); }
public override void ReceivedData(NSUrlConnection connection, NSData d) { data.AppendData(d); }
public override void DidReceiveData(NSUrlSession session, NSUrlSessionDataTask dataTask, NSData byteData) { // 接收时可能调用多次 _dataResponse.AppendData(byteData); }
private byte[] GenerateKeyPairCore(string name) { using (var parameters = new SecRecord(SecKind.Key)) { parameters.AccessControl = new SecAccessControl(SecAccessible.WhenPasscodeSetThisDeviceOnly, SecAccessControlCreateFlags.TouchIDCurrentSet | SecAccessControlCreateFlags.PrivateKeyUsage); parameters.KeyType = SecKeyType.EC; parameters.KeySizeInBits = 256; parameters.TokenID = SecTokenID.SecureEnclave; var privateKeyParameters = new NSMutableDictionary(); privateKeyParameters.Add(kSecAttrApplicationTag, new NSString($"{name}_priv")); privateKeyParameters.Add(kSecAttrIsPermanent, NSNumber.FromBoolean(true)); var publicKeyParameters = new NSMutableDictionary(); publicKeyParameters.Add(kSecAttrApplicationTag, new NSString($"{name}_pub")); publicKeyParameters.Add(kSecAttrIsPermanent, NSNumber.FromBoolean(false)); var mutableDictionary = (NSMutableDictionary)parameters.ToDictionary(); mutableDictionary.Add(kSecPrivateKeyAttrs, new NSDictionary(privateKeyParameters)); mutableDictionary.Add(kSecPublicKeyAttrs, new NSDictionary(publicKeyParameters)); var result = SecKey.GenerateKeyPair((NSDictionary)mutableDictionary, out var publicKey, out var privateKey); if (result == SecStatusCode.Success) { privateKey.Dispose(); using (var record = new SecRecord(SecKind.Key)) { record.KeyClass = SecKeyClass.Public; record.KeyType = SecKeyType.EC; record.IsPermanent = false; record.Label = "Public Key"; record.SetValueRef(publicKey); var dict = (NSMutableDictionary)record.ToDictionary(); dict.Add(kSecReturnData, NSNumber.FromBoolean(true)); var status = SecItemAdd(dict.Handle, out var publicKeyDataPtr); publicKey.Dispose(); if (status == SecStatusCode.Success) { var publicKeyData = ObjCRuntime.Runtime.GetINativeObject <NSData>(publicKeyDataPtr, true); if (publicKeyData != null) { // Apple's SecurityFramework uses raw keys which need to be wrapped in proper ASN.1 for outside consumption // See : https://forums.developer.apple.com/thread/8030 var header = NSData.FromArray(new byte[] { 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00 }); var buffer = new NSMutableData(header.Length + publicKeyData.Length); buffer.AppendData(header); buffer.AppendData(publicKeyData); return(buffer.ToArray()); } } return(null); } } else { throw new SecurityException(result); } } }
/// <summary> /// Upload function using the native functionality of Mac /// </summary> /// <returns>Response string</returns> /// <param name="url">URL.</param> /// <param name="paramFileBytes">Parameter file bytes.</param> /// <param name="fileFormName">File form name.</param> /// <param name="args">Arguments.</param> private static string UploadNative(string url, byte [] paramFileBytes, string fileFormName, Dictionary <string, string> args = null, Dictionary <string, string> headers = null, bool onlyData = false) { NSData actualFile = NSData.FromArray(paramFileBytes); NSString urlString = (NSString)url; //we're gonna send byte data NSMutableUrlRequest request = new NSMutableUrlRequest(); request.Url = new NSUrl(urlString); request.HttpMethod = "POST"; string boundary = "---------------------------14737809831466499882746641449"; NSString contentType = new NSString(string.Format("multipart/form-data; boundary={0}", boundary)); var keys = new List <object> { "Content-Type" }; var objects = new List <object> { contentType }; foreach (KeyValuePair <string, string> kvp in headers) { if (!keys.Contains(kvp.Key)) { keys.Add(kvp.Key); objects.Add(kvp.Value); } else { for (int i = 0; i < keys.Count; i++) { if ((string)keys [i] == kvp.Key) { objects [i] = kvp.Value; } } } } var dictionary = NSDictionary.FromObjectsAndKeys(objects.ToArray(), keys.ToArray()); request.Headers = dictionary; NSMutableData body = new NSMutableData(); if (!onlyData) { body.AppendData(NSData.FromString(new NSString(string.Format("\r\n--{0}\r\n", boundary)))); body.AppendData(NSData.FromString(new NSString(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{0}.png\"\r\n", fileFormName)))); body.AppendData(NSData.FromString(new NSString("Content-Type: application/octet-stream\r\n\r\n"))); } body.AppendData(actualFile); if (!onlyData) { body.AppendData(NSData.FromString(new NSString(string.Format("\r\n--{0}--\r\n", boundary)))); foreach (KeyValuePair <string, string> kvp in args) { body.AppendData(NSData.FromString(new NSString(string.Format("\r\n--{0}\r\n", boundary)))); body.AppendData(NSData.FromString(new NSString(string.Format("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n", kvp.Key)))); body.AppendData(NSData.FromString(new NSString(kvp.Value))); body.AppendData(NSData.FromString(new NSString(string.Format("\r\n--{0}--\r\n", boundary)))); } } //Attach body request.Body = body; NSUrlResponse resp; NSError err; NSData returnData = NSUrlConnection.SendSynchronousRequest(request, out resp, out err); return(NSString.FromData(returnData, NSStringEncoding.UTF8).ToString()); }