wakou-qiita
@wakou-qiita

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

p2p通信の認証情報の中に空白文字が入る。

解決したいこと

JavaScriptでゲームを作っています。
マルチプレイで通信を確立する際にエラーが発生しました。
解決方法を教えて下さい。

発生している問題・エラー

(例)

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

該当するソースコード

p.signal(signal);

自分で試したこと

エラーは確認しているだけで2種類出ています。
一つが「 ICE ”pwd” must contain only alphanumeric characters, '+', and '/'.」
もうひとつが「 ICE ”uflag” must contain only alphanumeric characters, '+', and '/'.」
どちらも指示通りに、ICEパラメータを確認したところ、謎の空白が発見されました。
空白は、キーボードで入力できる普通の半額スペースだとわかりました。
これが、エラーの原因なのでしょうか。
また、これはバグなのでしょうか。
それとも、やり方が間違っているのでしょうか。
(ちなみに、スペースってアルファベットじゃないですよね?)

signalに関係する処理はここに書いてあります。
https://ja.stackoverflow.com/questions/75012/simple-peerでp2p通信しようとしたらice-pwdパラメータに謎に空白文字が入る

追記

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

追記2

"+"が" "に変化していました!

追記3

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

0

1Answer

既に自己解決しているのかもしれませんが、念のための補足です

URIで+と は同じだと教えてもらいました。

正確に言うと、値としてのスペースを URI パラメータにする場合に + あるいは %20 と表現します。
そのため、値としての + を URI パラメータにする場合には %2B と表現する必要があります。
(URIパラメータ以外のURI部分では + は、スペースとは別です)

おそらく、pwduflag のパラメータを作るときに、エンコードをしないで結合しているため、おかしな動きになっているのだと思います。

ソースがないので仮で書きますが、おそらく以下のような文字列結合をやっているのではないでしょうか?

   "xxxxx?pwd=" + pwd + "&uflag=" + uflag

この場合 pwduflag に '+' が含まれていると、受け取り側ではスペースになってしまいます。

組み立てるときにエンコードしてあげる必要があります。

   "xxxxx?pwd=" + encodeURIComponent(pwd) + "&uflag=" + encodeURIComponent(uflag)
1Like

Comments

  1. @wakou-qiita

    Questioner

    そのようにやってました。
    参考になりました。
    ご回答ありがとうございます。

Your answer might help someone💌