ref: 44ac90449fa714efd31996e60d7e578e02ac91e5
parent: d2a973b953f6ccc33e493c3aa8eeeb4241f6dcc0
author: halfwit <michaelmisch1985@gmail.com>
date: Sat May 18 18:42:52 EDT 2024
Set to public
--- a/Sources/NineSwift/Connection.swift
+++ b/Sources/NineSwift/Connection.swift
@@ -37,7 +37,7 @@
}
@available(macOS 10.15, *)
-protocol PeerConnectionDelegate: AnyObject {+public protocol PeerConnectionDelegate: AnyObject {func connectionReady()
func connectionFailed()
func displayAdvertiseError(_ error: NWError)
@@ -44,10 +44,11 @@
}
@available(macOS 10.15, *)
-class PeerConnection {+public class PeerConnection {weak var delegate: PeerConnectionDelegate?
var connection: NWConnection?
let name: String
+ let endpoint: NWEndpoint
let initiatedConnection: Bool
var sendQueue = Queue<Enqueued>()
var handles: [Handle] = [Handle]()
@@ -55,23 +56,19 @@
/* Connect to a service */
@available(macOS 10.15, *)
- init(name: String, delegate: PeerConnectionDelegate) {+ public init(name: String, delegate: PeerConnectionDelegate, host: NWEndpoint.Host, port: NWEndpoint.Port) {self.delegate = delegate
self.name = name
self.initiatedConnection = true
-
- guard let endpointPort = NWEndpoint.Port("12345") else { return }- let endpoint = NWEndpoint.hostPort(host: NWEndpoint.Host("localhost"), port: endpointPort)- //let endpoint = NWEndpoint.hostPort(host: NWEndpoint.Host("127.0.0.1"), port: endpointPort)- //let endpoint = NWEndpoint.service(name: name, type: "_altid._tcp.", domain: "local.", interface: nil)
+ self.endpoint = NWEndpoint.hostPort(host: host, port: port)
connection = NWConnection(to: endpoint, using: applicationServiceParameters())
}
- func addHandle(handle: Handle) {+ public func addHandle(handle: Handle) {handles.append(handle)
}
- func cancel() {+ public func cancel() { if let connection = self.connection {connection.cancel()
self.connection = nil
@@ -80,7 +77,7 @@
// Handle starting the peer-to-peer connection for both inbound and outbound connections.
@available(macOS 10.15, *)
- func startConnection() {+ public func startConnection() { guard let connection = self.connection else {return
}
@@ -98,10 +95,7 @@
if let initiated = self?.initiatedConnection,
initiated && error == NWError.posix(.ECONNABORTED) {// Reconnect if the user suspends the app on the nearby device.
- guard let endpointPort = NWEndpoint.Port("12345") else { return }- let endpoint = NWEndpoint.hostPort(host: NWEndpoint.Host("192.168.0.248"), port: endpointPort)- //let endpoint = NWEndpoint.service(name: self!.name, type: "_altid._tcp", domain: "local", interface: nil)
- let connection = NWConnection(to: endpoint, using: applicationServiceParameters())
+ let connection = NWConnection(to: self!.endpoint, using: applicationServiceParameters())
self?.connection = connection
self?.startConnection()
} else if let delegate = self?.delegate {@@ -118,7 +112,7 @@
/* Utility functions */
@available(macOS 10.15, *)
-extension PeerConnection {+public extension PeerConnection { func connect(uname: String = "") {send(Tversion())
send(Tattach(fid: 0, afid: 0, uname: uname, aname: ""))
--- a/Sources/NineSwift/Handle.swift
+++ b/Sources/NineSwift/Handle.swift
@@ -8,7 +8,7 @@
import Foundation
/* Handle to an open nine file */
-struct Handle {+public struct Handle {let name: String
var fid: UInt32
var iounit: UInt32
--- a/Sources/NineSwift/NineProtocol.swift
+++ b/Sources/NineSwift/NineProtocol.swift
@@ -8,10 +8,10 @@
import Foundation
import Network
-var MSIZE: UInt32 = 8192
+public var MSIZE: UInt32 = 8192
let version = "9P2000 ".data(using: .utf8)!
-enum NineErrors: Error {+public enum NineErrors: Error {case decodeError
case unknownType
case connectError
@@ -18,7 +18,7 @@
case success
}
-enum nineType: UInt8 {+public enum nineType: UInt8 {case Tversion = 100
case Tauth = 102
case Tattach = 104
@@ -49,7 +49,7 @@
case invalid = 0
}
-enum fileType: UInt8, Codable {+public enum fileType: UInt8, Codable {case dir = 128
case append = 64
case excl = 32
@@ -59,7 +59,7 @@
case file = 0
}
-enum nineMode: UInt8, Codable {+public enum nineMode: UInt8, Codable {case read = 0
case write = 1
case rdwr = 2
@@ -68,13 +68,13 @@
case rclose = 0x40
}
-struct nineQid: Codable {+public struct nineQid: Codable {var type: fileType
var version: UInt32
var path: UInt64
}
-struct nineStat: Codable {+public struct nineStat: Codable {var size: UInt16
var type: UInt16
var dev: UInt32
@@ -91,17 +91,17 @@
// Main framing protocol
@available(macOS 10.15, *)
-class NineProtocol: NWProtocolFramerImplementation {+public class NineProtocol: NWProtocolFramerImplementation {static let definition = NWProtocolFramer.Definition(implementation: NineProtocol.self)
- static var label: String { return "9p" }+ public static var label: String { return "9p" }- required init(framer: NWProtocolFramer.Instance) {}- func start(framer: NWProtocolFramer.Instance) -> NWProtocolFramer.StartResult { return .ready }- func wakeup(framer: NWProtocolFramer.Instance) { print("In wakeup")}- func stop(framer: NWProtocolFramer.Instance) -> Bool { print("In stop"); return true }- func cleanup(framer: NWProtocolFramer.Instance) { print("In cleanup")}+ required public init(framer: NWProtocolFramer.Instance) {}+ public func start(framer: NWProtocolFramer.Instance) -> NWProtocolFramer.StartResult { return .ready }+ public func wakeup(framer: NWProtocolFramer.Instance) { print("In wakeup")}+ public func stop(framer: NWProtocolFramer.Instance) -> Bool { print("In stop"); return true }+ public func cleanup(framer: NWProtocolFramer.Instance) { print("In cleanup")}- func handleOutput(framer: NWProtocolFramer.Instance, message: NWProtocolFramer.Message, messageLength: Int, isComplete: Bool) {+ public func handleOutput(framer: NWProtocolFramer.Instance, message: NWProtocolFramer.Message, messageLength: Int, isComplete: Bool) { do {try framer.writeOutputNoCopy(length: messageLength)
} catch {@@ -109,7 +109,7 @@
}
}
- func handleInput(framer: NWProtocolFramer.Instance) -> Int {+ public func handleInput(framer: NWProtocolFramer.Instance) -> Int {let headerSize = 7
var count: UInt32 = 0
var type: UInt8 = 0
@@ -301,7 +301,7 @@
}
@available(macOS 10.15, *)
-extension NWProtocolFramer.Message {+public extension NWProtocolFramer.Message {/* Set completions here */
convenience init(count: UInt32, type: UInt8, tag: UInt16, fid: UInt32 = 0, iounit: UInt32 = 0, qids: [nineQid]? = nil, stat: nineStat? = nil) {self.init(definition: NineProtocol.definition)
@@ -379,10 +379,10 @@
}
@available(macOS 10.15, *)
-struct Tversion: QueueableMessage, Encodable {- var minReceiveLength: Int = 13
+public struct Tversion: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 13
- var encodedData: Data {+ public var encodedData: Data {let count: UInt32 = UInt32(13 + version.count)
var data = Data(count: 0)
w32(&data, input: count) // length
@@ -393,14 +393,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Tversion")
}
}
@available(macOS 10.15, *)
-struct Tauth: QueueableMessage, Encodable {- var minReceiveLength: Int = 20
+public struct Tauth: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 20
let length: UInt32
let afid: UInt32
@@ -416,7 +416,7 @@
self.aname = aname.data(using: .utf8)!
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: length)
w8(&data, input: nineType.Tauth.rawValue)
@@ -427,14 +427,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Tauth")
}
}
@available(macOS 10.15, *)
-struct Tattach: QueueableMessage, Encodable {- var minReceiveLength: Int = 20
+public struct Tattach: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 20
let length: UInt32
let fid: UInt32
@@ -452,7 +452,7 @@
self.aname = aname.data(using: .utf8)!
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: length)
w8(&data, input: nineType.Tattach.rawValue)
@@ -464,14 +464,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Tattach")
}
}
@available(macOS 10.15, *)
-struct Tflush: QueueableMessage, Encodable {- var minReceiveLength: Int = 7
+public struct Tflush: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 7
let tag: UInt16
let oldtag: UInt16
@@ -480,7 +480,7 @@
self.oldtag = oldtag
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: 11)
w8(&data, input: nineType.Tflush.rawValue)
@@ -489,14 +489,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Tflush")
}
}
@available(macOS 10.15, *)
-struct Twalk: QueueableMessage, Encodable {- var minReceiveLength: Int = 22
+public struct Twalk: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 22
let length: UInt32
let tag: UInt16
@@ -521,7 +521,7 @@
self.wnames = tmpwnames
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: length)
w8(&data, input: nineType.Twalk.rawValue)
@@ -535,14 +535,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Twalk")
}
}
@available(macOS 10.15, *)
-struct Topen: QueueableMessage, Encodable {- var minReceiveLength: Int = 24
+public struct Topen: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 24
let tag: UInt16
let fid: UInt32
@@ -554,7 +554,7 @@
self.mode = mode
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: 4+1+2+4+1)
w8(&data, input: nineType.Topen.rawValue)
@@ -564,14 +564,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Topen")
}
}
@available(macOS 10.15, *)
-struct Tcreate: QueueableMessage, Encodable {- var minReceiveLength: Int = 24
+public struct Tcreate: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 24
let tag: UInt16
let fid: UInt32
@@ -587,7 +587,7 @@
self.mode = mode
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: UInt32(name.count + 16))
w8(&data, input: nineType.Tcreate.rawValue)
@@ -598,14 +598,14 @@
w8(&data, input: mode)
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Tcreate")
}
}
@available(macOS 10.15, *)
-struct Tread: QueueableMessage, Encodable {- var minReceiveLength: Int = 13
+public struct Tread: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 13
let tag: UInt16
let fid: UInt32
@@ -619,7 +619,7 @@
self.count = count
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: 4+1+2+4+8+4)
w8(&data, input: nineType.Tread.rawValue)
@@ -630,14 +630,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Tread")
}
}
@available(macOS 10.15, *)
-struct Twrite: QueueableMessage, Encodable {- var minReceiveLength: Int = 11
+public struct Twrite: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 11
let tag: UInt16
let fid: UInt32
@@ -653,7 +653,7 @@
self.bytes = bytes
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: UInt32(bytes.count + 23))
w8(&data, input: nineType.Twrite.rawValue)
@@ -664,14 +664,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Twrite")
}
}
@available(macOS 10.15, *)
-struct Tclunk: QueueableMessage, Encodable {- var minReceiveLength: Int = 7
+public struct Tclunk: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 7
let tag: UInt16
let fid: UInt32
@@ -680,7 +680,7 @@
self.fid = fid
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: 11)
w8(&data, input: nineType.Tclunk.rawValue)
@@ -689,14 +689,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Tclunk")
}
}
@available(macOS 10.15, *)
-struct Tremove: QueueableMessage, Encodable {- var minReceiveLength: Int = 7
+public struct Tremove: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 7
let tag: UInt16
let fid: UInt32
@@ -705,7 +705,7 @@
self.fid = fid
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: 11)
w8(&data, input: nineType.Tremove.rawValue)
@@ -714,14 +714,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Tremove")
}
}
@available(macOS 10.15, *)
-struct Tstat: QueueableMessage, Encodable {- var minReceiveLength: Int = 52
+public struct Tstat: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 52
let tag: UInt16
let fid: UInt32
@@ -730,7 +730,7 @@
self.fid = fid
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
w32(&data, input: 11)
w8(&data, input: nineType.Tstat.rawValue)
@@ -739,14 +739,14 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Tstat")
}
}
@available(macOS 10.15, *)
-struct Twstat: QueueableMessage, Encodable {- var minReceiveLength: Int = 7
+public struct Twstat: QueueableMessage, Encodable {+ public var minReceiveLength: Int = 7
let tag: UInt16
let fid: UInt32
@@ -758,7 +758,7 @@
self.stat = stat
}
- var encodedData: Data {+ public var encodedData: Data {var data = Data(count: 0)
let length = 52 + stat.name.count + stat.uid.count + stat.gid.count + stat.muid.count
w32(&data, input: UInt32(length))
@@ -783,7 +783,7 @@
return data
}
- var context: NWConnection.ContentContext {+ public var context: NWConnection.ContentContext {return NWConnection.ContentContext(identifier: "Twstat")
}
}
@@ -917,7 +917,7 @@
return nineQid(type: fileType(rawValue: type) ?? .invalid, version: vers, path: path)
}
-extension Data {+private extension Data {public var bytes: [UInt8]
{return [UInt8](self)
@@ -924,7 +924,7 @@
}
}
-extension UInt8 {+private extension UInt8 { var char: Character {return Character(UnicodeScalar(self))
}
--- a/Sources/NineSwift/Queue.swift
+++ b/Sources/NineSwift/Queue.swift
@@ -7,7 +7,7 @@
import Foundation
import Network
-struct Queue<T> {+public struct Queue<T> {private var elements: [T] = []
mutating func enqueue(_ value: T) {@@ -29,7 +29,7 @@
}
@available(macOS 10.15, *)
-protocol QueueableMessage {+public protocol QueueableMessage { var encodedData: Data {get} var minReceiveLength: Int {get} var context: NWConnection.ContentContext {get}@@ -36,7 +36,7 @@
}
@available(macOS 10.15, *)
-struct Enqueued {+public struct Enqueued {let message: QueueableMessage
let action: (NWProtocolFramer.Message, Data?, NWError?) -> Void
init(message: QueueableMessage, action: @escaping (NWProtocolFramer.Message, Data?, NWError?) -> Void) {--
⑨