From 4914b31f61044fb727b7a8c8e4036138145b25a2 Mon Sep 17 00:00:00 2001 From: voluntas Date: Wed, 6 Oct 2021 12:59:00 +0900 Subject: [PATCH 1/9] Update README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 256cc5a..782845d 100644 --- a/README.md +++ b/README.md @@ -186,3 +186,15 @@ limitations under the License. [ゲーム等に使えるフリー声素材配布ページ \- あみたろの声素材工房](https://www14.big.or.jp/~amiami/happy/voice.html) +## 優先実装 + +優先実装とは Sora のライセンスを契約頂いているお客様限定で Momo の実装予定機能を有償にて前倒しで実装することです。 + +### 優先実装が可能な機能一覧 + +**詳細は Discord やメールなどでお気軽にお問い合わせください** + +- Content Hint への対応 +- --fake-video-capture で mjpeg も指定可能にする +- --audio-device 追加 + From 55de2814dac41fc0343a6615c0ee0fab008b9544 Mon Sep 17 00:00:00 2001 From: miosakuma Date: Thu, 7 Oct 2021 18:03:42 +0900 Subject: [PATCH 2/9] =?UTF-8?q?Discord=20=E3=81=AEURL=E3=82=92=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/SUPPORT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/SUPPORT.md b/doc/SUPPORT.md index b85f999..fee6006 100644 --- a/doc/SUPPORT.md +++ b/doc/SUPPORT.md @@ -8,7 +8,7 @@ 最新の状況などは Discord で共有しています。 -https://discord.gg/eEUZf6j +https://discord.gg/shiguredo ## バグ報告 From cb1fa397577acf357e358689dfe5d3cafe6441f8 Mon Sep 17 00:00:00 2001 From: torikizi Date: Tue, 19 Oct 2021 00:48:17 +0900 Subject: [PATCH 3/9] =?UTF-8?q?DataChannelMessaging=20=E3=82=92=20DataChan?= =?UTF-8?q?nels=20=E3=81=AB=E5=A4=89=E6=9B=B4=20-=20DataChannelMessaging?= =?UTF-8?q?=20=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=9F=E7=AE=87=E6=89=80=E3=82=92=E8=AA=AC=E6=98=8E=E6=96=87?= =?UTF-8?q?=E3=82=82=E5=90=AB=E3=82=81=E3=81=A6=20DataChannels=20=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- doc/USE.md | 2 +- src/sora/sora_client.cpp | 4 ++-- src/sora/sora_client.h | 2 +- src/util.cpp | 18 +++++++++--------- src/zakuro.cpp | 22 +++++++++++----------- src/zakuro.h | 2 +- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 782845d..cae1e03 100644 --- a/README.md +++ b/README.md @@ -118,8 +118,8 @@ Options: Signaling metadata used in connect message --sora-signaling-notify-metadata TEXT:JSON Value Signaling metadata - --sora-data-channel-messaging TEXT:JSON Value - DataChannel messaging + --sora-data-channels TEXT:JSON Value + DataChannels --fake-network-send-queue-length-packets UINT Queue length in number of packets for sending --fake-network-send-queue-delay-ms INT diff --git a/doc/USE.md b/doc/USE.md index d0fb4bf..d9cbc79 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -171,7 +171,7 @@ zakuro: role: sendrecv multistream: true data-channel-signaling: true - data-channel-messaging: + data-channels: - label: "#test" direction: "sendrecv" # 省略時は 500 (ms) diff --git a/src/sora/sora_client.cpp b/src/sora/sora_client.cpp index 5d30188..f99d781 100644 --- a/src/sora/sora_client.cpp +++ b/src/sora/sora_client.cpp @@ -343,8 +343,8 @@ void SoraClient::DoSendConnect(bool redirect) { *config_.ignore_disconnect_websocket; } - if (!config_.data_channel_messaging.is_null()) { - json_message["data_channel_messaging"] = config_.data_channel_messaging; + if (!config_.data_channels.is_null()) { + json_message["data_channels"] = config_.data_channels; } ws_->WriteText(boost::json::serialize(json_message), diff --git a/src/sora/sora_client.h b/src/sora/sora_client.h index c18ccef..ecd1964 100644 --- a/src/sora/sora_client.h +++ b/src/sora/sora_client.h @@ -45,7 +45,7 @@ struct SoraClientConfig { int data_channel_signaling_timeout = 180; boost::optional ignore_disconnect_websocket; int disconnect_wait_timeout = 5; - boost::json::value data_channel_messaging; + boost::json::value data_channels; }; class SoraClient : public std::enable_shared_from_this, diff --git a/src/util.cpp b/src/util.cpp index 90e9cb3..6f9409c 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -214,9 +214,9 @@ void Util::ParseArgs(const std::vector& cargs, app.add_option("--sora-signaling-notify-metadata", sora_signaling_notify_metadata, "Signaling metadata") ->check(is_json); - std::string sora_data_channel_messaging; - app.add_option("--sora-data-channel-messaging", sora_data_channel_messaging, - "DataChannel messaging") + std::string sora_data_channels; + app.add_option("--sora-data-channels", sora_data_channels, + "DataChannels") ->check(is_json); // Fake network 系 @@ -344,9 +344,9 @@ void Util::ParseArgs(const std::vector& cargs, config.sora_signaling_notify_metadata = boost::json::parse(sora_signaling_notify_metadata); } - if (!sora_data_channel_messaging.empty()) { - config.sora_data_channel_messaging = - boost::json::parse(sora_data_channel_messaging); + if (!sora_data_channels.empty()) { + config.sora_data_channels = + boost::json::parse(sora_data_channels); } } @@ -518,9 +518,9 @@ std::vector> Util::NodeToArgs(const YAML::Node& inst) { args.push_back("--sora-signaling-notify-metadata"); args.push_back(boost::json::serialize(value)); } - if (sora["data-channel-messaging"]) { - boost::json::value value = NodeToJson(sora["data-channel-messaging"]); - args.push_back("--sora-data-channel-messaging"); + if (sora["data-channels"]) { + boost::json::value value = NodeToJson(sora["data-channels"]); + args.push_back("--sora-data-channels"); args.push_back(boost::json::serialize(value)); } } diff --git a/src/zakuro.cpp b/src/zakuro.cpp index c1c254c..f8c58d3 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -30,7 +30,7 @@ const int MESSAGE_SIZE_MIN = 1; const int MESSAGE_SIZE_MAX = 256 * 1000; const int BINARY_POOL_SIZE = 1 * 1024 * 1024; -struct DataChannelMessaging { +struct DataChannels { struct Channel { std::string label; int interval = 500; @@ -41,16 +41,16 @@ struct DataChannelMessaging { boost::json::value remain; }; -static bool ParseDataChannelMessaging(boost::json::value data_channel_messaging, - DataChannelMessaging& m) { - m = DataChannelMessaging(); - boost::json::value& dcm = data_channel_messaging; +static bool ParseDataChannels(boost::json::value data_channels, + DataChannels& m) { + m = DataChannels(); + boost::json::value& dcm = data_channels; if (!dcm.is_array()) { std::cout << __LINE__ << std::endl; return false; } for (auto& j : dcm.as_array()) { - DataChannelMessaging::Channel ch; + DataChannels::Channel ch; if (!j.is_object()) { std::cout << __LINE__ << std::endl; @@ -265,11 +265,11 @@ int Zakuro::Run() { } // DataChannel メッセージング - DataChannelMessaging dcm; - if (!config_.sora_data_channel_messaging.is_null()) { - if (!ParseDataChannelMessaging(config_.sora_data_channel_messaging, dcm)) { + DataChannels dcs; + if (!config_.sora_data_channels.is_null()) { + if (!ParseDataChannels(config_.sora_data_channels, dcs)) { std::cerr << "[" << config_.name - << "] failed to parse DataChannel messaging" << std::endl; + << "] failed to parse DataChannels" << std::endl; return 2; } } @@ -311,7 +311,7 @@ int Zakuro::Run() { sorac_config.ignore_disconnect_websocket = config_.sora_ignore_disconnect_websocket; sorac_config.disconnect_wait_timeout = config_.sora_disconnect_wait_timeout; - sorac_config.data_channel_messaging = dcm.remain; + sorac_config.data_channels = dcm.remain; for (int i = 0; i < config_.vcs; i++) { auto vc = std::unique_ptr( diff --git a/src/zakuro.h b/src/zakuro.h index f8fc904..bf211fb 100644 --- a/src/zakuro.h +++ b/src/zakuro.h @@ -59,7 +59,7 @@ struct ZakuroConfig { int sora_disconnect_wait_timeout = 5; boost::json::value sora_metadata; boost::json::value sora_signaling_notify_metadata; - boost::json::value sora_data_channel_messaging; + boost::json::value sora_data_channels; webrtc::BuiltInNetworkBehaviorConfig fake_network_send; webrtc::BuiltInNetworkBehaviorConfig fake_network_receive; From 8a64c6fd585c9e01d0ce1022f58989e18ab1e9df Mon Sep 17 00:00:00 2001 From: torikizi Date: Tue, 19 Oct 2021 02:03:19 +0900 Subject: [PATCH 4/9] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=8C=E4=B8=8D?= =?UTF-8?q?=E8=B6=B3=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/zakuro.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/zakuro.cpp b/src/zakuro.cpp index f8c58d3..62f512f 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -45,11 +45,11 @@ static bool ParseDataChannels(boost::json::value data_channels, DataChannels& m) { m = DataChannels(); boost::json::value& dcm = data_channels; - if (!dcm.is_array()) { + if (!dcs.is_array()) { std::cout << __LINE__ << std::endl; return false; } - for (auto& j : dcm.as_array()) { + for (auto& j : dcs.as_array()) { DataChannels::Channel ch; if (!j.is_object()) { @@ -311,7 +311,7 @@ int Zakuro::Run() { sorac_config.ignore_disconnect_websocket = config_.sora_ignore_disconnect_websocket; sorac_config.disconnect_wait_timeout = config_.sora_disconnect_wait_timeout; - sorac_config.data_channels = dcm.remain; + sorac_config.data_channels = dcs.remain; for (int i = 0; i < config_.vcs; i++) { auto vc = std::unique_ptr( @@ -327,7 +327,7 @@ int Zakuro::Run() { // メインのシナリオとは別に、ラベル毎に裏で DataChannel を送信し続けるシナリオを作る std::vector> dcm_data; - for (const auto& ch : dcm.channels) { + for (const auto& ch : dcs.channels) { ScenarioData sd; sd.Sleep(ch.interval, ch.interval); sd.SendDataChannelMessage(ch.label, ch.size_min, ch.size_max); From d6352f7c4959a41cb1d3d736d3e0f7fad39564ae Mon Sep 17 00:00:00 2001 From: torikizi Date: Tue, 19 Oct 2021 08:54:09 +0900 Subject: [PATCH 5/9] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=8C=E8=B6=B3?= =?UTF-8?q?=E3=82=8A=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F?= =?UTF-8?q?=20-=20dcm=20=E3=82=92=20dcs=20=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/zakuro.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 62f512f..3a4ad3c 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -44,7 +44,7 @@ struct DataChannels { static bool ParseDataChannels(boost::json::value data_channels, DataChannels& m) { m = DataChannels(); - boost::json::value& dcm = data_channels; + boost::json::value& dcs = data_channels; if (!dcs.is_array()) { std::cout << __LINE__ << std::endl; return false; @@ -152,7 +152,7 @@ static bool ParseDataChannels(boost::json::value data_channels, m.channels.push_back(ch); } } - m.remain = dcm; + m.remain = dcs; return true; } @@ -326,12 +326,12 @@ int Zakuro::Run() { spc.binary_pool.reset(new BinaryPool(BINARY_POOL_SIZE)); // メインのシナリオとは別に、ラベル毎に裏で DataChannel を送信し続けるシナリオを作る - std::vector> dcm_data; + std::vector> dcs_data; for (const auto& ch : dcs.channels) { ScenarioData sd; sd.Sleep(ch.interval, ch.interval); sd.SendDataChannelMessage(ch.label, ch.size_min, ch.size_max); - dcm_data.push_back(std::make_tuple("scenario-dcm-" + ch.label, sd)); + dcs_data.push_back(std::make_tuple("scenario-dcs-" + ch.label, sd)); } ScenarioPlayer scenario_player(spc); @@ -343,12 +343,12 @@ int Zakuro::Run() { loop_index = 1; } else if (config_.scenario == "") { data.Reconnect(); - for (const auto& d : dcm_data) { + for (const auto& d : dcs_data) { data.PlaySubScenario(std::get<0>(d), std::get<1>(d), 0); } data.Sleep(1000, 5000); data.PlayVoiceNumberClient(); - loop_index = 1 + dcm_data.size(); + loop_index = 1 + dcs_data.size(); } else if (config_.scenario == "reconnect") { data.Reconnect(); data.Sleep(1000, 5000); From 6fdd30cabd26ce20d4094bec543d6f7c5a21c51a Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 19 Oct 2021 14:11:11 +0900 Subject: [PATCH 6/9] =?UTF-8?q?DataChannel=20=E3=83=A1=E3=83=83=E3=82=BB?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=83=B3=E3=82=B0=E3=81=AE=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=AB=E6=99=82=E5=88=BB=E3=81=A8=E3=82=AB=E3=82=A6?= =?UTF-8?q?=E3=83=B3=E3=82=BF=E3=83=BC=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 ++ doc/USE.md | 6 +++--- src/scenario_player.h | 24 +++++++++++++++++++++++- src/sora/sora_client.cpp | 21 ++++++++++++++++++++- src/zakuro.cpp | 6 +++--- 5 files changed, 51 insertions(+), 8 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b817a47..adbd9c4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -19,6 +19,8 @@ - @voluntas - [FIX] Let's Encrypt な証明書の SSL 接続が失敗する問題を修正する - @melpon +- [ADD] DataChannel メッセージングのデータに時刻とカウンターを追加 + - @melpon ## 2021.11 diff --git a/doc/USE.md b/doc/USE.md index d0fb4bf..e3953d7 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -176,8 +176,8 @@ zakuro: direction: "sendrecv" # 省略時は 500 (ms) interval: 1000 - # 省略時は 10 (bytes) - size_min: 10 - # 省略時は 10 (bytes) + # 省略時は 16 (bytes) + size_min: 16 + # 省略時は 16 (bytes) size_max: 100 ``` \ No newline at end of file diff --git a/src/scenario_player.h b/src/scenario_player.h index 546a4e0..87e82f5 100644 --- a/src/scenario_player.h +++ b/src/scenario_player.h @@ -1,6 +1,7 @@ #ifndef SCENARIO_PLAYER_H_ #define SCENARIO_PLAYER_H_ +#include #include #include #include @@ -166,8 +167,28 @@ class ScenarioPlayer { } case ScenarioData::OP_SEND_DATA_CHANNEL_MESSAGE: { auto& op = boost::get(opv); - std::string data = config_.binary_pool->Get(op.min_size, op.max_size); + std::string data = + config_.binary_pool->Get(op.min_size - 16, op.max_size - 16); + + // 先頭に8バイトに現在時刻(マイクロ秒単位の UNIX Time)、次の8バイトにカウンターを入れる + char buf[16]; + uint64_t time = std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(); + for (int i = 0; i < 8; i++) { + buf[i] = (char)((time >> ((7 - i) * 8)) & 0xff); + } + auto& counter = dc_counter_[op.label]; + for (int i = 0; i < 8; i++) { + buf[i + 8] = (char)((counter >> ((7 - i) * 8)) & 0xff); + } + data.insert(data.begin(), buf, buf + sizeof(data)); + + RTC_LOG(LS_INFO) << "Send DataChannel unixtime(us)=" << time + << " counter=" << counter; + (*config_.vcs)[client_id]->SendMessage(op.label, data); + counter += 1; break; } case ScenarioData::OP_DISCONNECT: { @@ -199,6 +220,7 @@ class ScenarioPlayer { std::vector client_infos_; VoiceNumberReader voice_reader_; std::map> sub_scenario_; + std::map dc_counter_; }; #endif diff --git a/src/sora/sora_client.cpp b/src/sora/sora_client.cpp index 5d30188..5566c23 100644 --- a/src/sora/sora_client.cpp +++ b/src/sora/sora_client.cpp @@ -681,7 +681,26 @@ void SoraClient::OnMessage( << " datasize=" << data.size(); // ハンドリングする必要のあるラベル以外は何もしない - if (label != "signaling" && label != "stats") { + if (label != "signaling" && label != "stats" && label[0] != '#') { + return; + } + + // zakuro の場合、DataChannel メッセージは Fake データだけのはずで、 + // その場合は先頭 16 バイトに特定のデータが入っている。 + if (label[0] == '#') { + if (data.size() < 16) { + return; + } + uint64_t time = 0; + for (int i = 0; i < 8; i++) { + time |= ((uint64_t)data[i] & 0xff) << ((7 - i) * 8); + } + uint64_t counter = 0; + for (int i = 0; i < 8; i++) { + counter |= ((uint64_t)data[i + 8] & 0xff) << ((7 - i) * 8); + } + RTC_LOG(LS_INFO) << "Recv DataChannel unixtime(us)=" << time + << " counter=" << counter; return; } diff --git a/src/zakuro.cpp b/src/zakuro.cpp index c1c254c..b0e4216 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -26,7 +26,7 @@ Zakuro::Zakuro(ZakuroConfig config) : config_(std::move(config)) {} -const int MESSAGE_SIZE_MIN = 1; +const int MESSAGE_SIZE_MIN = 16; const int MESSAGE_SIZE_MAX = 256 * 1000; const int BINARY_POOL_SIZE = 1 * 1024 * 1024; @@ -34,8 +34,8 @@ struct DataChannelMessaging { struct Channel { std::string label; int interval = 500; - int size_min = 10; - int size_max = 10; + int size_min = 16; + int size_max = 16; }; std::vector channels; boost::json::value remain; From f7cc17cabe7c1d0f6c9fa540cfccb95223003736 Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 19 Oct 2021 14:11:56 +0900 Subject: [PATCH 7/9] =?UTF-8?q?CLI11=20=E3=82=92=202.1.2=20=E3=81=AB?= =?UTF-8?q?=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 4 ++-- VERSION | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index adbd9c4..7cae15d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,8 +13,8 @@ ## 2021.12 -- [UPDATE] `CLI11` を `2.1.1` に上げる - - @voluntas +- [UPDATE] `CLI11` を `2.1.2` に上げる + - @voluntas @melpon - [UPDATE] libwebrtc のバージョンを `m94.4606.3.4` に上げる - @voluntas - [FIX] Let's Encrypt な証明書の SSL 接続が失敗する問題を修正する diff --git a/VERSION b/VERSION index 0874557..bd39136 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ ZAKURO_VERSION=2021.12 WEBRTC_BUILD_VERSION=94.4606.3.4 BOOST_VERSION=1.77.0 -CLI11_VERSION=2.1.1 +CLI11_VERSION=2.1.2 CMAKE_VERSION=3.21.3 BLEND2D_VERSION=3a0299c9126d19759a483ac3267a52b50ec77141 ASMJIT_VERSION=d0d14ac774977d0060a351f66e35cb57ba0bf59c From 9363bc20c0264e61635083c372d1fc226251dd4a Mon Sep 17 00:00:00 2001 From: voluntas Date: Tue, 19 Oct 2021 15:41:57 +0900 Subject: [PATCH 8/9] =?UTF-8?q?=E8=A4=87=E6=95=B0=E3=82=B7=E3=82=B0?= =?UTF-8?q?=E3=83=8A=E3=83=AA=E3=83=B3=E3=82=B0=20URL=20=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/doc/USE.md b/doc/USE.md index e3953d7..ac9947b 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -180,4 +180,21 @@ zakuro: size_min: 16 # 省略時は 16 (bytes) size_max: 100 -``` \ No newline at end of file +``` + +### 複数シグナリング URL + +```yaml +zakuro: + instances: + - name: zakuro + vcs: 2 + sora: + signaling-url: + - "wss://sora1.example.com/signaling" + - "wss://sora2.example.com/signaling" + - "wss://sora3.example.com/signaling" + channel-id: sora + role: sendrecv + multistream: true +``` From d31e8bfeb781581916d44d8cacc357b262f5a6c1 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Tue, 19 Oct 2021 16:05:58 +0900 Subject: [PATCH 9/9] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=81=A8=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E3=82=92?= =?UTF-8?q?=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 5 +++++ VERSION | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 7cae15d..af09f4b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,11 @@ ## develop +## 2021.13 + +- [CHANGE] data_channel_messaging を data_channles へ変更する + - @torikizi + ## 2021.12 - [UPDATE] `CLI11` を `2.1.2` に上げる diff --git a/VERSION b/VERSION index bd39136..8aa26d7 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ -ZAKURO_VERSION=2021.12 +ZAKURO_VERSION=2021.13 WEBRTC_BUILD_VERSION=94.4606.3.4 BOOST_VERSION=1.77.0 CLI11_VERSION=2.1.2