Commit 27ea9b9d2cf7f5a518e4e0e721effd6e980bad97

Authored by anderson.peterle@previdencia.gov.br
1 parent 3b0f426b
Exists in master

Agente Windows/srCACICsrv/srCACICcli: Reposicionamento de metodo publico, coment…

…arios, obtencao de parametro de TimeOut para conexoes e pequenas correcoes.

git-svn-id: http://svn.softwarepublico.gov.br/svn/cacic/cacic/trunk/agente-windows@829 fecfc0c7-e812-0410-ae72-849f08638ee7
col_hard/col_hard.dpr
@@ -736,7 +736,7 @@ begin @@ -736,7 +736,7 @@ begin
736 736
737 v_te_mem_ram_desc := v_te_mem_ram_desc + 'Slot '+ inttostr(i) + ': ' 737 v_te_mem_ram_desc := v_te_mem_ram_desc + 'Slot '+ inttostr(i) + ': '
738 + v_SMBIOS.MemoryDevice[i].Manufacturer + ' ' 738 + v_SMBIOS.MemoryDevice[i].Manufacturer + ' '
739 - + inttostr(v_SMBIOS.MemoryDevice[i].Size) + 'Mb ' 739 + + inttostr(v_SMBIOS.MemoryDevice[i].Size) + 'MB '
740 + '(' + v_te_mem_ram_tipo +')'; 740 + '(' + v_te_mem_ram_tipo +')';
741 end; 741 end;
742 end 742 end
@@ -749,7 +749,7 @@ begin @@ -749,7 +749,7 @@ begin
749 v_te_mem_ram_desc := v_te_mem_ram_desc + ' - '; 749 v_te_mem_ram_desc := v_te_mem_ram_desc + ' - ';
750 v_te_mem_ram_desc := v_te_mem_ram_desc + 'Slot '+ inttostr(i) + ': ' 750 v_te_mem_ram_desc := v_te_mem_ram_desc + 'Slot '+ inttostr(i) + ': '
751 + v_SMBIOS.MemoryDevice[i].Manufacturer + ' ' 751 + v_SMBIOS.MemoryDevice[i].Manufacturer + ' '
752 - + inttostr(v_SMBIOS.MemoryModule[i].Size) + 'Mb ' 752 + + inttostr(v_SMBIOS.MemoryModule[i].Size) + 'MB '
753 + '(' + v_te_mem_ram_tipo +')'; 753 + '(' + v_te_mem_ram_tipo +')';
754 end; 754 end;
755 end; 755 end;
@@ -787,7 +787,7 @@ begin @@ -787,7 +787,7 @@ begin
787 787
788 if (trim(v_te_placa_video_desc)='') then v_te_placa_video_desc := v_DISPLAY.Adapter; 788 if (trim(v_te_placa_video_desc)='') then v_te_placa_video_desc := v_DISPLAY.Adapter;
789 v_qt_placa_video_cores := IntToStr(v_DISPLAY.ColorDepth); 789 v_qt_placa_video_cores := IntToStr(v_DISPLAY.ColorDepth);
790 - v_qt_placa_video_mem := IntToStr(v_DISPLAY.Memory div 1048576 ) + 'Mb'; 790 + v_qt_placa_video_mem := IntToStr(v_DISPLAY.Memory div 1048576 ) + 'MB';
791 v_te_placa_video_resolucao := IntToStr(v_DISPLAY.HorzRes) + 'x' + IntToStr(v_DISPLAY.VertRes); 791 v_te_placa_video_resolucao := IntToStr(v_DISPLAY.HorzRes) + 'x' + IntToStr(v_DISPLAY.VertRes);
792 792
793 v_DISPLAY.Free; 793 v_DISPLAY.Free;
srcacic/VNCViewer/AuthDialog.h
@@ -36,10 +36,10 @@ public: @@ -36,10 +36,10 @@ public:
36 virtual ~AuthDialog(); 36 virtual ~AuthDialog();
37 int DoDialog(); 37 int DoDialog();
38 38
39 - TCHAR m_user[32];  
40 - TCHAR m_passwd[32];  
41 - TCHAR m_doc_ref[128];  
42 - TCHAR m_motivo[5120]; 39 + TCHAR m_user[32]; // Usuário técnico a ser autenticado no gerente web
  40 + TCHAR m_passwd[32]; // Senha
  41 + TCHAR m_doc_ref[128]; // Documento de Referência apresentado pelo técnico.
  42 + TCHAR m_motivo[5120]; // Motivo da conexão.
