📄 connectionlog.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 + -