flagflag  If you want to see English page, please click "English" Button at Left.
1: 2010-05-22 (土) 10:27:44 admin ソース 現: 2010-05-23 (日) 01:05:19 admin ソース
Line 1: Line 1:
- 03:12:20 - [PRESENCE HANDLER]: Exception in method getagent: System.FormatException: Invalid format for Guid.Guid(string).+*** Invalid format for Guid.Guid [#re2c7dd6] 
 +- ログイン時に Robost.exe がエラーを出して,ログインが取り消される. 
 +- mcs/class/corlib/System/Guid.csの GuidParser (Mono) に src="" が渡されるのが原因 
 +#br 
 + 
 +*** エラーメッセージ [#ma6a3d99] 
 + 03:12:20 - [PRESENCE HANDLER]: Exception in method getagent: System.FormatException: Invalid format for Guid.Guid(string).
  at System.Guid+GuidParser.ParseChar (Char c) [0x00000] in <filename unknown>:0   at System.Guid+GuidParser.ParseChar (Char c) [0x00000] in <filename unknown>:0
  at System.Guid+GuidParser.ParseGuid2 () [0x00000] in <filename unknown>:0   at System.Guid+GuidParser.ParseGuid2 () [0x00000] in <filename unknown>:0
Line 17: Line 23:
  at OpenSim.Server.Handlers.Presence.Presenc​eServerPostHandler.GetAgent (System.Collections.Generic.Dictionary`2​ request) [0x00000] in <filename unknown>:0   at OpenSim.Server.Handlers.Presence.Presenc​eServerPostHandler.GetAgent (System.Collections.Generic.Dictionary`2​ request) [0x00000] in <filename unknown>:0
  at OpenSim.Server.Handlers.Presence.Presenc​eServerPostHandler.Handle (System.String path, System.IO.Stream requestData, OpenSim.Framework.Servers.HttpServer.OSH​ttpRequest httpRequest, OpenSim.Framework.Servers.HttpServer.OSH​ttpResponse httpResponse) [0x00000] in <filename unknown>:0   at OpenSim.Server.Handlers.Presence.Presenc​eServerPostHandler.Handle (System.String path, System.IO.Stream requestData, OpenSim.Framework.Servers.HttpServer.OSH​ttpRequest httpRequest, OpenSim.Framework.Servers.HttpServer.OSH​ttpResponse httpResponse) [0x00000] in <filename unknown>:0
 +
 +
 +*** Mono [#i5077b7b]
 +- エラー自体は Monoのエラー
 +- mcs/class/corlib/System/Guid.csの GuidParserで src="" が渡されるのが原因
 +- つまり,GUIDの検査で NULL文字 "" が渡されて,例外を起こす.
 +- ParseGuid1() で System.IndexOutOfRangeException を起こし,キャッチされて ParseGuid2() に渡され System.FormatException: Invalid format for Guid.Guid(string) を起こす,
 +- 本来は OpenSimのバグだが,GuidParserのコンストラクタで,以下のようにしてしまうのも一つの手
 + public GuidParser (string src)
 + {
 +   if (src=="") {
 +       //System.Console.WriteLine("====> System.GuidParser: Inputed src is null");
 +       src = "00000000-0000-0000-0000-000000000000";
 +   }
 +   _src = src;
 +   Reset ();
 + }
 +
 +*** PresenceService.cs [#mc801b2e]
 +- OpenSim/Services/PresenceService/Presenc​eService.cs の LoginAgent()で Presenceテーブルに HomeRegionIDが設定されないのが原因.
 +- 対策としては,とりあえず ログイン時に Presenceテーブルの HomeRegionIDを "00000000-0000-0000-0000-000000000000" にする
 +       public bool LoginAgent(string userID, UUID sessionID,
 +               UUID secureSessionID)
 +       {
 +           PresenceData[] d = m_Database.Get("UserID", userID);
 + 
 +           PresenceData data = new PresenceData();
 + 
 +           data.UserID = userID;
 +           data.RegionID = UUID.Zero;
 +           data.SessionID = sessionID;
 +           data.Data = new Dictionary<string, string>();
 +           data.Data["SecureSessionID"] = secureSessionID.ToString();
 + +          // added by Fumi.Iseki
 + +          data.Data["HomeRegionID"] = UUID.Zero.ToString();
 + 
 +           m_Database.Store(data);
 + 
 +           m_log.DebugFormat("[PRESENCE SERVICE]: LoginAgent {0} with session {1} and ssession {2}",
 +               userID, sessionID, secureSessionID);
 +           return true;
 +       }
 +- 本来は ホームの情報を GridUserレコードから引っ張って来るべきだが,PresenceのHomeRegionIDは現在はまだ未使用のよう (r12862)
 +#br
 +
 +*** 蛇足 [#z9ca90bb]
 +**** 参考:Presenceの HomeRegionIDを設定する関数例 (ポジション無し.インターフェイス,およびそれを継承している他のクラスにも実装の必要性あり) [#tc1b64e3]
 +       public bool SetHomeRegion(UUID sessionID, UUID homeRegionID)
 +       {
 +           PresenceData data = m_Database.Get(sessionID);
 +           data.Data["HomeRegionID"] = homeRegionID.ToString();
 + 
 +           m_Database.Store(data);
 +           return true;
 +       }
 +
 +**** ログイン時の Presenceテーブルのレコード作成シーケンス [#m5efb2ae]
 +- OpenSim/Services/LLLoginService/LLLoginS​ervice.cs
 +- success = m_PresenceService.LoginAgent(account.Pri​ncipalID.ToString(), session, secureSession);
 +-- OpenSim/Services/PresenceService/Presenc​eService.cs
 +-- LoginAgent() で,Presence データベースのレコードを作成.ただし HomeRegionIDはnull (ParseGuidのエラーの原因)
 +-- 追加項目: GridUserテーブルから HomeRegionIDを引っ張ってくる.または UUID.Zero を入れる.
 +#br
 +
 +**** OpenSim/Services/Interfaces/IPresenceSer​vice.cs を継承するクラス [#p832cab3]
 +-- OpenSim/Services/PresenceService/Presenc​eService.cs
 +-- OpenSim/Services/Connectors/Presence/Pre​senceServiceConnector.cs
 +-- OpenSim/Region/CoreModules/ServiceConnec​torsOut/Presence/LocalPresenceServiceCon​nector.cs
 +-- OpenSim/Region/CoreModules/ServiceConnec​torsOut/Presence/RemotePresenceServiceCo​nnector.cs
 +#br
 +
 +**** HomeRegionIDの設定 [#x7adb4f5]
 +- GridUserテーブルの HomeRegionIDは(ホーム変更時に)OpenSim/Services/UserAccountService/Grid​UserService.cs の SetHome()で設定される
 +- ↑これは OpenSim/Server/Handlers/GridUser/GridUse​rServerPostHandler.cs の SetHomeから呼び出される.
 +#br


トップ   新規 ページ一覧 単語検索 最終更新   ヘルプ   最終更新のRSS 1.0 最終更新のRSS 2.0 最終更新のRSS Atom

サイト内 検索

ログイン

ユーザー名:

パスワード:


パスワード紛失
新規登録

サブ メニュー

ミニカレンダー

前月2024年 5月翌月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
<今日>

オンライン状況

116 人のユーザが現在オンラインです。 (19 人のユーザが xpwiki を参照しています。)

登録ユーザ: 0
ゲスト: 116

もっと...

アクセスカウンタ

今日 : 156156156
昨日 : 1716817168171681716817168
総計 : 2349661723496617234966172349661723496617234966172349661723496617
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com