43 43
44 TCHAR m_domain[128]; 44 TCHAR m_domain[128];
45 45
srcacic/VNCViewer/CACIC_Crypt.cpp
1 -/*  
2 - * Classe para criptografia de dados 1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para criptografia de dados.
3 */ 5 */
4 6
5 #include "CACIC_Crypt.h" 7 #include "CACIC_Crypt.h"
srcacic/VNCViewer/CACIC_Crypt.h
1 -/*  
2 - * Classe para criptografia de dados 1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para criptografia de dados.
3 */ 5 */
4 6
5 #ifndef _CACIC_CRYPT_ 7 #ifndef _CACIC_CRYPT_
@@ -16,17 +18,37 @@ class CACIC_Crypt { @@ -16,17 +18,37 @@ class CACIC_Crypt {
16 18
17 public: 19 public:
18 20
  21 + /**
  22 + * Remove da String de entrada os caracteres colocados pela URLEncode,
  23 + * tira do Base64 e depois decodifica usando o Rijndael.
  24 + * @param entrada String a ser decodificada.
  25 + * @return string String decodificada.
  26 + */
19 static string decodifica(const char* entrada); 27 static string decodifica(const char* entrada);
  28 +
  29 + /**
  30 + * Codifica a String passada com o algoritmo Rijndael e coloca no Base64.
  31 + * @param entrada String a ser codificada.
  32 + * @return string String codificada.
  33 + */
20 static string codifica(const char* entrada); 34 static string codifica(const char* entrada);
21 35
22 private: 36 private:
23 37
24 - static const unsigned int SRCACIC_BLOCK_SIZE; // tamanho padrao do bloco  
25 - static const unsigned int SRCACIC_KEY_SIZE; // tamanho padrao da chave  
26 - static const char SRCACIC_KEY[17]; // chave de en/dec  
27 - static const char SRCACIC_IV[17]; // vetor de inicializacao  
28 -  
29 - virtual void ccrypt() = 0; // Truque para tornar a classe abstrata. 38 + /** Tamanho padrão do bloco. */
  39 + static const unsigned int SRCACIC_BLOCK_SIZE;
  40 + /** Tamanho padrão da chave. */
  41 + static const unsigned int SRCACIC_KEY_SIZE;
  42 + /** Chave de codificação. */
  43 + static const char SRCACIC_KEY[17];
  44 + /** Vetor de inicialização. */
  45 + static const char SRCACIC_IV[17];
  46 +
  47 + /**
  48 + * Este método virtual puro é um truque para que a classe
  49 + * se torne abstrata e não possa ser instanciada.
  50 + */
  51 + virtual void ccrypt() = 0;
30 }; 52 };
31 53
32 #endif 54 #endif
srcacic/VNCViewer/CACIC_Utils.cpp
1 #include "CACIC_Utils.h" 1 #include "CACIC_Utils.h"
2 2
3 -// troca os caracteres da string  
4 -// origem ori_str new_str  
5 void CACIC_Utils::replaceAll(string &str, string key, string newkey) 3 void CACIC_Utils::replaceAll(string &str, string key, string newkey)
6 { 4 {
7 int found = str.find(key, 0); 5 int found = str.find(key, 0);
@@ -13,7 +11,6 @@ void CACIC_Utils::replaceAll(string &str, string key, string newkey) @@ -13,7 +11,6 @@ void CACIC_Utils::replaceAll(string &str, string key, string newkey)
13 } 11 }
14 } 12 }
15 13
16 -// substitui alguns caracteres especiais antes da encriptacao  
17 void CACIC_Utils::simpleUrlEncode(string &decoded) 14 void CACIC_Utils::simpleUrlEncode(string &decoded)
18 { 15 {
19 replaceAll(decoded, "+", "<MAIS>"); 16 replaceAll(decoded, "+", "<MAIS>");
@@ -32,7 +29,6 @@ void CACIC_Utils::simpleUrlDecode(string &amp;encoded) @@ -32,7 +29,6 @@ void CACIC_Utils::simpleUrlDecode(string &amp;encoded)
32 replaceAll(encoded, "<BarrInv>", "\\"); 29 replaceAll(encoded, "<BarrInv>", "\\");
33 } 30 }
34 31
35 -// Fetches the MAC address and prints it  
36 string CACIC_Utils::getMACAddress() { 32 string CACIC_Utils::getMACAddress() {
37 33
38 IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs 34 IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs
@@ -44,7 +40,6 @@ string CACIC_Utils::getMACAddress() { @@ -44,7 +40,6 @@ string CACIC_Utils::getMACAddress() {
44 assert(dwStatus == ERROR_SUCCESS); // Verify return value is valid, no buffer overflow 40 assert(dwStatus == ERROR_SUCCESS); // Verify return value is valid, no buffer overflow
45 41
46 PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info 42 PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
47 - // TODO: e se houve mais de uma placa de rede, qual mac deve ir?  
48 //do { 43 //do {
49 // PrintMACaddress(pAdapterInfo->Address); // Print MAC address 44 // PrintMACaddress(pAdapterInfo->Address); // Print MAC address
50 // pAdapterInfo = pAdapterInfo->Next; // Progress through linked list 45 // pAdapterInfo = pAdapterInfo->Next; // Progress through linked list
@@ -62,8 +57,6 @@ string CACIC_Utils::getMACAddress() { @@ -62,8 +57,6 @@ string CACIC_Utils::getMACAddress() {
62 57
63 } 58 }
64 59
65 -// TODO: Lembrete, quero melhorar o código:  
66 -// http://www.codeguru.com/cpp/w-p/system/systeminformation/article.php/c8973__2/  
67 string CACIC_Utils::getSOID() { 60 string CACIC_Utils::getSOID() {
68 OSVERSIONINFO osver; 61 OSVERSIONINFO osver;
69 ZeroMemory(&osver, sizeof(OSVERSIONINFO)); 62 ZeroMemory(&osver, sizeof(OSVERSIONINFO));
srcacic/VNCViewer/CACIC_Utils.h
1 #ifndef _CACIC_UTILS_ 1 #ifndef _CACIC_UTILS_
2 #define _CACIC_UTILS_ 2 #define _CACIC_UTILS_
3 3
  4 +/**
  5 + * Copyright (C) 2009 DATAPREV-ES
  6 + * @author Vinicius Avellar Moreira
  7 + * Classe com alguns métodos utilitários.
  8 + */
  9 +
4 #include "stdhdrs.h" 10 #include "stdhdrs.h"
5 11
6 #include <Iphlpapi.h> 12 #include <Iphlpapi.h>
@@ -17,17 +23,49 @@ class CACIC_Utils { @@ -17,17 +23,49 @@ class CACIC_Utils {
17 23
18 public: 24 public:
19 25
  26 + /**
  27 + * Troca caracteres específicos de uma string.
  28 + * @param str String a ser modificada.
  29 + * @param key String com o caractere ou conjunto de caracteres que serão substituídos.
  30 + * @param newKey String com o caractere ou conjunto de caracteres que irão substituir.
  31 + */
20 static void replaceAll(string &str, string key, string newkey); 32 static void replaceAll(string &str, string key, string newkey);
21 33
  34 + /**
  35 + * Mesma função do urlEncode, porém os caracteres serão substituídos
  36 + * por tags específicas, e não pelo código.
  37 + * @param entrada String que será codificada.
  38 + */
22 static void simpleUrlEncode(string &entrada); 39 static void simpleUrlEncode(string &entrada);
  40 +
  41 + /**
  42 + * Faz o inverso do simpleUrlEncode, trocando as tags específicas pelos
  43 + * respectivos caracteres.
  44 + * @param entrada String que será codificada.
  45 + */
23 static void simpleUrlDecode(string &entrada); 46 static void simpleUrlDecode(string &entrada);
24 47
  48 + /**
  49 + * Obtém o MAC Address da placa de rede.<br />
  50 + * TODO: Quando houver mais de uma placa de rede no pc, verificar qual
  51 + * está se comunicando com o servidor para enviar o MAC certo.
  52 + */
25 static string getMACAddress(); 53 static string getMACAddress();
  54 +
  55 + /**
  56 + * Obtém a identificação do sistema operacional.<br />
  57 + * Artigo sobre SOID:<br />
  58 + * http://www.codeguru.com/cpp/w-p/system/systeminformation/article.php/c8973__2/
  59 + */
26 static string getSOID(); 60 static string getSOID();
27 61
28 private: 62 private:
29 63
30 - virtual void cutils() = 0; // Truque para tornar a classe abstrata. 64 + /**
  65 + * Este método virtual puro é um truque para que a classe
  66 + * se torne abstrata e não possa ser instanciada.
  67 + */
  68 + virtual void cutils() = 0;
31 69
32 }; 70 };
33 71
srcacic/VNCViewer/Res/vncviewer.rc
@@ -312,7 +312,7 @@ BEGIN @@ -312,7 +312,7 @@ BEGIN
312 RTEXT "Usuário:",IDC_STATIC,76,24,39,10 312 RTEXT "Usuário:",IDC_STATIC,76,24,39,10
313 RTEXT "Senha:",IDC_STATIC,80,41,35,8 313 RTEXT "Senha:",IDC_STATIC,80,41,35,8
314 LTEXT "Doc. Referência:",IDC_DOC_REF,61,58,55,8 314 LTEXT "Doc. Referência:",IDC_DOC_REF,61,58,55,8
315 - LTEXT "Motivo do suporte: (tamanho máximo 5120 caracteres)",IDC_MOTIVO_SUPORTE,7,70,179,8 315 + LTEXT "Motivo do Suporte: (tamanho máximo 5120 caracteres)",IDC_MOTIVO_SUPORTE,7,70,179,8
316 CONTROL 156,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE | SS_SUNKEN,7,21,50,45 316 CONTROL 156,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE | SS_SUNKEN,7,21,50,45
317 LTEXT "Por favor, digite seu nome de usuário e senha no gerente web.",IDC_STATIC,7,7,203,11 317 LTEXT "Por favor, digite seu nome de usuário e senha no gerente web.",IDC_STATIC,7,7,203,11
318 LTEXT "",IDC_CHAR_COUNT,7,136,43,8,0,WS_EX_TRANSPARENT 318 LTEXT "",IDC_CHAR_COUNT,7,136,43,8,0,WS_EX_TRANSPARENT
@@ -535,8 +535,8 @@ IDB_VNC32 BITMAP &quot;vnc32.BMP&quot; @@ -535,8 +535,8 @@ IDB_VNC32 BITMAP &quot;vnc32.BMP&quot;
535 // 535 //
536 536
537 VS_VERSION_INFO VERSIONINFO 537 VS_VERSION_INFO VERSIONINFO
538 - FILEVERSION 2,5,0,800  
539 - PRODUCTVERSION 2,5,0,800 538 + FILEVERSION 2,5,0,804
  539 + PRODUCTVERSION 2,5,0,804
540 FILEFLAGSMASK 0x37L 540 FILEFLAGSMASK 0x37L
541 #ifdef _DEBUG 541 #ifdef _DEBUG
542 FILEFLAGS 0x25L 542 FILEFLAGS 0x25L
@@ -553,11 +553,11 @@ BEGIN @@ -553,11 +553,11 @@ BEGIN
553 BEGIN 553 BEGIN
554 VALUE "CompanyName", "Dataprev - Unidade Regional Espírito Santo" 554 VALUE "CompanyName", "Dataprev - Unidade Regional Espírito Santo"
555 VALUE "FileDescription", "Visualizador do Suporte Remoto Seguro do Sistema CACIC" 555 VALUE "FileDescription", "Visualizador do Suporte Remoto Seguro do Sistema CACIC"
556 - VALUE "FileVersion", "2, 5, 0, 800" 556 + VALUE "FileVersion", "2, 5, 0, 804"
557 VALUE "InternalName", "srCACICcli" 557 VALUE "InternalName", "srCACICcli"
558 VALUE "LegalCopyright", "Copyright © 2008 DATAPREV" 558 VALUE "LegalCopyright", "Copyright © 2008 DATAPREV"
559 VALUE "LegalTrademarks", "srCACIC" 559 VALUE "LegalTrademarks", "srCACIC"
560 - VALUE "ProductVersion", "2, 5, 0, 800" 560 + VALUE "ProductVersion", "2, 5, 0, 804"
561 END 561 END
562 END 562 END
563 BLOCK "VarFileInfo" 563 BLOCK "VarFileInfo"
srcacic/WinVNC/WinVNC/CACIC_Auth.cpp
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe singleton responsável pela autenticação no gerente web.
  5 + */
  6 +
1 #include "CACIC_Auth.h" 7 #include "CACIC_Auth.h"
2 8
3 const string CACIC_Auth::GET_CONFIG_SCRIPT = "srcacic_get_config.php"; 9 const string CACIC_Auth::GET_CONFIG_SCRIPT = "srcacic_get_config.php";
4 const string CACIC_Auth::SET_SESSION_SCRIPT = "srcacic_set_session.php"; 10 const string CACIC_Auth::SET_SESSION_SCRIPT = "srcacic_set_session.php";
5 const string CACIC_Auth::AUTH_CLIENT_SCRIPT = "srcacic_auth_client.php"; 11 const string CACIC_Auth::AUTH_CLIENT_SCRIPT = "srcacic_auth_client.php";
6 const unsigned int CACIC_Auth::TAMANHO_RESPOSTA = 1025; 12 const unsigned int CACIC_Auth::TAMANHO_RESPOSTA = 1025;
  13 +const string CACIC_Auth::AGUARDE_FILENAME = "aguarde_srCACIC.txt";
  14 +const string CACIC_Auth::COOKIE_FILENAME = "cacic_ck.txt";
  15 +const UINT CACIC_Auth::TEMPO_IDLE = 5;
7 16
8 -CACIC_Auth::CACIC_Auth() {}  
9 -  
10 -CACIC_Auth::~CACIC_Auth() {}  
11 -  
12 -// autentica a sessão no servidor web de acordo com os parametros passados  
13 bool CACIC_Auth::autentica() 17 bool CACIC_Auth::autentica()
14 { 18 {
15 - string post = getPostComum();  
16 -  
17 vnclog.Print(LL_SRLOG, VNCLOG("Autenticando o usuário no gerente web.\n")); 19 vnclog.Print(LL_SRLOG, VNCLOG("Autenticando o usuário no gerente web.\n"));
18 20
  21 + string post = getPostComum();
  22 +
19 string config_script = m_scriptsPath; 23 string config_script = m_scriptsPath;
20 config_script += GET_CONFIG_SCRIPT; 24 config_script += GET_CONFIG_SCRIPT;
21 25
@@ -25,65 +29,71 @@ bool CACIC_Auth::autentica() @@ -25,65 +29,71 @@ bool CACIC_Auth::autentica()
25 vector<Dominio> listaDominios; 29 vector<Dominio> listaDominios;
26 if (!verificaAuthChave(resposta, listaDominios)) return false; 30 if (!verificaAuthChave(resposta, listaDominios)) return false;
27 31
28 - vncPassDlg::EAuthCode authStat;  
29 - if (listaDominios.at(0).id == "0") {  
30 - authStat = vncPassDlg::SEM_AUTENTICACAO; 32 + if (!autenticaUsuario(listaDominios)) return false;
  33 +
  34 + vnclog.Print(LL_SRLOG, VNCLOG("Autenticação OK!\n"));
  35 +
  36 + return true;
  37 +}
  38 +
  39 +bool CACIC_Auth::autenticaUsuario(vector<Dominio> &listaDominios)
  40 +{
  41 + string post;
  42 + char resposta[TAMANHO_RESPOSTA];
  43 +
  44 + vncPassDlg passDlg(listaDominios);
  45 +
  46 + if (listaDominios.at(0).id.compare("0") == 0) {
  47 + passDlg.m_authStat = vncPassDlg::SEM_AUTENTICACAO;
31 } else { 48 } else {
32 - authStat = vncPassDlg::ESPERANDO_AUTENTICACAO; 49 + passDlg.m_authStat = vncPassDlg::ESPERANDO_AUTENTICACAO;
33 } 50 }
34 51
35 // apresenta o dialogo de autenticação 52 // apresenta o dialogo de autenticação
36 - vncPassDlg passDlg(listaDominios);  
37 do 53 do
38 { 54 {
39 - if (!passDlg.DoDialog(authStat, "")) return 0;  
40 -  
41 - string nm_nome_acesso_autenticacao;  
42 - nm_nome_acesso_autenticacao = CACIC_Crypt::codifica(passDlg.m_usuario);  
43 -  
44 - string te_senha_acesso_autenticacao;  
45 - te_senha_acesso_autenticacao = CACIC_Crypt::codifica(passDlg.m_senha);  
46 -  
47 - string id_servidor_autenticacao;  
48 - id_servidor_autenticacao = CACIC_Crypt::codifica(passDlg.m_dominio);  
49 - 55 + if (!passDlg.DoDialog()) return false;
  56 +
  57 + post.clear();
  58 + post = getPostComum();
  59 +
50 post += "&nm_nome_acesso_autenticacao="; 60 post += "&nm_nome_acesso_autenticacao=";
51 - post += nm_nome_acesso_autenticacao; 61 + post += CACIC_Crypt::codifica(passDlg.m_usuario);
52 post += "&te_senha_acesso_autenticacao="; 62 post += "&te_senha_acesso_autenticacao=";
53 - post += te_senha_acesso_autenticacao; 63 + post += CACIC_Crypt::codifica(passDlg.m_senha);
54 post += "&id_servidor_autenticacao="; 64 post += "&id_servidor_autenticacao=";
55 - post += id_servidor_autenticacao; 65 + post += CACIC_Crypt::codifica(passDlg.m_dominio);
56 66
57 vnclog.Print(LL_SRLOG, post.data()); 67 vnclog.Print(LL_SRLOG, post.data());
58 68
59 - string session_script = m_scriptsPath.c_str(); 69 + string session_script = m_scriptsPath;
60 session_script.append(SET_SESSION_SCRIPT); 70 session_script.append(SET_SESSION_SCRIPT);
61 71
62 CACIC_Con::sendHtppPost(m_servidorWeb, session_script, post, resposta, TAMANHO_RESPOSTA); 72 CACIC_Con::sendHtppPost(m_servidorWeb, session_script, post, resposta, TAMANHO_RESPOSTA);
63 73
64 if(verificaAuthDominio(resposta)) { 74 if(verificaAuthDominio(resposta)) {
65 - authStat = vncPassDlg::AUTENTICADO; 75 + passDlg.m_authStat = vncPassDlg::AUTENTICADO;
66 } else { 76 } else {
67 - authStat = vncPassDlg::FALHA_AUTENTICACAO; 77 + passDlg.m_authStat = vncPassDlg::FALHA_AUTENTICACAO;
68 } 78 }
69 } 79 }
70 - while (authStat != vncPassDlg::AUTENTICADO); 80 + while (passDlg.m_authStat != vncPassDlg::AUTENTICADO);
71 81
72 if (passDlg.m_authStat != vncPassDlg::SEM_AUTENTICACAO) 82 if (passDlg.m_authStat != vncPassDlg::SEM_AUTENTICACAO)
73 { 83 {
74 string msginfo = "Usuário Autenticado: "; 84 string msginfo = "Usuário Autenticado: ";
75 msginfo += m_usuario; 85 msginfo += m_usuario;
76 - if (!passDlg.DoDialog(vncPassDlg::AUTENTICADO, msginfo)) return 0; 86 + passDlg.m_authStat = vncPassDlg::AUTENTICADO;
  87 + passDlg.m_msgInfo = msginfo;
  88 + if (!passDlg.DoDialog()) return false;
77 } 89 }
78 90
79 - vnclog.Print(LL_SRLOG, VNCLOG("Autenticação OK!\n"));  
80 -  
81 return true; 91 return true;
82 } 92 }
83 93
84 -// autentica o técnico que irá realizar o suporte remoto  
85 bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char te_node_address_cli[], 94 bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char te_node_address_cli[],
86 - char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID) 95 + char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[],
  96 + const vncClientId vncCID, const char peerName[])
87 { 97 {
88 string post = getPostComum(); 98 string post = getPostComum();
89 99
@@ -110,7 +120,7 @@ bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char @@ -110,7 +120,7 @@ bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char
110 CACIC_Con::sendHtppPost(m_servidorWeb, auth_client_script, post, resposta, TAMANHO_RESPOSTA); 120 CACIC_Con::sendHtppPost(m_servidorWeb, auth_client_script, post, resposta, TAMANHO_RESPOSTA);
111 121
112 if (!verificaAuthTecnico(resposta, te_node_address_cli, te_documento_referencial, 122 if (!verificaAuthTecnico(resposta, te_node_address_cli, te_documento_referencial,
113 - te_motivo_conexao, te_so_cli, vncCID)) 123 + te_motivo_conexao, te_so_cli, vncCID, peerName))
114 { 124 {
115 return false; 125 return false;
116 } 126 }
@@ -118,35 +128,33 @@ bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char @@ -118,35 +128,33 @@ bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char
118 return true; 128 return true;
119 } 129 }
120 130
121 -// Verifica o status da chave passada ao agente.  
122 bool CACIC_Auth::verificaAuthChave(char resposta[], vector<Dominio> &listaDominios) 131 bool CACIC_Auth::verificaAuthChave(char resposta[], vector<Dominio> &listaDominios)
123 { 132 {
124 try 133 try
125 { 134 {
126 if (!verificaStatus(resposta)) throw SRCException("Falha na verificação da chave!"); 135 if (!verificaStatus(resposta)) throw SRCException("Falha na verificação da chave!");
127 136
128 - // pega o conteudo da tag de resposta <DOMINIOS>..</DOMINIOS>  
129 string dominios; 137 string dominios;
130 dominios = CACIC_Utils::leTag(resposta, "SERVIDORES_AUTENTICACAO"); 138 dominios = CACIC_Utils::leTag(resposta, "SERVIDORES_AUTENTICACAO");
131 139
132 string dominios_dec; 140 string dominios_dec;
133 dominios_dec = CACIC_Crypt::decodifica(dominios.c_str()); 141 dominios_dec = CACIC_Crypt::decodifica(dominios.c_str());
134 142
135 - char* id_dominio = strtok((char*)dominios_dec.data(), ";"); 143 + char* dominios_dec_str = (char*)malloc(sizeof(char)*(dominios_dec.length() + 1));
  144 + string::traits_type::copy(dominios_dec_str, dominios_dec.c_str(), dominios_dec.length() + 1);
  145 + char* id_dominio = strtok(dominios_dec_str, ";");
136 char* nm_dominio = strtok(NULL, ";"); 146 char* nm_dominio = strtok(NULL, ";");
137 147
138 - // pega a lista de dominios e decodifica, adicionando-a no vetor  
139 - while (id_dominio != NULL && nm_dominio != NULL) 148 + while (id_dominio != NULL)
140 { 149 {
141 - Dominio novoDominio;  
142 - novoDominio.id = id_dominio;  
143 - novoDominio.nome = nm_dominio; 150 + listaDominios.push_back(Dominio(id_dominio, nm_dominio));
144 151
145 - listaDominios.push_back(novoDominio);  
146 -  
147 - id_dominio = strtok (NULL, ";");  
148 - nm_dominio = strtok (NULL, ";"); 152 + id_dominio = strtok(NULL, ";");
  153 + nm_dominio = strtok(NULL, ";");
149 } 154 }
  155 + delete dominios_dec_str;
  156 + delete id_dominio;
  157 + delete nm_dominio;
150 158
151 if (listaDominios.empty()) throw SRCException("A lista de domínios está vazia."); 159 if (listaDominios.empty()) throw SRCException("A lista de domínios está vazia.");
152 160
@@ -160,38 +168,24 @@ bool CACIC_Auth::verificaAuthChave(char resposta[], vector&lt;Dominio&gt; &amp;listaDomini @@ -160,38 +168,24 @@ bool CACIC_Auth::verificaAuthChave(char resposta[], vector&lt;Dominio&gt; &amp;listaDomini
160 } 168 }
161 } 169 }
162 170
163 -// verifica a resposta referente a antenticacao do host  
164 bool CACIC_Auth::verificaAuthDominio(char resposta[]) 171 bool CACIC_Auth::verificaAuthDominio(char resposta[])
165 { 172 {
166 try 173 try
167 { 174 {
168 - if (!verificaStatus(resposta)) throw SRCException("Falha na autenticação do usuário."); 175 + if (!verificaStatus(resposta)) return false;//throw SRCException("Falha na autenticação do usuário.");
169 176
170 - // pega o conteudo da tag de resposta <NM_COMPLETO>..</NM_COMPLETO>  
171 string nm_completo; 177 string nm_completo;
172 nm_completo = CACIC_Utils::leTag(resposta, "NM_COMPLETO"); 178 nm_completo = CACIC_Utils::leTag(resposta, "NM_COMPLETO");
173 179
174 - // decodifica e compara a resposta  
175 string nome_dec; 180 string nome_dec;
176 nome_dec.append(CACIC_Crypt::decodifica(nm_completo.c_str())); 181 nome_dec.append(CACIC_Crypt::decodifica(nm_completo.c_str()));
177 182
178 - // pega o conteudo da tag de resposta <ID_SESSAO>..</ID_SESSAO>  
179 string id_sessao; 183 string id_sessao;
180 id_sessao = CACIC_Utils::leTag(resposta, "ID_SESSAO"); 184 id_sessao = CACIC_Utils::leTag(resposta, "ID_SESSAO");
181 185
182 - string nu_timeout_srcacic;  
183 - nu_timeout_srcacic = CACIC_Utils::leTag(resposta, "NU_TIMEOUT_SRCACIC");  
184 -  
185 - string nu_timeout_srcacic_dec;  
186 - nu_timeout_srcacic_dec = CACIC_Crypt::decodifica(nu_timeout_srcacic.c_str());  
187 -  
188 m_usuario = nome_dec; 186 m_usuario = nome_dec;
189 m_idSessao = id_sessao; 187 m_idSessao = id_sessao;
190 188
191 - /*stringstream timeoutBuffer(nu_timeout_srcacic_dec);  
192 - timeoutBuffer >> this->nuTimeout;  
193 - m_server->SetAutoIdleDisconnectTimeout(this->nuTimeout);*/  
194 -  
195 return true; 189 return true;
196 } 190 }
197 catch(SRCException ex) 191 catch(SRCException ex)
@@ -202,16 +196,14 @@ bool CACIC_Auth::verificaAuthDominio(char resposta[]) @@ -202,16 +196,14 @@ bool CACIC_Auth::verificaAuthDominio(char resposta[])
202 } 196 }
203 } 197 }
204 198
205 -// verifica a resposta referente a antenticacao do técnico  
206 bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[], char te_documento_referencial[], 199 bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[], char te_documento_referencial[],
207 - char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID) 200 + char te_motivo_conexao[], char te_so_cli[], const vncClientId vncCID, const char peerName[])
208 { 201 {
209 try 202 try
210 { 203 {
211 - // pega o conteudo da tag de resposta <STATUS>..</STATUS>  
212 string status; 204 string status;
213 status = CACIC_Utils::leTag(resposta, "STATUS"); 205 status = CACIC_Utils::leTag(resposta, "STATUS");
214 - // decodifica e compara a resposta 206 +
215 string status_dec; 207 string status_dec;
216 status_dec = CACIC_Crypt::decodifica(status.c_str()); 208 status_dec = CACIC_Crypt::decodifica(status.c_str());
217 209
@@ -219,19 +211,18 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[] @@ -219,19 +211,18 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[]
219 // para poder pegar a resposta de erro que vem na tag STATUS 211 // para poder pegar a resposta de erro que vem na tag STATUS
220 if (status_dec.compare("OK") != 0) throw SRCException(status_dec.c_str()); 212 if (status_dec.compare("OK") != 0) throw SRCException(status_dec.c_str());
221 213
222 - // pega o conteudo da tag de resposta <ID_USUARIO_CLI>..</ID_USUARIO_CLI>  
223 string id_usuario_cli; 214 string id_usuario_cli;
224 id_usuario_cli = CACIC_Utils::leTag(resposta, "ID_USUARIO_CLI"); 215 id_usuario_cli = CACIC_Utils::leTag(resposta, "ID_USUARIO_CLI");
225 216
226 - // pega o conteudo da tag de resposta <ID_CONEXAO>..</ID_CONEXAO>  
227 string id_conexao; 217 string id_conexao;
228 id_conexao = CACIC_Utils::leTag(resposta, "ID_CONEXAO"); 218 id_conexao = CACIC_Utils::leTag(resposta, "ID_CONEXAO");
229 219
230 - // pega o conteudo da tag de resposta <NM_COMPLETO>..</NM_COMPLETO>  
231 string nm_usuario_completo; 220 string nm_usuario_completo;
232 nm_usuario_completo = CACIC_Utils::leTag(resposta, "NM_USUARIO_COMPLETO"); 221 nm_usuario_completo = CACIC_Utils::leTag(resposta, "NM_USUARIO_COMPLETO");
233 222
234 - // decodifica e compara a resposta 223 + string dt_hr_inicio_sessao;
  224 + dt_hr_inicio_sessao = CACIC_Utils::leTag(resposta, "DT_HR_INICIO_SESSAO");
  225 +
235 string nm_usuario_completo_dec; 226 string nm_usuario_completo_dec;
236 nm_usuario_completo_dec.append(CACIC_Crypt::decodifica(nm_usuario_completo.c_str())); 227 nm_usuario_completo_dec.append(CACIC_Crypt::decodifica(nm_usuario_completo.c_str()));
237 228
@@ -241,11 +232,6 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[] @@ -241,11 +232,6 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[]
241 string te_motivo_conexao_dec; 232 string te_motivo_conexao_dec;
242 te_motivo_conexao_dec.append(CACIC_Crypt::decodifica(te_motivo_conexao)); 233 te_motivo_conexao_dec.append(CACIC_Crypt::decodifica(te_motivo_conexao));
243 234
244 - // pega o conteudo da tag de resposta <DT_HR_INICIO_SESSAO>..</DT_HR_INICIO_SESSAO>  
245 - string dt_hr_inicio_sessao;  
246 - dt_hr_inicio_sessao = CACIC_Utils::leTag(resposta, "DT_HR_INICIO_SESSAO");  
247 -  
248 - // decodifica e compara a resposta  
249 string dt_hr_inicio_sessao_dec; 235 string dt_hr_inicio_sessao_dec;
250 dt_hr_inicio_sessao_dec.append(CACIC_Crypt::decodifica(dt_hr_inicio_sessao.c_str())); 236 dt_hr_inicio_sessao_dec.append(CACIC_Crypt::decodifica(dt_hr_inicio_sessao.c_str()));
251 237
@@ -260,6 +246,7 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[] @@ -260,6 +246,7 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[]
260 novoCliente.te_motivo_conexao = te_motivo_conexao_dec; 246 novoCliente.te_motivo_conexao = te_motivo_conexao_dec;
261 novoCliente.te_so_visitante = te_so_cli; 247 novoCliente.te_so_visitante = te_so_cli;
262 novoCliente.dt_hr_inicio_sessao = dt_hr_inicio_sessao_dec; 248 novoCliente.dt_hr_inicio_sessao = dt_hr_inicio_sessao_dec;
  249 + novoCliente.peerName = peerName;
263 250
264 // adiciona o novo usuario a lista de usuarios visitantes 251 // adiciona o novo usuario a lista de usuarios visitantes
265 m_listaClientes.push_back(novoCliente); 252 m_listaClientes.push_back(novoCliente);
@@ -268,6 +255,8 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[] @@ -268,6 +255,8 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[]
268 255
269 m_infoDlg.m_nomeVisitante = m_novoCliente.nm_usuario_completo; 256 m_infoDlg.m_nomeVisitante = m_novoCliente.nm_usuario_completo;
270 m_infoDlg.m_dataInicio = m_novoCliente.dt_hr_inicio_sessao; 257 m_infoDlg.m_dataInicio = m_novoCliente.dt_hr_inicio_sessao;
  258 + m_infoDlg.m_ip = m_novoCliente.peerName;
  259 + m_infoDlg.m_documentoReferencia = m_novoCliente.te_documento_referencial;
271 260
272 return true; 261 return true;
273 } 262 }
@@ -282,19 +271,19 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[] @@ -282,19 +271,19 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[]
282 271
283 void CACIC_Auth::atualizaSessao() 272 void CACIC_Auth::atualizaSessao()
284 { 273 {
285 - // Verifica se a palavra chave foi trocada enquanto em execução. 274 + // Verifica, antes de atualizar a sessão, se a palavra
  275 + // chave foi trocada enquanto o servidor estava aberto.
286 FILE *pFile; 276 FILE *pFile;
287 - string filePath = m_tempPath + COOKIE_FILENAME; 277 + string filePath = m_tempPath + CACIC_Auth::COOKIE_FILENAME;
288 pFile = fopen(filePath.data(), "r"); 278 pFile = fopen(filePath.data(), "r");
289 char newKey[256]; 279 char newKey[256];
290 280
291 - // testa se o arquivo foi aberto com sucesso  
292 if(pFile != NULL) 281 if(pFile != NULL)
293 { 282 {
294 if (fgets(newKey, 256, pFile)) 283 if (fgets(newKey, 256, pFile))
295 m_palavraChave = newKey; 284 m_palavraChave = newKey;
296 285
297 - fclose(pFile); // libera o ponteiro para o arquivo 286 + fclose(pFile);
298 remove(filePath.data()); 287 remove(filePath.data());
299 } 288 }
300 289
@@ -316,25 +305,25 @@ void CACIC_Auth::atualizaSessao() @@ -316,25 +305,25 @@ void CACIC_Auth::atualizaSessao()
316 } 305 }
317 else 306 else
318 { 307 {
319 - string listaidusu = "&id_usuario_visitante=";  
320 - string listaidcon = "&id_conexao=";  
321 - string listanode = "&te_node_address_visitante=";  
322 - string listaidso = "&te_so_visitante="; 308 + string listaIDUsuario = "&id_usuario_visitante=";
  309 + string listaIDConexao = "&id_conexao=";
  310 + string listaNodeAddress = "&te_node_address_visitante=";
  311 + string listaID_SO = "&te_so_visitante=";
323 for (int i = 0; i < m_listaClientes.size(); i++) 312 for (int i = 0; i < m_listaClientes.size(); i++)
324 { 313 {
325 - listaidusu += m_listaClientes[i].id_usuario_visitante;  
326 - if (i < m_listaClientes.size() - 1) listaidusu += "<REG>";  
327 - listaidcon += m_listaClientes[i].id_conexao;  
328 - if (i < m_listaClientes.size() - 1) listaidcon += "<REG>";  
329 - listanode += m_listaClientes[i].te_node_address_visitante;  
330 - if (i < m_listaClientes.size() - 1) listanode += "<REG>";  
331 - listaidso += m_listaClientes[i].te_so_visitante;  
332 - if (i < m_listaClientes.size() - 1) listaidso += "<REG>"; 314 + listaIDUsuario += m_listaClientes[i].id_usuario_visitante;
  315 + if (i < m_listaClientes.size() - 1) listaIDUsuario += "<REG>";
  316 + listaIDConexao += m_listaClientes[i].id_conexao;
  317 + if (i < m_listaClientes.size() - 1) listaIDConexao += "<REG>";
  318 + listaNodeAddress += m_listaClientes[i].te_node_address_visitante;
  319 + if (i < m_listaClientes.size() - 1) listaNodeAddress += "<REG>";
  320 + listaID_SO += m_listaClientes[i].te_so_visitante;
  321 + if (i < m_listaClientes.size() - 1) listaID_SO += "<REG>";
333 } 322 }
334 - post += listaidusu;  
335 - post += listaidcon;  
336 - post += listanode;  
337 - post += listaidso; 323 + post += listaIDUsuario;
  324 + post += listaIDConexao;
  325 + post += listaNodeAddress;
  326 + post += listaID_SO;
338 } 327 }
339 328
340 string session_script = m_scriptsPath.c_str(); 329 string session_script = m_scriptsPath.c_str();
@@ -346,8 +335,23 @@ void CACIC_Auth::atualizaSessao() @@ -346,8 +335,23 @@ void CACIC_Auth::atualizaSessao()
346 if (!verificaStatus(resposta)) 335 if (!verificaStatus(resposta))
347 { 336 {
348 MessageBox(NULL, "Ocorreu um erro ao atualizar a sessão! O programa será fechado.", "Erro!", MB_OK | MB_ICONERROR); 337 MessageBox(NULL, "Ocorreu um erro ao atualizar a sessão! O programa será fechado.", "Erro!", MB_OK | MB_ICONERROR);
349 - ExitProcess(0);  
350 - return; 338 + finalizaServidor();
  339 + }
  340 +
  341 + // verifica se o servidor está sem receber conexão por
  342 + // mais tempo que o limite, caso esteja, o processo é finalizado.
  343 + if (m_listaClientes.empty())
  344 + {
  345 + m_idleTime--;
  346 + if (m_idleTime <= 0)
  347 + {
  348 + vnclog.Print(LL_SRLOG, "Fechando o servidor por atingir o tempo máximo de idle.");
  349 + finalizaServidor();
  350 + }
  351 + }
  352 + else
  353 + {
  354 + m_idleTime = TEMPO_IDLE;
351 } 355 }
352 } 356 }
353 357
@@ -373,7 +377,6 @@ void CACIC_Auth::sendChatText(char te_mensagem[], char cs_origem[]) @@ -373,7 +377,6 @@ void CACIC_Auth::sendChatText(char te_mensagem[], char cs_origem[])
373 CACIC_Con::sendHtppPost(m_servidorWeb, session_script, post, resposta, TAMANHO_RESPOSTA); 377 CACIC_Con::sendHtppPost(m_servidorWeb, session_script, post, resposta, TAMANHO_RESPOSTA);
374 } 378 }
375 379
376 -// remove o cliente com id vncid da lista de usuarios visitantes  
377 void CACIC_Auth::removeCliente(vncClientId vncCID) 380 void CACIC_Auth::removeCliente(vncClientId vncCID)
378 { 381 {
379 // Atualiza a sessão antes de remover o cliente. 382 // Atualiza a sessão antes de remover o cliente.
@@ -394,16 +397,6 @@ void CACIC_Auth::removeCliente(vncClientId vncCID) @@ -394,16 +397,6 @@ void CACIC_Auth::removeCliente(vncClientId vncCID)
394 m_novoCliente = novoCliente; 397 m_novoCliente = novoCliente;
395 } 398 }
396 399
397 -CACIC_Auth* CACIC_Auth::getInstance()  
398 -{  
399 - if (!m_instance)  
400 - {  
401 - m_instance = new CACIC_Auth();  
402 - }  
403 - return m_instance;  
404 -}  
405 -  
406 -// pega os parametros comuns a todos os posts enviados  
407 string CACIC_Auth::getPostComum() 400 string CACIC_Auth::getPostComum()
408 { 401 {
409 string post = ""; 402 string post = "";
@@ -417,24 +410,31 @@ string CACIC_Auth::getPostComum() @@ -417,24 +410,31 @@ string CACIC_Auth::getPostComum()
417 return post; 410 return post;
418 } 411 }
419 412
420 -// verifica se a resposta enviada na tag status esta ok  
421 bool CACIC_Auth::verificaStatus(char resposta[]) 413 bool CACIC_Auth::verificaStatus(char resposta[])
422 { 414 {
423 - // pega o conteudo da tag de resposta <STATUS>..</STATUS>  
424 string status; 415 string status;
425 status = CACIC_Utils::leTag(resposta, "STATUS"); 416 status = CACIC_Utils::leTag(resposta, "STATUS");
426 417
427 - // decodifica e compara a resposta  
428 string status_dec; 418 string status_dec;
429 status_dec = CACIC_Crypt::decodifica(status.c_str()); 419 status_dec = CACIC_Crypt::decodifica(status.c_str());
430 420
431 - if (status_dec.compare("OK") != 0)  
432 - {  
433 - string errorMsg = "Falha na autenticação do usuário no domínio.\n";  
434 - errorMsg += status_dec;  
435 - vnclog.Print(LL_SRLOG, VNCLOG(errorMsg.c_str()));  
436 - return false;  
437 - } 421 + if (status_dec.compare("OK") != 0) return false;
438 422
439 return true; 423 return true;
440 } 424 }
  425 +
  426 +void CACIC_Auth::finalizaServidor()
  427 +{
  428 + static HANDLE hShutdownEvent;
  429 + hShutdownEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\SessionEventUltra");
  430 + SetEvent(hShutdownEvent);
  431 + CloseHandle(hShutdownEvent);
  432 + HWND hservwnd;
  433 + // UVNC Default: WinVNC Tray Icon
  434 + hservwnd = FindWindow("srCACICsrv Tray Icon", NULL);
  435 + if (hservwnd != NULL)
  436 + {
  437 + PostMessage(hservwnd, WM_COMMAND, 40002, 0);
  438 + PostMessage(hservwnd, WM_CLOSE, 0, 0);
  439 + }
  440 +}
