1--TEST--
2RADIUS: RFC 3576 disconnect message support
3--INI--
4display_errors=1
5error_reporting=22527
6--SKIPIF--
7<?php
8include dirname(__FILE__).'/server/fake_server.php';
9
10if (\RADIUS\FakeServer\FakeServer::skip()) {
11    die('SKIP: pcntl, radius and sockets extensions required');
12}
13?>
14--FILE--
15<?php
16include dirname(__FILE__).'/server/fake_server.php';
17
18$server = new \RADIUS\FakeServer\FakeServer;
19$res = $server->getAuthResource();
20
21$request = \RADIUS\FakeServer\Request::expect(RADIUS_ACCESS_REQUEST, array(
22    \RADIUS\FakeServer\Attribute\expect(RADIUS_USER_NAME, 'foo'),
23));
24
25$response = new \RADIUS\FakeServer\RadiusResponse;
26$response->code = RADIUS_DISCONNECT_REQUEST;
27$response->attributes = array(
28    \RADIUS\FakeServer\Attribute\expect(RADIUS_NAS_IDENTIFIER, 'NAS'),
29);
30
31$server->addTransaction($request, $response);
32
33$request = \RADIUS\FakeServer\Request::expect(RADIUS_DISCONNECT_NAK, array(
34    \RADIUS\FakeServer\Attribute\expect(RADIUS_ERROR_CAUSE, pack('N', RADIUS_ERROR_CAUSE_MISSING_ATTRIBUTE)),
35));
36
37$server->addTransaction($request, $response);
38
39$request = \RADIUS\FakeServer\Request::expect(RADIUS_DISCONNECT_ACK, array(
40));
41
42$response = new \RADIUS\FakeServer\RadiusResponse;
43$response->code = RADIUS_DISCONNECT_ACK;
44
45$server->addTransaction($request, $response);
46
47$server->handle();
48
49radius_create_request($res, RADIUS_ACCESS_REQUEST);
50radius_put_string($res, RADIUS_USER_NAME, 'foo');
51radius_put_string($res, RADIUS_USER_PASSWORD, 'bar');
52
53var_dump(radius_send_request($res) == RADIUS_DISCONNECT_REQUEST);
54var_dump(radius_get_attr($res));
55
56radius_create_request($res, RADIUS_DISCONNECT_NAK);
57radius_put_int($res, RADIUS_ERROR_CAUSE, RADIUS_ERROR_CAUSE_MISSING_ATTRIBUTE);
58
59var_dump(radius_send_request($res) == RADIUS_DISCONNECT_REQUEST);
60var_dump(radius_get_attr($res));
61
62radius_create_request($res, RADIUS_DISCONNECT_ACK);
63radius_send_request($res);
64
65var_dump($server->wait());
66?>
67--EXPECTF--
68bool(true)
69array(2) {
70  ["attr"]=>
71  int(32)
72  ["data"]=>
73  string(3) "NAS"
74}
75bool(true)
76array(2) {
77  ["attr"]=>
78  int(32)
79  ["data"]=>
80  string(3) "NAS"
81}
82int(0)
83