public void Connect(string userName, string password)
{
binaryObject = new binaryDataClass();
binaryObject.CompleteHttpRequest += new Action<List<string[]>>(binaryObject_CompleteHttpRequest);
binaryObject.UserName = userName;
binaryObject.UserPassword = password;
string ip = getServerIpAddress();
tc = new TcpClient();
tc.Connect(ip, 5050);
sendPacket(yahooService.Verify);
listener = new Thread(new ThreadStart(initializeReciveData));
listener.Start();
}
private void sendPacket(yahooService yc)
{
byte[] data = null;
switch (yc)
{
case yahooService.Verify:
data = binaryObject.getPacket(yahooService.Verify);
break;
case yahooService.Auth:
data = binaryObject.getAuthPacket();
break;
case yahooService.AuthResp:
data = binaryObject.getAutRespPacket();
break;
case yahooService.Chat:
data = binaryObject.getChatPacket();
break;
case yahooService.ChatJoin:
data = binaryObject.getChatJoinPacket(roomName, roomId, lobbyId);
break;
case yahooService.Message:
if (addStyle)
data = binaryObject.getMessagePacketWithStyle(destination UserName, sendMessage, messageFontName, messageFontSize);
else
data = binaryObject.getMessagePacketWithoutStyle(destinat ionUserName, sendMessage);
break;
}
packetDataClass pk = convertBinaryToPacket.ConvertFrom(data);
SendPacketEvent(pk);
tc.Client.Send(data);
}
enum yahooService
{
None = 0x0,
Logon = 0x1,
Logoff = 0x2,
IsAway = 0x3,
IsBack = 0x4,
Idle = 0x5,
Message = 0x6,
NewMail = 0xB,
Ping = 0x12,
Notify = 0x4B,
Verify = 0x4C,
AuthResp = 0x54,
PersonalInfo = 0x55,
Auth = 0x57,
ExperimentalBrowser = 0x9A,
LoginUnknown2 = 0xEF,
BuddyUpdate = 0xF0,
List = 0xF1,
Chat = 0x96,
ChatJoin = 0x98,
ChatExit = 0x9B,
Comment = 0xA8,
ChatLogout = 0xA0
}
public byte[] getPacket(yahooService ys)
{
byte[] data = new byte[20];
for (int i = 0; i < 20; i++)
data[i] = 0;
data[0] = Convert.ToByte('Y');
data[1] = Convert.ToByte('M');
data[2] = Convert.ToByte('S');
data[3] = Convert.ToByte('G');
setPacketVersion(ref data);
data[11] = Convert.ToByte(ys);
setSessionId(ref data);
if (ys == yahooService.AuthResp)
{
setStatus(ref data);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(string.Forma t(
"https://login.yahoo.com/config/pwtoken_get?src=ymsgr&ts=&login={0}&passwd={1}&cha l={2}",
UserName, UserPassword, ChallengeString));
HttpWebResponse response = null;
response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string reciveString = sr.ReadToEnd();
string[] splitedReciveString = reciveString.Split(new char[] { '\r', '\n' });
httpRequestData.Add(new string[] { splitedReciveString[0], null });
for (int a = 1; a < splitedReciveString.Length; a++)
if (!string.IsNullOrEmpty(splitedReciveString[a]))
httpRequestData.Add(new string[]{
splitedReciveString[a].Substring(0, splitedReciveString[a].IndexOf('=')),
splitedReciveString[a].Substring(splitedReciveString[a].IndexOf('=') + 1)});
tokenString = httpRequestData.Single(a=>a[0]=="ymsgr")[1];
request = (HttpWebRequest)HttpWebRequest.Create(string.Forma t(
"https://login.yahoo.com/config/pwtoken_login?src=ymsgr&ts=&token={0}", tokenString));
response = (HttpWebResponse)request.GetResponse();
sr = new StreamReader(response.GetResponseStream());
reciveString = sr.ReadToEnd();
splitedReciveString = reciveString.Split(new char[] { '\r', '\n' });
httpRequestData.Add(new string[] { splitedReciveString[0], null });
for (int a = 1; a < splitedReciveString.Length; a++)
if (!string.IsNullOrEmpty(splitedReciveString[a]))
httpRequestData.Add(new string[]{
splitedReciveString[a].Substring(0, splitedReciveString[a].IndexOf('=')),
splitedReciveString[a].Substring(splitedReciveString[a].IndexOf('=') + 1)});
crumbString = httpRequestData.Single(a=>a[0]=="crumb")[1];
Ystring = httpRequestData.Single(a=>a[0]=="Y")[1];
Tstring = httpRequestData.Single(a=>a[0]=="T")[1];
string crumbChallengeString = crumbString + ChallengeString;
MD5 m = MD5.Create();
yahooHash = Convert.ToBase64String(m.ComputeHash(System.Text.E ncoding.ASCII.GetBytes(crumbChallengeString))).Rep lace("+", ".").Replace("/", "_").Replace("=", "-");
CompleteHttpRequest(httpRequestData);
}
return data;
}