srcacic/WinVNC/WinVNC/CACIC_Auth.h
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe singleton responsável pela autenticação no gerente web.
  5 + */
  6 +
1 #ifndef _CACIC_AUTH_ 7 #ifndef _CACIC_AUTH_
2 #define _CACIC_AUTH_ 8 #define _CACIC_AUTH_
3 9
@@ -21,12 +27,12 @@ using namespace std; @@ -21,12 +27,12 @@ using namespace std;
21 27
22 #include "vncClient.h" 28 #include "vncClient.h"
23 29
24 -#define AGUARDE_FILENAME "aguarde_srCACIC.txt";  
25 -#define COOKIE_FILENAME "cacic_ck.txt";  
26 -  
27 -// struct referente a um usuario remoto 30 +/**
  31 + * Struct referente a um usuário cliente.
  32 + */
28 struct ClienteSRC { 33 struct ClienteSRC {
29 vncClientId vncCID; 34 vncClientId vncCID;
  35 + string peerName;
30 string id_usuario_visitante; 36 string id_usuario_visitante;
31 string id_usuario_cli; 37 string id_usuario_cli;
32 string id_conexao; 38 string id_conexao;
@@ -44,15 +50,37 @@ class CACIC_Auth { @@ -44,15 +50,37 @@ class CACIC_Auth {
44 50
45 public: 51 public:
46 52
47 - // lista de usuarios remotos 53 + /**
  54 + * Nome do arquivo temporário de trava.
  55 + * Utilizado para que o cacic impeça a execução de coletas com o suporte ativo.
  56 + */
  57 + static const string AGUARDE_FILENAME;
  58 +
  59 + /**
  60 + * Tempo máximo que o servidor pode ficar aberto sem conexões. (mins)
  61 + */
  62 + static const UINT TEMPO_IDLE;
  63 +
  64 + /** Lista de usuários cliente. */
48 vector<ClienteSRC> m_listaClientes; 65 vector<ClienteSRC> m_listaClientes;
49 66
  67 + /** Último usuário cliente conectado. */
50 ClienteSRC m_novoCliente; 68 ClienteSRC m_novoCliente;
51 69
  70 + /**
  71 + * Janela com informações sobre o cliente conectado.
  72 + * Exibida enquanto há suporte em andamento.
  73 + */
52 supInfoDlg m_infoDlg; 74 supInfoDlg m_infoDlg;
53 75
54 - static CACIC_Auth* getInstance(); 76 + /** Singleton. */
  77 + static CACIC_Auth* getInstance()
  78 + {
  79 + if (!m_instance) m_instance = new CACIC_Auth();
  80 + return m_instance;
  81 + }
55 82
  83 + /* MÉTODOS DE ENCAPSULAMENTO --> */
56 void setServidorWeb(string newServidorWeb) {m_servidorWeb = newServidorWeb;} 84 void setServidorWeb(string newServidorWeb) {m_servidorWeb = newServidorWeb;}
57 string getServidorWeb() {return m_servidorWeb;} 85 string getServidorWeb() {return m_servidorWeb;}
58 void setScriptsPath(string newScriptsPath) {m_scriptsPath = newScriptsPath;} 86 void setScriptsPath(string newScriptsPath) {m_scriptsPath = newScriptsPath;}
@@ -62,48 +90,154 @@ public: @@ -62,48 +90,154 @@ public:
62 void setPalavraChave(char* newPalavraChave) {m_palavraChave = newPalavraChave;} 90 void setPalavraChave(char* newPalavraChave) {m_palavraChave = newPalavraChave;}
63 void setPorta(UINT newPorta) {m_porta = newPorta;} 91 void setPorta(UINT newPorta) {m_porta = newPorta;}
64 UINT getPorta() {return m_porta;} 92 UINT getPorta() {return m_porta;}
65 - 93 + void setTimeout(UINT newNuTimeout) {m_nuTimeout = newNuTimeout;}
  94 + UINT getTimeout() {return m_nuTimeout;}
  95 + /* <-- MÉTODOS DE ENCAPSULAMENTO */
  96 +
  97 + /**
  98 + * Retorna os valores padrão de post, usados na
  99 + * comunicação com o gerente web.
  100 + * te_so, te_node_address, te_palavra_chave
  101 + * @return String com o post padrão formatado.
  102 + */
66 string getPostComum(); 103 string getPostComum();
67 104
  105 + /**
  106 + * Remove o usuário cliente da lista.
  107 + * @param vncCID ID do cliente VNC, utilizado para
  108 + * diferenciar os clientes, caso haja mais de um.
  109 + */
68 void removeCliente(vncClientId vncCID); 110 void removeCliente(vncClientId vncCID);
69 111
  112 + /**
  113 + * Faz a comunicação com o gerente web para validar a palavra chave
  114 + * e criar uma nova sessão para o suporte remoto.
  115 + * @return bool Status da autenticação.
  116 + */
70 bool autentica(); 117 bool autentica();
  118 +
  119 + /**
  120 + * Se comunica com o gerente web para validar o usuário cliente.
  121 + * Se o usuário for válido, ele cria uma nova sessão de conexão.
  122 + * @param nm_usuario_cli String codificada contendo o nome de usuário.
  123 + * @param te_senha_cli String codificada contendo a senha do usuário.
  124 + * @param te_node_address_cli String codificada contendo o MAC address do cliente.
  125 + * @param te_documento_referencial String codificada contendo o Documento de Referência do suporte remoto.
  126 + * @param te_motivo_conexao String codificada contendo o motivo do suporte remoto.
  127 + * @param te_so_cli String codificada contendo a identificação do SO do cliente.
  128 + * @param vncCID ID do cliente VNC.
  129 + * @param peerName String contendo o endereço ip do cliente.
  130 + */
71 bool validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char te_node_address_cli[], 131 bool validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char te_node_address_cli[],
72 - char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID); 132 + char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[],
  133 + const vncClientId vncCID, const char peerName[]);
  134 +
  135 + /**
  136 + * Se comunica com o gerente web para atualizar a sessão de suporte.
  137 + */
73 void atualizaSessao(); 138 void atualizaSessao();
  139 +
  140 + /**
  141 + * Envia o log do chat para o gerente web durante o suporte remoto.
  142 + * @param te_mensagem Mensagem recebida/enviada.
  143 + * @param cs_origem Origem da mensagem, cliente/servidor.
  144 + */
74 void sendChatText(char te_mensagem[], char cs_origem[]); 145 void sendChatText(char te_mensagem[], char cs_origem[]);
75 146
  147 + /** Fecha o servidor. */
  148 + void finalizaServidor();
  149 +
76 private: 150 private:
77 151
  152 + /** Singleton. */
78 static CACIC_Auth* m_instance; 153 static CACIC_Auth* m_instance;
79 154
80 - CACIC_Auth();  
81 - virtual ~CACIC_Auth();  
82 -  
83 - string m_servidorWeb; // endereco do servidor web  
84 - string m_scriptsPath; // caminho dos scripts  
85 - string m_tempPath; // caminho completo para a pasta temp do cacic 155 + CACIC_Auth() {
  156 + m_idleTime = TEMPO_IDLE;
  157 + }
86 158
87 - string m_usuario; // usuario host do suporte  
88 - string m_idSessao; // id da sessao iniciada pelo usuario host  
89 - UINT m_nuTimeout; // valor do idle timeout 159 + virtual ~CACIC_Auth() {}
90 160
91 - string m_soVersion; // versao do sistema operacional do host  
92 - string m_nodeAdress; // mac address do host  
93 - string m_palavraChave; // palavra chave do cacic no momento da ativação do suporte remoto 161 + /** Endereço do servidor web. */
  162 + string m_servidorWeb;
  163 + /** Caminho dos scripts no servidor web. */
  164 + string m_scriptsPath;
  165 + /** Caminho estático para a pasta temp do cacic. */
  166 + string m_tempPath;
94 167
95 - UINT m_porta; 168 + /** Usuário host do suporte. */
  169 + string m_usuario;
  170 + /** ID da sessão iniciada pelo usuário host. */
  171 + string m_idSessao;
96 172
97 - static const string GET_CONFIG_SCRIPT; // caminho para o script de configurações  
98 - static const string SET_SESSION_SCRIPT; // caminho para o script de sessões  
99 - static const string AUTH_CLIENT_SCRIPT; // caminho para o script de autenticação  
100 - static const unsigned int TAMANHO_RESPOSTA; // tamanho maximo aceito pela resposta xml 173 + /** Versão do sistema operacional do host. */
  174 + string m_soVersion;
  175 + /** MAC Address do host. */
  176 + string m_nodeAdress;
  177 + /** Palavra chave. Utilizada na comunicação com o gerente web. */
  178 + string m_palavraChave;
101 179
  180 + /** Porta de escuta. */
  181 + UINT m_porta;
  182 + /** Tempo limite que o srcacic pode ficar ocioso antes de fechar-se. */
  183 + UINT m_nuTimeout;
  184 + /** Tempo que o servidor está ocioso */
  185 + UINT m_idleTime;
  186 +
  187 + /** Nome do script de configurações do gerente web. */
  188 + static const string GET_CONFIG_SCRIPT;
  189 + /** Nome do script de sessões do gerente web. */
  190 + static const string SET_SESSION_SCRIPT;
  191 + /** Nome do script de autenticação do gerente web. */
  192 + static const string AUTH_CLIENT_SCRIPT;
  193 + /** Tamanho padrão da resposta recebida pela requisição http. */
  194 + static const unsigned int TAMANHO_RESPOSTA;
  195 + /** Nome do arquivo temporário de atualização da palavra chave. */
  196 + static const string COOKIE_FILENAME;
  197 +
  198 + /**
  199 + * Apresenta o diálogo de login do usuário host e
  200 + * valida os dados no gerente web.
  201 + * @param listaDominios Lista de domínios obtida na autenticação.
  202 + */
  203 + bool autenticaUsuario(vector<Dominio> &listaDominios);
  204 +
  205 + /**
  206 + * Verifica a autenticação da chave no gerente web.
  207 + * @param resposta Resposta XML gerada na comunicação com o gerente web.
  208 + * @param listaDominios Lista de domínios obtida na autenticação.
  209 + */
102 bool verificaAuthChave(char resposta[], vector<Dominio> &listaDominios); 210 bool verificaAuthChave(char resposta[], vector<Dominio> &listaDominios);
  211 +
  212 + /**
  213 + * Verifica se a resposta da autenticação do usuário host foi positiva.
  214 + * @param resposta Resposta XML gerada na comunicação com o gerente web.
  215 + */
103 bool verificaAuthDominio(char resposta[]); 216 bool verificaAuthDominio(char resposta[]);
104 - bool verificaAuthTecnico(char resposta[], char te_node_address_cli[], char te_documento_referencial[],  
105 - char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID);  
106 217
  218 + /**
  219 + * Verifica se a resposta da autenticação do técnico foi positiva,
  220 + * armazena o novo cliente na lista e exibe a tela de informações do suporte.
  221 + * @param nm_usuario_cli String codificada contendo o nome de usuário.
  222 + * @param te_senha_cli String codificada contendo a senha do usuário.
  223 + * @param te_node_address_cli String codificada contendo o MAC address do cliente.
  224 + * @param te_documento_referencial String codificada contendo o Documento de Referência do suporte remoto.
  225 + * @param te_motivo_conexao String codificada contendo o motivo do suporte remoto.
  226 + * @param te_so_cli String codificada contendo a identificação do SO do cliente.
  227 + * @param vncCID ID do cliente VNC.
  228 + * @param peerName String contendo o endereço ip do cliente.
  229 + */
  230 + bool verificaAuthTecnico(char resposta[], char te_node_address_cli[], char te_documento_referencial[],
  231 + char te_motivo_conexao[], char te_so_cli[],
  232 + const vncClientId vncCID, const char peerName[]);
  233 +
  234 + /**
  235 + * Verifica o valor de retorno STATUS que é enviado pelo gerente web
  236 + * após cada comunicação para confirmar a operação.
  237 + * <b>Valores retornados:</b><br />
  238 + * OK: A operação teve êxito.<br />ERRO: A operação falhou.
  239 + * @param resposta Resposta XML gerada na comunicação com o gerente web.
  240 + */
107 bool verificaStatus(char resposta[]); 241 bool verificaStatus(char resposta[]);
108 }; 242 };
109 243
srcacic/WinVNC/WinVNC/CACIC_Con.cpp
1 -// Declaração da classe CACIC_Con 1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para envio de requisições html ao gerente web.
  5 + * API das funções wininet:
  6 + * http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx
  7 + */
