Code Monkey home page Code Monkey logo

bluesocket's Introduction

APIDoc Build Status - Master macOS iOS Linux Apache 2 Slack Status

BlueSocket

Socket framework for Swift using the Swift Package Manager. Works on iOS, macOS, and Linux.

Prerequisites

Swift

  • Swift Open Source swift-5.1-RELEASE toolchain (Minimum REQUIRED for latest release)
  • Swift Open Source swift-5.4-RELEASE toolchain (Recommended)
  • Swift toolchain included in Xcode Version 11.0 or higher.

macOS

  • macOS 10.14.6 (Mojave) or higher.
  • Xcode Version 11.0 or higher using one of the above toolchains.
  • Xcode Version 12.5 or higher using the included toolchain (Recommended).
  • Secure Transport is provided by macOS.

iOS

  • iOS 10.0 or higher
  • Xcode Version 11.0 or higher using one of the above toolchains.
  • Xcode Version 12.5 or higher using the included toolchain (Recommended).

Note:

If creating a UDP server on iOS, you may need to follow a few steps:

Linux

  • Ubuntu 16.04 or 18.04
  • One of the Swift Open Source toolchains listed above.

Other Platforms

  • BlueSocket is NOT supported on watchOS since POSIX/BSD/Darwin sockets are not supported on the actual device although they are supported in the simulator.
  • BlueSocket should work on tvOS but has NOT been tested.

Add-ins

  • BlueSSLService can be used to add SSL/TLS support.
    • If using this package, please note that the libssl-dev package is required to be installed when building on Linux.

Build

To build Socket from the command line:

% cd <path-to-clone>
% swift build

Testing

To run the supplied unit tests for Socket from the command line:

% cd <path-to-clone>
% swift build
% swift test

Using BlueSocket

Including in your project

Swift Package Manager

To include BlueSocket into a Swift Package Manager package, add it to the dependencies attribute defined in your Package.swift file. You can select the version using the majorVersion and minor parameters. For example:

	dependencies: [
		.Package(url: "https://github.com/Kitura/BlueSocket.git", majorVersion: <majorVersion>, minor: <minor>)
	]

Carthage

To include BlueSocket in a project using Carthage, add a line to your Cartfile with the GitHub organization and project names and version. For example:

	github "Kitura/BlueSocket" ~> <majorVersion>.<minor>

CocoaPods

To include BlueSocket in a project using CocoaPods, you just add BlueSocket to your Podfile, for example:

    platform :ios, '10.0'

    target 'MyApp' do
        use_frameworks!
        pod 'BlueSocket'
    end

Before starting

The first thing you need to do is import the Socket framework. This is done by the following:

import Socket

Family, Type and Protocol Support

BlueSocket supports the following families, types and protocols:

  • Families:
    • IPV4: Socket.ProtocolFamily.inet
    • IPV6: Socket.ProtocolFamily.inet6
    • UNIX: Socket.ProtocolFamily.unix
  • Types:
    • Stream: Socket.SocketType.stream
    • Datagram: Socket.SocketType.datagram
  • Protocols:
    • TCP: Socket.SocketProtocol.tcp
    • UDP: Socket.SocketProtocol.udp
    • UNIX: Socket.SocketProtocol.unix

Creating a socket.

BlueSocket provides four different factory methods that are used to create an instance. These are:

  • create() - This creates a fully configured default socket. A default socket is created with family: .inet, type: .stream, and proto: .tcp.
  • create(family family: ProtocolFamily, type: SocketType, proto: SocketProtocol) - This API allows you to create a configured Socket instance customized for your needs. You can customize the protocol family, socket type and socket protocol.
  • create(connectedUsing signature: Signature) - This API will allow you create a Socket instance and have it attempt to connect to a server based on the information you pass in the Socket.Signature.
  • create(fromNativeHandle nativeHandle: Int32, address: Address?) - This API lets you wrap a native file descriptor describing an existing socket in a new instance of Socket.

Setting the read buffer size.

BlueSocket allows you to set the size of the read buffer that it will use. Then, depending on the needs of the application, you can change it to a higher or lower value. The default is set to Socket.SOCKET_DEFAULT_READ_BUFFER_SIZE which has a value of 4096. The minimum read buffer size is Socket.SOCKET_MINIMUM_READ_BUFFER_SIZE which is set to 1024. Below illustrates how to change the read buffer size (exception handling omitted for brevity):

let mySocket = try Socket.create()
mySocket.readBufferSize = 32768

The example above sets the default read buffer size to 32768. This setting should be done prior to using the Socket instance for the first time.

Closing a socket.

To close the socket of an open instance, the following function is provided:

  • close() - This function will perform the necessary tasks in order to cleanly close an open socket.

Listen on a socket (TCP/UNIX).

To use BlueSocket to listen for a connection on a socket the following API is provided:

  • listen(on port: Int, maxBacklogSize: Int = Socket.SOCKET_DEFAULT_MAX_BACKLOG, allowPortReuse: Bool = true, node: String? = nil) The first parameter port, is the port to be used to listen on. The second parameter, maxBacklogSize allows you to set the size of the queue holding pending connections. The function will determine the appropriate socket configuration based on the port specified. For convenience on macOS, the constant Socket.SOCKET_MAX_DARWIN_BACKLOG can be set to use the maximum allowed backlog size. The default value for all platforms is Socket.SOCKET_DEFAULT_MAX_BACKLOG, currently set to 50. For server use, it may be necessary to increase this value. To allow the reuse of the listening port, set allowPortReuse to true. If set to false, a error will occur if you attempt to listen on a port already in use. The DEFAULT behavior is to allow port reuse. The last parameter, node, can be used to listen on a specific address. The value passed is an optional String containing the numerical network address (for IPv4, numbers and dots notation, for iPv6, hexidecimal strting). The DEFAULT behavior is to search for an appropriate interface. If node is improperly formatted a SOCKET_ERR_GETADDRINFO_FAILED error will be returned. If node is properly formatted but the address specified is not available, a SOCKET_ERR_BIND_FAILED will be returned.
  • listen(on path: String, maxBacklogSize: Int = Socket.SOCKET_DEFAULT_MAX_BACKLOG) This API can only be used with the .unix protocol family. The first parameter path, is the path to be used to listen on. The second parameter, maxBacklogSize allows you to set the size of the queue holding pending connections. The function will determine the appropriate socket configuration based on the port specified. For convenience on macOS, the constant Socket.SOCKET_MAX_DARWIN_BACKLOG can be set to use the maximum allowed backlog size. The default value for all platforms is Socket.SOCKET_DEFAULT_MAX_BACKLOG, currently set to 50. For server use, it may be necessary to increase this value.

Example:

The following example creates a default Socket instance and then immediately starts listening on port 1337. Note: Exception handling omitted for brevity, see the complete example below for an example of exception handling.

var socket = try Socket.create()
try socket.listen(on: 1337)

Accepting a connection from a listening socket (TCP/UNIX).

When a listening socket detects an incoming connection request, control is returned to your program. You can then either accept the connection or continue listening or both if your application is multi-threaded. BlueSocket supports two distinct ways of accepting an incoming connection. They are:

  • acceptClientConnection(invokeDelegate: Bool = true) - This function accepts the connection and returns a new Socket instance based on the newly connected socket. The instance that was listening in unaffected. If invokeDelegate is false and the Socket has an SSLService delegate attached, you MUST call the invokeDelegateOnAccept method using the Socket instance that is returned by this function.
  • invokeDelegateOnAccept(for newSocket: Socket) - If the Socket instance has a SSLService delegate, this will invoke the delegates accept function to perform SSL negotiation. It should be called with the Socket instance returned by acceptClientConnection. This function will throw an exception if called with the wrong Socket instance, called multiple times, or if the Socket instance does NOT have a SSLService delegate.
  • acceptConnection() - This function accepts the incoming connection, replacing and closing the existing listening socket. The properties that were formerly associated with the listening socket are replaced by the properties that are relevant to the newly connected socket.

Connecting a socket to a server (TCP/UNIX).

In addition to the create(connectedUsing:) factory method described above, BlueSocket supports three additional instance functions for connecting a Socket instance to a server. They are:

  • connect(to host: String, port: Int32, timeout: UInt = 0) - This API allows you to connect to a server based on the hostname and port you provide. Note: an exception will be thrown by this function if the value of port is not in the range 1-65535. Optionally, you can set timeout to the number of milliseconds to wait for the connect. Note: If the socket is in blocking mode it will be changed to non-blocking mode temporarily if a timeout greater than zero (0) is provided. The returned socket will be set back to its original setting (blocking or non-blocking). If the socket is set to non-blocking and no timeout value is provided, an exception will be thrown. Alternatively, you can set the socket to non-blocking after successfully connecting.
  • connect(to path: String) - This API can only be used with the .unix protocol family. It allows you to connect to a server based on the path you provide.
  • connect(using signature: Signature) - This API allows you specify the connection information by providing a Socket.Signature instance containing the information. Refer to Socket.Signature in Socket.swift for more information.

Reading data from a socket (TCP/UNIX).

