/** * Constructor. * * @param Horde_Imap_Client_Tokenize $token Tokenized data returned from * the server. */ public function __construct(Horde_Imap_Client_Tokenize $token) { $this->token = $token; /* Check for response status. */ $status = $token->current(); $valid = array('BAD', 'BYE', 'NO', 'OK', 'PREAUTH'); if (in_array($status, $valid)) { $this->status = constant(__CLASS__ . '::' . $status); $resp_text = $token->next(); /* Check for response code. Only occurs if there is a response * status. */ if (is_string($resp_text) && $resp_text[0] == '[') { $resp = new stdClass(); $resp->data = array(); if ($resp_text[strlen($resp_text) - 1] == ']') { $resp->code = substr($resp_text, 1, -1); } else { $resp->code = substr($resp_text, 1); while (($elt = $token->next()) !== false) { if (is_string($elt) && $elt[strlen($elt) - 1] == ']') { $resp->data[] = substr($elt, 0, -1); break; } $resp->data[] = is_string($elt) ? $elt : iterator_to_array($elt); } } $token->next(); $this->responseCode = $resp; } } }
/** * @dataProvider clientSortProvider */ public function testClientSortProvider($sort, $expected, $locale) { $ids = new Horde_Imap_Client_Ids(); $pipeline = $this->socket_ob->pipeline(); foreach ($this->fetch_data as $val) { $token = new Horde_Imap_Client_Tokenize($val); $token->rewind(); $token->next(); $ids->add($token->next()); $this->socket_ob->doServerResponse($pipeline, $val); } $this->socket_ob->fetch_results = $pipeline->fetch; $sorted = $this->sort_ob->clientSort($ids, array('sort' => $sort)); $this->assertEquals(count($expected), count($sorted)); if (!$locale || class_exists('Collator')) { $this->assertEquals($expected, array_values($sorted)); } }
/** * Parse a METADATA response (RFC 5464 [4.4]). * * @param Horde_Imap_Client_Interaction_Pipeline $pipeline Pipeline * object. * @param Horde_Imap_Client_Tokenize $data The server response. * * @throws Horde_Imap_Client_Exception */ protected function _parseMetadata(Horde_Imap_Client_Interaction_Pipeline $pipeline, Horde_Imap_Client_Tokenize $data) { // Mailbox name is in UTF7-IMAP. $mbox = Horde_Imap_Client_Mailbox::get($data->next(), true); // Ignore unsolicited responses. if ($data->next() === true) { while (($entry = $data->next()) !== false) { $pipeline->data['metadata'][strval($mbox)][$entry] = $data->next(); } } }
/** * Parse a METADATA response (RFC 5464 [4.4]). * * @param Horde_Imap_Client_Tokenize $data The server response. * * @throws Horde_Imap_Client_Exception */ protected function _parseMetadata(Horde_Imap_Client_Tokenize $data) { switch ($data->current()) { case 'ANNOTATION': $mbox = $data->next(); // Ignore unsolicited responses. if (is_object($entry = $data->next())) { break; } $m_data = $data->next(); $type = $m_data->rewind(); do { switch ($type) { case 'value.priv': $this->_temp['metadata'][$mbox]['/private' . $entry] = $m_data->next(); break; case 'value.shared': $this->_temp['metadata'][$mbox]['/shared' . $entry] = $m_data->next(); break; default: throw new Horde_Imap_Client_Exception(sprintf(Horde_Imap_Client_Translation::t("Invalid METADATA value type \"%s\"."), $type), Horde_Imap_Client_Exception::METADATA_INVALID); } } while (($type = $data->next()) !== false); break; case 'METADATA': $mbox = $data->next(); // Ignore unsolicited responses. if (!is_object($m_data = $data->next())) { break; } $entry = $m_data->rewind(); do { $this->_temp['metadata'][$mbox][$entry] = $m_data->next(); } while (($entry = $m_data->next()) !== false); break; } }
public function testLiteralStream() { $token = new Horde_Imap_Client_Tokenize(); $token->add('FOO {10}'); $token->addLiteralStream('1234567890'); $token->add(' BAR'); $token->rewind(); $this->assertEquals('FOO', $token->next()); /* Internal stream is converted to string. */ $this->assertEquals('1234567890', $token->next()); $this->assertEquals('BAR', $token->next()); $this->assertTrue($token->eos); /* Check to see stream is returned if nextStream() is called and * a literal is encountered. */ $token->rewind(); $this->assertEquals('FOO', $token->nextStream()); $stream = $token->nextStream(); $this->assertInstanceOf('Horde_Stream_Temp', $stream); $this->assertEquals('1234567890', strval($stream)); $this->assertEquals('BAR', $token->nextStream()); $token = new Horde_Imap_Client_Tokenize(); $token->add('{200}' . str_repeat('Z', 200)); $token->rewind(); $this->assertEquals(str_repeat('Z', 200), $token->next()); $token->rewind(); $stream = $token->nextStream(); $this->assertInstanceOf('Horde_Stream_Temp', $stream); $this->assertEquals(str_repeat('Z', 200), strval($stream)); }
public function testFlushIterator() { $test = 'FOO (BAR (BAZ BAZ2) BAR2) FOO2'; $token = new Horde_Imap_Client_Tokenize($test); $token->rewind(); $token->next(); // FOO $token->next(); // Opening paren $this->assertEquals(array('BAR', 'BAR2'), $token->flushIterator()); $this->assertEquals('FOO2', $token->next()); $token->rewind(); $token->next(); // FOO $token->next(); // Opening paren $this->assertEquals(array(), $token->flushIterator(false)); $this->assertEquals('FOO2', $token->next()); $token->rewind(); $token->next(); // FOO $token->next(); // Opening paren $this->assertEquals(array(), $token->flushIterator(false, false)); $this->assertTrue($token->eos); }