2 8
3 #include "CACIC_Con.h" 9 #include "CACIC_Con.h"
4 10
5 -CACIC_Con::CACIC_Con() {} 11 +const TCHAR CACIC_Con::DEFAULT_HEADER[] = "Content-Type: application/x-www-form-urlencoded";
6 12
7 -CACIC_Con::~CACIC_Con()  
8 -{  
9 - if(m_hSession != NULL) InternetCloseHandle(m_hSession);  
10 - if(m_hConnect != NULL) InternetCloseHandle(m_hConnect);  
11 - if(m_hRequest != NULL) InternetCloseHandle(m_hRequest);  
12 -}  
13 -  
14 -// conecta ao gerente web  
15 void CACIC_Con::conecta() 13 void CACIC_Con::conecta()
16 { 14 {
17 m_hSession = InternetOpen("CACIC_Con", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 15 m_hSession = InternetOpen("CACIC_Con", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
@@ -32,7 +30,6 @@ void CACIC_Con::conecta() @@ -32,7 +30,6 @@ void CACIC_Con::conecta()
32 } 30 }
33 } 31 }
34 32
35 -// envia os parametros ao script  
36 void CACIC_Con::sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[]) 33 void CACIC_Con::sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[])
37 { 34 {
38 m_hRequest = HttpOpenRequest(m_hConnect, metodo, script, NULL, NULL, NULL, 0, 1); 35 m_hRequest = HttpOpenRequest(m_hConnect, metodo, script, NULL, NULL, NULL, 0, 1);
@@ -43,10 +40,11 @@ void CACIC_Con::sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[]) @@ -43,10 +40,11 @@ void CACIC_Con::sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[])
43 return; 40 return;
44 } 41 }
45 42
46 - HttpSendRequest(m_hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata)); 43 + HttpSendRequest(m_hRequest, CACIC_Con::DEFAULT_HEADER,
  44 + strlen(CACIC_Con::DEFAULT_HEADER),
  45 + frmdata, strlen(frmdata));
