// カスタム認証処理に必要な情報を request から抽出する
bool ret = false;
if (request.isUseCustomAuth != 0 && s_ProxyCheckResponse.result == (Int32)mun.STREAM.ERRORCODE_ID.RESULT_SUCCESS)
{
string username = "";
string password = "";
for (UInt16 index = 0; index < request.customAuthParametersLen; ++index)
{
// "username" および "password" の情報を取得する
string key = request.customAuthParameters[index].key.text;
mun.STREAM.Binary bin = request.customAuthParameters[index].value.data;
if (key == "username")
{
// UInt8 type = bin.data[0];
UInt16 len = Convert.ToUInt16(bin.data[1] + bin.data[2] * 256);
byte[] data = new byte[len];
Array.Copy(bin.data, 3, data, 0, len);
username = System.Text.Encoding.UTF8.GetString(data);
}
else if (key == "password")
{
// UInt8 type = bin.data[0];
UInt16 len = Convert.ToUInt16(bin.data[1] + bin.data[2] * 256);
byte[] data = new byte[len];
Array.Copy(bin.data, 3, data, 0, len);
password = System.Text.Encoding.UTF8.GetString(data);
}
}
// カスタム認証サーバにデータを送信する
string getParam = "?username=" + username + "&password=" + password;
ret = MunProxySessionToCustomAuthServer.OpSend(
pMunClient, // MUN クライアントの接続情報
(request.isUseClientCustomAuthServerAddress == 0), // サーバ側で設定した認証サーバを利用するかどうか
request.customAuthServerAddress.text, // クライアント側で設定した認証サーバのWebサーバアドレス
(request.isIgnoreCustomAuthError != 0), // 認証サーバ処理内のエラーを無視するかどうか
getParam, // WebサーバへのGETパラメータ
"" // WebサーバへのPOSTパラメータ
);
}
// カスタム認証サーバへの処理を通していない場合、ここで接続失敗の旨を MUN クライアントに送信
if (!ret)
{
// 認証に失敗したので、クライアントUIDを削除
RemoveMunClient(ref pMunClient);
// エラー情報として、送信データを生成する
s_ProxyCheckResponse.clientUid = 0;
s_ProxyCheckResponse.result = (Int16)mun.STREAM.ERRORCODE_ID.RESULT_FAILURE;
s_ProxyCheckResponse.authServerRawData.text = "";
// デバッグ表示
mun.MunLogger.MRSEXT_LOG_DEBUG($"proxy_check done. " +
$"result={s_ProxyCheckResponse.result}, " +
$"proxyClientUId={s_ProxyCheckResponse.clientUid}"
, m_DeclaringType);
// 送信バッファにパッキング
mrs.Buffer buffer = new mrs.Buffer();
buffer.Unread(0xFFFFFFFF);
buffer.Unwrite(0xFFFFFFFF);
if (s_ProxyCheckResponse.Pack(ref buffer))
{
// 認証結果を送信
MunProxySessionToClient.Send_Relay_Anything(pMunClient, s_ProxyCheckResponse.payloadType, ref buffer);
}
}