public static void RequestAuthForToken(RPCAuthenticateWithTokenMessage message, NPHandler client) { Debug("enter RequestAuthForToken"); if (!_instance._connected) { Debug("exit RequestAuthForToken: not _connected"); _instance.SendAuthResult(message, client, -1, 0); return; } var token = Encoding.UTF8.GetString(message.Message.token); var request = new SessionData() { message = message, client = client }; _requests[token] = request; var data = string.Format("checkSession {0} {1}", token, client.Address.Address.ToString()); var buffer = Encoding.UTF8.GetBytes(data); Debug("sending " + data + "to authapi"); if (!_instance._socket.Poll(0, SelectMode.SelectWrite)) { Log.Error("we can't write to the AuthAPI socket. this seems horrible. what do we do now? sit here and... spin?"); while (!_instance._socket.Poll(0, SelectMode.SelectWrite)) { Thread.Sleep(500); Log.Error("let's give it another try"); } } try { _instance._socket.SendTo(buffer, 0, buffer.Length, SocketFlags.None, _serverEP); } catch (Exception e) { Log.Error("SendTo failed! " + e.ToString()); } Debug("exit RequestAuthForToken"); }
public static void RequestAuthForToken(RPCAuthenticateWithTokenMessage message, NPHandler client) { if (!_instance._connected) { _instance.SendAuthResult(message, client, -1, 0); return; } var token = Encoding.UTF8.GetString(message.Message.token); var request = new SessionData() { message = message, client = client }; _requests[token] = request; var data = string.Format("checkSession {0} {1}", token, client.Address.Address.ToString()); var buffer = Encoding.UTF8.GetBytes(data); _instance._socket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, _instance.Socket_Send, null); }
private void SendAuthResult(RPCAuthenticateWithTokenMessage message, NPHandler client, int userID, int group) { var reply = message.MakeResponse <AuthenticateResultMessage>(client); reply.Message.npid = (ulong)0; reply.Message.sessionToken = new byte[16]; if (userID > 0) { var npid = (0x110000100000000 | (uint)userID); var existingClient = NPSocket.GetClient(npid); //NPHandler existingClient = null; if (existingClient != null) { //reply.Message.result = 4; existingClient.CloseConnection(true); } reply.Message.result = 0; reply.Message.npid = (ulong)npid; reply.Message.sessionToken = message.Message.token; client.Authenticated = true; client.NPID = npid; client.GroupID = group; client.SessionToken = Encoding.UTF8.GetString(message.Message.token); NPSocket.SetClient(npid, client); } else if (userID == 0) { reply.Message.result = 1; } else if (userID == -1) { reply.Message.result = 2; } reply.Send(); if (group > 0) { var groupReply = new NPRPCResponse <AuthenticateUserGroupMessage>(client); groupReply.Message.groupID = group; groupReply.Send(); } ThreadPool.QueueUserWorkItem(delegate(object cliento) { try { var cclient = (NPHandler)cliento; var uid = (int)(cclient.NPID & 0xFFFFFFFF); var db = XNP.Create(); var result = from platform in db.ExternalPlatforms where platform.UserID == uid && platform.PlatformAuthenticated == 1 select platform.PlatformID; var value = 1; if (result.Count() > 0) { value = 0; } Thread.Sleep(600); var linkReply = new NPRPCResponse <AuthenticateExternalStatusMessage>(cclient); linkReply.Message.status = value; linkReply.Send(); } catch (Exception ex) { Log.Error(ex.ToString()); } }, client); }