コード例 #1
0
void XPosixProcessLauncher::_BuildArrayArguments(char **&outArrayArg)
{	
	sLONG nbArguments = (sLONG) fArrayArg.size();
	
	// Dispose the previous array of arguments if not NULL
	_Free2DCharArray(outArrayArg);
	
	if(nbArguments < 1)
		return;
	
	size_t outArrayArgLength = (nbArguments + 1 ) * sizeof(char*);
	outArrayArg = (char **) gMemory->NewPtr(outArrayArgLength, 0);
	
	if(testAssert(outArrayArg != NULL))
	{
		for(sLONG i = 0; i < nbArguments; ++i)
		{
			VString		*currentArgPtr = &fArrayArg[i];
			size_t		argFullLength = currentArgPtr->GetLength() * 2;// + 1;
			char		*newArgPtr = new char[argFullLength];
			
			if(newArgPtr != NULL)
				currentArgPtr->ToCString(newArgPtr, argFullLength);
			
			outArrayArg[i] = newArgPtr;
		}
		outArrayArg[nbArguments] = NULL;
	}
}
コード例 #2
0
VError Bonjour::EncodeDNSName (uBYTE *outBuffer, uLONG *ioSize, const VString &inString)
{
	xbox_assert(outBuffer != NULL && ioSize != NULL);
	
	VError	error;	
	uBYTE	buffer[kMaximumNameLength + 2];
		
	error = VE_OK;	
		
	buffer[kMaximumNameLength + 1] = 0xff;
	inString.ToCString((char * ) buffer, kMaximumNameLength + 2);
	if (buffer[kMaximumNameLength + 1] != 0xff)
		
		return VE_SRVR_BONJOUR_NAME_TOO_LONG;
	
	if (!buffer[0]) {
	
		outBuffer[0] = 0;
		*ioSize = 1;
		return VE_OK;
		
	}
	
	uBYTE	*p, *q, *r;
	uLONG	size;
		
	p = q = buffer;
	r = outBuffer;
	size = 0;
	for ( ; ; ) {
		
		while (*p && *p != '.') 
			
			p++;
		
		size += p - q + 1;
		if (size + 1 > *ioSize) {
			
			error = VE_SRVR_BONJOUR_CANT_FIT_PACKET;
			break;
			
		}
		
		*r++ = p - q;		
		while (*p != *q)
			
			*r++ = *q++;
		
		if (*p) {
			
			p++;
			q++;
			
		} else {
			
			*r++ = 0;
			*ioSize = size + 1;
			error = VE_OK;
			break;
			
		}
		
	}	
	
	return error;
}
コード例 #3
0
//	==================================================
//	VCacheLog / Start-stop
//	==================================================
bool VCacheLog::Start(const XBOX::VFolder& inFolder, const XBOX::VString& inLogFileName, const XBOX::VValueBag *inParams)
{
#if VERSIONDEBUG && 0
	_ExplainTTRFormat_V1();
#endif

	VTaskLock lock(&s_mutex);

	_StopWithoutLocking();

	fLogFile = new VSplitableLogFile( inFolder, inLogFileName, 1);
	if (fLogFile != NULL)
	{
		if (fLogFile->Open(true))
		{
			s_isStarted = true;
			fStarTimeMS = XBOX::VSystem::GetCurrentTime();

			fMemStatsLevel = eCLDumpStats_Mini;

			VString		appVersion, structPath, dataPath, cacheSettings;
			if(inParams != NULL)
			{
				sLONG	level = 0;
				
				// If stats level not passed or equal to zero => stays to eCLDumpStats_Mini.
				if( inParams->GetLong("mem_stats_level", level) && level != 0)
					fMemStatsLevel = (ECacheLogMemStatsLevel)	level;

				inParams->GetString("application_version", appVersion);
				inParams->GetString("structure_path", structPath);
				inParams->GetString("data_path", dataPath);
				inParams->GetString("cache_settings", cacheSettings);
			}

			char		theTime[512] = {0};
			time_t now = ::time( NULL);
			::strftime( theTime, sizeof( theTime),"%Y-%m-%dT%H:%M:%S", localtime( &now));
			
			// Start of "begin log"
			fLogFile->AppendFormattedString("[%d]s\t%s\t%d\t%d\r", (sLONG) eCLEntryKind_Start, theTime, XBOX::VTask::GetCurrent()->GetID(), kTTR_FORMAT_VERSION);

			// Add the misc. infos
			char	cStrBuffer[2048];

			VString		sysVersStr;
			XBOX::VSystem::GetOSVersionString(sysVersStr);
			cStrBuffer[0] = 0;
			sysVersStr.ToCString(cStrBuffer, 2048);
			fLogFile->AppendFormattedString("%s\r", cStrBuffer);

			cStrBuffer[0] = 0;
			appVersion.ToCString(cStrBuffer, 2048);
			fLogFile->AppendFormattedString("Application version\t%s\r", cStrBuffer);

			cStrBuffer[0] = 0;
			structPath.ToCString(cStrBuffer, 2048);
			fLogFile->AppendFormattedString("struct\t%s\r", cStrBuffer);
			
			cStrBuffer[0] = 0;
			dataPath.ToCString(cStrBuffer, 2048);
			fLogFile->AppendFormattedString("data\t%s\r", cStrBuffer);
			
			cStrBuffer[0] = 0;
			cacheSettings.ToCString(cStrBuffer, 2048);
			fLogFile->AppendFormattedString("Cache settings:\r%s\r", cStrBuffer);

			// End of "begin log"
			fLogFile->AppendFormattedString("[%d]e\r", (sLONG) eCLEntryKind_Start);
		}
		else
		{
			_StopWithoutLocking();
		}
	}

	return fLogFile != NULL;
}
コード例 #4
0
int main (int inArgc, char * const inArgv[])
{
	// set pattern matching wild char asap
	VCollator::SetDefaultWildChar( '*');	
	
	// First, create the application. So, everything is initialized and ready to use
	VRIAServerApplication application;
	VProcess::InitOptions initOptions = VProcess::Init_Default & ~VProcess::Init_WithQuickTime;

#if VERSION_LINUX
	XBOX::VString versionString;
	versionString.FromCString (STRPRODUCTVER); // 	YT 18-May-2012 - WAK0076647
    VRIAServerApplication::Get()->SetProductVersion (versionString);
#endif
	
    //jmo - We may want to quit after parsing the command line
    bool shouldQuit=false;

	if (application.Init( initOptions))
	{
		// Parse the command line argument
		VError err = VE_OK;

		// remote admin: feature development in progress
		//VRIAServerSupervisor*	srvSup = VRIAServerSupervisor::Get();

		VRIAServerStartupParameters *startupParameters = new VRIAServerStartupParameters();
		if (startupParameters != NULL)
		{
			// skip first argument (executable path)
			if (inArgc > 1)
			{
				int curArg = 1;

				while (curArg < inArgc && err == VE_OK)
				{
					VString argument( inArgv[curArg]);

					if (argument.BeginsWith( kARG_ADMINISTRATOR_PORT))
					{
						++curArg;
						argument.Remove( 1, kARG_ADMINISTRATOR_PORT.GetLength());
						if (!argument.IsEmpty() && argument.GetUniChar(1) == '=')
						{
							argument.Remove( 1, 1);
							if (!argument.IsEmpty())
							{
								sLONG port = argument.GetLong();
								if (port > 0)
									startupParameters->SetAdministratorHttpPort( port);
								else
									err = VE_RIA_INVALID_COMMAND_LINE_ARGUMENTS;
							}
							else
							{
								err = VE_RIA_INVALID_COMMAND_LINE_ARGUMENTS;
							}
						}
						else
						{
							err = VE_RIA_INVALID_COMMAND_LINE_ARGUMENTS;
						}
					}
					else if (argument.BeginsWith( kARG_ADMINISTRATOR_SSL_PORT))
					{
						++curArg;
						argument.Remove( 1, kARG_ADMINISTRATOR_SSL_PORT.GetLength());
						if (!argument.IsEmpty() && argument.GetUniChar(1) == '=')
						{
							argument.Remove( 1, 1);
							if (!argument.IsEmpty())
							{
								sLONG port = argument.GetLong();
								if (port > 0)
									startupParameters->SetAdministratorSSLPort( port);
								else
									err = VE_RIA_INVALID_COMMAND_LINE_ARGUMENTS;
							}
							else
							{
								err = VE_RIA_INVALID_COMMAND_LINE_ARGUMENTS;
							}
						}
						else
						{
							err = VE_RIA_INVALID_COMMAND_LINE_ARGUMENTS;
						}
					}
                    else if (argument.BeginsWith( kVERSION_NUMBER))
					{
						++curArg;
						argument.Remove(1, kVERSION_NUMBER.GetLength());

						VString version;
						
						VRIAServerApplication::Get()->GetProductVersion(version);
						
						char buf[100];
						
						version.ToCString(buf, sizeof(buf));
						
                        printf("Wakanda Server %s\n", buf);

                        shouldQuit=true;
					}
					else if (argument.BeginsWith( kLOG_DUMP))
					{
						++curArg;
						argument.Remove(1, kLOG_DUMP.GetLength());
						
						startupParameters->SetNetDump(true);
					}
					else if (argument.EqualToString( kARG_DEBUG_OFF))
					{
						++curArg;
						startupParameters->SetDebuggingAuthorized( false);
					}
					else if (argument.EqualToString( kARG_SYSLOG))
					{
						++curArg;

					#if VERSIONMAC || VERSION_LINUX
						VSysLogOutput *syslogOutput = new VSysLogOutput( L"Wakanda Server");
						application.GetLogger()->AddLogListener( syslogOutput);
						syslogOutput->Release();
					#endif
					}
					else
					{
						++curArg;

						// check whether it's a solution file path
						VFilePath fullPath;
					#if VERSIONWIN
						fullPath.FromFullPath( argument, FPS_SYSTEM);
					#else // VERSIONMAC
						VURL::Decode( argument);
						fullPath.FromFullPath( argument, FPS_POSIX);
					#endif

						if (fullPath.IsValid())
						{
							VFile *file = new VFile( fullPath);
							if (file != NULL)
							{
								if (file->Exists())
								{
									if (file->ConformsTo( RIAFileKind::kSolutionFileKind) && (startupParameters->GetSolutionToLaunch() == NULL))
									{
										startupParameters->SetSolutionToLaunch( file);
									}
									else if (file->ConformsTo( L"com.netscape.javascript-source") && (startupParameters->GetJavaScriptFileToExecute() == NULL))
									{
										startupParameters->SetJavaScriptFileToExecute( file);
									}
								}
							}
							else
							{
								err = VE_MEMORY_FULL;
							}
							ReleaseRefCountable( &file);
						}
						
						// Skip unknown argument without generate an error
					}
				}
			}

			if (err == VE_OK && shouldQuit == false)
			{
				VRIAServerStartupMessage *msg = new VRIAServerStartupMessage( &application, startupParameters);
				if (msg != NULL)
				{
					msg->PostTo( VTaskMgr::Get()->GetMainTask());
					msg->Release();
				}
				ReleaseRefCountable( &startupParameters);
				
				application.Run();
			}
			else
			{
				ReleaseRefCountable( &startupParameters);
			}
		}
	}
	return 0;
}