         channel.addStream(stream)
     }
     
-    func sendAnswerMessage(offer: SignalingOfferMessage) {
+    func createAndSendAnswerMessage(offer: SignalingOfferMessage) {
         Logger.debug(type: .peerChannel, message: "try sending answer")
         state = .waitingComplete
         

            case .update(sdp: let sdp):
                guard configuration.role == .group else { return }
                Logger.debug(type: .peerChannel, message: "receive update")
                createAndSendUpdateAnswer(forOffer: sdp)
                
            case .notify(message: let message):
                Logger.debug(type: .peerChannel, message: "receive notify")

            nativeChannel.setConfiguration(webRTCConfiguration.nativeValue)
        }
        
        nativeChannel.createAnswer(forOffer: offer.sdp,
                                   constraints: webRTCConfiguration.nativeConstraints)
        { sdp, error in
            guard error == nil else {
                Logger.debug(type: .peerChannel,
                             message: "failed create answer")
                self.disconnect(error: error)
                return
            }
            
            let answer = SignalingMessage.answer(sdp: sdp!)
            self.signalingChannel.send(message: answer)
            Logger.debug(type: .peerChannel, message: "did send answer")
        }
    }
    
    
    func createAndSendUpdateAnswerMessage(forOffer offer: String) {
        state = .waitingUpdateComplete
        nativeChannel.createAnswer(forOffer: offer,
                                   constraints: webRTCConfiguration.nativeConstraints)
        { answer, error in
            guard error == nil else {
                self.disconnect(error: error)
                return
            }
            
            let message = SignalingMessage.update(sdp: answer!)
            self.signalingChannel.send(message: message)
            
            // Answer 送信後に RTCPeerConnection の状態に変化はないため、
            // Answer を送信したら更新完了とする
            self.state = .connected
            
            self.channel.handlers.onUpdateHandler?(answer!)
        }
    }
    
    func handleMessage(_ message: SignalingMessage) {
        Logger.debug(type: .mediaStream, message: "handle message")
        switch state {
