AMI GetConfig missing lines


#1

I have a strange problem with the Asterisk Manager Interface. I have tried to isolate the problem by writing a simple program that demonstrates it. Here is the program:

<?php

function output($socket){
	echo "Waiting for output\n";
	$i=0;
	do{
		$line = fgets($socket);
		printf("line %d = %s",$i++,$line);
	} while($line!=false && strlen($line)>2);
}

$address = "remote address";
$port = 5038;
$username='xxxxxx';
$secret="xxxxxx";

echo "opening socket to $address port $port\n";
$socket = fsockopen($address,$port, $errno, $errstr, 1) or die("Failed to open socket ".
$errstr."\n");

echo "Socket open\n";
$login="Action: Login\r\nUserName: $username\r\nSecret: $secret\r\nEvents: off\r\n\r\n";
fputs($socket, $login);
output($socket);

$manconf = "Action: GetConfig\r\nFilename: manager.conf\r\n\r\n";
fputs($socket,$manconf);
output($socket);

fputs($socket,"Action: Logoff\r\n\r\n");
output($socket);

fclose($socket) or die("Failed to close sockect\n");
echo "Socket closed\n";

return;
?>

The manager.conf in question (with xxxxxx replacing real values):

[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
displayconnects = yes   ; Display on CLI user login/logoff
[xxxxxx]
secret = xxxxxx
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,user,config,command,reporting,originate
writetimeout = 10000
[xxxxxx]
secret = xxxxxx
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,user,config,reporting

And this is the output:

opening socket to xxxxxx 5038
Socket open
Waiting for output
line 0 = Asterisk Call Manager/1.1
line 1 = Response: Success
line 2 = Message: Authentication accepted
line 3 = 
Waiting for output
line 0 = Response: Success
line 1 = Category-000000: general
line 2 = Line-000000-000000: enabled=yes
line 3 = Line-000000-000001: port=5038
line 4 = Line-000000-000002: bindaddr=0.0.0.0
line 5 = Line-000000-000003: displayconnects=yes
line 6 = Line-000001-000000: secret=xxxxxx
line 7 = Line-000001-000001: read=system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
line 8 = Line-000001-000002: write=system,call,agent,user,config,command,reporting,originate
line 9 = Category-000002: xxxxxx
line 10 = Line-000002-000000: secret=xxxxxx
line 11 = Line-000002-000001: read=system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
line 12 = Line-000002-000002: write=system,call,agent,user,config,reporting
line 13 = 
Waiting for output
line 0 = Socket closed

As you see, there is line missing - there is no Category-000001. Asterisk version is 1.8.7.1, but I have seen the same problem with 10.0.0-beta1. The problem is reproducible, in that every time I run the program I get the same output. However, if I use a different method, e.g. a telnet terminal session, I get the correct output.

Any ideas?
Regards
Ian