Esempio n. 1
0
/* Main entry point to the sample application */
int _tmain(int argc, _TCHAR* argv[])
{
	char *targetFile;

	char *tempBuffer;
	int tempBufferLength;

	char *sourceBuffer;
	char *buffer;
	char *delimiter;
	int delimiterLength;

	int x;

	FILE* TargetFile;
	int TargetFileLength;
	int SourceFileLength;
	struct parser_result *pr;

	HANDLE target,src;
	FILETIME targetFT,srcFT;

	DWORD ptid=0;
	_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
		
	targetFile = (char*)malloc(2+strlen(argv[1]));
	strcpy(targetFile,argv[1]);
	targetFile[strlen(argv[1])] = '~';
	targetFile[strlen(argv[1])+1] = 0;

	if(argc==2)
	{
		TargetFileLength = ILibReadFileFromDiskEx(&buffer,targetFile);
		if(TargetFileLength!=0)
		{
			ILibWriteStringToDiskEx(argv[1],buffer,TargetFileLength);
			free(buffer);
			ILibDeleteFileFromDisk(targetFile);
		}
		return;
	}

	target = CreateFile(argv[1],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
	src = CreateFile(argv[2],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

	GetFileTime(target,NULL,NULL,&targetFT);
	GetFileTime(src,NULL,NULL,&srcFT);

	CloseHandle(target);
	CloseHandle(src);

	if(srcFT.dwHighDateTime < targetFT.dwHighDateTime ||
		(srcFT.dwHighDateTime == targetFT.dwHighDateTime && srcFT.dwLowDateTime < targetFT.dwLowDateTime))
	{
		//return;
	}

	printf("SourceCodeInjector:\r\n");
	printf("	TargetFile: %s\r\n",argv[1]);
	printf("	SourceFile: %s\r\n",argv[2]);
	printf("	VariableName: %s\r\n",argv[3]);
	if(argc==5)
	{
		printf("	Delimiter: %s\r\n",argv[4]);
	}
	// argv[1] = TargetFile
	// argv[2] = SourceFile
	// argv[3] = VariableName

	if(argc==5)
	{
		delimiter = (char*)malloc((int)strlen(argv[4])+1);
		delimiterLength=sprintf(delimiter,"%s",argv[4]);
	}
	else
	{
		delimiter = (char*)malloc((int)strlen(argv[3])+20);
		delimiterLength=sprintf(delimiter,"// -=S3P4R470R=- {%s}",argv[3]);
	}

	TargetFileLength = ILibReadFileFromDiskEx(&buffer,targetFile);
	SourceFileLength = ILibReadFileFromDiskEx(&sourceBuffer,argv[2]);

	if(TargetFileLength == 0)
	{
		TargetFileLength = ILibReadFileFromDiskEx(&buffer,argv[1]);
	}

	if(TargetFileLength == NULL || SourceFileLength == 0)
	{
		exit(0);
	}
	

	tempBufferLength = ILibBase64Encode(sourceBuffer,SourceFileLength,&tempBuffer);
	free(sourceBuffer);
	sourceBuffer = tempBuffer;
	SourceFileLength = tempBufferLength;

	pr = ILibParseString(buffer,0,TargetFileLength,delimiter,delimiterLength);

	TargetFile = fopen(targetFile,"wb");
	fwrite(pr->FirstResult->data,sizeof(char),pr->FirstResult->datalength,TargetFile);
	fwrite(delimiter,sizeof(char),delimiterLength,TargetFile);
	fwrite("\n",sizeof(char),1,TargetFile);

	//fwrite("private static byte[] ",sizeof(char),22,TargetFile);
	//fwrite(argv[3],sizeof(char),strlen(argv[3]),TargetFile);
	//fwrite(" = {",sizeof(char),4,TargetFile);

	fwrite("private static string ",sizeof(char),22,TargetFile);
	fwrite(argv[3],sizeof(char),strlen(argv[3]),TargetFile);
	fwrite(" = \"",sizeof(char),4,TargetFile);

	for(x=0;x<SourceFileLength;++x)
	{
		if(argv[3] != '-')
		{
			if(sourceBuffer[x] == '"')
			{
				fwrite("\\\"",sizeof(char),2,TargetFile);
			}
			else if(sourceBuffer[x] == '\\')
			{
				fwrite("\\\\",sizeof(char),2,TargetFile);
			}
			else if(sourceBuffer[x] == '\r')
			{
				fwrite("\\r",sizeof(char),2,TargetFile);
			}
			else if(sourceBuffer[x] == '\n')
			{
				fwrite("\\n",sizeof(char),2,TargetFile);
			}
			else
			{
				fwrite(&sourceBuffer[x],sizeof(char),1,TargetFile);
			}

			if(x!=0 && x%100==0)
			{
				fwrite("\"\n",sizeof(char),2,TargetFile);
				//if(x!=SourceFileLength-1)
				//{
					fwrite("+\"",sizeof(char),2,TargetFile);
				//}
			}
		}
		else
		{
			fwrite(&sourceBuffer[x],sizeof(char),1,TargetFile);
		}
	}

	if(argv[3]!='-')
	{
		fwrite("\";\n",sizeof(char),3,TargetFile);
	}

	fwrite(delimiter,sizeof(char),delimiterLength,TargetFile);
	fwrite(pr->LastResult->data,sizeof(char),pr->LastResult->datalength,TargetFile);
	fflush(TargetFile);
	fclose(TargetFile);


	ILibDestructParserResults(pr);
	free(sourceBuffer);
	free(buffer);
	free(delimiter);
	free(targetFile);
	return 0;
}
int main(int argc, char **argv)
#endif
{
	/* This is to test TLS and TLS Detect
	struct util_cert selfcert;
	struct util_cert selftlscert;
	SSL_CTX* ctx;
	*/

#if defined(WIN32)
	_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
	SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE); // Set SIGNAL on windows to listen for Ctrl-C
#elif defined(_POSIX)
	signal(SIGPIPE, SIG_IGN); // Set a SIGNAL on Linux to listen for Ctrl-C

	// Shutdown on Ctrl + C
	signal(SIGINT, BreakSink);
	{
		struct sigaction act; 
		act.sa_handler = SIG_IGN; 
		sigemptyset(&act.sa_mask); 
		act.sa_flags = 0; 
		sigaction(SIGPIPE, &act, NULL);
	}
#endif
	
#if defined(WIN32)
	if (argc>1 && _tcscmp(argv[1], L"STUN")==0)
#else
	if (argc>1 && strcmp(argv[1],"STUN")==0)
#endif
	{
		useStun = 1;
		printf("USING STUN!\r\n");
	}

	chain = ILibCreateChain();	// Create the MicrostackChain, to which we'll attach the WebRTC ConnectionFactory
	mConnectionFactory = ILibWrapper_WebRTC_ConnectionFactory_CreateConnectionFactory(chain, 0); // Create the connection factory, and bind to port "0", to use a random port
	mServer = SimpleRendezvousServer_Create(chain, 5350, &Rendezvous_OnGet, &Rendezvous_OnPost); // Create our simple Rendezvous/HTTP server we'll use to exchange SDP offers, and bind to port 5350

	htmlBodyLength = ILibReadFileFromDiskEx(&htmlBody, "webrtcsample.html");						// This will be the HTML file served if you hit /ACTIVE
	passiveHtmlBodyLength = ILibReadFileFromDiskEx(&passiveHtmlBody, "webrtcpassivesample.html");	// This will be the HTML file served if you hit /PASSIVE
	wshtmlBodyLength = ILibReadFileFromDiskEx(&wshtmlbody, "websocketsample.html");

	printf("Microstack WebRTC Sample Application started.\r\n\r\n");

	// We're actually listening on all interfaces, not just 127.0.0.1
	printf("Browser-initiated connection: http://127.0.0.1:5350/active\r\n");	// This will cause the browser to initiate a WebRTC Connection
	printf("Application-initiated connection: http://127.0.0.1:5350/passive\r\n"); // This will initiate a WebRTC Connection to the browser
	printf("Web-Socket initiated connection: http://127.0.0.1:5350/websocket\r\n"); // This will cause the browser to initiate a websocket connection to exchange WebRTC offers.
	printf("\r\n");
#if defined(_REMOTELOGGING) && defined(_REMOTELOGGINGSERVER)
	printf("Debug logging listening url: http://127.0.0.1:%u\r\n", ILibStartDefaultLogger(chain, 7775));
#endif
	printf("\r\n(Press Ctrl-C to exit)\r\n");
	/* This is to test TLS and TLS Detect
	// Init Certs
	util_mkCert(NULL, &selfcert, 2048, 10000, "localhost", CERTIFICATE_ROOT, NULL);
	util_mkCert(&selfcert, &selftlscert, 2048, 10000, "10.0.0.240", CERTIFICATE_TLS_SERVER, NULL);
	// Init TLS
	ctx = SSL_CTX_new(TLSv1_method());
	SSL_CTX_use_certificate(ctx, selftlscert.x509);
	SSL_CTX_use_PrivateKey(ctx, selftlscert.pkey);
	SimpleRendezvousServer_SetSSL(mServer, ctx);
	*/

	;

	ILibSpawnNormalThread(&Run, NULL); // Spawn a thread to listen for user input
	ILibStartChain(chain); // This will start the Microstack Chain... It will block until ILibStopChain is called

	

	/* This is to test TLS and TLS Detect
	SSL_CTX_free(ctx);
	util_freecert(&selfcert);
	util_freecert(&selftlscert);
	*/


	// This won't execute until the Chain was stopped
	free(htmlBody);
	free(passiveHtmlBody);
	free(wshtmlbody);
	printf("Application exited gracefully.\r\n");
#if defined(WIN32)
	_CrtDumpMemoryLeaks();
#endif
	return(0);
}