private void ProcessAsyncEventPassword(AsyncEventDetail aeDetail) { string pwType = aeDetail.getInfos()[0]; // "Auth" or "Private Key", or ... string pwInfo = aeDetail.getInfos()[1]; // "password" or "username/password" string pwMsg = aeDetail.getInfos()[2]; // "Need" or "Verification Failed" if (pwMsg.Equals("Need",System.StringComparison.OrdinalIgnoreCase)) { if (pwType.Equals("Auth", System.StringComparison.OrdinalIgnoreCase) && pwInfo.Equals("username/password", System.StringComparison.OrdinalIgnoreCase)) { // Ask for username/password string[] loginInfo = m_ovpn.getLoginPass(pwType); bool sendUserPass = false; if (loginInfo != null) { string username = loginInfo[0]; string password = loginInfo[1]; if (username != null && pwType.Length > 0 && password != null && password.Length > 0) { m_ovpnComm.send("username '" + pwType + "' " + ManagementParser.encodeMsg(username)); //wait for processing by OpenVPN or it might not always process the password correctly. m_ovpnComm.processManagementConnectionLine(); m_ovpnComm.send("password '" + pwType + "' " + ManagementParser.encodeMsg(password)); sendUserPass = true; } } if (!sendUserPass) { // Send 'bogus' user and pass to keep OpenVPN from quiting on disconnect.. (WORKAROUND) m_ovpnComm.send("username '" + pwType + "' -"); m_ovpnComm.send("password '" + pwType + "' -"); } } else { string pw = m_ovpn.getPW(pwType); if (pw != null) { if (pw.Length > 0) { m_ovpnComm.send("password '" + pwType + "' " + ManagementParser.encodeMsg(pw)); } } } } else if (pwMsg.Equals("Verification Failed", System.StringComparison.OrdinalIgnoreCase)) { } else { } }
private void ProcessAsyncEventState(AsyncEventDetail aeDetail) { string[] details = aeDetail.getInfos(); // otherwise, we automatically reconnect m_ovpn.State.ChangeVPNState(details); }
private void executeAsyncEvent(AsyncEventDetail aeDetail) { switch (aeDetail.eventType) { case AsyncEventDetail.EventType.NEEDSTR: ProcessAsyncEventNeedStr(aeDetail); break; // a password is requested case AsyncEventDetail.EventType.PASSWORD: ProcessAsyncEventPassword(aeDetail); break; // a hold state is signalized case AsyncEventDetail.EventType.HOLD: ProcessAsyncEventHold(aeDetail); break; case AsyncEventDetail.EventType.INFO: break; // the internal state changed case AsyncEventDetail.EventType.STATE: ProcessAsyncEventState(aeDetail); break; // we got a "log" case AsyncEventDetail.EventType.LOG: ProcessAsyncEventLog(aeDetail); break; } }
private void ProcessAsyncEventNeedStr(AsyncEventDetail aeDetail) { switch (aeDetail.getInfos()[0]) { // A SmartCard ID is requested case "pkcs11-id-request": setLock(WaitState.PKCS11_GET_COUNT); m_ovpnComm.send("pkcs11-id-count"); break; } }
/// <summary> /// We got an asynchronous event (e.g. a log message). /// </summary> /// <param name="aeDetail">details about the event</param> public void got_asyncEvent(AsyncEventDetail aeDetail) { // if we can't execute just queue it try { Monitor.Enter(m_todo); if (m_state != WaitState.NULL) { m_todo.Add(aeDetail); return; } } finally { Monitor.Exit(m_todo); } executeAsyncEvent(aeDetail); }
/// <summary> /// We got an asynchronous event (e.g. a log message). /// </summary> /// <param name="aeDetail">details about the event</param> public void got_asyncEvent(AsyncEventDetail aeDetail) { m_logs.logDebugLine(4,"Extracted async event: " + aeDetail.eventType.ToString() + ": " + aeDetail.message); // if we can't execute just queue it try { Monitor.Enter(m_todo); if (m_state != WaitState.NULL) { m_todo.Add(aeDetail); return; } } finally { Monitor.Exit(m_todo); } executeAsyncEvent(aeDetail); }
private void ProcessAsyncEventHold(AsyncEventDetail aeDetail) { // it is released if (aeDetail.message.Contains("Waiting") && m_releaselock) { /* * enable logging * (this is a trick to get all logs, because at the * beginning, the hold state is set) */ if (m_receiveOldLogs) { setLock(WaitState.LOG_ON_ALL_1); m_ovpnComm.send("log on all"); m_receiveOldLogs = false; } else { setLock(WaitState.LOG_ON_ALL_2); m_ovpnComm.send("log on"); } } }
private void ProcessAsyncEventPassword(AsyncEventDetail aeDetail) { string pwType = aeDetail.getInfos()[0]; // "Auth" or "Private Key", or ... string pwInfo = aeDetail.getInfos()[1]; // "password" or "username/password" string pwMsg = aeDetail.getInfos()[2]; // "Need" or "Verification Failed" if (pwMsg.Equals("Need", System.StringComparison.OrdinalIgnoreCase)) { if (pwType.Equals("Auth", System.StringComparison.OrdinalIgnoreCase) && pwInfo.Equals("username/password", System.StringComparison.OrdinalIgnoreCase)) { // Ask for username/password string[] loginInfo = m_ovpn.getLoginPass(pwType); bool sendUserPass = false; if (loginInfo != null) { string username = loginInfo[0]; string password = loginInfo[1]; if (username != null && pwType.Length > 0 && password != null && password.Length > 0) { m_ovpnComm.send("username '" + pwType + "' " + ManagementParser.encodeMsg(username)); //wait for processing by OpenVPN or it might not always process the password correctly. m_ovpnComm.processManagementConnectionLine(); m_ovpnComm.send("password '" + pwType + "' " + ManagementParser.encodeMsg(password)); sendUserPass = true; } } if (!sendUserPass) { // Send 'bogus' user and pass to keep OpenVPN from quiting on disconnect.. (WORKAROUND) m_ovpnComm.send("username '" + pwType + "' -"); m_ovpnComm.send("password '" + pwType + "' -"); } } else { string pw = m_ovpn.getPW(pwType); if (pw != null) { if (pw.Length > 0) { m_ovpnComm.send("password '" + pwType + "' " + ManagementParser.encodeMsg(pw)); } } } } else if (pwMsg.Equals("Verification Failed", System.StringComparison.OrdinalIgnoreCase)) { m_logs.logDebugLine(1, "Authentication Failed said remote server"); } else { m_logs.logDebugLine(1, "Unknown 'PASSWORD' reply from remote server: " + pwMsg); } }
private void ProcessAsyncEventNeedStr(AsyncEventDetail aeDetail) { switch (aeDetail.getInfos()[0]) { // A SmartCard ID is requested case "pkcs11-id-request": m_logs.logDebugLine(3, "Got Request for pkcs11-id"); setLock(WaitState.PKCS11_GET_COUNT); m_ovpnComm.send("pkcs11-id-count"); break; } }
private void ProcessAsyncEventState(AsyncEventDetail aeDetail) { string[] details = aeDetail.getInfos(); // otherwise, we automatically reconnect m_ovpn.State.ChangeVPNState(details); m_logs.logLine(LogType.State, aeDetail.getInfos()[1]); }
private void ProcessAsyncEventLog(AsyncEventDetail aeDetail) { addLog(aeDetail.message); }
/// <summary> /// We got an asynchronous event (e.g. a log message). /// </summary> /// <param name="aeDetail">details about the event</param> public void got_asyncEvent(AsyncEventDetail aeDetail) { m_logs.logDebugLine(4, "Extracted async event: " + aeDetail.eventType.ToString() + ": " + aeDetail.message); // if we can't execute just queue it try { Monitor.Enter(m_todo); if (m_state != WaitState.NULL) { m_todo.Add(aeDetail); return; } } finally { Monitor.Exit(m_todo); } executeAsyncEvent(aeDetail); }