CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
local_LdnNetworkSetting.h
1 /*--------------------------------------------------------------------------------*
2  Copyright (C)Nintendo All rights reserved.
3 
4  These coded instructions, statements, and computer programs contain proprietary
5  information of Nintendo and/or its licensed developers and are protected by
6  national and international copyright laws. They may not be disclosed to third
7  parties or copied or duplicated in any form, in whole or in part, without the
8  prior written consent of Nintendo.
9 
10  The content herein is highly confidential and should be handled accordingly.
11  *--------------------------------------------------------------------------------*/
12 
13 
14 #pragma once
15 
16 #include <nn/pia/local/local_Definitions.h>
17 #include <nn/pia/local/local_LocalNetworkSetting.h>
18 #include <nn/pia/local/local_LocalSessionTypes.h>
19 
20 #include <nn/pia/common/common_FixedString.h>
21 #if NN_PIA_NINTENDOSDK
22 
23 #include <nn/ldn.h>
24 
25 namespace nn
26 {
27 namespace pia
28 {
29 namespace local
30 {
31 #if NN_PIA_LOCAL_ENABLE_LDN
32 static const uint8_t LdnWirelessCryptoKeySizeMin = nn::ldn::PassphraseSizeMin; //!< 通信に使用する暗号鍵生成のパスフレーズの最小サイズです。
33 static const uint8_t LdnWirelessCryptoKeySizeMax = nn::ldn::PassphraseSizeMax; //!< 通信に使用する暗号鍵生成のパスフレーズの最大サイズです。
34 
35 static const uint32_t LdnBeaconSystemDataSize = 20;
36 static const uint32_t LdnBeaconApplicationDataSizeMax = nn::ldn::AdvertiseDataSizeMax - LdnBeaconSystemDataSize; //!< アプリケーションがビーコンにセットできるデータの最大サイズです。
37 
38 static const uint8_t LdnUserNameSizeMax = nn::ldn::UserNameBytesMax; //!< 通信で使用するユーザー名の最大サイズです。
39 
40 static const int LdnLocalCommunicationVersionMin = nn::ldn::LocalCommunicationVersionMin; //!< ローカル通信バージョンの最小値です。
41 static const int LdnLocalCommunicationVersionMax = nn::ldn::LocalCommunicationVersionMax; //!< ローカル通信バージョンの最大値です。
42 #endif
43 
44 /*!
45  @brief LDN ライブラリを利用したネットワークの設定用クラスです。
46  */
47 class LdnNetworkSetting : public LocalNetworkSetting
48 {
49 public:
50  LdnNetworkSetting()
51  : LocalNetworkSetting(), localCommunicationVersion(LdnLocalCommunicationVersionMin), isEncryptionDisabledForDebug(false)
52  {
53  }
54 
55  virtual ~LdnNetworkSetting()
56  {
57  }
58 
59  /*!
60  @cond PRIVATE
61  */
62  virtual LocalNetworkType GetLocalNetworkType() const
63  {
64  return LocalNetworkType_Ldn;
65  }
66  //! @endcond
67 
68  int localCommunicationVersion; //!< ローカル通信バージョンです。アプリケーションへのパッチの適用などで通信の仕様が変わる場合に、ローカル通信バージョンをインクリメントしておくことで、通信の互換性がないことを表明できます。このバージョンが異なるネットワークは、探索結果として取得することはできますが、接続しようとすると失敗します。@ref LdnLocalCommunicationVersionMin 以上、@ref LdnLocalCommunicationVersionMax 以下の値を指定する必要があります。
69  bool isEncryptionDisabledForDebug; //!< (デバッグ用)データ通信の暗号化を解除するかどうかです。開発機上で動作する場合にのみ解除可能です。製品機ではこの設定は無視され、常に暗号化されます。
70 };
71 
72 /*!
73  @cond PRIVATE
74  @brief LDN ライブラリを利用したネットワーク作成時の設定用クラスです。
75  */
76 class LdnCreateNetworkSetting : public LocalCreateNetworkSetting
77 {
78 public:
79  /*!
80  @brief デフォルトコンストラクタ。
81  */
82  LdnCreateNetworkSetting()
83  : LocalCreateNetworkSetting(),
84  localCommunicationId(0),
85  sceneId(0),
86  maxEntry(0),
87  wirelessCryptoKeySize(0),
88  applicationDataSize(0),
89  channel(0)
90  {
91  memset(wirelessCryptoKey, 0, sizeof(wirelessCryptoKey));
92  memset(applicationData, 0, sizeof(applicationData));
93  }
94 
95  virtual ~LdnCreateNetworkSetting()
96  {
97  }
98 
99  /*!
100  @cond PRIVATE
101  */
102  virtual uint8_t* GetApplicationDataPtr()
103  {
104  return applicationData;
105  }
106  //! @endcond
107 
108  /*!
109  @cond PRIVATE
110  */
111  virtual uint32_t GetApplicationDataSize() const
112  {
113  return applicationDataSize;
114  }
115  //! @endcond
116 
117  /*!
118  @cond PRIVATE
119  */
120  virtual void AddApplicationDataSize(uint32_t size)
121  {
122  applicationDataSize += size;
123  }
124  //! @endcond
125 
126  uint64_t localCommunicationId; //!< ローカル通信識別子です。指定するローカル通信識別子はアプリケーション管理データに登録されている必要があります。
127  uint16_t sceneId; //!< シーン識別子です。アプリが自由に設定可能です。
128  uint16_t maxEntry; //!< ネットワークに接続できるステーションの最大数です。@ref StationMaxEntry 以下である必要があります。
129  uint8_t wirelessCryptoKey[LdnWirelessCryptoKeySizeMax]; //!< 無線レイヤの暗号化に使用する暗号鍵です。サイズが @ref LdnWirelessCryptoKeySizeMin 以上、@ref LdnWirelessCryptoKeySizeMax 以下である必要があります。
130  uint8_t wirelessCryptoKeySize; //!< 無線レイヤの暗号化に使用する暗号鍵のサイズです。@ref LdnWirelessCryptoKeySizeMin 以上、@ref LdnWirelessCryptoKeySizeMax 以下である必要があります。
131 
132  uint8_t applicationData[LdnBeaconApplicationDataSizeMax + LdnBeaconSystemDataSize]; //!< ビーコンにセットしたい任意データです。サイズが @ref LdnBeaconApplicationDataSizeMax 以下である必要があります。
133  uint32_t applicationDataSize; //!< ビーコンにセットしたい任意データのサイズです。@ref LdnBeaconApplicationDataSizeMax 以下である必要があります。
134  int16_t channel; //!< 通信に使用するチャンネルです。0(自動), 1,6,11ch のいずれかを指定する必要があります。製品機で指定した場合は無視され、常に 0(自動)になります。開発機では 5GHz 帯の 36,40,44,48ch も指定できます。
135 };
136 //! @endcond
137 
138 /*!
139  @cond PRIVATE
140  @brief LDN ライブラリを利用したネットワークについての情報を保持するクラスです。
141  */
142 class LdnNetworkDescription : public LocalNetworkDescription
143 {
144 public:
145  /*!
146  @brief デフォルトコンストラクタ。
147  */
148  LdnNetworkDescription()
149  : LocalNetworkDescription()
150 #if NN_PIA_LOCAL_ENABLE_LDN
151  ,
152  m_NetworkInfo()
153 #endif
154  {
155  }
156 
157  virtual ~LdnNetworkDescription()
158  {
159  }
160 
161  /*!
162  @brief ネットワークに参加中のステーション数を取得します。
163 
164  @details 取得できるステーション数はネットワークスキャン時のものです。
165 
166  @return ネットワークに参加中のステーション数です。
167  */
168  virtual uint16_t GetCurrentParticipantNum() const
169  {
170 #if NN_PIA_LOCAL_ENABLE_LDN
171  if (m_NetworkInfo.common.networkType != nn::ldn::NetworkType_Ldn)
172  {
173  return 0;
174  }
175  else
176  {
177  return static_cast<uint16_t>(m_NetworkInfo.ldn.nodeCount);
178  }
179 #else
180  return 0;
181 #endif
182  }
183 
184  /*!
185  @brief ネットワークに参加可能な最大ステーション数を取得します。
186 
187  @return ネットワークに参加可能な最大ステーション数です。
188  */
189  virtual uint16_t GetMaxParticipantNum() const
190  {
191 #if NN_PIA_LOCAL_ENABLE_LDN
192  if (m_NetworkInfo.common.networkType != nn::ldn::NetworkType_Ldn)
193  {
194  return 0;
195  }
196  else
197  {
198  return static_cast<uint16_t>(m_NetworkInfo.ldn.nodeCountMax);
199  }
200 #else
201  return 0;
202 #endif
203  }
204 
205  /*!
206  @brief 参加が許可されているネットワークであるかを取得します。
207 
208  @details 取得できる状態はネットワークスキャン時のものです。
209 
210  @return 参加が許可されているネットワークであるかを返します。
211 
212  @see LocalFacade::DisallowParticipating, LocalFacade::AllowParticipating
213  */
214  virtual bool IsOpened() const
215  {
216 #if NN_PIA_LOCAL_ENABLE_LDN
217  if (m_NetworkInfo.common.networkType != nn::ldn::NetworkType_Ldn)
218  {
219  return false;
220  }
221  else
222  {
223  return m_NetworkInfo.ldn.stationAcceptPolicy == nn::ldn::AcceptPolicy_AlwaysAccept;
224  }
225 #else
226  return false;
227 #endif
228  }
229 
230  uint64_t GetLocalCommunicationId() const
231  {
232 #if NN_PIA_LOCAL_ENABLE_LDN
233  if (m_NetworkInfo.common.networkType != nn::ldn::NetworkType_Ldn)
234  {
235  return 0;
236  }
237  else
238  {
239  return m_NetworkInfo.networkId.intentId.localCommunicationId;
240  }
241 #else
242  return 0;
243 #endif
244  }
245 
246  uint16_t GetSceneId() const
247  {
248 #if NN_PIA_LOCAL_ENABLE_LDN
249  if (m_NetworkInfo.common.networkType != nn::ldn::NetworkType_Ldn)
250  {
251  return 0;
252  }
253  else
254  {
255  return m_NetworkInfo.networkId.intentId.sceneId;
256  }
257 #else
258  return 0;
259 #endif
260  }
261 
262  /*!
263  @brief 通信に使用しているチャンネルを取得します。
264 
265  @details 通常参照する必要はありません。
266 
267  @return 通信に使用しているチャンネルを返します。
268  */
269  virtual uint16_t GetChannel() const
270  {
271 #if NN_PIA_LOCAL_ENABLE_LDN
272  return static_cast<uint16_t>(m_NetworkInfo.common.channel);
273 #else
274  return 0;
275 #endif
276  }
277 
278  /*!
279  @brief BSSID(ホストの MAC アドレス)を取得します。
280 
281  @details BSSID のサイズは @ref local::BssIdSize バイトです。引数には、このサイズのバッファを設定する必要があります。
282 
283  @param[out] pBssidBuffer BSSID を格納するためのバッファです。サイズが @ref local::BssIdSize バイトである必要があります。
284  */
285  virtual void GetBssid(uint8_t* pBssidBuffer) const
286  {
287  if (!PIA_IS_VALID_POINTER(pBssidBuffer))
288  {
289  return;
290  }
291 #if NN_PIA_LOCAL_ENABLE_LDN
292  if (m_NetworkInfo.common.networkType != nn::ldn::NetworkType_Ldn)
293  {
294  return;
295  }
296  else
297  {
298  memcpy(pBssidBuffer, m_NetworkInfo.ldn.nodes[0].macAddress.raw, local::BssIdSize);
299  }
300 #else
301  return;
302 #endif
303  }
304 
305  /*!
306  @cond PRIVATE
307  */
308  virtual uint32_t GetGameMode() const
309  {
310  return static_cast<uint32_t>(GetSceneId());
311  }
312 //! @endcond
313 
314 #if NN_PIA_LOCAL_ENABLE_LDN
315  /*!
316  @cond PRIVATE
317  */
318  const nn::ldn::NetworkInfo& GetNetworkInfo() const
319  {
320  return m_NetworkInfo;
321  }
322  //! @endcond
323 
324  /*!
325  @cond PRIVATE
326  */
327  nn::ldn::NetworkInfo& GetNetworkInfo()
328  {
329  return m_NetworkInfo;
330  }
331  //! @endcond
332 
333  /*!
334  @cond PRIVATE
335  */
336  void SetConnectNetworkSetting(const nn::ldn::NetworkInfo& networkInfo)
337  {
338  m_NetworkInfo = networkInfo;
339  }
340  //! @endcond
341 
342  virtual void Copy(const LocalNetworkDescription* description)
343  {
344  const LdnNetworkDescription* pLdnDesc = static_cast<const LdnNetworkDescription*>(description);
345  m_NetworkInfo = pLdnDesc->GetNetworkInfo();
346  }
347 #endif
348 
349 private:
350 #if NN_PIA_LOCAL_ENABLE_LDN
351  nn::ldn::NetworkInfo m_NetworkInfo; //!< ネットワーク情報です。
352 #endif
353 };
354 //! @endcond
355 
356 /*!
357  @cond PRIVATE
358  @brief LDN ライブラリを利用したネットワークへ接続時の設定用クラスです。
359  */
360 class LdnConnectNetworkSetting : public LocalConnectNetworkSetting
361 {
362 public:
363  LdnConnectNetworkSetting()
364  : LocalConnectNetworkSetting(),
365  wirelessCryptoKeySize(0)
366  {
367  memset(wirelessCryptoKey, 0, sizeof(wirelessCryptoKey));
368  }
369 
370  uint8_t wirelessCryptoKey[LdnWirelessCryptoKeySizeMax]; //!< 無線レイヤの暗号化に使用する暗号鍵です。サイズが @ref LdnWirelessCryptoKeySizeMin 以上、@ref LdnWirelessCryptoKeySizeMax 以下である必要があります。
371  uint8_t wirelessCryptoKeySize; //!< 無線レイヤの暗号化に使用する暗号鍵のサイズです。@ref LdnWirelessCryptoKeySizeMin 以上、@ref LdnWirelessCryptoKeySizeMax 以下である必要があります。
372 };
373 //! @endcond
374 
375 /*!
376 @brief LDN ライブラリを利用したネットワーク探索時のフィルタリング条件です。
377 */
378 enum LdnScanFilterType
379 {
380  LdnScanFilterType_LocalCommunicationIdAndSceneId = 0, //!< ローカル通信識別子とシーン識別子の両方が一致するネットワークを探索します。
381  LdnScanFilterType_LocalCommunicationId //!< ローカル通信識別子が一致する、あらゆるシーン識別子のネットワークを探索します。
382 };
383 
384 /*!
385  @cond PRIVATE
386  @brief LDN ライブラリを利用したネットワーク探索時の設定用クラスです。
387  */
388 class LdnScanNetworkSetting : public LocalScanNetworkSetting
389 {
390 public:
391  LdnScanNetworkSetting()
392  : LocalScanNetworkSetting(),
393  localCommunicationId(0),
394  sceneId(0),
395  channel(0),
396  scanFilterType(LdnScanFilterType_LocalCommunicationIdAndSceneId)
397  {
398  }
399 
400  uint64_t localCommunicationId; //!< ローカル通信識別子です。
401  uint16_t sceneId; //!< シーン識別子です。アプリが自由に設定可能です。
402  int16_t channel; //!< 探索の対象とするチャンネルです。0(自動), 1,6,11ch のいずれかを指定する必要があります。製品機で指定した場合は無視され、常に 0(自動)になります。開発機では 5GHz 帯の 36,40,44,48ch も指定できます。5GHz 帯は 0 を指定してもスキャンの対象になりません。
403  LdnScanFilterType scanFilterType; //!< フィルタリング条件です。
404 };
405 //! @endcond
406 
407 /*!
408 @cond PRIVATE
409 以下はライブラリ内部向けの宣言です。
410 */
411 
412 class LdnBeaconSystemDataHostMigration : public LocalBeaconSystemData
413 {
414 public:
415  LdnBeaconSystemDataHostMigration()
416  {
417  memset(reservedLdnHostMigration, 0, sizeof(reservedLdnHostMigration));
418  }
419 
420  uint8_t reservedLdnHostMigration[8];
421 };
422 
423 /*!
424 ここまでライブラリ内部向けの宣言です。
425 @endcond
426 */
427 
428 
429 /*!
430  @brief LDN ライブラリを利用したネットワークに接続しているステーションについての情報を保持するクラスです。
431  */
432 class LdnStationInfo : public LocalStationInfo
433 {
434 public:
435  LdnStationInfo()
436  {
437  Clear();
438  }
439 
440  virtual void Clear()
441  {
442  LocalStationInfo::Clear();
443  userName.Clear();
444  stationId = StationIdInvalid;
445  }
446 
447  /*!
448  @brief 代入演算子です。
449  @param[in] rhs 代入するオブジェクトです。
450  @return 本オブジェクトへの参照。
451  */
452  LdnStationInfo& operator=(const LdnStationInfo& rhs)
453  {
454  LocalStationInfo::operator=(rhs);
455  userName.Copy(rhs.userName);
456  stationId = rhs.stationId;
457  return *this;
458  }
459 
460  /*!
461  @brief コピーコンストラクタ。
462  @param[in] rhs コピー元のオブジェクトです。
463  */
464  LdnStationInfo(const LdnStationInfo& rhs)
465  : LocalStationInfo(rhs)
466  {
467  userName.Copy(rhs.userName);
468  stationId = rhs.stationId;
469  }
470 
471  common::FixedString<LdnUserNameSizeMax> userName; //!< ユーザーのニックネームです。
472  StationId stationId; //!< 対応する StationId です。自身がセッション参加中には、有効なステーションに設定されます。ブラウズ時にはそのステーションが有効、無効に関わらず @ref nn::pia::StationIdInvalid が設定されます。
473 };
474 }
475 }
476 } // end of namespace nn::pia::local
477 #endif