47 } 46 }
48 47
49 -// pega a resposta da ultima solicitacao e armazena no buffer  
50 bool CACIC_Con::getResponse(char buff[], unsigned long sz) 48 bool CACIC_Con::getResponse(char buff[], unsigned long sz)
51 { 49 {
52 if(!m_hRequest) 50 if(!m_hRequest)
srcacic/WinVNC/WinVNC/CACIC_Con.h
1 -// Classe para conexao do vnc com o gerente web do Cacic.  
2 -// API das funcoes da classe wininet.h:  
3 -// http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx 1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para envio de requisições html ao gerente web.
  5 + * API das funções wininet:
  6 + * http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx
  7 + */
4 8
5 #ifndef _CACIC_CON_ 9 #ifndef _CACIC_CON_
6 #define _CACIC_CON_ 10 #define _CACIC_CON_
@@ -17,32 +21,82 @@ using namespace std; @@ -17,32 +21,82 @@ using namespace std;
17 #define HTTP_POST "POST" 21 #define HTTP_POST "POST"
18 #define HTTP_GET "GET" 22 #define HTTP_GET "GET"
19 23
20 -static const TCHAR hdrs[] = "Content-Type: application/x-www-form-urlencoded";  
21 -  
22 class CACIC_Con { 24 class CACIC_Con {
23 25
24 private: 26 private:
25 27
26 - HINTERNET m_hSession; // handle da sessao  
27 - HINTERNET m_hConnect; // handle da conexao  
28 - HINTERNET m_hRequest; // handle da resposta da requisicao 28 + /** Header padrão das requisições. */
  29 + static const TCHAR DEFAULT_HEADER[];
  30 +
  31 + /** Handler da sessão. */
  32 + HINTERNET m_hSession;
  33 + /** Handler da conexao. */
  34 + HINTERNET m_hConnect;
  35 + /** Handler da resposta da requisição. */
  36 + HINTERNET m_hRequest;
29 37
  38 + /** Número de bytes lidos na última requisição. */
30 unsigned long m_lBytesRead; 39 unsigned long m_lBytesRead;
  40 + /** Nome do servidor que sofrerá a ação. */
31 LPCSTR m_server; 41 LPCSTR m_server;
32 42
33 public: 43 public:
34 44
35 - CACIC_Con();  
36 - virtual ~CACIC_Con();  
37 - 45 + CACIC_Con() {}
  46 +
  47 + /**
  48 + * Destrutor da classe.
  49 + * Libera os handlers que estiverem abertos.
  50 + */
  51 + virtual ~CACIC_Con()
  52 + {
  53 + if(m_hSession != NULL) InternetCloseHandle(m_hSession);
  54 + if(m_hConnect != NULL) InternetCloseHandle(m_hConnect);
  55 + if(m_hRequest != NULL) InternetCloseHandle(m_hRequest);
  56 + }
  57 +
  58 + /**
  59 + * Altera o servidor.
  60 + * @param server String com o nome do servidor.
  61 + */
38 void setServer(LPCSTR server){m_server = server;} 62 void setServer(LPCSTR server){m_server = server;}
  63 +
  64 + /**
  65 + * Retorna o nome do servidor.
  66 + * @return String com o nome do servidor.
  67 + */
39 LPCSTR getServer(){return m_server;} 68 LPCSTR getServer(){return m_server;}
40 69
41 - void conecta(); // conecta ao servidor  
42 - // envia uma requisicao ao script atraves de POST/GET 70 + /**
  71 + * Efetua a conexão com o servidor.
  72 + */
  73 + void conecta();
  74 +
  75 + /**
  76 + * Envia uma requisição ao servidor.
  77 + * @param metodo String com o tipo da requisição. (GET/POST)
  78 + * @param script String com o nome do script que será acessado.
  79 + * @param frmdata String com os dados que irão ser passados como parâmetro ao script.
  80 + */
43 void sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[]); 81 void sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[]);
44 - bool getResponse(char buff[], unsigned long sz); // recebe a resposta da execucao do script  
45 82
  83 + /**
  84 + * Retorna a resposta gerada pelo servidor que recebeu a requisição.
  85 + * @param buff Buffer para armazenar o resultado da requisição.
  86 + * @param sz Tamanho do buffer.
  87 + * @return bool Boleano com o estado da requisição.
  88 + */
  89 + bool getResponse(char buff[], unsigned long sz);
  90 +
  91 + /**
  92 + * Método estático que faz uma requisição ao servidor passado e
  93 + * já retorna a resposta através do buffer "resposta".
  94 + * @param servidor String com o nome do servidor.
  95 + * @param script String com o nome do script.
  96 + * @param post String com os parãmetros a serem passados ao script.
  97 + * @param resposta Buffer de resposta da requisição.
  98 + * @param sz Tamanho da resposta.
  99 + */
46 static void sendHtppPost(const string &servidor, const string &script, string &post, 100 static void sendHtppPost(const string &servidor, const string &script, string &post,
47 char resposta[], unsigned long sz); 101 char resposta[], unsigned long sz);
48 102
srcacic/WinVNC/WinVNC/CACIC_Crypt.cpp
1 -/*  
2 - * Classe para criptografia de dados 1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para criptografia de dados.
3 */ 5 */
4 6
5 #include "CACIC_Crypt.h" 7 #include "CACIC_Crypt.h"
@@ -9,7 +11,6 @@ const unsigned int CACIC_Crypt::SRCACIC_KEY_SIZE = 16; @@ -9,7 +11,6 @@ const unsigned int CACIC_Crypt::SRCACIC_KEY_SIZE = 16;
9 const char CACIC_Crypt::SRCACIC_KEY[17] = "CacicBrasil"; 11 const char CACIC_Crypt::SRCACIC_KEY[17] = "CacicBrasil";
10 const char CACIC_Crypt::SRCACIC_IV[17] = "abcdefghijklmnop"; 12 const char CACIC_Crypt::SRCACIC_IV[17] = "abcdefghijklmnop";
11 13
12 -// Tira do base64 e desencripta.  
13 string CACIC_Crypt::decodifica(const char* entrada) 14 string CACIC_Crypt::decodifica(const char* entrada)
14 { 15 {
15 string decode_base64; 16 string decode_base64;
@@ -34,7 +35,6 @@ string CACIC_Crypt::decodifica(const char* entrada) @@ -34,7 +35,6 @@ string CACIC_Crypt::decodifica(const char* entrada)
34 return out; 35 return out;
35 } 36 }
36 37
37 -// Encripta e coloca no base64.  
38 string CACIC_Crypt::codifica(const char* entrada) 38 string CACIC_Crypt::codifica(const char* entrada)
39 { 39 {
40 unsigned int entrada_len = strlen(entrada); 40 unsigned int entrada_len = strlen(entrada);
srcacic/WinVNC/WinVNC/CACIC_Crypt.h
1 -/*  
2 - * Classe para criptografia de dados 1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para criptografia de dados.
3 */ 5 */
4 6
5 #ifndef _CACIC_CRYPT_ 7 #ifndef _CACIC_CRYPT_
@@ -16,17 +18,37 @@ class CACIC_Crypt { @@ -16,17 +18,37 @@ class CACIC_Crypt {
16 18
17 public: 19 public:
18 20
  21 + /**
  22 + * Remove da String de entrada os caracteres colocados pela URLEncode,
  23 + * tira do Base64 e depois decodifica usando o Rijndael.
  24 + * @param entrada String a ser decodificada.
  25 + * @return string String decodificada.
  26 + */
19 static string decodifica(const char* entrada); 27 static string decodifica(const char* entrada);
  28 +
  29 + /**
  30 + * Codifica a String passada com o algoritmo Rijndael e coloca no Base64.
  31 + * @param entrada String a ser codificada.
  32 + * @return string String codificada.
  33 + */
20 static string codifica(const char* entrada); 34 static string codifica(const char* entrada);
21 35
22 private: 36 private:
23 37
24 - static const unsigned int SRCACIC_BLOCK_SIZE; // tamanho padrao do bloco  
25 - static const unsigned int SRCACIC_KEY_SIZE; // tamanho padrao da chave  
26 - static const char SRCACIC_KEY[17]; // chave de en/dec  
27 - static const char SRCACIC_IV[17]; // vetor de inicializacao  
28 -  
29 - virtual void ccrypt() = 0; // Truque para tornar a classe abstrata. 38 + /** Tamanho padrão do bloco. */
  39 + static const unsigned int SRCACIC_BLOCK_SIZE;
  40 + /** Tamanho padrão da chave. */
  41 + static const unsigned int SRCACIC_KEY_SIZE;
  42 + /** Chave de codificação. */
  43 + static const char SRCACIC_KEY[17];
  44 + /** Vetor de inicialização. */
  45 + static const char SRCACIC_IV[17];
  46 +
  47 + /**
  48 + * Este método virtual puro é um truque para que a classe
  49 + * se torne abstrata e não possa ser instanciada.
  50 + */
  51 + virtual void ccrypt() = 0;
30 }; 52 };
31 53
32 #endif 54 #endif
srcacic/WinVNC/WinVNC/CACIC_Exception.h
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para lidar com as mensagens de erro.
  5 + */
  6 +
1 #ifndef _CACIC_EXCEPTION_ 7 #ifndef _CACIC_EXCEPTION_
2 #define _CACIC_EXCEPTION_ 8 #define _CACIC_EXCEPTION_
3 9
4 #include <windows.h> 10 #include <windows.h>
5 11
6 -// exceção padrao do srCACIC  
7 class SRCException { 12 class SRCException {
  13 +
8 private: 14 private:
  15 +
  16 + /** Mensagem de erro. */
9 string m_err; 17 string m_err;
  18 +
10 public: 19 public:
  20 +
  21 + /**
  22 + * Construtor da classe.
  23 + * @param err String com a mensagem de erro.
  24 + */
11 SRCException(string err) { 25 SRCException(string err) {
12 m_err = err; 26 m_err = err;
13 } 27 }
  28 +
  29 + /**
  30 + * Retorna a mensagem de erro armazenada.
  31 + * @return string String com a mensagem de erro.
  32 + */
14 string getMessage() { 33 string getMessage() {
15 return m_err; 34 return m_err;
16 } 35 }
  36 +
17 }; 37 };
18 38
19 -#endif  
20 \ No newline at end of file 39 \ No newline at end of file
  40 +#endif
srcacic/WinVNC/WinVNC/CACIC_Utils.cpp
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe com alguns métodos utilitários.
  5 + */
  6 +
1 #include "CACIC_Utils.h" 7 #include "CACIC_Utils.h"
2 8
3 -// método bruto para ler  
4 -// uma tag do arquivo xml de resposta 9 +const string CACIC_Utils::F_SANS_SERIF = "Microsoft Sans Serif";
  10 +
5 string CACIC_Utils::leTag(char xml[], char tagname[]) 11 string CACIC_Utils::leTag(char xml[], char tagname[])
6 { 12 {
7 char* tag; 13 char* tag;
@@ -28,8 +34,6 @@ string CACIC_Utils::leTag(char xml[], char tagname[]) @@ -28,8 +34,6 @@ string CACIC_Utils::leTag(char xml[], char tagname[])
28 return content; 34 return content;
29 } 35 }
30 36
31 -// troca os caracteres da string  
32 -// origem ori_str new_str  
33 void CACIC_Utils::replaceAll(string &str, string key, string newkey) 37 void CACIC_Utils::replaceAll(string &str, string key, string newkey)
34 { 38 {
35 int found = str.find(key, 0); 39 int found = str.find(key, 0);
@@ -95,7 +99,6 @@ void CACIC_Utils::urlDecode(string &amp;encoded) @@ -95,7 +99,6 @@ void CACIC_Utils::urlDecode(string &amp;encoded)
95 encoded.swap(buff.str()); 99 encoded.swap(buff.str());
96 } 100 }
97 101
98 -// substitui alguns caracteres especiais antes da encriptacao  
99 void CACIC_Utils::simpleUrlEncode(string &decoded) 102 void CACIC_Utils::simpleUrlEncode(string &decoded)
100 { 103 {
101 replaceAll(decoded, "+", "<MAIS>"); 104 replaceAll(decoded, "+", "<MAIS>");
@@ -145,7 +148,7 @@ void CACIC_Utils::changeFont(HWND dlgHandle, int dlgItem, int fontSize, string f @@ -145,7 +148,7 @@ void CACIC_Utils::changeFont(HWND dlgHandle, int dlgItem, int fontSize, string f
145 LOGFONT lfFont; 148 LOGFONT lfFont;
146 149
147 memset(&lfFont, 0x00, sizeof(lfFont)); 150 memset(&lfFont, 0x00, sizeof(lfFont));
148 - memcpy(lfFont.lfFaceName, fontName.data(), 16); 151 + memcpy(lfFont.lfFaceName, fontName.c_str(), fontName.size());
149 152
150 lfFont.lfHeight = fontSize; 153 lfFont.lfHeight = fontSize;
151 lfFont.lfWeight = (fontIsBold == true) ? FW_BOLD : FW_NORMAL; 154 lfFont.lfWeight = (fontIsBold == true) ? FW_BOLD : FW_NORMAL;
srcacic/WinVNC/WinVNC/CACIC_Utils.h
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe com alguns métodos utilitários.
  5 + */
  6 +
1 #ifndef _CACIC_UTILS_ 7 #ifndef _CACIC_UTILS_
2 #define _CACIC_UTILS_ 8 #define _CACIC_UTILS_
3 9
@@ -12,26 +18,85 @@ class CACIC_Utils { @@ -12,26 +18,85 @@ class CACIC_Utils {
12 18
13 public: 19 public:
14 20
  21 + /** Fonte padrão usado nos diálogos. */
  22 + static const string F_SANS_SERIF;
  23 +
  24 + /**
  25 + * Método bruto para ler uma tag específica de um arquivo xml.
  26 + * @param xml String no formato de arquivo xml.
  27 + * @param tagname String com o nome da tag a ser pesquisada.
  28 + * @return String com o conteúdo da tag pesquisada.
  29 + * @trows CACIC_Exception caso a tag não seja encontrada.
  30 + */
15 static string leTag(char xml[], char tagname[]); 31 static string leTag(char xml[], char tagname[]);
16 32
  33 + /**
  34 + * Troca caracteres específicos de uma string.
  35 + * @param str String a ser modificada.
  36 + * @param key String com o caractere ou conjunto de caracteres que serão substituídos.
  37 + * @param newKey String com o caractere ou conjunto de caracteres que irão substituir.
  38 + */
17 static void replaceAll(string &str, string key, string newkey); 39 static void replaceAll(string &str, string key, string newkey);
18 40
  41 + /**
  42 + * Codifica a string, removendo os caracteres especiais por %código dos mesmos.
  43 + * @param decoded String que será codificada.
  44 + */
19 static void urlEncode(string &decoded); 45 static void urlEncode(string &decoded);
  46 +
  47 + /**
  48 + * Decodifica a string, retornando os códigos dos caracteres pelos próprios caracteres.
  49 + * @param encoded String que será decodificada.
  50 + */
20 static void urlDecode(string &encoded); 51 static void urlDecode(string &encoded);
21 52
  53 + /**
  54 + * Mesma função do urlEncode, porém os caracteres serão substituídos
  55 + * por tags específicas, e não pelo código.
  56 + * @param entrada String que será codificada.
  57 + */
22 static void simpleUrlEncode(string &entrada); 58 static void simpleUrlEncode(string &entrada);
  59 +
  60 + /**
  61 + * Faz o inverso do simpleUrlEncode, trocando as tags específicas pelos
  62 + * respectivos caracteres.
  63 + * @param entrada String que será codificada.
  64 + */
23 static void simpleUrlDecode(string &entrada); 65 static void simpleUrlDecode(string &entrada);
24 66
  67 + /**
  68 + * Transforma o byte em codigo ascii, retornando o char correspondente.
  69 + * @param first Primeiro hexa do caractere.
  70 + * @param second Segundo hexa do caractere.
  71 + * @return Char correspondente ao código ascci encontrado.
  72 + */
25 static char hexToAscii(char first, char second); 73 static char hexToAscii(char first, char second);
  74 +
  75 + /**
  76 + * Retira os espaços em branco do começo e fim da string.
  77 + * @param str String a ser modificada.
  78 + */
26 static void trim(string &str); 79 static void trim(string &str);
27 80
  81 + /**
  82 + * Método para alterar a fonte de um determinado elemento de um diálogo.
  83 + * @param dlgHandle Handler do diálogo.
  84 + * @param dlgItem Item do diálogo que terá a fonte trocada.
  85 + * @param fontSize Tamanho da fonte.
  86 + * @param fontName Nome da fonte.
  87 + * @param fontIsBold Define o peso da fonte: true = bold, false = normal.
  88 + */
28 static void changeFont(HWND dlgHandle, int dlgItem, 89 static void changeFont(HWND dlgHandle, int dlgItem,
29 int fontSize, string fontName, 90 int fontSize, string fontName,
30 bool fontIsBold = false); 91 bool fontIsBold = false);
31 92
32 private: 93 private:
33 94
34 - virtual void cutils() = 0; // Truque para tornar a classe abstrata. 95 + /**
  96 + * Este método virtual puro é um truque para que a classe
  97 + * se torne abstrata e não possa ser instanciada.
  98 + */
  99 + virtual void cutils() = 0;
35 100
36 }; 101 };
37 102
srcacic/WinVNC/WinVNC/resource.h
@@ -144,10 +144,11 @@ @@ -144,10 +144,11 @@
144 #define IDC_ATENCAO_STATIC 1147 144 #define IDC_ATENCAO_STATIC 1147
145 #define IDC_ATENCAO 1147 145 #define IDC_ATENCAO 1147
146 #define IDC_SRCACIC_IMG 1148 146 #define IDC_SRCACIC_IMG 1148
147 -#define IDC_EDIT3 1150  
148 #define IDC_INFO_NOME 1152 147 #define IDC_INFO_NOME 1152
149 #define IDC_INFO_IP 1153 148 #define IDC_INFO_IP 1153
150 #define IDC_INFO_INICIO 1154 149 #define IDC_INFO_INICIO 1154
  150 +#define IDC_STATIC_INFO_REF 1155
  151 +#define IDC_INFO_REFERENCIA 1156
151 #define IDC_FINGER 9000 152 #define IDC_FINGER 9000
152 #define IDC_GAMMAGRAY 9001 153 #define IDC_GAMMAGRAY 9001
153 #define IDC_STATIC_SPLIT 9002 154 #define IDC_STATIC_SPLIT 9002
@@ -229,7 +230,7 @@ @@ -229,7 +230,7 @@
229 #ifndef APSTUDIO_READONLY_SYMBOLS 230 #ifndef APSTUDIO_READONLY_SYMBOLS
230 #define _APS_NEXT_RESOURCE_VALUE 164 231 #define _APS_NEXT_RESOURCE_VALUE 164
231 #define _APS_NEXT_COMMAND_VALUE 40019 232 #define _APS_NEXT_COMMAND_VALUE 40019
232 -#define _APS_NEXT_CONTROL_VALUE 1155 233 +#define _APS_NEXT_CONTROL_VALUE 1157
233 #define _APS_NEXT_SYMED_VALUE 101 234 #define _APS_NEXT_SYMED_VALUE 101
234 #endif 235 #endif
235 #endif 236 #endif
srcacic/WinVNC/WinVNC/supInfoDlg.cpp
@@ -89,8 +89,9 @@ BOOL CALLBACK supInfoDlg::supInfoDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP @@ -89,8 +89,9 @@ BOOL CALLBACK supInfoDlg::supInfoDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
89 SetDlgItemText(hwnd, IDC_INFO_NOME, (LPSTR) _this->m_nomeVisitante.data()); 89 SetDlgItemText(hwnd, IDC_INFO_NOME, (LPSTR) _this->m_nomeVisitante.data());
90 SetDlgItemText(hwnd, IDC_INFO_IP, (LPSTR) _this->m_ip.data()); 90 SetDlgItemText(hwnd, IDC_INFO_IP, (LPSTR) _this->m_ip.data());
91 SetDlgItemText(hwnd, IDC_INFO_INICIO, (LPSTR) _this->m_dataInicio.data()); 91 SetDlgItemText(hwnd, IDC_INFO_INICIO, (LPSTR) _this->m_dataInicio.data());
  92 + SetDlgItemText(hwnd, IDC_INFO_REFERENCIA, (LPSTR) _this->m_documentoReferencia.data());
92 93
93 - changeFont(hwnd, IDC_ATENCAO_STATIC); 94 + CACIC_Utils::changeFont(hwnd, IDC_ATENCAO_STATIC, 16, CACIC_Utils::F_SANS_SERIF, true);
94 95
95 /*WINDOWPLACEMENT wndpl; 96 /*WINDOWPLACEMENT wndpl;
96 GetWindowPlacement(hwnd, &wndpl); 97 GetWindowPlacement(hwnd, &wndpl);
@@ -149,24 +150,3 @@ BOOL CALLBACK supInfoDlg::supInfoDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP @@ -149,24 +150,3 @@ BOOL CALLBACK supInfoDlg::supInfoDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
149 150
150 return FALSE; 151 return FALSE;
151 } 152 }
152 -  
153 -void supInfoDlg::changeFont(HWND hwndDlg, int dlgItem)  
154 -{  
155 - HFONT hFont ;  
156 - LOGFONT lfFont;  
157 -  
158 - memset(&lfFont, 0x00, sizeof(lfFont));  
159 - memcpy(lfFont.lfFaceName, TEXT("Microsoft Sans Serif"), 16);  
160 -  
161 - lfFont.lfHeight = 16;  
162 - lfFont.lfWeight = FW_BOLD;  
163 - lfFont.lfCharSet = ANSI_CHARSET;  
164 - lfFont.lfOutPrecision = OUT_DEFAULT_PRECIS;  
165 - lfFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;  
166 - lfFont.lfQuality = DEFAULT_QUALITY;  
167 -  
168 - // Create the font from the LOGFONT structure passed.  
169 - hFont = CreateFontIndirect (&lfFont);  
170 -  
171 - SendMessage( GetDlgItem(hwndDlg, dlgItem), WM_SETFONT, (int)hFont, MAKELONG( TRUE, 0 ) );  
172 -}  
srcacic/WinVNC/WinVNC/supInfoDlg.h
@@ -10,6 +10,8 @@ @@ -10,6 +10,8 @@
10 #include <string> 10 #include <string>
11 using namespace std; 11 using namespace std;
12 12
  13 +#include "CACIC_Utils.h"
  14 +
13 #pragma once 15 #pragma once
14 16
15 class supInfoDlg { 17 class supInfoDlg {
@@ -24,13 +26,13 @@ public: @@ -24,13 +26,13 @@ public:
24 string m_nomeVisitante; 26 string m_nomeVisitante;
25 string m_ip; 27 string m_ip;
26 string m_dataInicio; 28 string m_dataInicio;
  29 + string m_documentoReferencia;
27 30
28 private: 31 private:
29 HANDLE m_hInfoDlgThread; 32 HANDLE m_hInfoDlgThread;
30 33
31 static LRESULT CALLBACK supInfoDlg::showDialog(LPVOID lpParameter); 34 static LRESULT CALLBACK supInfoDlg::showDialog(LPVOID lpParameter);
32 static BOOL CALLBACK supInfoDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); 35 static BOOL CALLBACK supInfoDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
33 - static void changeFont(HWND hwndDlg, int dlgItem);  
34 }; 36 };
35 37
36 #endif 38 #endif
srcacic/WinVNC/WinVNC/vncPassDlg.cpp
@@ -8,22 +8,19 @@ vncPassDlg::vncPassDlg(vector&lt;Dominio&gt; &amp;listaDominios) { @@ -8,22 +8,19 @@ vncPassDlg::vncPassDlg(vector&lt;Dominio&gt; &amp;listaDominios) {
8 m_listaDominios = listaDominios; 8 m_listaDominios = listaDominios;
9 m_authStat = vncPassDlg::ESPERANDO_AUTENTICACAO; 9 m_authStat = vncPassDlg::ESPERANDO_AUTENTICACAO;
10 10
11 - memset(m_usuario, 0, 32);  
12 - memset(m_senha, 0, 32);  
13 - memset(m_dominio, 0, 16); 11 + memset(m_usuario, 0, 33);
  12 + memset(m_senha, 0, 33);
  13 + memset(m_dominio, 0, 17);
14 } 14 }
15 15
16 vncPassDlg::~vncPassDlg() { 16 vncPassDlg::~vncPassDlg() {
17 - memset(m_usuario, 0, 32);  
18 - memset(m_senha, 0, 32);  
19 - memset(m_dominio, 0, 16); 17 + memset(m_usuario, 0, 33);
  18 + memset(m_senha, 0, 33);
  19 + memset(m_dominio, 0, 17);
20 } 20 }
21 21
22 -BOOL vncPassDlg::DoDialog(EAuthCode authStat, string msgInfo) 22 +BOOL vncPassDlg::DoDialog()
23 { 23 {
24 - m_authStat = authStat;  
25 - m_msgInfo = msgInfo;  
26 -  
27 BOOL retVal; 24 BOOL retVal;
28 if (m_authStat == vncPassDlg::SEM_AUTENTICACAO) 25 if (m_authStat == vncPassDlg::SEM_AUTENTICACAO)
29 { 26 {
@@ -71,9 +68,9 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP @@ -71,9 +68,9 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
71 68
72 vrsBkColor = CreateSolidBrush(RGB(238, 215, 184)); 69 vrsBkColor = CreateSolidBrush(RGB(238, 215, 184));
73 70
74 - changeFont(hwnd, IDC_ATT_MSG); 71 + CACIC_Utils::changeFont(hwnd, IDC_ATT_MSG, 13, CACIC_Utils::F_SANS_SERIF, true);
75 72
76 - SendMessage (hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG (8, 8)); 73 + //SendMessage (hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG (8, 8));
77 74
78 // Limitando o tamanho dos campos para 32 caracteres. 75 // Limitando o tamanho dos campos para 32 caracteres.
79 SendMessage(GetDlgItem(hwnd, IDC_USER_EDIT), EM_LIMITTEXT, WPARAM(32), 0); 76 SendMessage(GetDlgItem(hwnd, IDC_USER_EDIT), EM_LIMITTEXT, WPARAM(32), 0);
@@ -101,7 +98,7 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP @@ -101,7 +98,7 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
101 SetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario); 98 SetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario);
102 SetDlgItemText(hwnd, IDC_PASS_EDIT, _this->m_senha); 99 SetDlgItemText(hwnd, IDC_PASS_EDIT, _this->m_senha);
103 100
104 - SetDlgItemText(hwnd, IDC_MSG, (LPSTR) "Falha na autenticação!"); 101 + SetDlgItemText(hwnd, IDC_MSG, (LPSTR) "Falha na Autenticação!");
105 } 102 }
106 else if (_this->m_authStat == vncPassDlg::AUTENTICADO) 103 else if (_this->m_authStat == vncPassDlg::AUTENTICADO)
107 { 104 {
@@ -142,15 +139,15 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP @@ -142,15 +139,15 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
142 HWND hDominios = GetDlgItem(hwnd, IDC_DOMAIN_CB); 139 HWND hDominios = GetDlgItem(hwnd, IDC_DOMAIN_CB);
143 _this->m_indiceDominio = SendMessage(hDominios, CB_GETCURSEL, 0, 0); 140 _this->m_indiceDominio = SendMessage(hDominios, CB_GETCURSEL, 0, 0);
144 141
145 - memset(_this->m_usuario, 0, 32);  
146 - memset(_this->m_senha, 0, 32);  
147 - memset(_this->m_dominio, 0, 16); 142 + memset(_this->m_usuario, 0, 33);
  143 + memset(_this->m_senha, 0, 33);
  144 + memset(_this->m_dominio, 0, 17);
148 145
149 GetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario, 32); 146 GetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario, 32);
150 GetDlgItemText(hwnd, IDC_PASS_EDIT, _this->m_senha, 32); 147 GetDlgItemText(hwnd, IDC_PASS_EDIT, _this->m_senha, 32);
151 strcpy(_this->m_dominio, _this->m_listaDominios.at(_this->m_indiceDominio).id.c_str()); 148 strcpy(_this->m_dominio, _this->m_listaDominios.at(_this->m_indiceDominio).id.c_str());
152 149
153 - if (_this->m_usuario[0] == '\0' || _this->m_senha[0] == '\0' || _this->m_dominio[0] == '\0') 150 + if (_this->m_usuario[0] == 0 || _this->m_senha[0] == 0 || _this->m_dominio[0] == 0)
154 { 151 {
155 MessageBox(hwnd, "Os campos devem ser preenchidos!", "Erro!", MB_ICONERROR | MB_OK); 152 MessageBox(hwnd, "Os campos devem ser preenchidos!", "Erro!", MB_ICONERROR | MB_OK);
156 return FALSE; 153 return FALSE;
@@ -228,7 +225,7 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, @@ -228,7 +225,7 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam,
228 225
229 vrsBkColor = CreateSolidBrush(RGB(238, 215, 184)); 226 vrsBkColor = CreateSolidBrush(RGB(238, 215, 184));
230 227
231 - changeFont(hwnd, IDC_ATT_MSG); 228 + CACIC_Utils::changeFont(hwnd, IDC_ATT_MSG, 13, CACIC_Utils::F_SANS_SERIF, true);
232 229
233 SendMessage (hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG (8, 8)); 230 SendMessage (hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG (8, 8));
234 231
@@ -246,11 +243,11 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, @@ -246,11 +243,11 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam,
246 { 243 {
247 int ulen = GetWindowTextLength(GetDlgItem(hwnd, IDC_USER_EDIT)); 244 int ulen = GetWindowTextLength(GetDlgItem(hwnd, IDC_USER_EDIT));
248 245
249 - memset(_this->m_usuario, '\0', 32); 246 + memset(_this->m_usuario, 0, 33);
250 247
251 GetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario, 32); 248 GetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario, 32);
252 249
253 - if (_this->m_usuario[0] == '\0') 250 + if (_this->m_usuario[0] == 0)
254 { 251 {
255 MessageBox(hwnd, "O campo deve ser preenchido.", "Erro!", MB_ICONERROR | MB_OK); 252 MessageBox(hwnd, "O campo deve ser preenchido.", "Erro!", MB_ICONERROR | MB_OK);
256 return FALSE; 253 return FALSE;
@@ -297,24 +294,3 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, @@ -297,24 +294,3 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam,
297 294
298 return FALSE; 295 return FALSE;
299 } 296 }
300 -  
301 -void vncPassDlg::changeFont(HWND hwndDlg, int dlgItem)  
302 -{  
303 - HFONT hFont ;  
304 - LOGFONT lfFont;  
305 -  
306 - memset(&lfFont, 0x00, sizeof(lfFont));  
307 - memcpy(lfFont.lfFaceName, TEXT("Microsoft Sans Serif"), 24);  
308 -  
309 - lfFont.lfHeight = 13;  
310 - lfFont.lfWeight = FW_BOLD;  
311 - lfFont.lfCharSet = ANSI_CHARSET;  
312 - lfFont.lfOutPrecision = OUT_DEFAULT_PRECIS;  
313 - lfFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;  
314 - lfFont.lfQuality = DEFAULT_QUALITY;  
315 -  
316 - // Create the font from the LOGFONT structure passed.  
317 - hFont = CreateFontIndirect (&lfFont);  
318 -  
319 - SendMessage( GetDlgItem(hwndDlg, dlgItem), WM_SETFONT, (int)hFont, MAKELONG( TRUE, 0 ) );  
320 -}  
srcacic/WinVNC/WinVNC/vncPassDlg.h
@@ -7,20 +7,29 @@ @@ -7,20 +7,29 @@
7 7
8 #include "stdhdrs.h" 8 #include "stdhdrs.h"
9 #include "resource.h" 9 #include "resource.h"
  10 +
10 #include "vncPasswd.h" 11 #include "vncPasswd.h"
  12 +
11 #include <vector> 13 #include <vector>
12 using namespace std; 14 using namespace std;
13 #include <string> 15 #include <string>
14 using namespace std; 16 using namespace std;
15 17
  18 +#include "CACIC_Utils.h"
  19 +
16 //extern int MAX_VNC_CLIENTS; 20 //extern int MAX_VNC_CLIENTS;
17 21
18 #define ATT_MSG "ATENÇÃO: Esta autenticação, que precede a abertura de sessão para suporte remoto, atribui ao usuário a total responsabilidade por todo e qualquer tipo de dano lógico à estação que porventura seja causado por acesso externo indevido." 22 #define ATT_MSG "ATENÇÃO: Esta autenticação, que precede a abertura de sessão para suporte remoto, atribui ao usuário a total responsabilidade por todo e qualquer tipo de dano lógico à estação que porventura seja causado por acesso externo indevido."
19 23
20 #pragma once 24 #pragma once
21 25
22 -// struct referente a um domínio 26 +/**
  27 + * Struct referente a um domínio de autenticação.
  28 + */
23 struct Dominio { 29 struct Dominio {
  30 + Dominio(string p_id, string p_nome) : id(p_id), nome(p_nome) {}
  31 + Dominio() : id(""), nome("") {}
  32 +
24 string id; 33 string id;
25 string nome; 34 string nome;
26 }; 35 };
@@ -36,22 +45,20 @@ public: @@ -36,22 +45,20 @@ public:
36 vncPassDlg(vector<Dominio> &listaDominios); 45 vncPassDlg(vector<Dominio> &listaDominios);
37 virtual ~vncPassDlg(); 46 virtual ~vncPassDlg();
38 47
39 - char m_usuario[32]; // nome de usuário  
40 - char m_senha[32]; // senha de usuário  
41 - char m_dominio[16]; // id do domínio selecionado 48 + char m_usuario[33]; // nome de usuário
  49 + char m_senha[33]; // senha de usuário
  50 + char m_dominio[17]; // id do domínio selecionado
42 51
43 vector<Dominio> m_listaDominios; 52 vector<Dominio> m_listaDominios;
44 53
45 EAuthCode m_authStat; 54 EAuthCode m_authStat;
  55 + string m_msgInfo;
46 56
47 - BOOL DoDialog(EAuthCode authStat, string msgInfo); 57 + BOOL DoDialog();
48 58
49 private: 59 private:
50 static BOOL CALLBACK vncAuthDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); 60 static BOOL CALLBACK vncAuthDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
51 static BOOL CALLBACK vncNoAuthDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); 61 static BOOL CALLBACK vncNoAuthDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
52 - static void changeFont(HWND hwndDlg, int dlgItem);  
53 -  
54 - string m_msgInfo;  
55 62
56 UINT m_indiceDominio; // índice selecionado no combobox de domínios 63 UINT m_indiceDominio; // índice selecionado no combobox de domínios
57 }; 64 };
srcacic/WinVNC/WinVNC/vncclient.cpp
@@ -643,7 +643,8 @@ vncClientThread::InitAuthenticate() @@ -643,7 +643,8 @@ vncClientThread::InitAuthenticate()
643 // verifica o técnico que está querendo logar e o adiciona na lista. 643 // verifica o técnico que está querendo logar e o adiciona na lista.
644 if (!CACIC_Auth::getInstance()->validaTecnico(nm_usuario_cli, te_senha_cli, 644 if (!CACIC_Auth::getInstance()->validaTecnico(nm_usuario_cli, te_senha_cli,
645 te_node_address_cli, te_documento_referencial, 645 te_node_address_cli, te_documento_referencial,
646 - te_motivo_conexao, te_so_cli, m_client->GetClientId())) 646 + te_motivo_conexao, te_so_cli,
  647 + m_client->GetClientId(), m_socket->GetPeerName()))
647 { 648 {
648 auth_ok = FALSE; 649 auth_ok = FALSE;
649 } 650 }
srcacic/WinVNC/WinVNC/winvnc.cpp
@@ -269,8 +269,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, @@ -269,8 +269,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
269 CACIC_Auth::getInstance()->setTempPath(cmdln[5]); 269 CACIC_Auth::getInstance()->setTempPath(cmdln[5]);
270 270
271 // Cria o arquivo temporário de travamento do CACIC 271 // Cria o arquivo temporário de travamento do CACIC
272 - string filePath = cmdln[5];  
273 - filePath += AGUARDE_FILENAME; 272 + string filePath = string(cmdln[5]);
  273 + filePath += CACIC_Auth::AGUARDE_FILENAME;
274 pFile = fopen(filePath.data(), "w+"); 274 pFile = fopen(filePath.data(), "w+");
275 vnclog.Print(LL_SRLOG, VNCLOG("Criando arquivo temporário: aguarde_SRCACIC.txt!\n")); 275 vnclog.Print(LL_SRLOG, VNCLOG("Criando arquivo temporário: aguarde_SRCACIC.txt!\n"));
276 276
@@ -290,6 +290,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, @@ -290,6 +290,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
290 stringstream portBuffer(cmdln[6]); 290 stringstream portBuffer(cmdln[6]);
291 portBuffer >> porta; 291 portBuffer >> porta;
292 CACIC_Auth::getInstance()->setPorta(porta); 292 CACIC_Auth::getInstance()->setPorta(porta);
  293 + UINT timeout;
  294 + stringstream timeoutBuffer(cmdln[7]);
  295 + timeoutBuffer >> timeout;
  296 + CACIC_Auth::getInstance()->setTimeout(timeout);
293 297
294 if (CACIC_Auth::getInstance()->autentica()) { 298 if (CACIC_Auth::getInstance()->autentica()) {
295 iniciaTimer(); 299 iniciaTimer();
@@ -524,6 +528,7 @@ int WinVNCAppMain() @@ -524,6 +528,7 @@ int WinVNCAppMain()
524 // Set the name and port number 528 // Set the name and port number
525 server.SetName(szAppName); 529 server.SetName(szAppName);
526 server.SetPort(CACIC_Auth::getInstance()->getPorta()); 530 server.SetPort(CACIC_Auth::getInstance()->getPorta());
  531 + server.SetAutoIdleDisconnectTimeout(CACIC_Auth::getInstance()->getTimeout());
527 server.SockConnect(TRUE); 532 server.SockConnect(TRUE);
528 vnclog.Print(LL_STATE, VNCLOG("Servidor inicializado com sucesso!\n")); 533 vnclog.Print(LL_STATE, VNCLOG("Servidor inicializado com sucesso!\n"));
529 //uninstall driver before cont 534 //uninstall driver before cont
@@ -531,10 +536,6 @@ int WinVNCAppMain() @@ -531,10 +536,6 @@ int WinVNCAppMain()
531 // sf@2007 - Set Application0 special mode 536 // sf@2007 - Set Application0 special mode
532 server.RunningFromExternalService(fRunningFromExternalService); 537 server.RunningFromExternalService(fRunningFromExternalService);
533 538
534 - // colocando uma referência do servidor na classe CACIC_Auth  
535 - // para facilitar o acesso e a mudança de propriedades posteriormente.  
536 - //CACIC_Auth::getInstance()->m_server = &server;  
537 -  
538 // sf@2007 - New impersonation thread stuff for tray icon & menu 539 // sf@2007 - New impersonation thread stuff for tray icon & menu
539 // Subscribe to shutdown event 540 // Subscribe to shutdown event
540 hShutdownEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\SessionEventUltra"); 541 hShutdownEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\SessionEventUltra");
srcacic/WinVNC/WinVNC/winvnc.rc
@@ -95,35 +95,37 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIB @@ -95,35 +95,37 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIB
95 CAPTION "Aceitar conexão?" 95 CAPTION "Aceitar conexão?"
96 FONT 8, "MS Shell Dlg", 0, 0, 0x0 96 FONT 8, "MS Shell Dlg", 0, 0, 0x0
97 BEGIN 97 BEGIN
98 - DEFPUSHBUTTON "&Aceitar",IDACCEPT,7,142,53,21 98 + DEFPUSHBUTTON "&Aceitar",IDACCEPT,7,142,57,21
99 PUSHBUTTON "&Rejeitar",IDREJECT,178,142,53,21 99 PUSHBUTTON "&Rejeitar",IDREJECT,178,142,53,21
100 CTEXT "srCACICsrv recebeu uma tentativa de conexão de:",IDC_STATIC_TEXT1,7,3,224,16,SS_CENTERIMAGE 100 CTEXT "srCACICsrv recebeu uma tentativa de conexão de:",IDC_STATIC_TEXT1,7,3,224,16,SS_CENTERIMAGE
101 LTEXT "<desconhecido>",IDC_ACCEPT_IP,69,28,162,10,SS_CENTERIMAGE 101 LTEXT "<desconhecido>",IDC_ACCEPT_IP,69,28,162,10,SS_CENTERIMAGE
102 CTEXT "Você deseja aceitar a conexão?",IDC_STATIC_TEXT,7,126,224,16,SS_CENTERIMAGE 102 CTEXT "Você deseja aceitar a conexão?",IDC_STATIC_TEXT,7,126,224,16,SS_CENTERIMAGE
103 - CTEXT "Rejeitar:",IDC_ACCEPT_TIMEOUT,60,142,118,21,SS_CENTERIMAGE 103 + CTEXT "Rejeitar:",IDC_ACCEPT_TIMEOUT,64,142,114,21,SS_CENTERIMAGE
104 LTEXT "<desconhecido>",IDC_UVIS_NAME,69,17,162,8 104 LTEXT "<desconhecido>",IDC_UVIS_NAME,69,17,162,8
105 EDITTEXT IDC_MOTIVO_SUPORTE,7,64,224,62,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN 105 EDITTEXT IDC_MOTIVO_SUPORTE,7,64,224,62,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN
106 LTEXT "Motivo do Suporte:",IDC_STATIC,7,54,62,8 106 LTEXT "Motivo do Suporte:",IDC_STATIC,7,54,62,8
107 LTEXT "Endereço IP:",IDC_STATIC,7,29,42,8 107 LTEXT "Endereço IP:",IDC_STATIC,7,29,42,8
108 - LTEXT "Nome do Técnico:",IDC_STATIC,7,17,53,8  
109 - LTEXT "Doc. Referência:",IDC_STATIC,7,41,55,8 108 + LTEXT "Nome do Técnico:",IDC_STATIC,7,17,57,8
  109 + LTEXT "Doc. Referência:",IDC_STATIC,7,41,57,8
110 EDITTEXT IDC_DOC_REF,68,41,163,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER 110 EDITTEXT IDC_DOC_REF,68,41,163,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
111 END 111 END
112 112
113 -IDD_INFO_DLG DIALOGEX 0, 0, 261, 51 113 +IDD_INFO_DLG DIALOGEX 0, 0, 261, 62
114 STYLE DS_SYSMODAL | DS_SETFONT | DS_FIXEDSYS | WS_POPUP 114 STYLE DS_SYSMODAL | DS_SETFONT | DS_FIXEDSYS | WS_POPUP
115 EXSTYLE WS_EX_PALETTEWINDOW | WS_EX_DLGMODALFRAME | WS_EX_NOPARENTNOTIFY | WS_EX_ACCEPTFILES | WS_EX_TRANSPARENT | WS_EX_MDICHILD 115 EXSTYLE WS_EX_PALETTEWINDOW | WS_EX_DLGMODALFRAME | WS_EX_NOPARENTNOTIFY | WS_EX_ACCEPTFILES | WS_EX_TRANSPARENT | WS_EX_MDICHILD
116 FONT 8, "MS Shell Dlg", 400, 0, 0x0 116 FONT 8, "MS Shell Dlg", 400, 0, 0x0
117 BEGIN 117 BEGIN
118 CTEXT "ESTAÇÃO DE TRABALHO EM SUPORTE REMOTO",IDC_AVISO_SUPORTE,54,12,205,11 118 CTEXT "ESTAÇÃO DE TRABALHO EM SUPORTE REMOTO",IDC_AVISO_SUPORTE,54,12,205,11
119 CTEXT "ATENÇÃO",IDC_ATENCAO_STATIC,54,2,205,10 119 CTEXT "ATENÇÃO",IDC_ATENCAO_STATIC,54,2,205,10
120 - CONTROL 163,IDC_SRCACIC_IMG,"Static",SS_BITMAP,0,2,51,47  
121 LTEXT "Nome:",IDC_STATIC,54,22,24,8 120 LTEXT "Nome:",IDC_STATIC,54,22,24,8
122 LTEXT "IP:",IDC_STATIC,54,32,10,8 121 LTEXT "IP:",IDC_STATIC,54,32,10,8
123 - LTEXT "Início:",IDC_STATIC,54,41,20,8 122 + LTEXT "Início:",IDC_STATIC,54,42,20,8
124 LTEXT "",IDC_INFO_NOME,78,23,181,8,0,WS_EX_TRANSPARENT 123 LTEXT "",IDC_INFO_NOME,78,23,181,8,0,WS_EX_TRANSPARENT
125 LTEXT "",IDC_INFO_IP,78,32,181,8,0,WS_EX_TRANSPARENT 124 LTEXT "",IDC_INFO_IP,78,32,181,8,0,WS_EX_TRANSPARENT
126 LTEXT "",IDC_INFO_INICIO,78,41,181,8,0,WS_EX_TRANSPARENT 125 LTEXT "",IDC_INFO_INICIO,78,41,181,8,0,WS_EX_TRANSPARENT
  126 + LTEXT "Doc. Referência:",IDC_STATIC_INFO_REF,54,51,57,8
  127 + LTEXT "",IDC_INFO_REFERENCIA,111,51,148,8
  128 + CONTROL 163,IDC_SRCACIC_IMG,"Static",SS_BITMAP,0,0,54,62
127 END 129 END
128 130
129 131
@@ -189,7 +191,7 @@ BEGIN @@ -189,7 +191,7 @@ BEGIN
189 BEGIN 191 BEGIN
190 LEFTMARGIN, 7 192 LEFTMARGIN, 7
191 RIGHTMARGIN, 231 193 RIGHTMARGIN, 231
192 - VERTGUIDE, 60 194 + VERTGUIDE, 64
193 VERTGUIDE, 69 195 VERTGUIDE, 69
194 VERTGUIDE, 178 196 VERTGUIDE, 178
195 TOPMARGIN, 7 197 TOPMARGIN, 7
@@ -203,8 +205,9 @@ BEGIN @@ -203,8 +205,9 @@ BEGIN
203 BEGIN 205 BEGIN
204 VERTGUIDE, 54 206 VERTGUIDE, 54
205 VERTGUIDE, 78 207 VERTGUIDE, 78
  208 + VERTGUIDE, 111
206 VERTGUIDE, 259 209 VERTGUIDE, 259
207 - BOTTOMMARGIN, 49 210 + BOTTOMMARGIN, 60
208 HORZGUIDE, 2 211 HORZGUIDE, 2
209 HORZGUIDE, 10 212 HORZGUIDE, 10
210 HORZGUIDE, 49 213 HORZGUIDE, 49
@@ -219,8 +222,8 @@ END @@ -219,8 +222,8 @@ END
219 // 222 //
220 223
221 VS_VERSION_INFO VERSIONINFO 224 VS_VERSION_INFO VERSIONINFO
222 - FILEVERSION 2,5,0,800  
223 - PRODUCTVERSION 2,5,0,800 225 + FILEVERSION 2,5,0,804
  226 + PRODUCTVERSION 2,5,0,804
224 FILEFLAGSMASK 0x37L 227 FILEFLAGSMASK 0x37L
225 #ifdef _DEBUG 228 #ifdef _DEBUG
226 FILEFLAGS 0x25L 229 FILEFLAGS 0x25L
@@ -237,11 +240,11 @@ BEGIN @@ -237,11 +240,11 @@ BEGIN
237 BEGIN 240 BEGIN
238 VALUE "CompanyName", "Dataprev - Unidade Regional Espírito Santo" 241 VALUE "CompanyName", "Dataprev - Unidade Regional Espírito Santo"
239 VALUE "FileDescription", "Módulo Suporte Remoto Seguro do Sistema CACIC" 242 VALUE "FileDescription", "Módulo Suporte Remoto Seguro do Sistema CACIC"
240 - VALUE "FileVersion", "2, 5, 0, 800" 243 + VALUE "FileVersion", "2, 5, 0, 804"
241 VALUE "InternalName", "srCACICsrv" 244 VALUE "InternalName", "srCACICsrv"
242 VALUE "LegalCopyright", "Copyright © 2008 DATAPREV" 245 VALUE "LegalCopyright", "Copyright © 2008 DATAPREV"
243 VALUE "LegalTrademarks", "srCACIC" 246 VALUE "LegalTrademarks", "srCACIC"
244 - VALUE "ProductVersion", "2, 5, 0, 800" 247 + VALUE "ProductVersion", "2, 5, 0, 804"
245 END 248 END
246 END 249 END
247 BLOCK "VarFileInfo" 250 BLOCK "VarFileInfo"
@@ -390,7 +393,7 @@ BEGIN @@ -390,7 +393,7 @@ BEGIN
390 DEFPUSHBUTTON "OK",ID_POK,55,130,50,13 393 DEFPUSHBUTTON "OK",ID_POK,55,130,50,13
391 PUSHBUTTON "Cancelar",ID_PCANCELAR,117,130,50,13 394 PUSHBUTTON "Cancelar",ID_PCANCELAR,117,130,50,13
392 COMBOBOX IDC_DOMAIN_CB,84,59,83,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP 395 COMBOBOX IDC_DOMAIN_CB,84,59,83,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
393 - CTEXT "v2.5.0.800",IDC_AUTHDLG_VERSION,187,145,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE 396 + CTEXT "v2.5.0.804",IDC_AUTHDLG_VERSION,187,145,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE
394 CTEXT "Por favor, preencha as informações solicitadas abaixo, para a autenticação de seu usuário.",IDC_AUTH_INFO,3,38,216,18 397 CTEXT "Por favor, preencha as informações solicitadas abaixo, para a autenticação de seu usuário.",IDC_AUTH_INFO,3,38,216,18
395 EDITTEXT IDC_MSG,3,111,216,17,ES_CENTER | ES_MULTILINE | ES_READONLY | NOT WS_BORDER 398 EDITTEXT IDC_MSG,3,111,216,17,ES_CENTER | ES_MULTILINE | ES_READONLY | NOT WS_BORDER
396 CTEXT "ATENÇÃO: Esta autenticação, que precede a abertura de sessão para suporte remoto, atribui ao usuário a total responsabilidade por todo e qualquer tipo de dano lógico à estação que porventura seja causado por acesso externo indevido.",IDC_ATT_MSG,3,3,216,33 399 CTEXT "ATENÇÃO: Esta autenticação, que precede a abertura de sessão para suporte remoto, atribui ao usuário a total responsabilidade por todo e qualquer tipo de dano lógico à estação que porventura seja causado por acesso externo indevido.",IDC_ATT_MSG,3,3,216,33
@@ -406,7 +409,7 @@ BEGIN @@ -406,7 +409,7 @@ BEGIN
406 EDITTEXT IDC_USER_EDIT,69,58,83,12,ES_AUTOHSCROLL 409 EDITTEXT IDC_USER_EDIT,69,58,83,12,ES_AUTOHSCROLL
407 DEFPUSHBUTTON "OK",ID_POK,45,76,45,13 410 DEFPUSHBUTTON "OK",ID_POK,45,76,45,13
408 PUSHBUTTON "Cancelar",ID_PCANCELAR,102,76,45,13 411 PUSHBUTTON "Cancelar",ID_PCANCELAR,102,76,45,13
409 - CTEXT "v2.5.0.800",IDC_AUTHDLG_VERSION,159,90,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE 412 + CTEXT "v2.5.0.804",IDC_AUTHDLG_VERSION,159,90,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE
410 CTEXT "Por favor, digite seu nome no campo abaixo.",IDC_AUTH_INFO,3,46,188,10 413 CTEXT "Por favor, digite seu nome no campo abaixo.",IDC_AUTH_INFO,3,46,188,10
411 CTEXT "ATENÇÃO: Esta autenticação, que precede a abertura de sessão para suporte remoto, atribui ao usuário a total responsabilidade por todo e qualquer tipo de dano lógico à estação que porventura seja causado por acesso externo indevido.",IDC_ATT_MSG,3,3,188,40 414 CTEXT "ATENÇÃO: Esta autenticação, que precede a abertura de sessão para suporte remoto, atribui ao usuário a total responsabilidade por todo e qualquer tipo de dano lógico à estação que porventura seja causado por acesso externo indevido.",IDC_ATT_MSG,3,3,188,40
412 END 415 END