void newItem_OnUserValidate(IPEndPoint client, string username, string password, ref AuthUserResult result) { if (OnUserValidate != null) { OnUserValidate(client, username, password, ref result); } }
private void EsperaPacotes() { while (_isRunning) { try { packet pkt = recebe_pacote(_mainSock); if (pkt == null) { Dispose(); return; } switch (pkt.operacao) { case FWAUT_OP_PING: envia_pacote(_mainSock, null, 0, FWAUT_OP_PING, FWAUT_ST_OK); Dispose(); break; case FWAUT_OP_REQ: case FWAUT_OP_REQ_GROUPS: //Retorna os grupos que o usuário existe //return FWAUT_ST_OK - Autenticacao OK //return FWAUT_ST_BAD_PWD - Senha invalida //return FWAUT_NO_USER - Usuario inexistente String[] request = Encoding.ASCII.GetString(pkt.body).Trim("\0".ToCharArray()).Split("\0".ToCharArray()); //AuthUserResult res = _users.ValidaUser(request[0], request[1]); AuthUserResult res = new AuthUserResult(request[0]); if (OnUserValidate != null) { OnUserValidate(_remoteEP, request[0], request[1], ref res); } ushort status = FWAUT_ST_OK; Byte[] grpRet = new Byte[0]; switch (res.Result) { case AuthResult.OK: status = FWAUT_ST_OK; String grupos = ""; foreach (String item in res.Groups) { grupos += item + "\0"; } grupos += "\0\0"; grpRet = Encoding.GetEncoding(869).GetBytes(grupos); break; case AuthResult.BadPassword: status = FWAUT_ST_BAD_PWD; break; case AuthResult.NoUser: status = FWAUT_ST_NO_USER; break; } envia_pacote(_mainSock, grpRet, grpRet.Length, pkt.operacao, status); break; case FWAUT_OP_GET_USERS: List <String> users = new List <String>(); if (OnListUsers != null) { OnListUsers(_remoteEP, ref users); } String tstU = ""; foreach (String item in users) { tstU += item + "\0"; } tstU += "\0\0"; Byte[] usr = Encoding.GetEncoding(869).GetBytes(tstU); envia_pacote(_mainSock, usr, usr.Length, FWAUT_OP_GET_USERS, FWAUT_ST_OK); //trata_lst_users(ns); break; case FWAUT_OP_GET_GROUPS: List <String> groups = new List <String>(); if (OnListGroups != null) { OnListGroups(_remoteEP, ref groups); } String tst = ""; foreach (String item in groups) { tst += item + "\0"; } tst += "\0\0"; //Teste de encoding do FW Byte[] tmp = new Byte[0]; foreach (EncodingInfo encInfo in Encoding.GetEncodings()) { Int32 offSet = tmp.Length; Byte[] b = encInfo.GetEncoding().GetBytes(encInfo.CodePage.ToString() + ": ção"); Array.Resize(ref tmp, offSet + (b.Length + 1)); Array.Copy(b, 0, tmp, offSet, b.Length); tmp[b.Length + offSet] = 0; } Byte[] grp = Encoding.GetEncoding(869).GetBytes(tst); //Byte[] grp = tmp; envia_pacote(_mainSock, grp, grp.Length, FWAUT_OP_GET_GROUPS, FWAUT_ST_OK); //trata_lst_groups(ns); break; case FWAUT_OP_GET_SKEY: /* * if (len != sizeof(ag_get_skey)) * { * if ((erro = envia_pacote(ns, NULL, 0, op, FWAUT_ST_ERROR)) != 0) * { * if (erro == 2) * syslog(fila | LOG_ERR, "%s\n", ag_msg[AG_MSG_ERRO_MEMORIA]); * exit(1); * } * } * else * { * retorna_opie(ns, (ag_get_skey*)dados); * }*/ envia_pacote(_mainSock, null, 0, pkt.operacao, FWAUT_ST_ERROR); break; default: envia_pacote(_mainSock, null, 0, pkt.operacao, FWAUT_ST_ERROR); break; } } catch { _isRunning = false; } } }