flagflag  
2: 2010-05-22 (Sat) 10:28:38 admin source 3: 2010-05-22 (Sat) 19:16:09 admin source
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 がエラーを出して,ログインが取り消される. 
 +#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 19: Line 24:
-- mcs/class/corlib/System/Guid.cs+*** 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/Presen​ceService.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
- XXXX GuidParser src = bfe0c255-0000-0000-0000-000000000000 +**** HomeRegionIDの設定 [#x7adb4f5] 
- 111111111111111111111111111111111111111​1111111111111111111111111111111111111111​1111111 +- GridUserテーブルの HomeRegionIDは(ホーム変更時に)OpenSim/Services/UserAccountService/Grid​UserService.cs の SetHome()で設定される 
- 0000 ParseOptChar { = b +- ↑これは OpenSim/Server/Handlers/GridUser/GridUse​rServerPostHandler.cs の SetHomeから呼び出される. 
- 0000 ParseOptChar ( = b +#br
- 0000 ParseOptChar - = - +
- 0000 ParseOptChar - = - +
- 0000 ParseOptChar - = - +
- 0000 ParseOptChar - = +
- 111111111111EEEEEEEEEEEEEEEEEEEEEEEEEEE​EEEEEEEEEEEEEEEEEE1111111111111111111111​1111111+


Front page   New List of Pages Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)

Site Search

Login

Username:

Password:


Lost Password?
Register now!!

Sub Menu

mini Calendar

Last MonthMay 2024Next Month
Su Mo Tu We Th Fr Sa
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
Today

Who's Online

90 user(s) are online (22 user(s) are browsing xpwiki)

Members: 0
Guests: 90

more...

Access Counter

Today : 3868386838683868
Yesterday : 1033710337103371033710337
Total : 2360373823603738236037382360373823603738236037382360373823603738
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com