

環境説明：  
サーバー（？）側：Google App Script  
クライアント側：html (html, JavaScript, css) (多分GASにちょっといじられてから渡されてる)

自作ゲームで[simple-peer](https://github.com/feross/simple-peer)を使ってP2P通信を行っているのですが、  
通信を始める前のsignalを交換するときに２回に一回くらいこのようなエラーが出ます。

[code]

    Uncaught DOMException: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote offer sdp: Failed to apply the description for m= section with mid='0': Invalid ICE parameters: ICE pwd must contain only alphanumeric characters, '+', and '/'.
    
[/code]

「pwd must contain only alphanumeric characters...」の「pwd」部分が「uflag」の場合もあります。

とりあえずエラー通りにエラー発生時にICE-pwdとICE-uflagの中身を見たところ、  
**文字列の中に半角スペースが入っていました。**

質問：

  1. エラーの原因はこれのせいでしょうか。
  2. もしこれのせいなら、これはバグでしょうか。
  3. もしこれのせいなら、これの解決策はあるのでしょうか。

一応、signalを交換するときにやっている処理を説明します。

clientA:１．signalをsimple-peerのeventから取得。  
clientA:２．signalをJSON.stringifyで文字列化する。  
clientA:３．signalをfetchのgetでgasに送信。  
clientA:４．gasに着いたら、JSON.parseをする  
clientA:５．gasのpropertyServiceから連想配列を取得し、JSON.parseする。  
clientA:６．５の連想配列にパースされたsignalを収納し、JSON.stringifyする。  
clientA:７．gasのpropertyServiceに代入する。  
clientB:８．fetchのgetでgasにリクエストを送る。  
clientB:９．gasはpropertyServiceから、clientAが保存したsignalを取得してmimetype:JSONで返す。  
clientB:１０．取得したclientAのsignalをJSON.parseしsimple-peerのsignalメソッドで設定する。  
clientB:１１．clientBのsignalをclientAと同じ方法（同じ関数を使ってる）でgasに送信。  
clientB:１２．clientAがclientBがclientAのsignalを入手したのと同じ方法で取得して設定。（同じ関数を使ってる）  
ー本当だったら、ここで通信が始まるはず。ー  
・個人的にはバグかJSONに変換しすぎてなんかなったのかなと思っています。

追記：  
処理過程(上のurlを参照)で、signalを取得した時点では空白は混入していませんでした。  
JSONかfetchかpropertyServiceで何かが起きたと思います。

追記２：  
"+"が" "に変化していました！

追記3  
URIで+と は同じだと教えてもらいました。  
fetchのgetで"+"が" "に変化したんだと思います。


CC BY-SA 4.0
2021-04-01T02:47:22.533
75012
2021-04-01T04:10:26.050
2021-04-01T04:10:26.050
3060
44584
question
javascript google-apps-script p2p
simple-peerでp2p通信しようとしたらice-pwdパラメータに謎に空白文字が入る