⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connectionlog.cpp

📁 teamviewer source code vc++
💻 CPP
字号:
//  Copyright (C) 2006 Teamviewer GmbH. All Rights Reserved.
//
//  Copyright (C) 2002 Ultr@VNC Team Members. All Rights Reserved.
//
//  Copyright (C) 2000-2002 Const Kaplinsky. All Rights Reserved.
//
//  Copyright (C) 2002 RealVNC Ltd. All Rights Reserved.
//
//  Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
//
//  This file is part of TeamViewer.
//
//  TeamViewer is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation; either version 2 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software
//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
//  USA.
//
//  If the source code for TeamViewer is not available from the place
//  whence you received this file, check http://www.teamviewer.com
//  for information on obtaining it.

#include "stdhdrs.h"
#include "ConnectionLog.h"
#include "..\winvnc\winvnc\Global.h"
#include "..\winvnc\winvnc\vncservice.h"

ConnectionLog ConnectionLog::connectionLog;
ConnectionLog::ConnectionLog()
{
	criticalSection = new CRITICAL_SECTION;
	InitializeCriticalSection(criticalSection); 
	logFile=NULL;
}
ConnectionLog::~ConnectionLog()
{
	DeleteCriticalSection(criticalSection); 
	delete criticalSection;
}
//FILE* ConnectionLog::logFile=NULL;
string PadRight(string text,int length)
{
	while(text.length()<length)
	{
		text=text+" ";
	}
	return text;
}
void ConnectionLog::Write(string server,SYSTEMTIME start,SYSTEMTIME end, bool doImpersonate)
{
	EnterCriticalSection(criticalSection);
	char user[256];
	vncService::CurrentUser(user,256);

	BOOL personateState = TRUE;
	if (doImpersonate)
		personateState = vncService::BeginImpersonation();

	if (!personateState && doImpersonate)
		vnclog.Print(LL_INTERR, VNCLOG("ConnectionLog Write \"connections.txt\": impersonating actual user failed!"));


	string text;
	if(logFile==NULL)
	{
		//string directory=GetSpecialFolderPath(CSIDL_APPDATA)+"\\TeamViewer";
		string sDirectory;

		GetSpecialFolderPath(CSIDL_APPDATA,sDirectory,false);
		sDirectory += "\\TeamViewer";

		CreateDirectory(sDirectory.c_str(),NULL);
		string path=sDirectory+"\\Connections.txt";

		//VString::Format
		//vnclog.Print(LL_STATE,VNCLOG(directory));


		WIN32_FIND_DATA findData;
		if(FindFirstFile(path.c_str(),&findData)==INVALID_HANDLE_VALUE)
		//if(!FileExists(path.c_str()))
		{
			text=Localize(IDS_CONNECTION_LOG_EXPLANATION);
		}
		logFile = fopen(path.c_str(),"a");

	}
	//if (m_logFile)
	//{
	const int width=30;
	// maybe remove Padright method and use string stream
	text += "\n" + PadRight(server,width)+"  " + 
		           PadRight(FormatTime(start),width) + "  " + 
				   PadRight(FormatTime(end),width) + "  " + 
				   PadRight(user,width);
	if(logFile!=NULL) 
	{
		fwrite(text.c_str(),1,text.length(),logFile);
		fflush(logFile);
		fclose(logFile);
		logFile=NULL;
	}

	if (personateState && doImpersonate)
		vncService::EndImpersonation();

	LeaveCriticalSection(criticalSection);
}


string ConnectionLog::FormatTime(SYSTEMTIME t)
{
	string result;
	stringstream stream;
	stream << setfill('0') << setw(2)  << t.wDay << "-" << setfill('0') << setw(2)  << t.wMonth << "-" << t.wYear << " " << setfill('0') << setw(2) <<  t.wHour << ":" << setfill('0') << setw(2) << t.wMinute << ":" << setfill('0') << setw(2) << t.wSecond;// << "." << t.wMilliseconds;
	result = stream.str();
	return result;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -