diff options
| author | mojganii <mojgan.jelodar@codic.se> | 2025-03-26 15:24:08 +0100 |
|---|---|---|
| committer | mojganii <mojgan.jelodar@codic.se> | 2025-04-15 15:38:45 +0200 |
| commit | 4f52ef7f5f4072ff53d1ddc1f358cbf3e35a6d14 (patch) | |
| tree | 610ce7ffe5e27b92bd4621e63e0e000a453ff802 /ios/MullvadREST/Rust/RustProblemReportRequest.swift | |
| parent | f8aeeb42fa5cc7f1cc428bb4b34cb8d5de09bb51 (diff) | |
| download | mullvadvpn-4f52ef7f5f4072ff53d1ddc1f358cbf3e35a6d14.tar.xz mullvadvpn-4f52ef7f5f4072ff53d1ddc1f358cbf3e35a6d14.zip | |
Add metadata support to send problem report
Diffstat (limited to 'ios/MullvadREST/Rust/RustProblemReportRequest.swift')
| -rw-r--r-- | ios/MullvadREST/Rust/RustProblemReportRequest.swift | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/ios/MullvadREST/Rust/RustProblemReportRequest.swift b/ios/MullvadREST/Rust/RustProblemReportRequest.swift new file mode 100644 index 0000000000..8bd8a4490f --- /dev/null +++ b/ios/MullvadREST/Rust/RustProblemReportRequest.swift @@ -0,0 +1,57 @@ +// +// RustProblemReportRequest.swift +// MullvadVPN +// +// Created by Mojgan on 2025-03-21. +// Copyright © 2025 Mullvad VPN AB. All rights reserved. +// +import MullvadLogging +import MullvadRustRuntime + +final public class RustProblemReportRequest { + typealias StringPointer = (pointer: UnsafePointer<UInt8>?, size: UInt)? + private let logger = Logger(label: "RustProblemReportRequest") + private let problemReportMetaData: ProblemReportMetadata + private let addressPointer: StringPointer + private let messagePointer: StringPointer + private let logPointer: StringPointer + public init(from request: REST.ProblemReportRequest) { + addressPointer = request.address.toUnsafePointer() + messagePointer = request.message.toUnsafePointer() + logPointer = request.log.toUnsafePointer() + + self.problemReportMetaData = swift_problem_report_meta_data_new() + + for (key, value) in request.metadata { + key.withCString { keyPtr in + value.withCString { valuePtr in + if swift_problem_report_meta_data_add(problemReportMetaData, keyPtr, valuePtr) == false { + logger + .error( + "Failed to add metadata. Key: '\(key)' might be invalid or contain unsupported characters." + ) + } + } + } + } + } + + public func toRust() -> SwiftProblemReportRequest { + return SwiftProblemReportRequest( + address: addressPointer?.pointer ?? nil, + address_len: addressPointer?.size ?? 0, + message: messagePointer?.pointer ?? nil, + message_len: messagePointer?.size ?? 0, + log: logPointer?.pointer ?? nil, + log_len: logPointer?.size ?? 0, + meta_data: problemReportMetaData + ) + } + + public func release() { + swift_problem_report_meta_data_free(problemReportMetaData) + addressPointer?.pointer?.deallocate() + messagePointer?.pointer?.deallocate() + logPointer?.pointer?.deallocate() + } +} |
