CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
local_UdsNetworkSetting.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 #if NN_PIA_LOCAL_ENABLE_UDS
18 #include <nn/pia/local/local_LocalNetworkSetting.h>
19 
20 namespace nn
21 {
22 namespace pia
23 {
24 namespace local
25 {
26 
27 static const uint32_t UdsReceiveBufferSizeMin = 4 * 4096; //!< 受信バッファの最小サイズです。
28 static const uint32_t UdsScanBufferSizeMin = 1 * 1024; //!< スキャンバッファの最小サイズです。
29 
30 static const uint8_t UdsWirelessCryptoKeyLengthMin = nn::uds::UDS_PASSPHRASE_LENGTH_MIN; //!< 通信に使用する暗号鍵生成のパスフレーズの最小サイズです。
31 static const uint8_t UdsWirelessCryptoKeyLengthMax = nn::uds::UDS_PASSPHRASE_LENGTH_MAX; //!< 通信に使用する暗号鍵生成のパスフレーズの最大サイズです。
32 
33 static const uint32_t UdsBeaconSystemDataSize = 28;
34 static const uint32_t UdsBeaconApplicationDataSizeMax = nn::uds::NET_DESC_APPDATA_SIZE_MAX - UdsBeaconSystemDataSize; //!< アプリケーションがビーコンにセットできるデータの最大サイズです。
35 
36 /*!
37  @brief UDS ライブラリを利用したネットワークの設定用クラスです。
38  */
40 {
41 public:
45  pReceiveBuffer(NULL),
46  scanBufferSize(0),
47  sendOption(nn::uds::NO_WAIT),
48  receiveOption(nn::uds::NO_WAIT),
50  pUserName(NULL)
51  {
52  }
53 
54  virtual ~UdsNetworkSetting()
55  {
56  }
57 
58  /*!
59  @cond PRIVATE
60  */
61  virtual LocalNetworkType GetLocalNetworkType() const
62  {
63  return LocalNetworkType_Uds;
64  }
65  //! @endcond
66 
67  uint32_t receiveBufferSize; //!< 受信バッファサイズです。@ref local::UdsReceiveBufferSizeMin 以上、かつ、4096 の倍数である必要があります。
68  void* pReceiveBuffer; //!< 受信バッファです。アプリケーション側で確保したバッファを使用したい場合に設定します。4096 バイト整合されている必要があります。設定されなかった場合は、内部で確保します。
69  uint32_t scanBufferSize; //!< スキャン用バッファサイズです。@ref local::UdsScanBufferSizeMin 以上である必要があります。
70  uint8_t sendOption; //!< UDS 送信オプションです。nn::uds::NO_WAIT、nn::uds::FORCE_DIRECT_BC などが設定できます。複数のオプションを設定する場合は、OR 演算子を使用します。
71  uint8_t receiveOption; //!< UDS 受信オプションです。常に nn::uds::NO_WAIT をオンにしてください。複数のオプションを設定する場合は、OR 演算子を使用します。
72  uint8_t applicationVersion; //!< アプリケーションのバージョンです。構築されたネットワークは、この値が異なるバージョンのアプリケーションから発見はされますが、接続には失敗します。
73  nn::cfg::CTR::UserName* pUserName; //!< ユーザー名。
74 };
75 
76 /*!
77  @cond PRIVATE
78  @brief UDS ライブラリを利用したネットワーク作成時の設定用クラスです。
79  */
80 class UdsCreateNetworkSetting : public LocalCreateNetworkSetting
81 {
82 public:
83  /*!
84  @brief デフォルトコンストラクタ。
85  */
86  UdsCreateNetworkSetting()
87  : LocalCreateNetworkSetting(),
88  subId(0),
89  maxEntry(0),
90  localCommunicationId(0),
91  wirelessCryptoKeyLength(0),
92  channel(0),
93  applicationDataSize(0)
94  {
95  memset(wirelessCryptoKey, 0, sizeof(wirelessCryptoKey));
96  memset(applicationData, 0, sizeof(applicationData));
97  }
98 
99  virtual ~UdsCreateNetworkSetting()
100  {
101  }
102 
103  /*!
104  @cond PRIVATE
105  */
106  virtual uint8_t* GetApplicationDataPtr()
107  {
108  return applicationData;
109  }
110  //! @endcond
111 
112  /*!
113  @cond PRIVATE
114  */
115  virtual uint32_t GetApplicationDataSize() const
116  {
117  return applicationDataSize;
118  }
119  //! @endcond
120 
121  /*!
122  @cond PRIVATE
123  */
124  virtual void AddApplicationDataSize(uint32_t size)
125  {
126  applicationDataSize += size;
127  }
128  //! @endcond
129 
130  uint8_t subId; //!< 通信モード識別用 ID です。0x00 から 0xFE の間で設定する必要があります。
131  uint16_t maxEntry; //!< ネットワークに接続できるステーションの最大数です。@ref StationMaxEntry 以下である必要があります。
132  uint32_t localCommunicationId; //!< ローカル通信 ID です。 @ref LocalFacade::CreateLocalCommunicationId で生成した値を指定する必要があります。
133  char wirelessCryptoKey[UdsWirelessCryptoKeyLengthMax]; //!< 無線レイヤの暗号化に使用する暗号鍵です。サイズが @ref UdsWirelessCryptoKeyLengthMin 以上、@ref UdsWirelessCryptoKeyLengthMax 以下である必要があります。
134  uint8_t wirelessCryptoKeyLength; //!< 無線レイヤの暗号化に使用する暗号鍵のサイズです。@ref UdsWirelessCryptoKeyLengthMin 以上、@ref UdsWirelessCryptoKeyLengthMax 以下である必要があります。
135  uint8_t channel; //!< 通信に使用するチャンネルです。0(自動), 1,6,11ch のいずれかを指定する必要があります。製品実機で実行した場合は常にチャンネルを自動で選択します。
136  uint8_t applicationData[UdsBeaconApplicationDataSizeMax + UdsBeaconSystemDataSize]; //!< ビーコンにセットしたい任意データです。サイズが @ref UdsBeaconApplicationDataSizeMax 以下である必要があります。
137  uint32_t applicationDataSize; //!< ビーコンにセットしたい任意データのサイズです。@ref UdsBeaconApplicationDataSizeMax 以下である必要があります。
138 };
139 //! @endcond
140 
141 /*!
142  @cond PRIVATE
143  @brief UDS ライブラリを利用したネットワークについての情報を保持するクラスです。
144  */
145 class UdsNetworkDescription : public LocalNetworkDescription
146 {
147 public:
148  /*!
149  @brief デフォルトコンストラクタ。
150  */
151  UdsNetworkDescription()
152  : LocalNetworkDescription()
153  {
154  }
155 
156  virtual ~UdsNetworkDescription()
157  {
158  }
159 
160  /*!
161  @brief ネットワークに参加中のステーション数を取得します。
162 
163  @details 取得できるステーション数はネットワークスキャン時のものです。
164 
165  @return ネットワークに参加中のステーション数です。
166  */
167  virtual uint16_t GetCurrentParticipantNum() const
168  {
169  return m_NetworkDescription.GetNowEntry();
170  }
171 
172  /*!
173  @brief ネットワークに参加可能な最大ステーション数を取得します。
174 
175  @return ネットワークに参加可能な最大ステーション数です。
176  */
177  virtual uint16_t GetMaxParticipantNum() const
178  {
179  return m_NetworkDescription.GetMaxEntry();
180  }
181 
182  /*!
183  @brief 参加が許可されているネットワークであるかを取得します。
184 
185  @details 取得できる状態はネットワークスキャン時のものです。
186 
187  @return 参加が許可されているネットワークであるかを返します。
188 
189  @see LocalFacade::DisallowParticipating, LocalFacade::AllowParticipating
190  */
191  virtual bool IsOpened() const
192  {
193  return m_NetworkDescription.CanConnectAsClient();
194  }
195 
196  /*!
197  @cond PRIVATE
198  */
199  uint32_t GetLocalCommunicationId() const
200  {
201  return m_NetworkDescription.GetLocalCommunicationId();
202  }
203  //! @endcond
204 
205  /*!
206  @brief 通信モード識別用 ID を取得します。
207 
208  @return 通信モード識別用 ID を返します。
209  */
210  uint8_t GetSubId() const
211  {
212  return m_NetworkDescription.GetSubId();
213  }
214 
215  /*!
216  @brief 通信に使用しているチャンネルを取得します。
217 
218  @details 通常参照する必要はありません。
219 
220  @return 通信に使用しているチャンネルを返します。
221  */
222  virtual uint16_t GetChannel() const
223  {
224  return m_NetworkDescription.GetChannel();
225  }
226 
227  /*!
228  @brief BSSID(ホストの MAC アドレス)を取得します。
229 
230  @details BSSID のサイズは nn::uds::MAC_ADDRESS_SIZE バイトです。引数には、このサイズのバッファを設定する必要があります。
231 
232  @param[out] pBssidBuffer BSSID を格納するためのバッファです。サイズが nn::uds::MAC_ADDRESS_SIZE バイトである必要があります。
233  */
234  virtual void GetBssid(uint8_t* pBssidBuffer) const
235  {
236  if (!PIA_IS_VALID_POINTER(pBssidBuffer))
237  {
238  PIA_TRACE_EX(common::TraceFlagLocal, "Invalid Argument");
239  return;
240  }
241  memcpy(pBssidBuffer, m_NetworkDescription.GetBssid(), nn::uds::MAC_ADDRESS_SIZE);
242  }
243 
244  /*!
245  @cond PRIVATE
246  */
247  virtual uint32_t GetGameMode() const
248  {
249  return static_cast<uint32_t>(GetSubId());
250  }
251  //! @endcond
252 
253  /*!
254  @cond PRIVATE
255  */
256  const nn::uds::NetworkDescription& GetNetworkDescription() const
257  {
258  return m_NetworkDescription;
259  }
260  //! @endcond
261 
262  /*!
263  @cond PRIVATE
264  */
265  nn::uds::NetworkDescription& GetNetworkDescription()
266  {
267  return m_NetworkDescription;
268  }
269  //! @endcond
270 
271  /*!
272  @cond PRIVATE
273  */
274  void SetNetworkDescription(const nn::uds::NetworkDescription& networkDescription)
275  {
276  m_NetworkDescription = networkDescription;
277  }
278  //! @endcond
279 
280  // n2908: NetworkDescription 実体コピー
281  virtual void Copy(const LocalNetworkDescription* description)
282  {
283  const UdsNetworkDescription* pUdsDesc = static_cast<const UdsNetworkDescription*>(description);
284  m_NetworkDescription = pUdsDesc->m_NetworkDescription;
285  }
286 
287 private:
288  nn::uds::NetworkDescription m_NetworkDescription; //!< ネットワーク情報です。
289 };
290 //! @endcond
291 
292 /*!
293  @cond PRIVATE
294  @brief UDS ライブラリを利用したネットワークへ接続時の設定用クラスです。
295  */
296 class UdsConnectNetworkSetting : public LocalConnectNetworkSetting
297 {
298 public:
299  UdsConnectNetworkSetting()
300  : LocalConnectNetworkSetting(),
301  wirelessCryptoKeyLength(0)
302  {
303  memset(wirelessCryptoKey, 0, sizeof(wirelessCryptoKey));
304  }
305 
306  char wirelessCryptoKey[UdsWirelessCryptoKeyLengthMax]; //!< 無線レイヤの暗号化に使用する暗号鍵です。サイズが @ref UdsWirelessCryptoKeyLengthMin 以上、@ref UdsWirelessCryptoKeyLengthMax 以下である必要があります。
307  uint8_t wirelessCryptoKeyLength; //!< 無線レイヤの暗号化に使用する暗号鍵のサイズです。@ref UdsWirelessCryptoKeyLengthMin 以上、@ref UdsWirelessCryptoKeyLengthMax 以下である必要があります。
308 };
309 //! @endcond
310 
311 
312 /*!
313  @cond PRIVATE
314  @brief UDS ライブラリを利用したネットワーク探索時の設定用クラスです。
315  */
316 class UdsScanNetworkSetting : public LocalScanNetworkSetting
317 {
318 public:
319  UdsScanNetworkSetting()
320  : LocalScanNetworkSetting(),
321  subId(0),
322  localCommunicationId(0)
323  {
324  }
325 
326  uint8_t subId; //!< 通信モード識別用 ID です。アプリが自由に設定可能です。0xff を指定するとあらゆる ID を探索します。
327  uint32_t localCommunicationId; //!< ローカル通信 ID です。 @ref LocalFacade::CreateLocalCommunicationId で生成した値を指定する必要があります。
328 };
329 //! @endcond
330 
331 /*!
332 @cond PRIVATE
333 以下はライブラリ内部向けの宣言です。
334 */
335 
336 class UdsBeaconSystemData : public LocalBeaconSystemData
337 {
338 public:
339  UdsBeaconSystemData()
340  : LocalBeaconSystemData()
341  {
342  }
343 };
344 
345 class UdsBeaconSystemDataHostMigration : public LocalBeaconSystemData
346 {
347 public:
348  UdsBeaconSystemDataHostMigration()
349  : networkId(0),
350  applicationVersion(0)
351  {
352  memset(macAddress, 0, sizeof(macAddress));
353  memset(reservedUdsHostMigration, 0, sizeof(reservedUdsHostMigration));
354  }
355 
356  uint32_t networkId; //!< ホストが決めたネットワーク ID。ホストマイグレーション時に接続すべきネットワークかを判断するために使用する。
357  uint8_t applicationVersion; //!< アプリが設定したアプリケーションバージョン
358  uint8_t macAddress[nn::uds::MAC_ADDRESS_SIZE]; //!< ホストマイグレーション後に接続するネットワーク判別用
359  uint8_t reservedUdsHostMigration[5];
360 };
361 
362 /*!
363 ここまでライブラリ内部向けの宣言です。
364 @endcond
365 */
366 
367 
368 /*!
369  @brief UDS ライブラリを利用したネットワークに接続しているステーションについての情報を保持するクラスです。
370  */
372 {
373 public:
375  {
376  Clear();
377  }
378  virtual ~UdsStationInfo()
379  {
380  }
381  virtual void Clear()
382  {
383  memset(scrambledLocalFriendCode.value, 0, sizeof(scrambledLocalFriendCode.value));
384  memset(userName.userName, 0, sizeof(userName.userName));
386  SessionStationInfo::Clear();
387  }
388 
389  nn::uds::ScrambledLocalFriendCode scrambledLocalFriendCode; //!< ローカルフレンドコードに変換可能な情報です。
390  nn::cfg::UserName userName; //!< ユーザー名です。
391  StationId stationId; //!< 対応する StationId です。自身がセッション参加中には、有効なステーションに対して設定されます。ブラウズ時にはそのステーションが有効、無効に関わらず @ref nn::pia::StationIdInvalid が設定されます。
392 };
393 }
394 }
395 } // end of namespace nn::pia::local
396 #endif