more cosmetics

This commit is contained in:
UbitUmarov 2023-01-21 15:49:46 +00:00
parent 3011368fd0
commit eea5d14ec6
6 changed files with 454 additions and 492 deletions

View File

@ -4604,7 +4604,7 @@ Label_GroupsDone:
sp.Name, sp.UUID, Name);
return false;
}
if (cAgentData.SessionID != sp.ControllingClient.SessionId)
if (cAgentData.SessionID.NotEqual(sp.ControllingClient.SessionId))
{
m_log.WarnFormat(
"[SCENE]: Attempt to update agent {0} with diferent session id {1} != {2}",

File diff suppressed because it is too large Load Diff

View File

@ -88,56 +88,57 @@ namespace OpenSim.Region.ScriptEngine.Yengine
*/
private static Dictionary<Type, int> PrecedenceInit()
{
Dictionary<Type, int> p = new Dictionary<Type, int>();
Dictionary<Type, int> p = new Dictionary<Type, int>
{
// http://www.lslwiki.net/lslwiki/wakka.php?wakka=operators
// http://www.lslwiki.net/lslwiki/wakka.php?wakka=operators
{ typeof(TokenKwComma), 30 },
p.Add(typeof(TokenKwComma), 30);
{ typeof(TokenKwAsnLSh), ASNPR }, // all assignment operators of equal precedence
{ typeof(TokenKwAsnRSh), ASNPR }, // ... so they get processed strictly right-to-left
{ typeof(TokenKwAsnAdd), ASNPR },
{ typeof(TokenKwAsnAnd), ASNPR },
{ typeof(TokenKwAsnSub), ASNPR },
{ typeof(TokenKwAsnMul), ASNPR },
{ typeof(TokenKwAsnDiv), ASNPR },
{ typeof(TokenKwAsnMod), ASNPR },
{ typeof(TokenKwAsnOr), ASNPR },
{ typeof(TokenKwAsnXor), ASNPR },
{ typeof(TokenKwAssign), ASNPR },
p.Add(typeof(TokenKwAsnLSh), ASNPR); // all assignment operators of equal precedence
p.Add(typeof(TokenKwAsnRSh), ASNPR); // ... so they get processed strictly right-to-left
p.Add(typeof(TokenKwAsnAdd), ASNPR);
p.Add(typeof(TokenKwAsnAnd), ASNPR);
p.Add(typeof(TokenKwAsnSub), ASNPR);
p.Add(typeof(TokenKwAsnMul), ASNPR);
p.Add(typeof(TokenKwAsnDiv), ASNPR);
p.Add(typeof(TokenKwAsnMod), ASNPR);
p.Add(typeof(TokenKwAsnOr), ASNPR);
p.Add(typeof(TokenKwAsnXor), ASNPR);
p.Add(typeof(TokenKwAssign), ASNPR);
{ typeof(TokenKwQMark), 60 },
p.Add(typeof(TokenKwQMark), 60);
{ typeof(TokenKwOrOrOr), 70 },
{ typeof(TokenKwAndAndAnd), 80 },
p.Add(typeof(TokenKwOrOrOr), 70);
p.Add(typeof(TokenKwAndAndAnd), 80);
{ typeof(TokenKwOrOr), 100 },
p.Add(typeof(TokenKwOrOr), 100);
{ typeof(TokenKwAndAnd), 120 },
p.Add(typeof(TokenKwAndAnd), 120);
{ typeof(TokenKwOr), 140 },
p.Add(typeof(TokenKwOr), 140);
{ typeof(TokenKwXor), 160 },
p.Add(typeof(TokenKwXor), 160);
{ typeof(TokenKwAnd), 180 },
p.Add(typeof(TokenKwAnd), 180);
{ typeof(TokenKwCmpEQ), 200 },
{ typeof(TokenKwCmpNE), 200 },
p.Add(typeof(TokenKwCmpEQ), 200);
p.Add(typeof(TokenKwCmpNE), 200);
{ typeof(TokenKwCmpLT), 240 },
{ typeof(TokenKwCmpLE), 240 },
{ typeof(TokenKwCmpGT), 240 },
{ typeof(TokenKwCmpGE), 240 },
p.Add(typeof(TokenKwCmpLT), 240);
p.Add(typeof(TokenKwCmpLE), 240);
p.Add(typeof(TokenKwCmpGT), 240);
p.Add(typeof(TokenKwCmpGE), 240);
{ typeof(TokenKwRSh), 260 },
{ typeof(TokenKwLSh), 260 },
p.Add(typeof(TokenKwRSh), 260);
p.Add(typeof(TokenKwLSh), 260);
{ typeof(TokenKwAdd), 280 },
{ typeof(TokenKwSub), 280 },
p.Add(typeof(TokenKwAdd), 280);
p.Add(typeof(TokenKwSub), 280);
p.Add(typeof(TokenKwMul), 320);
p.Add(typeof(TokenKwDiv), 320);
p.Add(typeof(TokenKwMod), 320);
{ typeof(TokenKwMul), 320 },
{ typeof(TokenKwDiv), 320 },
{ typeof(TokenKwMod), 320 }
};
return p;
}
@ -713,17 +714,15 @@ namespace OpenSim.Region.ScriptEngine.Yengine
public Token CatalogSDTypeDecl(TokenDeclSDType decl)
{
string longName = decl.longName.val;
TokenDeclSDType dupDecl;
if(!tokenScript.sdSrcTypesTryGetValue(longName, out dupDecl))
if (!tokenScript.sdSrcTypesTryGetValue(longName, out TokenDeclSDType dupDecl))
{
tokenScript.sdSrcTypesAdd(longName, decl);
if(decl.outerSDType != null)
decl.outerSDType.innerSDTypes.Add(decl.shortName.val, decl);
decl.outerSDType?.innerSDTypes.Add(decl.shortName.val, decl);
return null;
}
if(!dupDecl.isPartial || !decl.isPartial)
if (!dupDecl.isPartial || !decl.isPartial)
{
ErrorMsg(decl, "duplicate definition of type " + longName);
ErrorMsg(dupDecl, "previous definition here");
@ -3649,7 +3648,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
condExpr.falseExpr = ParseRVal(ref token, termTokenTypes);
condExpr.prevToken = operands.prevToken;
operands = condExpr;
termTokenTypes = new Type[0];
termTokenTypes = Array.Empty<Type>();
goto done;
}
@ -4458,15 +4457,14 @@ namespace OpenSim.Region.ScriptEngine.Yengine
// Splice instantiation (instdecl) in just before the beginning token of prototype (this.begToken).
SpliceSourceToken(instdecl);
// Now for the fun part... Copy the rest of the prototype body to the
// instantiated body, replacing all generic parameter type tokens with
// the corresponding generic argument types. Note that the parameters
// are numbered starting with the outermost so we need the full genArgs
// array. Eg if we are doing 'Converter<V=float>' from
// 'Dictionary<T=string,U=integer>.Converter<V=float>', any V's are
// numbered [2]. Any [0]s or [1]s should be gone by now but it doesn't
// matter.
int index;
// Now for the fun part... Copy the rest of the prototype body to the
// instantiated body, replacing all generic parameter type tokens with
// the corresponding generic argument types. Note that the parameters
// are numbered starting with the outermost so we need the full genArgs
// array. Eg if we are doing 'Converter<V=float>' from
// 'Dictionary<T=string,U=integer>.Converter<V=float>', any V's are
// numbered [2]. Any [0]s or [1]s should be gone by now but it doesn't
// matter.
Token it, pt;
TokenDeclSDType innerProto = this;
TokenDeclSDType innerInst = instdecl;
@ -4479,10 +4477,9 @@ namespace OpenSim.Region.ScriptEngine.Yengine
// if generic, eg doing Converter<W> of Dictionary<T,U>.Converter<W>, we have to manually copy the W as well.
// 2) outerSDType is transformed from Dictionary<T,U> to Dictionary<string,integer>.
// 3) innerSDTypes is rebuilt when/if we find classes that are inner to this one.
if(pt is TokenDeclSDType)
if(pt is TokenDeclSDType ptSDType)
{
// Make a new TokenDeclSDType{Class,Delegate,Interface}.
TokenDeclSDType ptSDType = (TokenDeclSDType)pt;
TokenDeclSDType itSDType = ptSDType.MakeBlank(new TokenName(ptSDType.shortName, ptSDType.shortName.val));
// Set up the transformed outerSDType.
@ -4507,7 +4504,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
}
// Check for an generic parameter to substitute out.
else if((pt is TokenName) && this.genParams.TryGetValue(((TokenName)pt).val, out index))
else if((pt is TokenName) && this.genParams.TryGetValue(((TokenName)pt).val, out int index))
{
it = genArgs[index].CopyToken(pt);
}
@ -4602,8 +4599,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
*/
protected TokenType MakeTypeToken(string name)
{
TokenDeclSDType sdtdecl;
if(sdTypes.TryGetValue(name, out sdtdecl))
if (sdTypes.TryGetValue(name, out TokenDeclSDType sdtdecl))
return sdtdecl.MakeRefToken(this);
return TokenType.FromLSLType(this, name);
}
@ -4890,8 +4886,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
{
int i = sm.methVTI;
string methName = sm.methName;
DynamicMethod dm;
if(scriptObjCode.dynamicMethods.TryGetValue(methName, out dm))
if (scriptObjCode.dynamicMethods.TryGetValue(methName, out DynamicMethod dm))
{
// method is not abstract
vDynMeths[i] = dm;
@ -5112,10 +5107,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
{
retStr = objFileReader.ReadString();
int nArgs = objFileReader.ReadInt32();
if(asmFileWriter != null)
{
asmFileWriter.Write(" delegate " + retStr + " " + longName.val + "(");
}
asmFileWriter?.Write(" delegate " + retStr + " " + longName.val + "(");
argStrs = new string[nArgs];
for(int i = 0; i < nArgs; i++)
{
@ -5127,10 +5119,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
asmFileWriter.Write(argStrs[i]);
}
}
if(asmFileWriter != null)
{
asmFileWriter.WriteLine(");");
}
asmFileWriter?.WriteLine(");");
}
/**
@ -5188,9 +5177,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
*/
public static TokenDeclSDTypeDelegate CreateInline(TokenType retType, TokenType[] argTypes)
{
TokenDeclSDTypeDelegate decldel;
// Name it after the whole signature string.
// Name it after the whole signature string.
StringBuilder sb = new StringBuilder("$inline");
sb.Append(retType.ToString());
sb.Append('(');
@ -5204,7 +5191,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
}
sb.Append(')');
string inlname = sb.ToString();
if(!inlines.TryGetValue(inlname, out decldel))
if(!inlines.TryGetValue(inlname, out TokenDeclSDTypeDelegate decldel))
{
// Create the corresponding declaration and link to it
TokenName name = new TokenName(null, inlname);
@ -5219,18 +5206,16 @@ namespace OpenSim.Region.ScriptEngine.Yengine
public static string TryGetInlineName(Type sysType)
{
string name;
if(!inlrevs.TryGetValue(sysType, out name))
return null;
return name;
if(inlrevs.TryGetValue(sysType, out string name))
return name;
return null;
}
public static Type TryGetInlineSysType(string name)
{
TokenDeclSDTypeDelegate decl;
if(!inlines.TryGetValue(name, out decl))
return null;
return decl.GetSysType();
if (inlines.TryGetValue(name, out TokenDeclSDTypeDelegate decl))
return decl.GetSysType();
return null;
}
}
@ -5479,11 +5464,10 @@ namespace OpenSim.Region.ScriptEngine.Yengine
int nArgs = argTypes.Length;
foreach(TokenDeclSDType decl in tokenScript.sdSrcTypesValues)
{
if(decl is TokenDeclSDTypeDelegate)
if(decl is TokenDeclSDTypeDelegate decldelg)
{
decldel = (TokenDeclSDTypeDelegate)decl;
TokenType rt = decldel.GetRetType();
TokenType[] ats = decldel.GetArgTypes();
TokenType rt = decldelg.GetRetType();
TokenType[] ats = decldelg.GetArgTypes();
if((rt.ToString() == retType.ToString()) && (ats.Length == nArgs))
{
for(int i = 0; i < nArgs; i++)
@ -5491,7 +5475,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
if(ats[i].ToString() != argTypes[i].ToString())
goto nomatch;
}
this.decl = decldel;
this.decl = decldelg;
return;
}
}
@ -5766,10 +5750,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
*/
public TokenDeclVar(Token original, TokenDeclVar func, TokenScript ts) : base(original)
{
if(func != null)
{
func.localVars.AddLast(this);
}
func?.localVars.AddLast(this);
tokenScript = ts;
}
@ -7283,8 +7264,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
// Everything else depends on both operands.
string key = lType + opstr + rType;
BinOpStr binOpStr;
if(BinOpStr.defined.TryGetValue(key, out binOpStr))
if(BinOpStr.defined.TryGetValue(key, out BinOpStr binOpStr))
{
return TokenType.FromSysType(opcode, binOpStr.outtype);
}
@ -7877,11 +7857,9 @@ namespace OpenSim.Region.ScriptEngine.Yengine
initStmt.DebString(sb);
else
sb.Append(';');
if(testRVal != null)
testRVal.DebString(sb);
testRVal?.DebString(sb);
sb.Append(';');
if(incrRVal != null)
incrRVal.DebString(sb);
incrRVal?.DebString(sb);
sb.Append(") ");
bodyStmt.DebString(sb);
}
@ -7903,11 +7881,9 @@ namespace OpenSim.Region.ScriptEngine.Yengine
public override void DebString(StringBuilder sb)
{
sb.Append("foreach (");
if(keyLVal != null)
keyLVal.DebString(sb);
keyLVal?.DebString(sb);
sb.Append(',');
if(valLVal != null)
valLVal.DebString(sb);
valLVal?.DebString(sb);
sb.Append(" in ");
arrayRVal.DebString(sb);
sb.Append(')');

View File

@ -557,18 +557,18 @@ namespace OpenSim.Region.ScriptEngine.Yengine
// CallMode_NORMAL: run event handler from the beginning normally
// CallMode_RESTORE: restore event handler stack from stackFrames
callMode = (stackFrames == null) ? XMRInstAbstract.CallMode_NORMAL :
callMode = (stackFrames is null) ? XMRInstAbstract.CallMode_NORMAL :
XMRInstAbstract.CallMode_RESTORE;
while(true)
{
if(this.newStateCode < 0)
if(newStateCode < 0)
{
// Process event given by 'stateCode' and 'eventCode'.
// The event handler should call CheckRun() as often as convenient.
int newState = this.stateCode;
seh = this.m_ObjCode.scriptEventHandlerTable[newState, (int)this.eventCode];
if(seh != null)
int newState = stateCode;
seh = m_ObjCode.scriptEventHandlerTable[newState, (int)eventCode];
if(seh is not null)
{
try
{
@ -579,25 +579,25 @@ namespace OpenSim.Region.ScriptEngine.Yengine
newState = scse.newState;
}
}
this.ehArgs = null; // we are done with them and no args for
ehArgs = null; // we are done with them and no args for
// exit_state()/enter_state() anyway
// The usual case is no state change.
// Even a 'state <samestate>;' statement has no effect except to exit out.
// It does not execute the state_exit() or state_entry() handlers.
// See http://wiki.secondlife.com/wiki/State
if(newState == this.stateCode)
if(newState == stateCode)
break;
// Save new state in a more permanent location in case we
// get serialized out while in the state_exit() handler.
this.newStateCode = newState;
newStateCode = newState;
}
// Call old state's state_exit() handler.
this.eventCode = ScriptEventCode.state_exit;
seh = this.m_ObjCode.scriptEventHandlerTable[this.stateCode, (int)ScriptEventCode.state_exit];
if(seh != null)
eventCode = ScriptEventCode.state_exit;
seh = m_ObjCode.scriptEventHandlerTable[stateCode, (int)ScriptEventCode.state_exit];
if(seh is not null)
{
try
{
@ -605,24 +605,25 @@ namespace OpenSim.Region.ScriptEngine.Yengine
}
catch(ScriptChangeStateException scse)
{
this.newStateCode = scse.newState;
newStateCode = scse.newState;
}
}
// Switch over to the new state's state_entry() handler.
this.stateCode = this.newStateCode;
this.eventCode = ScriptEventCode.state_entry;
this.newStateCode = -1;
stateCode = newStateCode;
eventCode = ScriptEventCode.state_entry;
newStateCode = -1;
// Now that the old state can't possibly start any more activity,
// cancel any listening handlers, etc, of the old state.
this.StateChange();
StateChange();
// Loop back to execute new state's state_entry() handler.
}
// Event no longer being processed.
this.eventCode = ScriptEventCode.None;
stackFrames = null;
eventCode = ScriptEventCode.None;
}
/**

View File

@ -284,11 +284,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine
try
{
//m_RunOnePhase = "check entry invariants";
CheckRunLockInvariants(true);
// Maybe it has been Disposed()
if(m_Part is null || m_Part.Inventory is null)
// Maybe it has been Disposed()
if (m_Part is null || m_Part.Inventory is null)
{
//m_RunOnePhase = "runone saw it disposed";
return XMRInstState.DISPOSED;
@ -312,12 +309,13 @@ namespace OpenSim.Region.ScriptEngine.Yengine
m_Suspended = true;
m_DetachReady.Set();
//m_RunOnePhase = "detach quantum went zero";
CheckRunLockInvariants(true);
return XMRInstState.FINISHED;
}
}
//m_RunOnePhase = "resume old event handler";
CheckRunLockInvariants(true);
m_LastRanAt = now;
m_InstEHSlice++;
callMode = CallMode_NORMAL;
@ -345,7 +343,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine
if(m_Suspended)
{
//m_RunOnePhase = "m_Suspended is set";
CheckRunLockInvariants(true);
return XMRInstState.FINISHED;
}
@ -365,7 +362,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine
m_DetachReady.Set();
m_DetachQuantum = 0;
//m_RunOnePhase = "nothing to do #3";
CheckRunLockInvariants(true);
return XMRInstState.FINISHED;
}
}
@ -387,14 +383,16 @@ namespace OpenSim.Region.ScriptEngine.Yengine
m_DetachQuantum = 0;
}
//m_RunOnePhase = "nothing to do #4";
CheckRunLockInvariants(true);
return XMRInstState.FINISHED;
}
}
// Dequeued an event, so start it going until it either
// finishes or it calls CheckRun().
// Dequeued an event, so start it going until it either
// finishes or it calls CheckRun().
//m_RunOnePhase = "start event handler";
CheckRunLockInvariants(true);
m_DetectParams = evt.DetectParams;
m_LastRanAt = now;
m_InstEHEvent++;
@ -404,12 +402,11 @@ namespace OpenSim.Region.ScriptEngine.Yengine
m_CPUTime += DateTime.UtcNow.Subtract(now).TotalMilliseconds;
// Maybe it puqued.
if(e != null)
if(e is not null)
{
//m_RunOnePhase = "handling exception " + e.Message;
HandleScriptException(e);
//m_RunOnePhase = "return had exception " + e.Message;
CheckRunLockInvariants(true);
return XMRInstState.FINISHED;
}
}
@ -432,28 +429,28 @@ namespace OpenSim.Region.ScriptEngine.Yengine
/**
* @brief Immediately after taking m_RunLock or just before releasing it, check invariants.
*/
//private ScriptEventCode lastEventCode = ScriptEventCode.None;
//private bool lastActive = false;
//private string lastRunPhase = "";
public void CheckRunLockInvariants(bool throwIt)
{
// If not executing any event handler, there shouldn't be any saved stack frames.
// If executing an event handler, there should be some saved stack frames.
bool active = (stackFrames is not null);
if((active && (eventCode == ScriptEventCode.None)) ||
(!active && (eventCode != ScriptEventCode.None)))
// If not executing any event handler, there shouldn't be any saved stack frames.
// If executing an event handler, there should be some saved stack frames.
if (eventCode == ScriptEventCode.None)
{
m_log.Error("CheckRunLockInvariants: script=" + m_DescName);
m_log.Error("CheckRunLockInvariants: eventcode=" + eventCode.ToString() + ", active=" + active.ToString());
//m_log.Error("CheckRunLockInvariants: m_RunOnePhase=" + m_RunOnePhase);
//m_log.Error("CheckRunLockInvariants: lastec=" + lastEventCode + ", lastAct=" + lastActive + ", lastPhase=" + lastRunPhase);
if(throwIt)
throw new Exception("CheckRunLockInvariants: eventcode=" + eventCode.ToString() + ", active=" + active.ToString());
if (stackFrames is not null)
{
m_log.Error($"CheckRunLockInvariants: script {m_DescName}, eventcode: None, stackFrame not null");
if (throwIt)
throw new Exception("CheckRunLockInvariants: eventcode=None, stackFrame not null");
}
}
else
{
if (stackFrames is null)
{
m_log.Error($"CheckRunLockInvariants: script {m_DescName}, eventcode {eventCode}, stackFrame null");
if (throwIt)
throw new Exception("CheckRunLockInvariants: eventcode=" + eventCode.ToString() + ", stackFrame null");
}
}
//lastEventCode = eventCode;
//lastActive = active;
//lastRunPhase = m_RunOnePhase;
}
/*
@ -483,7 +480,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
throw new Exception("still processing event " + this.eventCode.ToString());
// Silly to even try if there is no handler defined for this event.
if ((newEventCode >= 0) && (m_ObjCode.scriptEventHandlerTable[stateCode, (int)newEventCode] == null))
if ((newEventCode >= 0) && (m_ObjCode.scriptEventHandlerTable[stateCode, (int)newEventCode] is null))
return null;
// Save eventCode so we know what event handler to run in the microthread.
@ -813,10 +810,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine
// Reset everything and queue up default's start_entry() event.
ClearQueue();
ResetLocked("external Reset");
// Mark it idle now so it can get queued to process new stuff.
CheckRunLockInvariants(true);
}
}
@ -833,10 +826,10 @@ namespace OpenSim.Region.ScriptEngine.Yengine
}
m_EventQueue.Clear();
for(int i = m_EventCounts.Length; --i >= 0;)
for (int i = 0; i < m_EventCounts.Length; ++i)
m_EventCounts[i] = 0;
for(int i = 0; i < n; i++)
for (int i = 0; i < n; i++)
m_EventQueue.AddLast(linkMessages[i]);
m_EventCounts[(int)ScriptEventCode.link_message] = n;
@ -848,7 +841,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
lock(m_QueueLock)
{
m_EventQueue.Clear(); // no events queued
for(int i = m_EventCounts.Length; --i >= 0;)
for (int i = 0; i < m_EventCounts.Length; ++i)
m_EventCounts[i] = 0;
}
}
@ -876,7 +869,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
AsyncCommandManager.RemoveScript(m_Engine, m_LocalID, m_ItemID);
//m_RunOnePhase = "ResetLocked: clearing current event";
this.eventCode = ScriptEventCode.None; // not processing an event
eventCode = ScriptEventCode.None; // not processing an event
m_DetectParams = null; // not processing an event
m_SleepUntil = DateTime.MinValue; // not doing llSleep()
m_ResetCount++; // has been reset once more
@ -1008,8 +1001,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine
m_Suspended = false;
m_DetachQuantum = 0;
m_DetachReady.Set();
if ((m_EventQueue != null) &&
(m_EventQueue.First != null) &&
if ((m_EventQueue is not null) &&
(m_EventQueue.First is not null) &&
(m_IState == XMRInstState.IDLE))
{
m_IState = XMRInstState.ONSTARTQ;

View File

@ -59,10 +59,10 @@
; PrivatePort should closed at the firewall.
;# {PublicPort} {} {PublicPort} {8002 9000} "9000"
; in case of a standalone this needs to match the parameter http_listener_port in section [Network] below
; in that case the default is 9000
; in case of a standalone this needs to match the parameter http_listener_port in section [Network] below
; in that case the default is 9000
PublicPort = "9000"
; for a region on a grid, the grid services public port should be used, normal default is 8002
; for a region on a grid, the grid services public port should be used, normal default is 8002
;PublicPort = "8002"
; you can also have them on a diferent url / IP
@ -641,6 +641,8 @@
;# {ExternalHostNameForLSL} {} {Hostname to use for HTTP-IN URLs. This should be reachable from the internet.} {}
;; Hostname to use in llRequestURL/llRequestSecureURL
;; if not defined - llRequestURL/llRequestSecureURL are disabled
;; this should be reachable from internet and point this machine
;; for standalones it can be
ExternalHostNameForLSL = ${Const|BaseHostname}
;# {shard} {} {Name to use for X-Secondlife-Shard header? (press enter if unsure)} {} OpenSim