Hi Pavel,
unfortunately it still doesn't work:
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; Command=CAPABILITY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; text=IMAPX1 CAPABILITY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; tmp=* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; tmp=IMAPX1 OK Thats all she wrote! w17if9951860eei.18
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;user=myuser
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;auth=Bearer
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;token=ya29.AHES6ZQigOJ9JWdw7hEBAxk7Y3gvlC4aWCLCaH01iLrf3fmaPQn_NtY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive AUTHENTICATE XOAUTH2 "dXNlcj1zb2xpZC5jcm0BYXV0aD1CZWFyZXIgeWEyOS5BSEVTNlpRaWdPSjlKV2R3N2hFQkF4azdZM2d2bEM0YVdDTENhSDAxaUxyZjNmbWFQUW5fTnRZCgEB"
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;user=myuser
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;auth=Bearer
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;token=ya29.AHES6ZQigOJ9JWdw7hEBAxk7Y3gvlC4aWCLCaH01iLrf3fmaPQn_NtY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; Command=AUTHENTICATE XOAUTH2 "dXNlcj1zb2xpZC5jcm0BYXV0aD1CZWFyZXIgeWEyOS5BSEVTNlpRaWdPSjlKV2R3N2hFQkF4azdZM2d2bEM0YVdDTENhSDAxaUxyZjNmbWFQUW5fTnRZCgEB"
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; text=IMAPX2 AUTHENTICATE XOAUTH2 "dXNlcj1zb2xpZC5jcm0BYXV0aD1CZWFyZXIgeWEyOS5BSEVTNlpRaWdPSjlKV2R3N2hFQkF4azdZM2d2bEM0YVdDTENhSDAxaUxyZjNmbWFQUW5fTnRZCgEB"
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; tmp=+ eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ==
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
it hangs on the last line.
Here is your traced code:
unfortunately it still doesn't work:
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; Command=CAPABILITY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; text=IMAPX1 CAPABILITY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; tmp=* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; tmp=IMAPX1 OK Thats all she wrote! w17if9951860eei.18
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;user=myuser
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;auth=Bearer
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;token=ya29.AHES6ZQigOJ9JWdw7hEBAxk7Y3gvlC4aWCLCaH01iLrf3fmaPQn_NtY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive AUTHENTICATE XOAUTH2 "dXNlcj1zb2xpZC5jcm0BYXV0aD1CZWFyZXIgeWEyOS5BSEVTNlpRaWdPSjlKV2R3N2hFQkF4azdZM2d2bEM0YVdDTENhSDAxaUxyZjNmbWFQUW5fTnRZCgEB"
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;user=myuser
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;auth=Bearer
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;token=ya29.AHES6ZQigOJ9JWdw7hEBAxk7Y3gvlC4aWCLCaH01iLrf3fmaPQn_NtY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; Command=AUTHENTICATE XOAUTH2 "dXNlcj1zb2xpZC5jcm0BYXV0aD1CZWFyZXIgeWEyOS5BSEVTNlpRaWdPSjlKV2R3N2hFQkF4azdZM2d2bEM0YVdDTENhSDAxaUxyZjNmbWFQUW5fTnRZCgEB"
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; text=IMAPX2 AUTHENTICATE XOAUTH2 "dXNlcj1zb2xpZC5jcm0BYXV0aD1CZWFyZXIgeWEyOS5BSEVTNlpRaWdPSjlKV2R3N2hFQkF4azdZM2d2bEM0YVdDTENhSDAxaUxyZjNmbWFQUW5fTnRZCgEB"
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; tmp=+ eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ==
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
it hangs on the last line.
Here is your traced code:
public bool Login(IImapCredentials credentials)
{
Credentials = credentials;
IList<string> data = new List<string>();
ImapClient.ts.TraceEvent("SendAndReceive " + credentials.ToCommand(Capabilities));
IsAuthenticated = SendAndReceive(credentials.ToCommand(Capabilities), ref data);
ImapClient.ts.TraceEvent("SendAndReceive is finished");
return IsAuthenticated;
}
private string PrepareOAuthCredentials(string login, string token)
{
ImapClient.ts.TraceEvent("user=" + login);
byte[] userData = Encoding.UTF8.GetBytes("user=" + login);
ImapClient.ts.TraceEvent("auth=Bearer ");
byte[] tokenLabelData = Encoding.UTF8.GetBytes("auth=Bearer ");
ImapClient.ts.TraceEvent("token=" + token);
byte[] tokenData = Encoding.UTF8.GetBytes(token + "\n");
using (var stream = new MemoryStream())
{
ImapClient.ts.TraceEvent("Write " + userData);
stream.Write(userData, 0, userData.Length);
stream.WriteByte(1);
ImapClient.ts.TraceEvent("Write " + tokenLabelData);
stream.Write(tokenLabelData, 0, tokenLabelData.Length);
ImapClient.ts.TraceEvent("Write " + tokenData);
stream.Write(tokenData, 0, tokenData.Length);
stream.WriteByte(1);
stream.WriteByte(1);
return Convert.ToBase64String(stream.ToArray());
}
}
public bool SendAndReceive(string command, ref IList<string> data)
{
ImapClient.ts.TraceEvent("SendAndReceive; Command=" + command);
const string tmpl = "IMAPX{0} {1}";
_counter++;
var parts = new Queue<string>(new Regex(@"\r\n").Split(command).Where(_ => !string.IsNullOrEmpty(_)));
string text = string.Format(tmpl, _counter, parts.Dequeue().Trim()) + "\r\n";
ImapClient.ts.TraceEvent("SendAndReceive; text=" + text);
byte[] bytes = Encoding.UTF8.GetBytes(text.ToCharArray());
try
{
_ioStream.Write(bytes, 0, bytes.Length);
while (true)
{
ImapClient.ts.TraceEvent("SendAndReceive; loop; before Readline");
string tmp = _streamReader.ReadLine();
ImapClient.ts.TraceEvent("SendAndReceive; loop; tmp=" + tmp);
if (IsDebug)
Console.WriteLine(tmp);
data.Add(tmp);
if (tmp.StartsWith("+ ") && parts.Count > 0)
{
ImapClient.ts.TraceEvent("SendAndReceive; loop; tmp.StartsWith(\" + \") && parts.Count > 0");
bytes = Encoding.UTF8.GetBytes((parts.Dequeue().Trim() + "\r\n").ToCharArray());
_ioStream.Write(bytes, 0, bytes.Length);
continue;
}
if (tmp.StartsWith(string.Format(tmpl, _counter, ResponseType.Ok)))
return true;
if (tmp.StartsWith(string.Format(tmpl, _counter, ResponseType.PreAuth)))
return true;
if (tmp.StartsWith(string.Format(tmpl, _counter, ResponseType.NO)) ||
tmp.StartsWith(string.Format(tmpl, _counter, ResponseType.Bad)))
return false;
}
}
catch (AuthenticationException ex)
{
throw;
}
catch (Exception ex)
{
ex.ToString();
}
return false;
}