 	/** New ice candidate has been found. */
 	func peerConnection(_ peerConnection: RTCPeerConnection, didGenerate candidate: RTCIceCandidate) {
 		NSLog("PluginRTCPeerConnection | onicecandidate [sdpMid:%@, sdpMLineIndex:%@, candidate:%@]",
-			String(describing: candidate.sdpMid), String(candidate.sdpMLineIndex), String(candidate.sdp))
+			  String(candidate.sdpMid!), String(candidate.sdpMLineIndex), String(candidate.sdp))
 
 		if self.rtcPeerConnection.signalingState == RTCSignalingState.closed {
 			return


		let type = desc.object(forKey: "type") as? String ?? ""
		let sdp = desc.object(forKey: "sdp") as? String ?? ""
		let rtcSessionDescription = RTCSessionDescription(type: rtcSdpTypeParser(type: type), sdp: sdp)

		self.rtcPeerConnection.setLocalDescription(rtcSessionDescription, completionHandler: { (error: Error?) in
			if(error != nil){
				NSLog("PluginRTCPeerConnection#setLocalDescription() | failure callback: %@", String(describing: error))
				errback(error!)
				return;
			}

			NSLog("PluginRTCPeerConnection#setLocalDescription() | success callback")

			let data = [
				"type": self.rtcSdpTypeToString(type: self.rtcPeerConnection.localDescription!.type),
				"sdp": self.rtcPeerConnection.localDescription!.sdp
			]

			callback(data as NSDictionary)
		});
	}



			if self.rtcPeerConnection.remoteDescription != nil {
				data = [
					"remoteDescription": [
						"type": RTCSessionDescription.string(for: self.rtcPeerConnection.remoteDescription!.type),
						"sdp": self.rtcPeerConnection.remoteDescription!.sdp
					]
				]
