Skip to content

Commit 19e4709

Browse files
committed
Support parsing messages with multiple values for a single field
1 parent b65caef commit 19e4709

2 files changed

Lines changed: 24 additions & 1 deletion

File tree

src/Protocol/Parser.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,14 @@ private function parseMessage($message)
5454
$key = substr($line, 0, $pos);
5555
}
5656

57-
$fields[$key] = $value;
57+
if (isset($fields[$key])) {
58+
if (!is_array($fields[$key])) {
59+
$fields[$key] = array($fields[$key]);
60+
}
61+
$fields[$key][] = $value;
62+
} else {
63+
$fields[$key] = $value;
64+
}
5865
}
5966

6067
reset($fields);

tests/Protocol/ParserTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,22 @@ public function testParsingMultipleEvents()
4949
$this->assertEquals('TestA', $first->getName());
5050
}
5151

52+
public function testParseResponseMultipleValues()
53+
{
54+
$parser = new Parser();
55+
$this->assertEquals(array(), $parser->push("Asterisk Call Manager/1.3\r\n"));
56+
57+
$ret = $parser->push("Response: Success\r\nMessage: one\r\nMessage: two\r\n\r\n");
58+
$this->assertCount(1, $ret);
59+
60+
$first = reset($ret);
61+
/* @var $first Clue\React\Ami\Protocol\Response */
62+
63+
$this->assertInstanceOf('Clue\React\Ami\Protocol\Response', $first);
64+
$this->assertEquals('one', $first->getFieldValue('Message'));
65+
$this->assertEquals(array('one', 'two'), $first->getFieldValues('Message'));
66+
}
67+
5268
public function testParsingCommandResponse()
5369
{
5470
$parser = new Parser();

0 commit comments

Comments
 (0)