From: Alan Webb (alan_webb@us.ibm.com)
Fixed the IRC code so that it deals with regions coming and going.0.6.1-post-fixes
							parent
							
								
									4e0a424f9f
								
							
						
					
					
						commit
						62317ded9f
					
				|  | @ -256,20 +256,25 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|             // values that, while independent of the IRC connetion, do still distinguish  | ||||
|             // this region's behavior. | ||||
| 
 | ||||
|             foreach (ChannelState xcs in IRCBridgeModule.m_channels) | ||||
|             lock (IRCBridgeModule.m_channels) | ||||
|             { | ||||
|                 if (cs.IsAPerfectMatchFor(xcs)) | ||||
| 
 | ||||
|                 foreach (ChannelState xcs in IRCBridgeModule.m_channels) | ||||
|                 { | ||||
|                     m_log.DebugFormat("[IRC-Channel-{0}]  Channel state matched", cs.idn); | ||||
|                     cs = xcs; | ||||
|                     break; | ||||
|                 } | ||||
|                 if (cs.IsAConnectionMatchFor(xcs)) | ||||
|                 { | ||||
|                     m_log.DebugFormat("[IRC-Channel-{0}]  Channel matched", cs.idn); | ||||
|                     cs.irc = xcs.irc; | ||||
|                     break; | ||||
|                     if (cs.IsAPerfectMatchFor(xcs)) | ||||
|                     { | ||||
|                         m_log.DebugFormat("[IRC-Channel-{0}]  Channel state matched", cs.idn); | ||||
|                         cs = xcs; | ||||
|                         break; | ||||
|                     } | ||||
|                     if (cs.IsAConnectionMatchFor(xcs)) | ||||
|                     { | ||||
|                         m_log.DebugFormat("[IRC-Channel-{0}]  Channel matched", cs.idn); | ||||
|                         cs.irc = xcs.irc; | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
| 
 | ||||
|             // No entry was found, so this is going to be a new entry. | ||||
|  | @ -281,6 +286,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
| 
 | ||||
|                 if ((cs.irc = new IRCConnector(cs)) != null) | ||||
|                 { | ||||
| 
 | ||||
|                     IRCBridgeModule.m_channels.Add(cs); | ||||
| 
 | ||||
|                     m_log.InfoFormat("[IRC-Channel-{0}] New channel initialized for {1}, nick: {2}, commands {3}, private channels {4}",  | ||||
|  | @ -302,11 +308,12 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                         cs.idn, rs.Region, cs.IrcChannel, cs.Server, cs.Port); | ||||
|             } | ||||
| 
 | ||||
|             m_log.InfoFormat("[IRC-Channel-{0}] Region {1} connected to channel {2} on server {3}:{4}", | ||||
|             m_log.InfoFormat("[IRC-Channel-{0}] Region {1} associated with channel {2} on server {3}:{4}", | ||||
|                         cs.idn, rs.Region, cs.IrcChannel, cs.Server, cs.Port); | ||||
| 
 | ||||
|             // We're finally ready to commit ourselves | ||||
| 
 | ||||
| 
 | ||||
|             return cs; | ||||
| 
 | ||||
|         } | ||||
|  | @ -443,6 +450,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|             // Repeatedly scan the string until all possible | ||||
|             // substitutions have been performed. | ||||
| 
 | ||||
|             // m_log.DebugFormat("[IRC-Channel] Parse[1]: {0}", result); | ||||
| 
 | ||||
|             while (arg.IsMatch(result)) | ||||
|             { | ||||
| 
 | ||||
|  | @ -476,28 +485,26 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                         result = result.Replace(vvar, rs.config.GetString(var,var)); | ||||
|                         break; | ||||
|                 } | ||||
|                 // m_log.DebugFormat("[IRC-Channel] Parse[2]: {0}", result); | ||||
|             } | ||||
| 
 | ||||
|             // m_log.DebugFormat("[IRC-Channel] Parse[3]: {0}", result); | ||||
|             return result; | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         public void Close() | ||||
|         { | ||||
| 
 | ||||
|             m_log.InfoFormat("[IRC-Channel-{0}] Closing channel <{1} to server <{2}:{3}>", | ||||
|             m_log.InfoFormat("[IRC-Channel-{0}] Closing channel <{1}> to server <{2}:{3}>", | ||||
|                              idn, IrcChannel, Server, Port); | ||||
| 
 | ||||
|             m_log.InfoFormat("[IRC-Channel-{0}] There are {1} active clients", | ||||
|                              idn, clientregions.Count); | ||||
| 
 | ||||
|             irc.Close(); | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         public void Open() | ||||
|         { | ||||
|             m_log.InfoFormat("[IRC-Channel-{0}] Opening channel <{1} to server <{2}:{3}>", | ||||
|             m_log.InfoFormat("[IRC-Channel-{0}] Opening channel <{1}> to server <{2}:{3}>", | ||||
|                              idn, IrcChannel, Server, Port); | ||||
| 
 | ||||
|             irc.Open(); | ||||
|  | @ -514,16 +521,30 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|             Open(); | ||||
|         } | ||||
| 
 | ||||
|         // Close is called to ensure that the IRC session is terminated if this is the | ||||
|         // only client. | ||||
| 
 | ||||
|         public void Close(RegionState rs) | ||||
|         { | ||||
|             RemoveRegion(rs); | ||||
|             lock (IRCBridgeModule.m_channels) | ||||
|             { | ||||
|                 if (clientregions.Count == 0) | ||||
|                 { | ||||
|                     Close(); | ||||
|                     IRCBridgeModule.m_channels.Remove(this); | ||||
|                     m_log.InfoFormat("[IRC-Channel-{0}] Region {1} is last user of channel <{2}> to server <{3}:{4}>", | ||||
|                              idn, rs.Region, IrcChannel, Server, Port); | ||||
|                     m_log.InfoFormat("[IRC-Channel-{0}] Removed", idn); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // Add a client region to this channel if it is not already known | ||||
| 
 | ||||
|         public void AddRegion(RegionState rs) | ||||
|         { | ||||
|             m_log.InfoFormat("[IRC-Channel-{0}] Adding region {1} to channel <{2} to server <{3}:{4}>", | ||||
|             m_log.InfoFormat("[IRC-Channel-{0}] Adding region {1} to channel <{2}> to server <{3}:{4}>", | ||||
|                              idn, rs.Region, IrcChannel, Server, Port); | ||||
|             if (!clientregions.Contains(rs)) | ||||
|             { | ||||
|  | @ -568,28 +589,30 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                 // Note that this code is responsible for completing some of the | ||||
|                 // settings for the inbound OSChatMessage | ||||
| 
 | ||||
|                 foreach (ChannelState cs in IRCBridgeModule.m_channels) | ||||
|                 lock (IRCBridgeModule.m_channels) | ||||
|                 { | ||||
|                     if ( p_irc == cs.irc) | ||||
|                     foreach (ChannelState cs in IRCBridgeModule.m_channels) | ||||
|                     { | ||||
| 
 | ||||
|                         // This non-IRC differentiator moved to here | ||||
| 
 | ||||
|                         if (cmsg && !cs.ClientReporting) | ||||
|                             continue; | ||||
| 
 | ||||
|                         // This non-IRC differentiator moved to here | ||||
| 
 | ||||
|                         c.Channel = (cs.RelayPrivateChannels ? cs.RelayChannel : 0); | ||||
| 
 | ||||
|                         foreach (RegionState region in cs.clientregions) | ||||
|                         if ( p_irc == cs.irc) | ||||
|                         { | ||||
|                             region.OSChat(cs.irc, c); | ||||
|                         } | ||||
| 
 | ||||
|                             // This non-IRC differentiator moved to here | ||||
| 
 | ||||
|                             if (cmsg && !cs.ClientReporting) | ||||
|                                 continue; | ||||
| 
 | ||||
|                             // This non-IRC differentiator moved to here | ||||
| 
 | ||||
|                             c.Channel = (cs.RelayPrivateChannels ? cs.RelayChannel : 0); | ||||
| 
 | ||||
|                             foreach (RegionState region in cs.clientregions) | ||||
|                             { | ||||
|                                 region.OSChat(cs.irc, c); | ||||
|                             } | ||||
| 
 | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|  |  | |||
|  | @ -49,11 +49,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|         internal static bool   enabled    = false; | ||||
|         internal static IConfig m_config  = null; | ||||
| 
 | ||||
|         internal static List<RegionState>  m_regions  = new List<RegionState>(); | ||||
|         internal static List<ChannelState> m_channels = new List<ChannelState>(); | ||||
|         internal static List<RegionState>  m_regions  = new List<RegionState>(); | ||||
| 
 | ||||
|         internal static string password = String.Empty; | ||||
| 
 | ||||
|         internal RegionState region = null; | ||||
| 
 | ||||
|         #region IRegionModule Members | ||||
| 
 | ||||
|         public string Name | ||||
|  | @ -63,7 +65,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
| 
 | ||||
|         public bool IsSharedModule | ||||
|         { | ||||
|             get { return true; } | ||||
|             get { return false; } | ||||
|         } | ||||
| 
 | ||||
|         public void Initialise(Scene scene, IConfigSource config) | ||||
|  | @ -110,13 +112,18 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|             // Iff the IRC bridge is enabled, then each new region may be  | ||||
|             // connected to IRC. But it should NOT be obligatory (and it  | ||||
|             // is not). | ||||
|             // We have to do ALL of the startup here because PostInitialize | ||||
|             // is not called when a region gets created in-flight from the | ||||
|             // command line. | ||||
|               | ||||
|             if (enabled) | ||||
|             { | ||||
|                 try | ||||
|                 { | ||||
|                     m_log.InfoFormat("[IRC-Bridge] Connecting region {0}", scene.RegionInfo.RegionName); | ||||
|                     m_regions.Add(new RegionState(scene, m_config)); | ||||
|                     region = new RegionState(scene, m_config); | ||||
|                     lock(m_regions) m_regions.Add(region); | ||||
|                     region.Open(); | ||||
|                 } | ||||
|                 catch (Exception e) | ||||
|                 { | ||||
|  | @ -131,37 +138,17 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         // Called after all region modules have been loaded. | ||||
|         // Iff the IRC bridge is enabled, then start all of the | ||||
|         // configured channels. The set of channels is a side | ||||
|         // effect of RegionState creation. | ||||
|         // This module can be called in-flight in which case PostInitialize | ||||
|         // is not called following Initialize. So no use is made of this | ||||
|         // call. | ||||
| 
 | ||||
|         public void PostInitialise() | ||||
|         { | ||||
| 
 | ||||
|             if (!enabled) | ||||
|                 return; | ||||
| 
 | ||||
|             foreach (RegionState region in m_regions) | ||||
|             { | ||||
|                 m_log.InfoFormat("[IRC-Bridge] Opening connection for {0}:{1} on IRC server {2}:{3}", | ||||
|                             region.Region, region.cs.BaseNickname, region.cs.Server, region.cs.IrcChannel); | ||||
|                 try | ||||
|                 { | ||||
|                     region.Open(); | ||||
|                 } | ||||
|                 catch (Exception e) | ||||
|                 { | ||||
|                     m_log.ErrorFormat("[IRC-Bridge] Open failed for {0}:{1} on IRC server {2}:{3} : {4}", | ||||
|                             region.Region, region.cs.BaseNickname, region.cs.Server, region.cs.IrcChannel, | ||||
|                             e.Message); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         // Called immediately before the region module is unloaded. Close all | ||||
|         // associated channels. | ||||
|         // Called immediately before the region module is unloaded. Cleanup | ||||
|         // the region. | ||||
| 
 | ||||
|         public void Close() | ||||
|         { | ||||
|  | @ -169,47 +156,14 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|             if (!enabled) | ||||
|                 return; | ||||
| 
 | ||||
|             // Stop each of the region sessions | ||||
| 
 | ||||
|             foreach (RegionState region in m_regions) | ||||
|             { | ||||
|                 m_log.InfoFormat("[IRC-Bridge] Closing connection for {0}:{1} on IRC server {2}:{3}", | ||||
|                             region.Region, region.cs.BaseNickname, region.cs.Server, region.cs.IrcChannel); | ||||
|                 try | ||||
|                 { | ||||
|                     region.Close(); | ||||
|                 } | ||||
|                 catch (Exception e) | ||||
|                 { | ||||
|                     m_log.ErrorFormat("[IRC-Bridge] Close failed for {0}:{1} on IRC server {2}:{3} : {4}", | ||||
|                             region.Region, region.cs.BaseNickname, region.cs.Server, region.cs.IrcChannel, | ||||
|                             e.Message); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             // Perform final cleanup of the channels (they now have no active clients) | ||||
| 
 | ||||
|             foreach (ChannelState channel in m_channels) | ||||
|             { | ||||
|                 m_log.InfoFormat("[IRC-Bridge] Closing connection for {0} on IRC server {1}:{2}", | ||||
|                             channel.BaseNickname, channel.Server, channel.IrcChannel); | ||||
|                 try | ||||
|                 { | ||||
|                     channel.Close(); | ||||
|                 } | ||||
|                 catch (Exception e) | ||||
|                 { | ||||
|                     m_log.ErrorFormat("[IRC-Bridge] Close failed for {0} on IRC server {1}:{2} : {3}", | ||||
|                             channel.BaseNickname, channel.Server, channel.IrcChannel, | ||||
|                             e.Message); | ||||
|                 } | ||||
|             } | ||||
|             region.Close(); | ||||
|             lock(m_regions) m_regions.Remove(region); | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         #endregion | ||||
| 
 | ||||
|         public XmlRpcResponse XmlRpcAdminMethod(XmlRpcRequest request) | ||||
|         public static XmlRpcResponse XmlRpcAdminMethod(XmlRpcRequest request) | ||||
|         { | ||||
| 
 | ||||
|             m_log.Info("[IRC-Bridge]: XML RPC Admin Entry"); | ||||
|  |  | |||
|  | @ -57,6 +57,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|         private const  int  WD_INTERVAL = 1000;     // base watchdog interval | ||||
|         private static int  PING_PERIOD = 15;       // WD intervals per PING | ||||
|         private static int  ICCD_PERIOD = 10;       // WD intervals between Connects | ||||
|         private static int  L_TIMEOUT   = 10;       // Login time out interval | ||||
| 
 | ||||
|         private static int _idk_        = 0;        // core connector identifier | ||||
|         private static int _pdk_        = 0;        // ping interval counter | ||||
|  | @ -118,6 +119,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|         } | ||||
| 
 | ||||
|         private bool m_connected = false;        // connection status | ||||
|         private bool m_pending   = false;        // login disposition | ||||
|         private int  m_timeout   = L_TIMEOUT;    // login timeout counter | ||||
|         public bool Connected | ||||
|         { | ||||
|             get { return m_connected; } | ||||
|  | @ -326,6 +329,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                     if (m_connected) return; | ||||
| 
 | ||||
|                     m_connected = true; | ||||
|                     m_pending   = true; | ||||
|                     m_timeout   = L_TIMEOUT; | ||||
| 
 | ||||
|                     m_tcp    = new TcpClient(m_server, (int)m_port); | ||||
|                     m_stream = m_tcp.GetStream(); | ||||
|  | @ -349,8 +354,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                     m_writer.WriteLine(String.Format("JOIN {0}", m_ircChannel)); | ||||
|                     m_writer.Flush(); | ||||
| 
 | ||||
|                     m_log.InfoFormat("[IRC-Connector-{0}]: {1} has joined {2}", idn, m_nick, m_ircChannel); | ||||
|                     m_log.InfoFormat("[IRC-Connector-{0}] Connected", idn); | ||||
|                     m_log.InfoFormat("[IRC-Connector-{0}]: {1} has asked to join {2}", idn, m_nick, m_ircChannel); | ||||
| 
 | ||||
|                 } | ||||
|                 catch (Exception e) | ||||
|  | @ -358,6 +362,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                     m_log.ErrorFormat("[IRC-Connector-{0}] cannot connect {1} to {2}:{3}: {4}", | ||||
|                                       idn, m_nick, m_server, m_port, e.Message); | ||||
|                     m_connected = false; | ||||
|                     m_pending   = false; | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
|  | @ -396,6 +401,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                     try { m_tcp.Close();    } catch (Exception) {} | ||||
| 
 | ||||
|                     m_connected = false; | ||||
|                     m_pending   = false; | ||||
| 
 | ||||
|                 } | ||||
| 
 | ||||
|  | @ -516,7 +522,12 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                 // m_log.Debug(e); | ||||
|             } | ||||
| 
 | ||||
|             // This is potentially circular, but harmless if so. | ||||
|             // The connection is marked as not connected the first time | ||||
|             // through reconnect. | ||||
| 
 | ||||
|             if (m_enabled) Reconnect(); | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         private Regex RE = new Regex(@":(?<nick>[\w-]*)!(?<user>\S*) PRIVMSG (?<channel>\S+) :(?<msg>.*)",  | ||||
|  | @ -615,7 +626,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                 case "003" : // Welcome ... | ||||
|                     break; | ||||
|                 case "004" : // Server information | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] parms = <{1}>", idn, parms); | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] [{1}] parms = <{2}>", idn, cmd, parms); | ||||
|                     commArgs = parms.Split(CS_SPACE); | ||||
|                     c_server = commArgs[1]; | ||||
|                     m_server = c_server; | ||||
|  | @ -639,10 +650,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                 case "366" : // End-of-Name list marker | ||||
|                 case "372" : // MOTD body | ||||
|                 case "375" : // MOTD start | ||||
|                     m_log.InfoFormat("[IRC-Connector-{0}] {1}", idn, parms.Split(CS_SPACE,2)[1]); | ||||
|                     m_log.InfoFormat("[IRC-Connector-{0}] [{1}] {2}", idn, cmd, parms.Split(CS_SPACE,2)[1]); | ||||
|                     break; | ||||
|                 case "376" : // MOTD end | ||||
|                     m_log.InfoFormat("[IRC-Connector-{0}] {1}", idn, parms.Split(CS_SPACE,2)[1]); | ||||
|                     m_log.InfoFormat("[IRC-Connector-{0}] [{1}] {2}", idn, cmd, parms.Split(CS_SPACE,2)[1]); | ||||
|                     motd = true; | ||||
|                     break; | ||||
|                 case "451" : // Not registered | ||||
|  | @ -650,7 +661,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                 case "433" : // Nickname in use | ||||
|                     // Gen a new name | ||||
|                     m_nick = m_baseNick + Util.RandomClass.Next(1, 99); | ||||
|                     m_log.ErrorFormat("[IRC-Connector-{0}]: IRC SERVER reports NicknameInUse, trying {1}", idn, m_nick); | ||||
|                     m_log.ErrorFormat("[IRC-Connector-{0}]: [{1}] IRC SERVER reports NicknameInUse, trying {2}", idn, cmd, m_nick); | ||||
|                     // Retry | ||||
|                     m_writer.WriteLine(String.Format("NICK {0}", m_nick)); | ||||
|                     m_writer.Flush(); | ||||
|  | @ -659,43 +670,57 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                     m_writer.WriteLine(String.Format("JOIN {0}", m_ircChannel)); | ||||
|                     m_writer.Flush(); | ||||
|                     break; | ||||
|                 case "479" : // Bad channel name, etc. This will never work, so disable the connection | ||||
|                     m_log.ErrorFormat("[IRC-Connector-{0}] [{1}] {2}", idn, cmd, parms.Split(CS_SPACE,2)[1]); | ||||
|                     m_log.ErrorFormat("[IRC-Connector-{0}] [{1}] Connector disabled", idn, cmd); | ||||
|                     m_enabled   = false; | ||||
|                     m_connected = false; | ||||
|                     m_pending   = false; | ||||
|                     break; | ||||
|                 case "NOTICE" : | ||||
|                     m_log.WarnFormat("[IRC-Connector-{0}] {1}", idn, parms.Split(CS_SPACE,2)[1]); | ||||
|                     m_log.WarnFormat("[IRC-Connector-{0}] [{1}] {2}", idn, cmd, parms.Split(CS_SPACE,2)[1]); | ||||
|                     break; | ||||
|                 case "ERROR"  : | ||||
|                     m_log.ErrorFormat("[IRC-Connector-{0}] {1}", idn, parms.Split(CS_SPACE,2)[1]); | ||||
|                     m_log.ErrorFormat("[IRC-Connector-{0}] [{1}] {2}", idn, cmd, parms.Split(CS_SPACE,2)[1]); | ||||
|                     if (parms.Contains("reconnect too fast")) | ||||
|                         ICCD_PERIOD++; | ||||
|                     m_pending   = false; | ||||
|                     Reconnect(); | ||||
|                     break; | ||||
|                 case "PING"   : | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] parms = <{1}>", idn, parms); | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] [{1}] parms = <{2}>", idn, cmd, parms); | ||||
|                     m_writer.WriteLine(String.Format("PONG {0}", parms)); | ||||
|                     m_writer.Flush(); | ||||
|                     break; | ||||
|                 case "PONG"   : | ||||
|                     break; | ||||
|                 case "JOIN": | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] parms = <{1}>", idn, parms); | ||||
|                     if (m_pending) | ||||
|                     { | ||||
|                         m_log.InfoFormat("[IRC-Connector-{0}] [{1}] Connected", idn, cmd); | ||||
|                         m_pending = false; | ||||
|                     } | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] [{1}] parms = <{2}>", idn, cmd, parms); | ||||
|                     eventIrcJoin(pfx, cmd, parms); | ||||
|                     break; | ||||
|                 case "PART": | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] parms = <{1}>", idn, parms); | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] [{1}] parms = <{2}>", idn, cmd, parms); | ||||
|                     eventIrcPart(pfx, cmd, parms); | ||||
|                     break; | ||||
|                 case "MODE": | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] parms = <{1}>", idn, parms); | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] [{1}] parms = <{2}>", idn, cmd, parms); | ||||
|                     eventIrcMode(pfx, cmd, parms); | ||||
|                     break; | ||||
|                 case "NICK": | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] parms = <{1}>", idn, parms); | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] [{1}] parms = <{2}>", idn, cmd, parms); | ||||
|                     eventIrcNickChange(pfx, cmd, parms); | ||||
|                     break; | ||||
|                 case "KICK": | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] parms = <{1}>", idn, parms); | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] [{1}] parms = <{2}>", idn, cmd, parms); | ||||
|                     eventIrcKick(pfx, cmd, parms); | ||||
|                     break; | ||||
|                 case "QUIT": | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] parms = <{1}>", idn, parms); | ||||
|                     m_log.DebugFormat("[IRC-Connector-{0}] [{1}] parms = <{2}>", idn, cmd, parms); | ||||
|                     eventIrcQuit(pfx, cmd, parms); | ||||
|                     break; | ||||
|                 default    : | ||||
|  | @ -813,6 +838,18 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                     } | ||||
|                     else | ||||
|                     { | ||||
| 
 | ||||
|                         if (connector.m_pending) | ||||
|                         { | ||||
|                             if (connector.m_timeout == 0) | ||||
|                             { | ||||
|                                 m_log.ErrorFormat("[IRC-Watchdog] Login timed-out for connector {0}, reconnecting", connector.idn); | ||||
|                                 connector.Reconnect(); | ||||
|                             } | ||||
|                             else | ||||
|                                 connector.m_timeout--; | ||||
|                         } | ||||
| 
 | ||||
|                         if (_pdk_ == 0) | ||||
|                         { | ||||
|                             try | ||||
|  | @ -827,6 +864,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|                                 connector.Reconnect(); | ||||
|                             } | ||||
|                         } | ||||
| 
 | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  |  | |||
|  | @ -123,6 +123,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
|         } | ||||
| 
 | ||||
|         // Called by IRCBridgeModule.Close immediately prior to unload | ||||
|         // of the module for this region. This happens when the region | ||||
|         // is being removed or the server is terminating. The IRC | ||||
|         // BridgeModule will remove the region from the region list | ||||
|         // when control returns. | ||||
| 
 | ||||
|         public void Close() | ||||
|         { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Dr Scofield
						Dr Scofield