BlueSocket supports four different ways to read data from a socket. These are (in recommended use order):

  • read(into data: inout Data) - This function reads all the data available on a socket and returns it in the Data object that was passed.
  • read(into data: NSMutableData) - This function reads all the data available on a socket and returns it in the NSMutableData object that was passed.
  • readString() - This function reads all the data available on a socket and returns it as an String. A nil is returned if no data is available for reading.
  • read(into buffer: UnsafeMutablePointer<CChar>, bufSize: Int, truncate: Bool = false) - This function allows you to read data into a buffer of a specified size by providing an unsafe pointer to that buffer and an integer the denotes the size of that buffer. This API (in addition to other types of exceptions) will throw a Socket.SOCKET_ERR_RECV_BUFFER_TOO_SMALL if the buffer provided is too small, unless truncate = true in which case the socket will act as if only bufSize bytes were read (unretrieved bytes will be returned in the next call). If truncate = false, you will need to call again with proper buffer size (see Error.bufferSizeNeededin Socket.swift for more information).
  • Note: All of the read APIs above except readString() can return zero (0). This can indicate that the remote connection was closed or it could indicate that the socket would block (assuming you've turned off blocking). To differentiate between the two, the property remoteConnectionClosed can be checked. If true, the socket remote partner has closed the connection and this Socket instance should be closed.

Writing data to a Socket (TCP/UNIX).

In addition to reading from a socket, BlueSocket also supplies four methods for writing data to a socket. These are (in recommended use order):

  • write(from data: Data) - This function writes the data contained within the Data object to the socket.
  • write(from data: NSData) - This function writes the data contained within the NSData object to the socket.
  • write(from string: String) - This function writes the data contained in the String provided to the socket.
  • write(from buffer: UnsafeRawPointer, bufSize: Int) - This function writes the data contained within the buffer of the specified size by providing an unsafe pointer to that buffer and an integer that denotes the size of that buffer.

Listening for a datagram message (UDP).

BlueSocket supports three different ways to listen for incoming datagrams. These are (in recommended use order):

  • listen(forMessage data: inout Data, on port: Int, maxBacklogSize: Int = Socket.SOCKET_DEFAULT_MAX_BACKLOG) - This function listens for an incoming datagram, reads it and returns it in the passed Data object. It returns a tuple containing the number of bytes read and the Address of where the data originated.
  • listen(forMessage data: NSMutableData, on port: Int, maxBacklogSize: Int = Socket.SOCKET_DEFAULT_MAX_BACKLOG) - This function listens for an incoming datagram, reads it and returns it in the passed NSMutableData object. It returns a tuple containing the number of bytes read and the Address of where the data originated.
  • listen(forMessage buffer: UnsafeMutablePointer<CChar>, bufSize: Int, on port: Int, maxBacklogSize: Int = Socket.SOCKET_DEFAULT_MAX_BACKLOG) - This function listens for an incoming datagram, reads it and returns it in the passed Data object. It returns a tuple containing the number of bytes read and the Address of where the data originated.
  • Note 1: These functions will determine the appropriate socket configuration based on the port specified. Setting the value of port to zero (0) will cause the function to determine a suitable free port.
  • Note 2: The parameter, maxBacklogSize allows you to set the size of the queue holding pending connections. The function will determine the appropriate socket configuration based on the port specified. For convenience on macOS, the constant Socket.SOCKET_MAX_DARWIN_BACKLOG can be set to use the maximum allowed backlog size. The default value for all platforms is Socket.SOCKET_DEFAULT_MAX_BACKLOG, currently set to 50. For server use, it may be necessary to increase this value.

Reading a datagram (UDP).

BlueSocket supports three different ways to read incoming datagrams. These are (in recommended use order):

  • readDatagram(into data: inout Data) - This function reads an incoming datagram and returns it in the passed Data object. It returns a tuple containing the number of bytes read and the Address of where the data originated.
  • readDatagram(into data: NSMutableData) - This function reads an incoming datagram and returns it in the passed NSMutableData object. It returns a tuple containing the number of bytes read and the Address of where the data originated.
  • readDatagram(into buffer: UnsafeMutablePointer<CChar>, bufSize: Int) - This function reads an incoming datagram and returns it in the passed Data object. It returns a tuple containing the number of bytes read and the Address of where the data originated. If the amount of data read is more than bufSize only bufSize will be returned. The remainder of the data read will be discarded.

Writing a datagram (UDP).

BlueSocket also supplies four methods for writing datagrams to a socket. These are (in recommended use order):

  • write(from data: Data, to address: Address) - This function writes the datagram contained within the Data object to the socket.
  • write(from data: NSData, to address: Address) - This function writes the datagram contained within the NSData object to the socket.
  • write(from string: String, to address: Address) - This function writes the datagram contained in the String provided to the socket.
  • write(from buffer: UnsafeRawPointer, bufSize: Int, to address: Address) - This function writes the data contained within the buffer of the specified size by providing an unsafe pointer to that buffer and an integer that denotes the size of that buffer.
  • Note: In all four of the APIs above, the address parameter represents the address for the destination you are sending the datagram to.

IMPORTANT NOTE about NSData and NSMutableData

The read and write APIs above that use either NSData or NSMutableData will probably be deprecated in the not so distant future.

Miscellaneous Utility Functions

  • hostnameAndPort(from address: Address) - This class function provides a means to extract the hostname and port from a given Socket.Address. On successful completion, a tuple containing the hostname and port are returned.
  • checkStatus(for sockets: [Socket]) - This class function allows you to check status of an array of Socket instances. Upon completion, a tuple containing two Socket arrays is returned. The first array contains the Socket instances are that have data available to be read and the second array contains Socket instances that can be written to. This API does not block. It will check the status of each Socket instance and then return the results.
  • wait(for sockets: [Socket], timeout: UInt, waitForever: Bool = false) - This class function allows for monitoring an array of Socket instances, waiting for either a timeout to occur or data to be readable at one of the monitored Socket instances. If a timeout of zero (0) is specified, this API will check each socket and return immediately. Otherwise, it will wait until either the timeout expires or data is readable from one or more of the monitored Socket instances. If a timeout occurs, this API will return nil. If data is available on one or more of the monitored Socket instances, those instances will be returned in an array. If the waitForever flag is set to true, the function will wait indefinitely for data to become available regardless of the timeout value specified.
  • createAddress(host: String, port: Int32) - This class function allows for the creation of Address enum given a host and port. On success, this function returns an Address or nil if the host specified doesn't exist.
  • isReadableOrWritable(waitForever: Bool = false, timeout: UInt = 0) - This instance function allows to determine whether a Socket instance is readable and/or writable. A tuple is returned containing two Bool values. The first, if true, indicates the Socket instance has data to read, the second, if true, indicates that the Socket instance can be written to. waitForever if true, causes this routine to wait until the Socket is either readable or writable or an error occurs. If false, the timeout parameter specifies how long to wait. If a value of zero (0) is specified for the timeout value, this function will check the current status and immediately return. This function returns a tuple containing two booleans, the first readable and the second, writable. They are set to true if the Socket is either readable or writable repsectively. If neither is set to true, a timeout has occurred. Note: If you're attempting to write to a newly connected Socket, you should ensure that it's writable before attempting the operation.
  • setBlocking(shouldBlock: Bool) - This instance function allows you control whether or not this Socket instance should be placed in blocking mode or not. Note: All Socket instances are, by default, created in blocking mode.
  • setReadTimeout(value: UInt = 0) - This instance function allows you to set a timeout for read operations. value is a UInt the specifies the time for the read operation to wait before returning. In the event of a timeout, the read operation will return 0 bytes read and errno will be set to EAGAIN.
  • setWriteTimeout(value: UInt = 0) - This instance function allows you to set a timeout for write operations. value is a UInt the specifies the time for the write operation to wait before returning. In the event of a timeout, the write operation will return 0 bytes written and errno will be set to EAGAIN for TCP and UNIX sockets, for UDP, the write operation will succeed regardless of the timeout value.
  • udpBroadcast(enable: Bool) - This instance function is used to enable broadcast mode on a UDP socket. Pass true to enable broadcast, false to disable. This function will throw an exception if the Socket instance is not a UDP socket.

Complete Example

The following example shows how to create a relatively simple multi-threaded echo server using the new GCD based Dispatch API. What follows is code for a simple echo server that once running, can be accessed via telnet ::1 1337.

import Foundation
import Socket
import Dispatch

class EchoServer {
	
	static let quitCommand: String = "QUIT"
	static let shutdownCommand: String = "SHUTDOWN"
	static let bufferSize = 4096
	
	let port: Int
	var listenSocket: Socket? = nil
	var continueRunningValue = true
	var connectedSockets = [Int32: Socket]()
	let socketLockQueue = DispatchQueue(label: "com.kitura.serverSwift.socketLockQueue")
	var continueRunning: Bool {
		set(newValue) {
			socketLockQueue.sync {
				self.continueRunningValue = newValue
			}
		}
		get {
			return socketLockQueue.sync {
				self.continueRunningValue
			}
		}
	}

	init(port: Int) {
		self.port = port
	}
	
	deinit {
		// Close all open sockets...
		for socket in connectedSockets.values {
			socket.close()
		}
		self.listenSocket?.close()
	}
	
	func run() {
		
		let queue = DispatchQueue.global(qos: .userInteractive)
		
		queue.async { [unowned self] in
			
			do {
				// Create an IPV6 socket...
				try self.listenSocket = Socket.create(family: .inet6)
				
				guard let socket = self.listenSocket else {
					
					print("Unable to unwrap socket...")
					return
				}
				
				try socket.listen(on: self.port)
				
				print("Listening on port: \(socket.listeningPort)")
				
				repeat {
					let newSocket = try socket.acceptClientConnection()
					
					print("Accepted connection from: \(newSocket.remoteHostname) on port \(newSocket.remotePort)")
					print("Socket Signature: \(String(describing: newSocket.signature?.description))")
					
					self.addNewConnection(socket: newSocket)
					
				} while self.continueRunning
				
			}
			catch let error {
				guard let socketError = error as? Socket.Error else {
					print("Unexpected error...")
					return
				}
				
				if self.continueRunning {
					
					print("Error reported:\n \(socketError.description)")
					
				}
			}
		}
		dispatchMain()
	}
	
	func addNewConnection(socket: Socket) {
		
		// Add the new socket to the list of connected sockets...
		socketLockQueue.sync { [unowned self, socket] in
			self.connectedSockets[socket.socketfd] = socket
		}
		
		// Get the global concurrent queue...
		let queue = DispatchQueue.global(qos: .default)
		
		// Create the run loop work item and dispatch to the default priority global queue...
		queue.async { [unowned self, socket] in
			
			var shouldKeepRunning = true
			
			var readData = Data(capacity: EchoServer.bufferSize)
			
			do {
				// Write the welcome string...
				try socket.write(from: "Hello, type 'QUIT' to end session\nor 'SHUTDOWN' to stop server.\n")
				
				repeat {
					let bytesRead = try socket.read(into: &readData)
					
					if bytesRead > 0 {
						guard let response = String(data: readData, encoding: .utf8) else {
							
							print("Error decoding response...")
							readData.count = 0
							break
						}
						if response.hasPrefix(EchoServer.shutdownCommand) {
							
							print("Shutdown requested by connection at \(socket.remoteHostname):\(socket.remotePort)")
							
							// Shut things down...
							self.shutdownServer()
							
							return
						}
						print("Server received from connection at \(socket.remoteHostname):\(socket.remotePort): \(response) ")
						let reply = "Server response: \n\(response)\n"
						try socket.write(from: reply)
						
						if (response.uppercased().hasPrefix(EchoServer.quitCommand) || response.uppercased().hasPrefix(EchoServer.shutdownCommand)) &&
							(!response.hasPrefix(EchoServer.quitCommand) && !response.hasPrefix(EchoServer.shutdownCommand)) {
							
							try socket.write(from: "If you want to QUIT or SHUTDOWN, please type the name in all caps. 😃\n")
						}
						
						if response.hasPrefix(EchoServer.quitCommand) || response.hasSuffix(EchoServer.quitCommand) {
							
							shouldKeepRunning = false
						}
					}
					
					if bytesRead == 0 {
						
						shouldKeepRunning = false
						break
					}
					
					readData.count = 0
					
				} while shouldKeepRunning
				
				print("Socket: \(socket.remoteHostname):\(socket.remotePort) closed...")
				socket.close()
				
				self.socketLockQueue.sync { [unowned self, socket] in
					self.connectedSockets[socket.socketfd] = nil
				}
				
			}
			catch let error {
				guard let socketError = error as? Socket.Error else {
					print("Unexpected error by connection at \(socket.remoteHostname):\(socket.remotePort)...")
					return
				}
				if self.continueRunning {
					print("Error reported by connection at \(socket.remoteHostname):\(socket.remotePort):\n \(socketError.description)")
				}
			}
		}
	}
	
	func shutdownServer() {
		print("\nShutdown in progress...")

		self.continueRunning = false
		
		// Close all open sockets...
		for socket in connectedSockets.values {
			
			self.socketLockQueue.sync { [unowned self, socket] in
				self.connectedSockets[socket.socketfd] = nil
				socket.close()
			}
		}
		
		DispatchQueue.main.sync {
			exit(0)
		}
	}
}

let port = 1337
let server = EchoServer(port: port)
print("Swift Echo Server Sample")
print("Connect with a command line window by entering 'telnet ::1 \(port)'")

server.run()

This server can be built by specifying the following Package.swift file using Swift 4.

import PackageDescription

let package = Package(
	name: "EchoServer",
	dependencies: [
		.package(url: "https://github.com/Kitura/BlueSocket.git", from:"1.0.8"),
	],
	targets: [
	.target(
		name: "EchoServer",
		dependencies: [
			"Socket"
		]),
	]
)

Or if you are still using Swift 3, by specifying the following Package.swift file.

import PackageDescription

let package = Package(
	name: "EchoServer",
	dependencies: [
	.Package(url: "https://github.com/Kitura/BlueSocket.git", majorVersion: 1, minor: 0),
	],
	exclude: ["EchoServer.xcodeproj"]
)

The following command sequence will build and run the echo server on Linux. If running on macOS or with any toolchain NEWER than the 8/18 toolchain, you can omit the -Xcc -fblocks switch as it's no longer needed.

$ swift build -Xcc -fblocks
$ .build/debug/EchoServer
Swift Echo Server Sample
Connect with a command line window by entering 'telnet ::1 1337'
Listening on port: 1337

Community

We love to talk server-side Swift and Kitura. Join our Slack to meet the team!

License

This library is licensed under Apache 2.0. Full license text is available in LICENSE.

bluesocket's People

Contributors

alanquatermain avatar bdhernand avatar billabt avatar bouke avatar dannys42 avatar djones6 avatar dsperling avatar helenmasters avatar ianpartridge avatar jumhyn avatar kweinmeister avatar kyemaloy97 avatar levivic avatar mbarnach avatar mcfedr avatar mna avatar niklassaers avatar piyushchauhan2011 avatar quanvo87 avatar rfdickerson avatar shihabmehboob avatar shmuelk avatar skreutzberger avatar tfrank64 avatar tnakaike avatar vadimeisenbergibm avatar yassineimounachen avatar ymesika avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bluesocket's Issues

Do not use SO_REUSEPORT on WSL

In PR #61 (e639a3f), use of the SO_REUSEPORT socket option was added. This however causes issues on Windows Subsystem for Linux (WSL), which does not (and will likely never) support SO_REUSEPORT.

Strace shows the following:

setsockopt(15, SOL_SOCKET, SO_REUSEPORT, [1], 4) = -1 ENOPROTOOPT (Protocol not available)

By the way, SO_REUSEADDR works without issue on WSL:

setsockopt(15, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0

Please consider adding a way to disable the use of SO_REUSEPORT, or do not fail with an exception (but rather silently) when the call to setsockopt fails with ENOPROTOOPT (at least on Linux). Unfortunately it is not possible to detect WSL at compile-time, as the userland is actually Ubuntu (or other Linux). A third option would be to perform detection at runtime (or perform some other check to see whether SO_REUSEPORT is available) but then again, that is probably more complicated than simply ignoring an ENOPROTOOPT error.

SO_REUSEPORT could lead to accidental port sharing

I just discovered that I am allowed to start multiple instances of Kitura on the same port, without error (and in fact, on Linux, requests get distributed across them). This is due to SO_REUSEPORT which is set on by default since PR #61 .

The PR implies it was targeting sharing only for UDP ports, but this affects all listeners. I wonder if this was intentional?

Prior to this change Kitura would have failed to start with a message like:

[2017-10-11T15:32:38.010Z] [ERROR] [Kitura.swift:91 start()] Error listening on port 8080: Error code: -9992(0x-2708), Address already in use. Use server.failed(callback:) to handle

...however now that SO_REUSEPORT is set, this will no longer happen.

This led to me accidentally running two unrelated Kitura processes on the same port and getting some very confusing behaviour. I can appreciate the usefulness of this option, but I'd think it would be safer as an opt-in - perhaps an optional flag to listen() - rather than a default, since it's rather easy to accidentally leave an old instance of a server running otherwise.

UNIX domain scoket file is removed on closing client socket.

After accepting and closing a client socket, the request cannot reach the server anymore with a new client socket.

The socket file seems to be removed on closing not only server socket but client socket:
https://github.com/IBM-Swift/BlueSocket/blob/0.12.21/Sources/Socket.swift#L3230-L3236

Sources and commands to reproduce are as follow:

Server(Swift 3.0.2, BlueSocket 0.12.21)

import Foundation
import Socket

let socketPath: String = // same as $SOCKET_PATH

let serverSocket = try! Socket.create(family: .unix, type: .stream, proto: .unix)
try! serverSocket.listen(on: socketPath)

while true {
    let clientSocket = try! serverSocket.acceptClientConnection()
    defer { clientSocket.close() }
    var data = Data()
    try! clientSocket.read(into: &data)
    print(String(data: data, encoding: .utf8)!)
    try! clientSocket.write(from: "world!\n")
}

Client(Bash)

$ echo 'Hello, ' | nc -U $SOCKET_PATH # OK.
$ echo 'Hello, ' | nc -U $SOCKET_PATH # Same as above but the server cannot accepts this (The request cannot reach the server).

Thanks.

UDP support

UDP support would be great for streaming of data like sound and video.

Inheriting BlueSocket

Is there a reason that the Socket-Class is not open, so that we can use it as a Superclass?

Nit-picking

Looking at the source code, there's a tiny inconsistency between what the guard statement on line 938 does and what the following error message says.

(Are you interested in receiving this kind of information?)

Max port number is limited to 32767

Why the type of port number is Int32 in the signature of Socket.createAddress?
TCP port range is 1-65535 so ports above 32767 cannot be addressed.
I suppose UInt32 type would fix it pretty easily.

Two issues with Socket.wait()

Hi there,

I've been doing some work on the Kitura project and in sketching out some ideas for performance optimizations I've found what I think are a couple of issues / improvements to be made to Socket.wait():

First:

In the wait() function a time is initialized:

var timer = timeval()

Some code following this computes a time based on the timeout UInt that gets passed to wait() in the event that timeout is greater than 0.

If, however, you pass 0 as a timeout (to NOT use a timeout at all and just select() forever), the result is that select() instantly returns as the timer fires immediately.

So I would suggest modifying this line:

let count = select(highSocketfd + 1, &readfds, nil, nil, &timer)

With some code that passes nil in place of &timer in the event that a 0 timeout is passed to the wait() function.

Secondly:

At the start of wait() the sockets in the socket group are looped and any socket with an invalid descriptor causes an exception to throw. All good.

The problem is that each socket is also checked for "isConnected" and any sockets where isConnected = false also throw an exception.

This basically means you can't use wait() to monitor sockets that are both signalling that data is ready to be read AS WELL as listen() sockets waiting for connections (which are technically not connected).

So, I'd suggest changing this one piece of code:

if !socket.isConnected {                
   throw Error(code: Socket.SOCKET_ERR_NOT_CONNECTED, reason: nil)
}

To:

if !socket.isConnected && !socket.isListening {             
   throw Error(code: Socket.SOCKET_ERR_NOT_CONNECTED, reason: nil)
}

This would allow listen() sockets to be bundled in to the select(). Most helpful!

I'd open a PR but I'm knee deep in toolchain 2016-06-05 right now and I see BlueSocket is already tagged ahead to a 2016-06-20 dependency.

Add documentation to BlueSocket

As a developer who is finding out about BlueSocket for the first time, I would like to see usage examples of the main features so that I can understand what BlueSocket can do and also to help me become productive quickly.

UDP broadcast example

Is there any example usage available to demonstrate setting the socket options[if necessary] to allow for a UDP broadcast using the .write(from:,to:) command?

When I write to "192.168.1.255" I get a Udp write Error on a test network that allows broadcasts.

Question: GCD and multi-threading

Hope you have a moment to answer a newbie question - am completely new to Mac and iOS and Swift.

Was glad to find this project. Have looked at several other Swift projects for TCP but they're obsolete (written in older versions of Swift) or mix Objective-C with Swift or are overkill for my expected usage. Have now succeeded in building this project and running the test echo server program on a Mac.

My question: Am I correct in understanding that BlueSocket itself does not provide any multi-threading services at all - it is simply a wrapper for the Socket API in the operating system? And that GCD is used to provide multi-threading in the test echo server program?

Thanks.

Support Xcode 8 beta 3 fully

Building BlueSocket on Xcode 8 beta 3 gives these warnings:

/Users/ipartrid/Kitura-net/Packages/Socket-0.6.2/Sources/Socket.swift:621:29: warning: expected ',' joining parts of a multi-clause condition
                guard let sig = signature where isListening else {
                                          ^~~~~
                                          ,
/Users/ipartrid/Kitura-net/Packages/Socket-0.6.2/Sources/Socket.swift:645:29: warning: expected ',' joining parts of a multi-clause condition
                guard let sig = signature where sig.port != Socket.SOCKET_INVALID_PORT else {
                                          ^~~~~
                                          ,
/Users/ipartrid/Kitura-net/Packages/Socket-0.6.2/Sources/Socket.swift:1474:5: warning: expected ',' joining parts of a multi-clause condition
                                where signature.port != Socket.SOCKET_INVALID_PORT else {
                                ^~~~~
                                ,
/Users/ipartrid/Kitura-net/Packages/Socket-0.6.2/Sources/Socket.swift:1816:5: warning: expected ',' joining parts of a multi-clause condition
                                where rc > 0 else {
                                ^~~~~
                                ,
/Users/ipartrid/Kitura-net/Packages/Socket-0.6.2/Sources/Socket.swift:1824:5: warning: expected ',' joining parts of a multi-clause condition
                                where rc > 0 else {
                                ^~~~~
                                ,
/Users/ipartrid/Kitura-net/Packages/Socket-0.6.2/Sources/Socket.swift:1903:34: warning: expected ',' joining parts of a multi-clause condition
                guard let sig = self.signature where sig.proto == .udp else {
                                               ^~~~~
                                               ,
/Users/ipartrid/Kitura-net/Packages/Socket-0.6.2/Sources/Socket.swift:1940:34: warning: expected ',' joining parts of a multi-clause condition
                guard let sig = self.signature where sig.proto == .udp else {
                                               ^~~~~
                                               ,
/Users/ipartrid/Kitura-net/Packages/Socket-0.6.2/Sources/Socket.swift:2119:34: warning: expected ',' joining parts of a multi-clause condition
                guard let sig = self.signature where sig.proto == .udp else {
                                               ^~~~~
                                               ,
/Users/ipartrid/Kitura-net/Packages/Socket-0.6.2/Sources/Socket.swift:2142:34: warning: expected ',' joining parts of a multi-clause condition
                guard let sig = self.signature where sig.proto == .udp else {
                                               ^~~~~
                                               ,

Socket path corrupt?

When listening on a socket which includes a directory in the path, the socket name appears to be corrupted/truncated/something.

For example:

do {
    let listenSocket = try Socket.create(family: .unix)
    try listenSocket?.listen(on: "/tmp/ttipc.socket")
} catch {
   // ...
}

Results in the file:

➜  /tmp ls -al
srwxr-xr-x   1 ian   wheel    0 Dec 16 08:55 ttipc.soc?

Printing the directory contents in Swift yields the string: "ttipc.soc\u{01}"

Ultimately the client is unable to connect because it cannot find the socket.

However, if I first change to the /tmp directory before listening (using FileManager.default.changeCurrentDirectoryPath("/tmp") the socket is created as expected.

System:

  • iPhone 7 Simulator (10.2)
  • Xcode 8.2
  • Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
  • macOS 10.12.2

Bind UDP sockets to source port/address

I'd like to control the source port (and optionally, interface/IP address) of outbound UDP packets.

This can be achieved by using bind (2). It would be nice to have this as an additional API on the Socket class.

Unable to 'import Socket'

For some reason I am unable to 'import Socket.' I built and tested the BlueSocket-master. Am I missing something?

TCP/IP buffer size

This isn't an issue, it's just a request for advice.

I see you've set the default buffer size to 4 KB. I once wrote some TCP/IP I/O for C#, and I automatically assumed a buffer size of 64 KB would be best. But I don't really know. Do you know of any reasons why 4 KB or 64 KB is best or inadvisable? Thanks.

UDP read operations

Maybe I'm missing something, but I can't seem to seem to find a safe way to read from a UDP socket. I'm sending a message and getting a response, but if the server doesnt exist then on read it's locking up. I didn't see a safe way to check if there is data to be read. isReadableWriteable() throws an error so I'm assuming that doesn't work with UDP because there is no connection.

The point it stalls is when it calls Darwin.recvfrom(). Am I missing something? Should I just ping the server first or is there anything in bluesocket to test that for me?

No such module 'Socket'

I was unable to reopen the issue so I commented this on my old issue and created a new one.

Apologies, I had a holiday and was unable to use a computer. This is what I did, please tell me where I went wrong:

  1. Downloaded BlueSocket-master
  2. Downloaded Package-Builder-fc7294807d24955ab720212b57472a49a630d348
  3. Added Contents of Package-Builder-fc7294807d24955ab720212b57472a49a630d348 to BlueSocket-master/Package-Builder
  4. Entered Terminal
  5. Entered command: cd ~/Desktop/BlueSocket-master
  6. Entered command: swift build

(Output: Compile Swift Module 'Socket' (3 sources))

  1. Entered command: swift test

(Output: Compile Swift Module 'SocketTests' (1 sources)
Linking ./.build/debug/SocketPackageTests.xctest/Contents/MacOS/SocketPackageTests
Test Suite 'All tests' started at 2016-10-18 20:55:06.314
Test Suite 'SocketPackageTests.xctest' started at 2016-10-18 20:55:06.315
Test Suite 'SocketTests' started at 2016-10-18 20:55:06.315
Test Case '-[SocketTests.SocketTests testBlocking]' started.
Test Case '-[SocketTests.SocketTests testBlocking]' passed (0.004 seconds).
Test Case '-[SocketTests.SocketTests testConnect]' started.
Test Case '-[SocketTests.SocketTests testConnect]' passed (0.002 seconds).
Test Case '-[SocketTests.SocketTests testConnectPort0]' started.
Listener signature: Optional("Signature: family: inet, type: stream, protocol: tcp, address: Optional(Socket.Socket.Address.ipv4(__C.sockaddr_in(sin_len: 16, sin_family: 2, sin_port: 51164, sin_addr: __C.in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)))), hostname: Optional("0.0.0.0"), port: 56519, secure: false")
Connect signature: Optional("Signature: family: inet, type: stream, protocol: tcp, address: Optional(Socket.Socket.Address.ipv4(__C.sockaddr_in(sin_len: 16, sin_family: 2, sin_port: 51164, sin_addr: __C.in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)))), hostname: Optional("0.0.0.0"), port: 56519, secure: false")
Test Case '-[SocketTests.SocketTests testConnectPort0]' passed (0.003 seconds).
Test Case '-[SocketTests.SocketTests testConnectTo]' started.
Test Case '-[SocketTests.SocketTests testConnectTo]' passed (0.001 seconds).
Test Case '-[SocketTests.SocketTests testCreateIPV6]' started.
Test Case '-[SocketTests.SocketTests testCreateIPV6]' passed (0.000 seconds).
Test Case '-[SocketTests.SocketTests testDefaultCreate]' started.
Test Case '-[SocketTests.SocketTests testDefaultCreate]' passed (0.000 seconds).
Test Case '-[SocketTests.SocketTests testHostnameAndPort]' started.
Test Case '-[SocketTests.SocketTests testHostnameAndPort]' passed (0.001 seconds).
Test Case '-[SocketTests.SocketTests testIsReadableWritable]' started.
Error reported: Error code: -9996, Reason: Unavailable
Test Case '-[SocketTests.SocketTests testIsReadableWritable]' passed (0.000 seconds).
Test Case '-[SocketTests.SocketTests testListen]' started.
Test Case '-[SocketTests.SocketTests testListen]' passed (0.000 seconds).
Test Case '-[SocketTests.SocketTests testListenPort0]' started.
Listening port: 56523
Test Case '-[SocketTests.SocketTests testListenPort0]' passed (0.000 seconds).
Test Case '-[SocketTests.SocketTests testReadWrite]' started.
Listening on port: 1337

Connected to host: 127.0.0.1:1337
Accepted connection from: 127.0.0.1 on port 56524, Secure? false
Socket signature: Signature: family: inet, type: stream, protocol: tcp, address: Optional(Socket.Socket.Address.ipv4(__C.sockaddr_in(sin_len: 16, sin_family: 2, sin_port: 14597, sin_addr: __C.in_addr(s_addr: 16777343), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)))), hostname: Optional("127.0.0.1"), port: 1337, secure: false

Read 34 from socket...
Response:
Hello, type 'QUIT' to end session

Wrote 'Hello from client...' to socket...
Server received from connection at 127.0.0.1:56524: Hello from client...
Read 39 from socket...
Response:
Server response:
Hello from client...

Sent quit to server...
Server received from connection at 127.0.0.1:56524: QUIT
Test Case '-[SocketTests.SocketTests testReadWrite]' passed (0.001 seconds).
Test Suite 'SocketTests' passed at 2016-10-18 20:55:06.328.
Executed 11 tests, with 0 failures (0 unexpected) in 0.012 (0.013) seconds
Test Suite 'SocketPackageTests.xctest' passed at 2016-10-18 20:55:06.328.
Executed 11 tests, with 0 failures (0 unexpected) in 0.012 (0.013) seconds
Test Suite 'All tests' passed at 2016-10-18 20:55:06.328.
Executed 11 tests, with 0 failures (0 unexpected) in 0.012 (0.014) seconds

)

  1. Entered Xcode
  2. Created new project (macOS -> Game -> SpriteKit)
  3. Cleared sample project
  4. At the top of GameScene.swift, import Socket

Error: No swift module 'Socket'

I also noticed while trying to manually run BlueSocket-master/MakeFile I received the following output:

(Computer):~ (user)$ /Users/(user)/Desktop/Socket\ Stuff/BlueSocket-master/Makefile ; exit;
/Users/(user)/Desktop/Socket Stuff/BlueSocket-master/Makefile: line 18: -include: command not found
/Users/(user)/Desktop/Socket Stuff/BlueSocket-master/Makefile: line 20: Package-Builder/build/Makefile:: No such file or directory
/Users/(user)/Desktop/Socket Stuff/BlueSocket-master/Makefile: line 21: @echo: command not found
fatal: Not a git repository (or any of the parent directories): .git
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions...6 completed.

And while running BlueSocket-master/Package-Builder/build/MakeFile:

/Users/(user)/Desktop/Socket\ Stuff/BlueSocket-master/Package-Builder/build/Makefile ; exit;
(Computer):~ (user)$ /Users/(user)/Desktop/Socket\ Stuff/BlueSocket-master/Package-Builder/build/Makefile ; exit;
/Users/(user)/Desktop/Socket Stuff/BlueSocket-master/Package-Builder/build/Makefile: line 17: ifndef: command not found
/Users/(user)/Desktop/Socket Stuff/BlueSocket-master/Package-Builder/build/Makefile: line 18: KITURA_CI_BUILD_SCRIPTS_DIR: command not found
/Users/(user)/Desktop/Socket Stuff/BlueSocket-master/Package-Builder/build/Makefile: line 19: endif: command not found
/Users/(user)/Desktop/Socket Stuff/BlueSocket-master/Package-Builder/build/Makefile: line 21: ${shell uname}: bad substitution
/Users/(user)/Desktop/Socket Stuff/BlueSocket-master/Package-Builder/build/Makefile: line 24: syntax error near unexpected token "$(UNAME),'
/Users/(user)/Desktop/Socket Stuff/BlueSocket-master/Package-Builder/build/Makefile: line 24: `ifeq ($(UNAME), Darwin)"
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

Where did I go wrong?

swift package update stuck on BlueSocket

I am not sure if this is a problem with your framework or something else.

I recently update to Xcode 9 and swift 4 (again this might not be relevant). When i try to run "swift build" or swift package update", the command never completes.

I tried running it with verbose enable and I get the following iteration, that keeps repeating for hours. Any ideas what might be causing it and how to resolve it.

git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.57^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '632e6cd9edd61fd695bb537f2c676af7aad5c336^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 674143d4019761d7cbf094e4dc81e851017c4b76
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.56^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '007fa4078475bf410d75bc1871487f64872e7c78^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree d5a10bcdce887e31e90971d9a859992dcb6c9940
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.55^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'df2e65fcaf2be200e446d04867d533f0d5441195^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 1b9e5a6b02c7087905d152a1faa7fd49dcb73aa0
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.54^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '406641a6f070dd5b1f3641b2209c87d7f3c60e4d^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree fdc89cf085b22f36173d94c13fcc231a4a541525
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.53^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '21f3abdf658e73b44b5cef658661fa8aea506930^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 6fda709592fe1e60ae77365392e5c08f6639a5d6
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.52^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '271a7b7292cb20138d098cc2b8764f9d6fbb669c^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree d47357082e5040784f0ded5d6dab154698f2e2fc
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.51^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'c00eaca9fa0d0e9f2cdec2e5a6c15bed8e9d3b33^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 720dca8fb23b232a3efa25e7d0c064457329dcd9
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.50^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '5df8aaf4e122c6b3168c0db71043d8977444d63f^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 478b19c3a11fbdb2f0dafd382535335b8078cd2c
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.49^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'fc0dccb8661ddfb16328e422a52928d87891a533^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 41de770538eb73a5e8a2f8b0f82088b753ef1630
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.48^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'b80dd64ff1acb93a770dc77758f368514d7adbdd^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree a0ed720f448df4093c317e06f5dceef346b86e14
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.47^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '26f50c8f923fc206120cee1a6c5a0459c1596ac8^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 6bca425b12126a5093c91da65d279a81dc61c0ae
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.46^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '143677623b42b946fd2e1cd7c11b33d57aaa2631^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 88b76234c8d3313747a2d3b8cab43277842e0ba4
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.45^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '1e15729a458e9060be8b675fc3eb51c8378755f1^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 614c902af46c80331bf5f776301e08c57125f222
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.44^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'ec5e04f4a73002f63897e061ed544360297513ce^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree a04d6531935d1a538f65c1359e26353ebb97aeb9
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.43^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '269298bdf933a8529e8cccfe8eebfd49e829f472^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 2db0cb25a7ea95d66fe569027816e54856b307de
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.42^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'd0465971bc6a76584dc314264efaafb83a778697^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree ff890738426a30080fe8882fa1a0e7524d8d4016
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.41^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0986c40a4d30590dafd52347df5b2792274a7720^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree da0e180537bc090d4eefd70b02fcc070057ce68f
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.40^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'c9ff50a4fa1c905fe56522832b5e63e8d21ba1bf^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 0a1b3717eeb54d24e6b9082f3fcbb0575fa37595
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.39^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'f9b590fd037d5f07b6e7b62462483e5f13560d84^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 4e4b67be0333010c41e4e4168fe663def2661d3f
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.38^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '414a74eb97e4018b2867fbafef6282b9ce203d82^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 947a4343fab3a548e03d63f7170ff0ac44d63d81
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.37^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'fa1c82d8ae8212232bb1c2fafa1b0670bec92bcb^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 6405fa7dceaf68c954f245482214d39e55523697
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.36^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '5a73d4fb9a85a53ec1ba81e655ac4cba86621687^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree ea70984db99b6ede4e8979b04178797bffaff3ca
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.35^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'cac5794de95275107aeb194c52a2e565d704ff5a^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 176c9a55254fe7d6de338b1fc3dcb5b3eed6638d
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.34^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'bd740b636332e7e0c62c2742692e812ee259e67a^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree dc030d596f658de09b84574ea331264ffd306551
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.33^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '32c2dd8d8db1f9ce7f61a260d910568fbe572ac6^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 60a72e8e6ac94f7f79478eeaacfb5ea483d9f118
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.31^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'b0dcf15387be3641ecafea52f872fcd106cb644a^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 25e298f4a432c7f24bf4511a0fca4ced093ebbb9
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.30^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'e8096601cc10ddefa04a005551b755c92e2b8b57^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree cf681bcd02bac478c2559aff84e873fcf0071b78
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.29^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '9568cf92f8c41ecb84a2d6f34d52eec5544ddda4^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 866493e51e166de1ce4840b04198de707fc8ef31
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.28^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'fcdcb479facbc3b8232e7baf2e76eb8ffdb4d3ec^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 29e8f141f78ef0b03a89a89fe79116a9dbd10aaa
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.27^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0ca58bd33a8a74b7dc64f64345715ab9284e2d88^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 4efcb7c31587affca4ed9065adc407807f13be71
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.26^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'aa2caea69eeefe530279644ff52cf53538a6a5db^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 26acd59eac4bb29bd14bc462803c7747df71c865
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.25^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '6f8e1c5ba0dd0fa90c35d4e8a14567648af7d9d1^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 1d5905a3368d1767e4aad2d730293ddd90b837e4
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.24^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '7e995b297e98380a1816cacfe07e69dbc03a2bee^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 67aff35f666c601d73c7cb7fd5ad1babb19899b8
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.23^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '33b7afd41a6e52be050037a9e96c4bbe1ed502de^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 48a3ee956e2b1140cf27c0e1df284e85c3520d2d
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.22^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '511aed8e25a18c1be854a6663799fa96c759ab70^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 67aff35f666c601d73c7cb7fd5ad1babb19899b8
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.21^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '6101df2df7c744dde42a5162ba1bb0979ae0d3bf^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 9b766e8b8a231df77c0137ead3eb2bcd5855cda5
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.20^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '5a7a76d84a61c5f171a2d5e582a55abebec68507^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 15ae8fe6cc39a8e05e02665699a16083252c8ff6
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.19^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '6f2573ec9f16dd03c01be95667df1ebfbbc3b3e0^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree d5a0fd5b85d33099858b29078b0553b32440efaa
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.18^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'b31b8d5f2fe143c1c42386910ed6ff1b818a7d87^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 150b00811f8602fc6e3df97f626704bef287bfd8
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.17^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '125db65f33d7bccd8b090e4ffe6283cba903e980^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 8c52941dd6bb1ced990eeb7c47e788275ef7b4fc
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.16^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '3689832fd190f1991459c5bc12e370d73bfc9677^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 6de520d288d4011be1240bc21e8e05457cf45ba2
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.15^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '9daa89129015401dee843055b98d99def1226078^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 20c3ed77abaca9e89b73d9aea2b0061f19bc970a
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.14^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '990692faff276e79d1255f8b47f7c704a95aba2a^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree c76341b87b5819da0727837b1123078ee19caf4e
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.13^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '58c31feb8d38b52a30e84201030342a0505b45a8^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree fa082d465028b28392d19e657a4a047979f81518
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.12^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '55d46ecfa74accf68afcf9296cf4122948eb68b7^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 6b53bf5d22ac1f7e9115b2b2525c2d473bb388fa
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.11^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '9adddc5f872388d09241eb1d4d1d1d65fa23021d^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree a48ac51e03c65559e290145017ae3041183c5c5d
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.10^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '32270f4812bc4e53563830731f959396b60bc6ba^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 9cfcc91a54c00a3319858d121beb74b35b245ed0
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.9^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '33ead17cb6f46ab85f0490750659923652bdf1ae^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 535595b9f090a813daf87266f8babe2b6c271f8c
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.8^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '2cc9d1aa59776b2932cd1544d3d7a6dc4277d054^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 8d7f56d6350d4d084f7178013b51355a8f27f9bf
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.7^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'dd5785d7d1ad6fbe6d4a897cb98463bfbd276ddd^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 67bc8df77f5603798a3a0ec5020f2dd2d8d35531
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.6^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'aea013c9cebc108c2cb28d7ab912c2c6d883d098^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 52a080af00b508bb5bff54b2f7269fff39abf0b9
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.5^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '78752613a2f6436357105a5b33703036a3c093b5^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree db95438e6d4351f53ffefa8ef9f5752c35092280
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.4^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '199f40b499d098df3e78d65e8736e298ef85aad0^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree f8867570b3212efc27e426e3ceb113457352e14a
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.3^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0442154224135b7697902301ba5c200ce980cc4b^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 042f42fc3977d13c033cbc5a3bcc2cfd92465e26
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.2^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'd97739b9cde79b6fae0a43f56b5fbc2a884e1178^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree a5726782ca6e0c8611eca5f8e30d97b730bcebe8
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.1^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '209c581f5cceb4a7ad9c85f98c4130b7fb35cace^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree a870f69514f7811d010eb5b9622a2b9c20366ee9
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.00^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'cd34b6ed76b80816966df4d28e0a584c2aec2fbd^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree ecdbc484bc01894210a9c8ae6a13dfedc900b115
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSSLService.git--6577639804771281610 rev-parse --verify '0.12.51^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSSLService.git--6577639804771281610 rev-parse --verify '2d7b2bc6f96da6acd94f9b3193ee15511f248bfa^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSSLService.git--6577639804771281610 ls-tree acad90e47175c85a86fc64fa5bf7929bc6c3c0d4
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSSLService.git--6577639804771281610 cat-file -p a46fcdaff204719c31a1fe8a4cefe0e27c9db952
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.67^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'ddd0be6008914b64cb28784632ada5d3cc7a7ce9^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree d46b43bf0ccc4e106fb2086852878df209bb5119
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p d1d0a36ac1120079ca221ba2272e48ba06685e3e
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.66^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '5c77668e3159ec345b23ca9de4aecc46919d56f2^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree fb8921ed01cdfa64e46281f16851f77e5ea5b9ae
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p d1d0a36ac1120079ca221ba2272e48ba06685e3e
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.65^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '4cf5f77c81330d663e2947a058a9fa58109ca17f^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree e47f18e6061ea48a46c40f34f1211a389b21e6ca
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p d1d0a36ac1120079ca221ba2272e48ba06685e3e
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.64^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '7bf5cc5f36ef7a47643d0d428dc2690043678016^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree f161e5d94330dd51f369a0160a43b1d844b6776e
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p d1d0a36ac1120079ca221ba2272e48ba06685e3e
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.63^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'ed4b5fd73568de77458ba41768eadeb72af5cee7^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree d8f3f35eaab61c7e6028834c39f7888f16f7ddb0
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p d1d0a36ac1120079ca221ba2272e48ba06685e3e
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.62^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '3d50775bafe81cc1257920e213d4a1c1d2b974bb^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 2fbe08db444788e6246ef7b84b4bb4d6d57dbdcb
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p d1d0a36ac1120079ca221ba2272e48ba06685e3e
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.61^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'c53f2459eeb60f7250f2dbc40e01685bae9f1526^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 7918988a40b91af4c9556a76f28b873be330c9d8
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.60^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'b60886b4b3f9a6a83717c2933cbe6a22502c0214^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree f8a31b9dbd482ccce3f824de446c4c72b387fee3
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.59^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'fb557515d11156673b12c798a6c172399def8092^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 4eb1a860a7592b3f3f93ea1a794604fe41e42345
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.58^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '1e825b58faebf127631a7245949414b0c2f899e5^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 1f7a92d59e4a0e13c0ad46fd9271fdd3df89f3b8
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.57^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '632e6cd9edd61fd695bb537f2c676af7aad5c336^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 674143d4019761d7cbf094e4dc81e851017c4b76
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.56^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '007fa4078475bf410d75bc1871487f64872e7c78^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree d5a10bcdce887e31e90971d9a859992dcb6c9940
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.55^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'df2e65fcaf2be200e446d04867d533f0d5441195^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 1b9e5a6b02c7087905d152a1faa7fd49dcb73aa0
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.54^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '406641a6f070dd5b1f3641b2209c87d7f3c60e4d^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree fdc89cf085b22f36173d94c13fcc231a4a541525
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.53^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '21f3abdf658e73b44b5cef658661fa8aea506930^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 6fda709592fe1e60ae77365392e5c08f6639a5d6
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.52^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '271a7b7292cb20138d098cc2b8764f9d6fbb669c^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree d47357082e5040784f0ded5d6dab154698f2e2fc
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.51^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'c00eaca9fa0d0e9f2cdec2e5a6c15bed8e9d3b33^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 720dca8fb23b232a3efa25e7d0c064457329dcd9
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.50^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '5df8aaf4e122c6b3168c0db71043d8977444d63f^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 478b19c3a11fbdb2f0dafd382535335b8078cd2c
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.49^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'fc0dccb8661ddfb16328e422a52928d87891a533^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 41de770538eb73a5e8a2f8b0f82088b753ef1630
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.48^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'b80dd64ff1acb93a770dc77758f368514d7adbdd^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree a0ed720f448df4093c317e06f5dceef346b86e14
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.47^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '26f50c8f923fc206120cee1a6c5a0459c1596ac8^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 6bca425b12126a5093c91da65d279a81dc61c0ae
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.46^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '143677623b42b946fd2e1cd7c11b33d57aaa2631^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 88b76234c8d3313747a2d3b8cab43277842e0ba4
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.45^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '1e15729a458e9060be8b675fc3eb51c8378755f1^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 614c902af46c80331bf5f776301e08c57125f222
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.44^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'ec5e04f4a73002f63897e061ed544360297513ce^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree a04d6531935d1a538f65c1359e26353ebb97aeb9
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.43^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '269298bdf933a8529e8cccfe8eebfd49e829f472^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 2db0cb25a7ea95d66fe569027816e54856b307de
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.42^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'd0465971bc6a76584dc314264efaafb83a778697^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree ff890738426a30080fe8882fa1a0e7524d8d4016
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.41^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0986c40a4d30590dafd52347df5b2792274a7720^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree da0e180537bc090d4eefd70b02fcc070057ce68f
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.40^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'c9ff50a4fa1c905fe56522832b5e63e8d21ba1bf^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 0a1b3717eeb54d24e6b9082f3fcbb0575fa37595
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.39^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'f9b590fd037d5f07b6e7b62462483e5f13560d84^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 4e4b67be0333010c41e4e4168fe663def2661d3f
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.38^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '414a74eb97e4018b2867fbafef6282b9ce203d82^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 947a4343fab3a548e03d63f7170ff0ac44d63d81
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.37^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'fa1c82d8ae8212232bb1c2fafa1b0670bec92bcb^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 6405fa7dceaf68c954f245482214d39e55523697
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.36^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '5a73d4fb9a85a53ec1ba81e655ac4cba86621687^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree ea70984db99b6ede4e8979b04178797bffaff3ca
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.35^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'cac5794de95275107aeb194c52a2e565d704ff5a^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 176c9a55254fe7d6de338b1fc3dcb5b3eed6638d
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.34^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'bd740b636332e7e0c62c2742692e812ee259e67a^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree dc030d596f658de09b84574ea331264ffd306551
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.33^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '32c2dd8d8db1f9ce7f61a260d910568fbe572ac6^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 60a72e8e6ac94f7f79478eeaacfb5ea483d9f118
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.31^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'b0dcf15387be3641ecafea52f872fcd106cb644a^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 25e298f4a432c7f24bf4511a0fca4ced093ebbb9
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.30^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify 'e8096601cc10ddefa04a005551b755c92e2b8b57^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree cf681bcd02bac478c2559aff84e873fcf0071b78
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '0.12.29^{commit}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 rev-parse --verify '9568cf92f8c41ecb84a2d6f34d52eec5544ddda4^{tree}'
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 ls-tree 866493e51e166de1ce4840b04198de707fc8ef31
git -C /Users/administrator/Documents/bluemix/KiteSpotterServer/.build/repositories/BlueSocket.git-3162807777605905816 cat-file -p 2a1f4db89eeb718c57a82b3842a184c7ed33e444

CNN298

The beneficiary will work in…

For U.S. Postal Service (USPS) First-Class and Priority Mail Express deliveries

For overnight/courier deliveries (non-USPS)USPS

Maryland, New Jersey, or Pennsylvania

Premium Processing
USCIS Texas Service Center
P.O. Box 279030
Dallas, TX 75227-9030

Premium Processing
USCIS Texas Service Center
4141 N Saint Augustine Dr.
Dallas, TX 75227-4818

Tennessee

Premium Processing
USCIS Nebraska Service Center
P.O. Box 87103
Lincoln, NE 68501-7103

Premium Processing
USCIS Nebraska Service Center
850 S. Street
Lincoln, NE 68508

Package Manager Documentation missing ".git"

dependencies: [
	.Package(url: "https://github.com/IBM-Swift/BlueSocket", majorVersion: <majorVersion>, minor: <minor>)
]

Should be dependencies: [
.Package(url: "https://github.com/IBM-Swift/BlueSocket.git", majorVersion: , minor: )
]

Disable watchOS in the Podspec

I saw watchOS is a supported platform on the pod and I tried to use it on a watchOS project but unfortunately I discovered Posix/BSD/Darwin sockets are not supported on real Apple Watch devices.

Sockets only works on simulator.

Basically when the BlueSocket initializer [Socket.swift init()] try to create a Darwin.socket handle on a real device it get a SOCKET_INVALID_DESCRIPTOR and then throw an exception.

Indeed all Foundation/iOS APIs based on Posix/BSD/Darwin sockets (i.e. NSURLSessionStreamTask, NSStream and CFSocketStream) are flagged as __WATCHOS_PROHIBITED on watchOS.

NSURLSession (for HTTP) is the only network API available on watchOS

The simulator works because it doesn’t apply sandbox restrictions.

Jacopo Mangiavacchi

Invalid test module name

During our automated builds of the newest Swift snapshots for the Sandbox, we run into the following issue while incorporating BlueSocket:

swift-build: error: the module at Tests/Socket has an invalid name ('Socket'): the name of a test module has no 'Tests' suffix
fix: rename the module at 'Tests/Socket' to have a 'Tests' suffix

This began with the 7-29 snapshot a week ago. Sounds like a quick fix?

CocoaPod

Any plans to release this as a CocoaPod?

EXC_BAD_ACCESS connecting to a unix socket on MacOS

I am getting EXC_BAD_ACCESS trying to connect to a unix socket on MacOS 10.12.4 and IBM-Swift/BlueSocket 0.12.46.

If I change this to be a TCP socket it works just fine.

self.clientSocket = try Socket.create(family: Socket.ProtocolFamily.unix, type: Socket.SocketType.stream, proto: Socket.SocketProtocol.unix)
print("Connecting to server")
try self.clientSocket?.connect(to: "/tmp/observer_collector") // crashes with EXC_BAD_ACCESS

When this happens, I see nothing on the file system at the /tmp/observer_collector, despite executing code that should create the socket with the following code (which does not crash and does not raise any exceptions):

self.serverSocket = try Socket.create(family: Socket.ProtocolFamily.unix, type: Socket.SocketType.stream, proto: Socket.SocketProtocol.unix)
try self.serverSocket.listen(on: "/tmp/observer_collector")

I'm not sure if the socket got created successfully or not, since I cannot see it on the file system. Regardless, I don't think the client connection code should crash.

Here's the stack trace:

Thread 3Queue : com.apple.root.background-qos (concurrent)
#0	0x000000010012470a in Socket.Signature.init(socketType : Socket.SocketType, proto : Socket.SocketProtocol, path : String?) throws -> Socket.Signature? [inlined] ()
#1	0x00000001001246f7 in specialized Socket.connect(to : String) throws -> () at /Users/dyoung/workspace/wireless-registry/macos-observer/Observer/Carthage/Checkouts/BlueSocket/Sources/Socket.swift:1866
#2	0x00000001000134e7 in SocketClient.(start() -> Bool).(closure #1) at /Users/dyoung/workspace/wireless-registry/macos-observer/Observer/Observer/SocketClient.swift:27
#3	0x0000000100002247 in thunk ()
#4	0x0000000100c47cfe in _dispatch_call_block_and_release ()
#5	0x0000000100c3e78c in _dispatch_client_callout ()
#6	0x0000000100c40cc1 in _dispatch_root_queue_drain ()
#7	0x0000000100c4071d in _dispatch_worker_thread3 ()
#8	0x0000000100cb5812 in _pthread_wqthread ()
#9	0x0000000100cb52ed in start_wqthread ()
Enqueued from com.apple.main-thread (Thread 1)Queue : com.apple.main-thread (serial)
#0	0x0000000100c544ca in _dispatch_queue_push ()
#1	0x00000001008e474b in DispatchQueue.async(group : DispatchGroup?, qos : DispatchQoS, flags : DispatchWorkItemFlags, execute : @convention(block) () -> ()) -> () ()
#2	0x00000001000130aa in SocketClient.start() -> Bool at /Users/dyoung/workspace/wireless-registry/macos-observer/Observer/Observer/SocketClient.swift:60
#3	0x000000010000b4d7 in ViewController.viewDidAppear() -> () at /Users/dyoung/workspace/wireless-registry/macos-observer/Observer/Observer/ViewController.swift:51
#4	0x000000010000b5e2 in @objc ViewController.viewDidAppear() -> () ()
#5	0x00007fffcbe19634 in -[NSViewController _sendViewDidAppear] ()
#6	0x00007fffcbe1932b in -[NSView(NSInternal) _windowDidOrderOnScreen] ()
#7	0x00007fffcbe193de in -[NSView(NSInternal) _windowDidOrderOnScreen] ()
#8	0x00007fffcc57daa8 in -[NSWindow _reallyDoOrderWindowAboveOrBelow:relativeTo:findKey:forCounter:force:isModal:] ()
#9	0x00007fffcbe15a9e in -[NSWindow _doOrderWindow:relativeTo:findKey:forCounter:force:isModal:] ()
#10	0x00007fffcbe15633 in -[NSWindow orderWindow:relativeTo:] ()
#11	0x00007fffcbec7f7b in -[NSWindow makeKeyAndOrderFront:] ()
#12	0x00007fffd3c94519 in -[QLSeamlessDocumentOpener showWindow:contentFrame:withBlock:] ()
#13	0x00007fffcbec7107 in -[NSWindowController showWindow:] ()
#14	0x00007fffcbc9a0fe in NSApplicationMain ()
#15	0x00000001000093dc in main at /Users/dyoung/workspace/wireless-registry/macos-observer/Observer/Observer/main.swift:24
#16	0x00007fffe3941235 in start ()

And here is a screenshot of XCode:

screen shot 2017-05-25 at 12 28 53 pm

Performance issues

I've tried to use BlueSocket in MongoKitten which is a swift driver for MongoDB.

After replacing Vapor Socket by BlueSocket, I ran some performance tests. The results showed an important difference between the two implementations on MacOS and a huge one on Linux.

To run the test you can clone this repo. Master branch uses the Vapor Socket and bluesocket branch uses the BlueSocket.

The bluesocket code is all in the Socket.swift file. Maybe I did something wrong in my implementation ?

Tests Results

All Tests are done in Release mode.

Here the results from performance tests on Linux :

Linux 16.04 - 4.4.0-59-generic
Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz - 32GiB
Swift version 3.0.2 (swift-3.0.2-RELEASE)

BlueSocket

  • Max : 5.32257395982742
  • Min : 3.25634396076202
  • Average : 3.61253277897835
  • Median : 3.46378147602081
  • Execution Time : 361.478877007961
  • Rounds : 100

VaporSocket

  • Max : 0.695515990257263
  • Min : 0.433806002140045
  • Average : 0.532387097477913
  • Median : 0.514575988054276
  • Execution Time : 53.2749119997025
  • Rounds : 100

And on MacOS:
Darwin Kernel Version 16.4.0
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)

swift build -c release
.build/release/SwiftPerformance

  • Max : 0.963047981262207
  • Min : 0.830860018730164
  • Average : 0.873546527028084
  • Median : 0.872366487979889
  • Execution Time : 87.3994210362434
  • Rounds : 100

VaporSocket

  • Max : 0.877934038639069
  • Min : 0.666562974452972
  • Average : 0.719885479807854
  • Median : 0.714864492416382
  • Execution Time : 72.033077955246
  • Rounds : 100

Cannot find out which port was assigned

Sometimes you don't want to listen on a prespecified port, but just a port number assigned by the OS. In C you'd listen on port 0. To find out which port was assigned after listening, you'd call getsockname and lookup the sa(6)_port attribute. However it appears that this currently isn't implemented in BlueSocket.

Plans for unix socket support?

Hello,

I see you already support TCP and UDP (IPv4 and IPv6), are there any plans to support UNIX sockets? It is presumably doable via the create(fromNativeHandle:address:) static method, but there's some amount of tricky work to do to get the fd. Would be awesome to have that library provide similar support as the net package in Go's stdlib, all under the same unified and simple API (which is great btw).

Thanks,
Martin

Add podspec to cocoapods?

First of all, thanks for a great project.

You are maintaining BlueSocket.podspec, but I cannot see it listed on Cocoapods.org when I search for it. Would you mind submitting it there? Otherwise I'll gladly submit it for you.

Background: I'm in a team maintaining Theo, a Swift driver for the neo4j database. We've just added Bolt support (a transfer protocol) and it uses BlueSocket and BlueSSLService for its networking. It's all set up and ready for release through the Swift Package Manager, but I'd like to maintain support through CocoaPods and Carthage as well

Problem compiling ZERO function on Linux. _fds_bits should set 32 bits.

Hi,

First let me say thank you. This is a really great project and love that it's already been updated to the latest Swift snapshot.

I'm trying to compile the latest release 0.7.1 on Debian Linux Jessie on armv7l using the latest Swift snapshot but compile fails with:

Socket-0.7.1/Sources/SocketUtils.swift:121:20: error: cannot assign value of type '(Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int)' to type '(__fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask, __fd_mask)' (aka '(Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int)')
set.__fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

Since _fd_mask is defined in sys/select.h as a long it should be 32 bits and sure enough replacing
set.__fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
with
set.__fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
solved the problem and everything compiled.

I'm not sure why it's currently set to only 16 bits on Linux inside the #if os(Linux) block?

SET, CLR and ISSET need to be updated too and be very similar to the macOS version, minus the fd_set and __fd_set difference (perhaps there's a way to map that? my Swift/C integration-fu is not quite there yet)

multi-process problem

When I use this library to integrate into Linux multi-process swift code, it occurs a fatal error while call the acceptClientConnection method, error message is : -9994(0x-270A), Invalid argument

the code is below:

do {
    var socket: Socket? = try Socket.create()
    
    guard let listenSocket = socket else {
        print("unable to create socket...")
        exit(-1)
    }
    
    var isRunning = true
    try listenSocket.listen(on: 6666)
    
    repeat {
        print(listenSocket.signature?.description)
        let connectSocket = try listenSocket.acceptClientConnection()
        print("Accepted connection from: \(connectSocket.remoteHostname) on port \(connectSocket.remotePort)")
        //print("Socket Signature: \(connectSocket.signature?.description)")
        
        var childpid = fork()
        
        if childpid == -1 {
            print("fork failed")
            exit(-1)
        } else if childpid > 0 {
            print("parent process")
            connectSocket.close()
            isRunning = true
        } else {
            print("child process")
            listenSocket.close()
            handleReqeust(connectSocket)
            isRunning = false
        }

        
    } while isRunning
    
    
} catch let error {
    guard let socketError = error as? Socket.Error else {
        print("unknown error...")
        exit(-1)
    }
    print("Error reported:\n \(socketError.description)")

}

ambiguous reference to member 'connect(to:port:)

I have problem in compiling a simple client socket example:

swift build
Compile Swift Module 'SimpleClient' (1 sources)
/home/sharil/swift_projects/NetProClient/Sources/main.swift:13:15: error: ambiguous reference to member 'connect(to:port:)'
var cln = try Socket.connect(to: "localhost", port: 9999)
^~~~~~
Socket.Socket:326:17: note: found this candidate
public func connect(to host: String, port: Int32) throws
^
Socket.Socket:332:17: note: found this candidate
public func connect(using signature: Socket.Socket.Signature) throws
^
:0: error: build had 1 command failures
error: exit(1): /home/sharil/swift-3.0-RELEASE-ubuntu14.04/usr/bin/swift-build-tool -f /home/sharil/swift_projects/NetProClient/.build/debug.yaml

if socketfd not available will get signal SIGPIPE and fail.

In function private init(family: ProtocolFamily, type: SocketType, proto: SocketProtocol) throws will set SO_NOSIGPIPE to socketfd.
But in function public func connect(to host: String, port: Int32, timeout: UInt = 0) will reset socketfd, new socketfd don't set SO_NOSIGPIPE. if socketfd is not available will get signal SIGPIPE.

Outdated README

First example in README now looks like this

var socket = try Socket.create()
guard let socket = socket else {
  fatalError("Could not create socket.")
}
try socket.listen(on: 1337)

While it should look like this

var socket = try Socket.create()  
try socket.listen(on: 1337)

Question: Is there any issues using this library with iOS

Hello,

I use this library in my iOS project in which it communicates to server via custom protocol. And it's important to me to have the same code on linux side.

However I found recommendation from Apple:

"In iOS, POSIX networking is discouraged because it does not activate the cellular radio or on-demand VPN. Thus, as a general rule, you should separate the networking code from any common data processing functionality and rewrite the networking code using higher-level APIs."

And topics on StackOverflow:

https://stackoverflow.com/questions/25045829/how-can-i-activate-the-cellular-radio-in-ios-since-bsd-sockets-doesnt-activate

Could you clarify please is there any issues using the library with iOS. And do you have any information about what changed since iOS 10 that allows to use this library in iOS (e.g. activating cellular radio/vpn on demand)

Thanks!

Deployment Target for macOS

Hi,

I am building a macOS app with a deployment target of 10.10, and was getting errors about BlueSocket having a deployment target of 10.11. I opened the BlueSocket project and changed the deployment target to 10.10 and it compiles fine on 10.10. Just curious if there is any reason not to set the deployment target on the BlueSocket Xcode project to 10.10? That would expand its reach to projects which still need to support that OS.

Thank you

Connection timeout

Hello,

It looks like there's no way to set a connection timeout right now? There's a read/write timeout that was added (awesome!) but it would be nice to have a connection timeout too. From what I've read here (http://stackoverflow.com/questions/2597608/c-socket-connection-timeout, second answer is more detailed than accepted one), it involves setting the socket in non-blocking mode and using select with a timeout until the socket is connected (the socket can then be put back in blocking mode if that was how it was requested initially).

I believe the BlueSocket package exposes everything needed to implement this, but this is a non-trivial piece of code and it would make for a much nicer API to have e.g. a timeout: TimeInterval (or UInt in milliseconds, as is the case for read/write timeouts) parameter added to the connect variants.

Thoughts? And thanks for the great package!

Martin

Bad access error in Socket.listen (path) -> Signature -> line 552

Hi guys,

I got a strange error. Steps to reproduce is simple.

  1. Make a new project - command line tool for macOS in Xcode 8.
  2. Copy Socket files as sources to new project. CocoaPods does not link framework to command line tool.
  3. Make simple UNIX (!) Socket server
  4. Run it - must be ok.
  5. Change scheme to build release
  6. Released command line tool will break in Socket.swift: 552-562 lines with remoteAddr operations.

I commented these lines and do not use self.address and it works fine.
PS. I know this is a dirty hack to create command line tool. I know how swift package manager works, but I got big project in Xcode and integrate your framework with it is very hard to support later (build scripts, et cetera )

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.