if (!empty($_POST['do_logout'])) { if ($isinfo) { $result = $xmlrpc->do_stopsession($vserver_id, $ip, returnMacAddress(), RADIUS_TERM_USER_REQUEST); if ($result === true) { $valid = false; $message = get_message('OK_USER_LOGOUT'); $isstopacct = true; } else { $valid = false; $message = get_message('ERR_LOGOUT_FAILED'); $show_info = true; } } if ($isstopacct) { // Send account stop to radius $racct = new rahu_radius_acct($username); $racct->host = $config["RADIUS_HOST"]; $racct->port = $config["RADIUS_ACCT_PORT"]; $racct->secret = $config["RADIUS_SECRET"]; $racct->nas_identifier = $config["NAS_IDENTIFIER"]; $racct->nas_ip_address = $config["NAS_IP_ADDRESS"]; $racct->nas_port = $config["NAS_PORT"]; $racct->framed_ip_address = $ip; $racct->calling_station_id = $mac_address; $racct->terminate_cause = RADIUS_TERM_USER_REQUEST; $racct->session_id = $session_id; $racct->session_start = $session_start; $racct->acctStop(); } } else { $show_info = true;
$forward = false; } if (!empty($_POST['user']) && !empty($_POST['passwd'])) { $message = ""; $rauth = new rahu_radius_auth($_POST['user'], $_POST['passwd'], $config['RADIUS_ENCRYPT']); $rauth->host = $config["RADIUS_HOST"]; $rauth->port = $config["RADIUS_AUTH_PORT"]; $rauth->secret = $config["RADIUS_SECRET"]; $rauth->start(); if ($rauth->isError()) { $message = get_message('ERR_CONNECT_RADIUS'); } else { if ($rauth->isAccept()) { $message = get_message('OK_USER_AUTHORIZED'); $forward = true; $racct = new rahu_radius_acct($_POST['user']); $racct->host = $config["RADIUS_HOST"]; $racct->port = $config["RADIUS_ACCT_PORT"]; $racct->secret = $config["RADIUS_SECRET"]; $racct->nas_identifier = $config["NAS_IDENTIFIER"]; $racct->nas_ip_address = $config["NAS_IP_ADDRESS"]; $racct->nas_port = $config["NAS_PORT"]; $racct->framed_ip_address = $_SERVER['REMOTE_ADDR']; $racct->calling_station_id = returnMacAddress(); $racct->gen_session_id(); $serviceclass_attrib = defined('SERVICECLASS_ATTRIBUTE') ? SERVICECLASS_ATTRIBUTE : "WISPr-Billing-Class-Of-Service"; try { $prepareData = array("IP" => $ip, "Username" => $_POST['user'], "SessionID" => $racct->session_id, "MAC" => returnMacAddress(), "Session-Timeout" => $rauth->attributes['session_timeout'], "Bandwidth-Max-Down" => $rauth->attributes['WISPr-Bandwidth-Max-Down'], "Bandwidth-Max-Up" => $rauth->attributes['WISPr-Bandwidth-Max-Up'], "Class-Of-Service" => $rauth->attributes[$serviceclass_attrib]); $result = $xmlrpc->do_startsession($vserver_id, $prepareData); if (strstr($result, "Client already login")) { $message = get_message('ERR_ALREADY_LOGIN');
return "[RESULT]"; } $xmlrpc_server = xmlrpc_server_create(); xmlrpc_server_register_method($xmlrpc_server, "stopacct", "do_stopacct"); $request_xml = $HTTP_RAW_POST_DATA; $response = xmlrpc_server_call_method($xmlrpc_server, $request_xml, ''); if ($GLOBALS["task"] == "do_stopacct") { $ip =& $GLOBALS["ip"]; $username =& $GLOBALS["username"]; $session_id =& $GLOBALS["session_id"]; $session_start =& $GLOBALS["session_start"]; $mac_address =& $GLOBALS["mac_address"]; $cause =& $GLOBALS["cause"]; $config = get_config_by_network($ip, $config_list); $vserver_id = $config["VSERVER_ID"]; $racct = new rahu_radius_acct($username); $racct->host = $config["RADIUS_HOST"]; $racct->port = $config["RADIUS_ACCT_PORT"]; $racct->secret = $config["RADIUS_SECRET"]; $racct->nas_identifier = $config["NAS_IDENTIFIER"]; $racct->nas_ip_address = $config["NAS_IP_ADDRESS"]; $racct->framed_ip_address = $ip; $racct->calling_station_id = $mac_address; $racct->terminate_cause = !empty($cause) ? $cause : RADIUS_TERM_NAS_ERROR; $racct->nas_port = $config["NAS_PORT"]; $racct->session_id = $session_id; $racct->session_start = $session_start; if ($racct->acctStop() === true) { $response = str_replace("[RESULT]", "OK", $response); } else { $response = str_replace("[RESULT]", "FAIL", $response);