summaryrefslogtreecommitdiff
path: root/program
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2011-02-09 11:33:49 +0000
committeralecpl <alec@alec.pl>2011-02-09 11:33:49 +0000
commit890eae675828e4d7e6ecbffc613f1eace87717fa (patch)
treefabbb5db5bb4a69a5f0186e52ef5b7fad008a619 /program
parentea23df6e3e0a847ec9520b6160e62740e6d087a4 (diff)
- Use IMAP's ID extension (RFC2971) to print more info into debug log
Diffstat (limited to 'program')
-rw-r--r--program/include/rcube_imap.php11
-rw-r--r--program/include/rcube_imap_generic.php43
2 files changed, 53 insertions, 1 deletions
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index a4e67e140..f5a936890 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -148,9 +148,18 @@ class rcube_imap
$this->options['port'] = $port;
- if ($this->options['debug'])
+ if ($this->options['debug']) {
$this->conn->setDebug(true, array($this, 'debug_handler'));
+ $this->options['ident'] = array(
+ 'name' => 'Roundcube Webmail',
+ 'version' => RCMAIL_VERSION,
+ 'php' => PHP_VERSION,
+ 'os' => PHP_OS,
+ 'command' => $_SERVER['REQUEST_URI'],
+ );
+ }
+
$attempt = 0;
do {
$data = rcmail::get_instance()->plugins->exec_hook('imap_connect',
diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php
index 41f704d8d..dace4efd2 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -759,6 +759,11 @@ class rcube_imap_generic
}
}
+ // Send ID info
+ if (!empty($this->prefs['ident']) && $this->getCapability('ID')) {
+ $this->id($this->prefs['ident']);
+ }
+
$auth_methods = array();
$result = null;
@@ -1157,6 +1162,44 @@ class rcube_imap_generic
return false;
}
+ /**
+ * Executes ID command (RFC2971)
+ *
+ * @param array $items Client identification information key/value hash
+ *
+ * @return array Server identification information key/value hash
+ * @access public
+ * @since 0.6
+ */
+ function id($items=array())
+ {
+ if (is_array($items) && !empty($items)) {
+ foreach ($items as $key => $value) {
+ $args[] = $this->escape($key);
+ $args[] = $this->escape($value);
+ }
+ }
+
+ list($code, $response) = $this->execute('ID', array(
+ !empty($args) ? '(' . implode(' ', (array) $args) . ')' : $this->escape(null)
+ ));
+
+
+ if ($code == self::ERROR_OK && preg_match('/\* ID /i', $response)) {
+ $response = substr($response, 5); // remove prefix "* ID "
+ $items = $this->tokenizeResponse($response);
+ $result = null;
+
+ for ($i=0, $len=count($items); $i<$len; $i += 2) {
+ $result[$items[$i]] = $items[$i+1];
+ }
+
+ return $result;
+ }
+
+ return false;
+ }
+
function sort($mailbox, $field, $add='', $is_uid=FALSE, $encoding = 'US-ASCII')
{
$field = strtoupper($field);