Thread: PI Soulsplit Client Problem

Results 1 to 9 of 9
  1. #1 PI Soulsplit Client Problem 
    Registered Member
    Join Date
    Mar 2012
    Posts
    112
    Thanks given
    0
    Thanks received
    0
    Rep Power
    15
    I tried using the soulsplit client that was released a while ago and all my ports and ips are set but when I login I get this.
    Code:
    Zero or negative login size.1
    Zero or negative login size.1
    Zero or negative login size.1
    I have no idea what that means but if someone can help me that would be great. Am using:
    http://www.runelocus.com/forums/show...ulSplit-Client
    Reply With Quote  
     

  2. #2  
    RuneFatality

    Join Date
    May 2009
    Age
    27
    Posts
    2,350
    Thanks given
    1,099
    Thanks received
    388
    Rep Power
    531
    Rs2LoginProtocolDecoder
    Reply With Quote  
     

  3. #3  
    Registered Member
    Join Date
    Mar 2012
    Posts
    112
    Thanks given
    0
    Thanks received
    0
    Rep Power
    15
    Ok I found the message but I don't know what to change to make it compatible with that client.
    Code:
    protected boolean doDecode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) {
          synchronized(session) {
             Object loginStageObj = session.getAttribute("LOGIN_STAGE");
             int loginStage = 0;
             if(loginStageObj != null) {
                loginStage = ((Integer)loginStageObj).intValue();
             }
    
             int var27;
             int var30;
             switch(loginStage) {
             case 0:
                if(2 <= in.remaining()) {
                   var30 = in.get() & 255;
                   var27 = in.get() & 255;
                   if(var30 == 14) {
                      long var26 = ((long)(Math.random() * 9.9999999E7D) << 32) + (long)(Math.random() * 9.9999999E7D);
                      StaticPacketBuilder var25 = new StaticPacketBuilder();
                      var25.setBare(true).addBytes(new byte[8]).addByte((byte)0).addLong(var26);
                      session.setAttribute("SERVER_SESSION_KEY", Long.valueOf(var26));
                      session.write(var25.toPacket());
                      session.setAttribute("LOGIN_STAGE", Integer.valueOf(1));
                   }
    
                   return true;
                }
    
                in.rewind();
               
                return false;
             case 1:
                boolean loginType = true;
                boolean loginPacketSize = true;
                boolean loginEncryptPacketSize = true;
                if(2 > in.remaining()) {
                   in.rewind();
                   return false;
                } else {
                   var30 = in.get() & 255;
                   var27 = in.get() & 255;
                   int var24 = var27 - 40;
                   if(var27 > 0 && var24 > 0) {
                      if(var27 > in.remaining()) {
                         in.rewind();
                         return false;
                      }
    
                      int magic = in.get() & 255;
                      int version = in.getUnsignedShort();
                      int lowMem = in.get() & 255;
    
                      for(int clientSessionKey = 0; clientSessionKey < 9; ++clientSessionKey) {
                         in.getInt();
                      }
    
                      --var24;
                      if(var24 != (in.get() & 255)) {
                         System.out.println("Encrypted size mismatch.");
                         session.close();
                         return false;
                      }
    
                      if((in.get() & 255) != 10) {
                         System.out.println("Encrypted id != 10.");
                         session.close();
                         return false;
                      }
    
                      long var28 = in.getLong();
                      long serverSessionKey = in.getLong();
                      int uid = in.getInt();
                      
                      if(uid != 0 && uid != 99735086) {
                         String name = this.readRS2String(in);
                         String pass = this.readRS2String(in);
                         int[] sessionKey = new int[]{(int)(var28 >> 32), (int)var28, (int)(serverSessionKey >> 32), (int)serverSessionKey};
                         ISAACRandomGen inC = new ISAACRandomGen(sessionKey);
    
                         for(int outC = 0; outC < 4; ++outC) {
                            sessionKey[outC] += 50;
                         }
    
                         ISAACRandomGen var29 = new ISAACRandomGen(sessionKey);
                         this.load(session, uid, name, pass, inC, var29, version, lowMem);
                         session.getFilterChain().remove("protocolFilter");
                         session.getFilterChain().addLast("protocolFilter", new ProtocolCodecFilter(new GameCodecFactory(inC)));
                    
                         return true;
                      }
    
                      session.close();
                       System.out.println("Zero or negative login size.1");
                      return false;
                   }
    
                   System.out.println("Zero or negative login size.");
                   session.close();
                   return false;
                }
             default:
                
                return false;
             }
          }
       }
    That's the code that consists of the error.
    Reply With Quote  
     

  4. #4  
    Registered Member
    Join Date
    Mar 2012
    Posts
    112
    Thanks given
    0
    Thanks received
    0
    Rep Power
    15
    Bump
    Reply With Quote  
     

  5. #5  
    Registered Member
    Join Date
    Mar 2012
    Posts
    112
    Thanks given
    0
    Thanks received
    0
    Rep Power
    15
    Bump
    Reply With Quote  
     

  6. #6  
    Registered Member
    Join Date
    Mar 2012
    Posts
    112
    Thanks given
    0
    Thanks received
    0
    Rep Power
    15
    bump
    Reply With Quote  
     

  7. #7  
    Registered Member
    Join Date
    Mar 2012
    Posts
    112
    Thanks given
    0
    Thanks received
    0
    Rep Power
    15
    Bump
    Reply With Quote  
     

  8. #8  
    Registered Member
    Join Date
    Mar 2012
    Posts
    112
    Thanks given
    0
    Thanks received
    0
    Rep Power
    15
    Bump
    Reply With Quote  
     

  9. #9  
    Donator


    Join Date
    Jul 2009
    Posts
    1,875
    Thanks given
    119
    Thanks received
    233
    Rep Power
    408
    that was so easy to fix... let me grab the code.


    EDIT: use my RS2LoginProtocolDecoder server sided in the net package.

    Code:
    // Decompiled by:       Fernflower v0.6
    // Date:                15.07.2011 00:19:25
    // Copyright:           2008-2009, Stiver
    // Home page:           http://www.reversed-java.com
    
    package server.net;
    
    import org.apache.mina.common.ByteBuffer;
    import org.apache.mina.common.IoFuture;
    import org.apache.mina.common.IoFutureListener;
    import org.apache.mina.common.IoSession;
    import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
    import org.apache.mina.filter.codec.ProtocolCodecFilter;
    import org.apache.mina.filter.codec.ProtocolDecoderOutput;
    import server.Server;
    import server.ls.LoginResponse;
    
    import server.model.players.Client;
    import server.model.players.PlayerHandler;
    import server.model.players.PlayerSave;
    import server.net.GameCodecFactory;
    import server.net.Packet;
    import server.net.StaticPacketBuilder;
    import server.util.ISAACRandomGen;
    import server.util.Misc;
    
    public class RS2LoginProtocolDecoder extends CumulativeProtocolDecoder {
    
       protected boolean doDecode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) {
          synchronized(session) {
             Object loginStageObj = session.getAttribute("LOGIN_STAGE");
             int loginStage = 0;
             if(loginStageObj != null) {
                loginStage = ((Integer)loginStageObj).intValue();
             }
    
             int var27;
             int var30;
             switch(loginStage) {
             case 0:
                if(2 <= in.remaining()) {
                   var30 = in.get() & 255;
                   var27 = in.get() & 255;
                   if(var30 == 14) {
                      long var26 = ((long)(Math.random() * 9.9999999E7D) << 32) + (long)(Math.random() * 9.9999999E7D);
                      StaticPacketBuilder var25 = new StaticPacketBuilder();
                      var25.setBare(true).addBytes(new byte[8]).addByte((byte)0).addLong(var26);
                      session.setAttribute("SERVER_SESSION_KEY", Long.valueOf(var26));
                      session.write(var25.toPacket());
                      session.setAttribute("LOGIN_STAGE", Integer.valueOf(1));
                   }
    
                   return true;
                }
    
                in.rewind();
               
                return false;
             case 1:
                boolean loginType = true;
                boolean loginPacketSize = true;
                boolean loginEncryptPacketSize = true;
                if(2 > in.remaining()) {
                   in.rewind();
                   return false;
                } else {
                   var30 = in.get() & 255;
                   var27 = in.get() & 255;
                   int var24 = var27 - 40;
                   if(var27 > 0 && var24 > 0) {
                      if(var27 > in.remaining()) {
                         in.rewind();
                         return false;
                      }
    
                      int magic = in.get() & 255;
                      int version = in.getUnsignedShort();
                      int lowMem = in.get() & 255;
    
                      for(int clientSessionKey = 0; clientSessionKey < 9; ++clientSessionKey) {
                         in.getInt();
                      }
    
                      --var24;
                      if(var24 != (in.get() & 255)) {
                         System.out.println("Encrypted size mismatch.");
                         session.close();
                         return false;
                      }
    
                      if((in.get() & 255) != 10) {
                         System.out.println("Encrypted id != 10.");
                         session.close();
                         return false;
                      }
    
                      long var28 = in.getLong();
                      long serverSessionKey = in.getLong();
                      int uid = 0/*in.getInt()*/;
                      
                      if(uid == 0/* && uid != 99735086*/) {
                         String name = this.readRS2String(in);
                         String pass = this.readRS2String(in);
                         int[] sessionKey = new int[]{(int)(var28 >> 32), (int)var28, (int)(serverSessionKey >> 32), (int)serverSessionKey};
                         ISAACRandomGen inC = new ISAACRandomGen(sessionKey);
    
                         for(int outC = 0; outC < 4; ++outC) {
                            sessionKey[outC] += 50;
                         }
    
                         ISAACRandomGen var29 = new ISAACRandomGen(sessionKey);
                         this.load(session, uid, name, pass, inC, var29, version, lowMem);
                         session.getFilterChain().remove("protocolFilter");
                         session.getFilterChain().addLast("protocolFilter", new ProtocolCodecFilter(new GameCodecFactory(inC)));
                    
                         return true;
                      }
    
                      session.close();
                      System.out.println("Zero or negative login size.1");
                      return false;
                   }
    
                   System.out.println("Zero or negative login size.");
                   session.close();
                   return false;
                }
             default:
                
                return false;
             }
          }
       }
    
       private synchronized void load(IoSession session, int uid, String name, String pass, ISAACRandomGen inC, ISAACRandomGen outC, int version, int lowMem) {
          session.setAttribute("opcode", Integer.valueOf(-1));
          session.setAttribute("size", Integer.valueOf(-1));
          boolean loginDelay = true;
          byte returnCode = 2;
          boolean close = false;
          name = name.trim();
          name = name.toLowerCase();
          pass = pass.toLowerCase();
        
    
    		if(!name.matches("[A-Za-z0-9 ]+")) {
    			returnCode = 4;
                            System.out.print("Name was wrong");
    		}
    		
    		if(name.length() > 12) {
    			returnCode = 8;
                            System.out.print("Name too long");
    		}
    
          final Client cl = new Client(session, -1);
          cl.playerName = name;
          cl.playerName2 = cl.playerName;
          cl.playerPass = pass;
          cl.nameAsLong = Misc.playerNameToInt64(cl.playerName);
          cl.setInStreamDecryption(inC);
          cl.setOutStreamDecryption(outC);
          cl.outStream.packetEncryption = outC;
          
          cl.inC = inC;
          cl.saveCharacter = false;
          /*if(Server.infractionManager.banList.contains(cl.playerName.toLowerCase())) {
             PlayerSave.loadGame(cl, cl.playerName, cl.playerPass);
              if(System.currentTimeMillis() < cl.banEnd) {
              returnCode = 4;
              } else { 
                Server.infractionManager.removePlayer(cl.playerName, 3);  
                cl.banStart = 0;
                cl.banEnd = 0;
              }
            
          }*/
      
    
          PlayerHandler var10000 = Server.playerHandler;
          if(PlayerHandler.isPlayerOn(name)) {
             returnCode = 5; 
          }
    
         /* if(99144 != uid) {
             returnCode = 6;
          }*/
    
    
    
          if(PlayerHandler.playerCount >= 1024) {
             returnCode = 7;
             
          }
    
          if(Server.UpdateServer) {
             returnCode = 14;
            
          }
          
          
          
    
          if(returnCode == 2) {
           // System.out.print("Made it here");
             int bldr = PlayerSave.loadGame(cl, cl.playerName, cl.playerPass);
          
             if(bldr == 0) {
                if(!name.contains("admin") && !name.contains("mod")) {
                   cl.addStarter = true;
                } else {
                   bldr = 3;
                }
             }
    
             if(bldr == 3) {
                returnCode = 3;
               
                cl.saveFile = false;
                close = true;
             } else {
                for(int pkt = 0; pkt < cl.playerEquipment.length; ++pkt) {
                   if(cl.playerEquipment[pkt] == 0) {
                      cl.playerEquipment[pkt] = -1;
                      cl.playerEquipmentN[pkt] = 0;
                   }
                }
             }
          } else {
             close = true;
             
          }
    
          cl.returnCode = returnCode;
    
    
          if(returnCode != 2) {
              
             StaticPacketBuilder var16 = new StaticPacketBuilder();
             var16.setBare(true);
             var16.addByte((byte)returnCode);
             var16.addByte((byte)0);
             var16.addByte((byte)0);
             Packet var17 = var16.toPacket();
             cl.getSession().write(var17).addListener(new IoFutureListener() {
                public void operationComplete(IoFuture arg0) {
                   
                   cl.getSession().close();
                }
             });
          }
          
    
          if(returnCode == 2) {
            // LoginResponse.pendLogin(cl);
             LoginResponse.handleLoginResponse(cl, 2);
                   
          }
    
       }
    
       private synchronized String readRS2String(ByteBuffer in) {
          StringBuilder sb = new StringBuilder();
    
          byte b;
          while((b = in.get()) != 10) {
             sb.append((char)b);
          }
    
          return sb.toString();
       }
    
       public void dispose(IoSession session) throws Exception {
          super.dispose(session);
       }
    }
    Reply With Quote  
     


Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. Soulsplit/PI client 634 model problem
    By Lechuur in forum Help
    Replies: 5
    Last Post: 08-14-2011, 02:03 PM
  2. [PI]SoulSplit Client errors
    By zivkovic in forum Help
    Replies: 0
    Last Post: 11-28-2010, 11:27 AM
  3. Soulsplit Client
    By Blayzeee in forum Help
    Replies: 0
    Last Post: 11-25-2010, 09:58 PM
  4. Replies: 7
    Last Post: 08-27-2010, 12:31 AM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •