⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connect.java

📁 移动CMPP2.0 Java SDK
💻 JAVA
字号:
package cmpp.v2_0;

import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;

public class Connect extends CMPP {
	private  final int 	commandId 		= CMPP.ID_CMPP_CONNECT;
	private	 final int	commandLength 	= 27;
	
    private  String	SourceAddr			= null;			// 	sp_id
    private  byte[] AuthenticatorSource	= null;			//	AuthenticatorSource
    private	 String SharedSecret		= null;			//  password
    private	 int	Version 	= CMPP.CMPP_VERSION;	//	Version;
    private	 int 	Timestamp	= 0;					// 	Timestamp;
    
    public Connect()
    {
        super(CMPP.ID_CMPP_CONNECT);
    }
    public Connect(CMPP cmpp)
    {
        super(cmpp);
    }
    /**
     * getters for read
     * @return
     */
    public String getSourceAddr()
    {
        return SourceAddr;
    }
    public byte[] getAuthenticatorSource()
    {
        return AuthenticatorSource;
    }
    public int getVersion()
    {
        return Version;
    }
    public int getTimestamp()
    {
        return Timestamp;
    }
    public boolean checkSharedSecret(String localSecret)
    {
    	byte[] localAuthenticator = getAuthenticator(SourceAddr,localSecret,Timestamp);
    	if(Arrays.equals(localAuthenticator,AuthenticatorSource)) {
            return true;
    	} else {
    		return false;
    	}
    }

    /**
     * setters for write
     */
    public void setSourceAddr(String sourceAddr)
    {
    	SourceAddr = sourceAddr;
    }
    public void setSharedSecret(String sharedSecret)
    {
    	SharedSecret = sharedSecret;
    }

    /**
     * 
     * @return
     */
    protected int parseBody()
    {
    	if( super.bodyLength < commandLength ) {	//length too short.
    		return -1;
    	}
    	
    	int off = 0;
        byte abyte0[] = new byte[16];

        // SourceAddr
        SourceAddr = new String(super.bodybytes, off, 6 );
        off += 6;
        // AuthenticatorSource
        AuthenticatorSource = new byte[16];
        CMPP.BytesCopy(super.bodybytes, AuthenticatorSource, off, off + 15, 0);
        off += 16;
        // Version
        Version = super.bodybytes[off];
        off += 1;
        //Timestamp
        CMPP.BytesCopy(super.bodybytes, abyte0, off, off + 4 - 1, 0);
        Timestamp = CMPP.Bytes4ToInt(abyte0);
        off += 4;
        
        return 0;
    }

    /**
     * 
     * @return
     */
    protected int makeBody() {
    	
    	// make bodybytes
    	super.bodyLength = commandLength; 
    	super.bodybytes  = new byte[super.bodyLength];
    	Arrays.fill(super.bodybytes,(byte)0);
 
    	// make SourceAddr
    	if( SourceAddr == null ) {
    		SourceAddr = "";
    	}
    	// make Timestamp
    	if( Timestamp == 0  ) { // need generate
    		Calendar calendar = Calendar.getInstance();
     		calendar.setTime(new Date());
     		Timestamp = (calendar.get(Calendar.MONTH) + 1) * 0x5f5e100 
        	+ calendar.get(Calendar.DAY_OF_MONTH) * 0xf4240
            + calendar.get(Calendar.HOUR) * 10000
            + calendar.get(Calendar.MINUTE) * 100 
            + calendar.get(Calendar.SECOND);
    	}
    	// make AuthenticatorSource
    	AuthenticatorSource = getAuthenticator(SourceAddr, SharedSecret,Timestamp );
    	
    	// make body
    	int off = 0;
    	CMPP.BytesCopy(SourceAddr.getBytes(), super.bodybytes, 0, 5, off );
    	off += 6;
    	CMPP.BytesCopy(AuthenticatorSource, super.bodybytes, 0, 15, off );
    	off += 16;
    	super.bodybytes[off] = CMPP.IntToByte(Version);
    	off += 1;
    	CMPP.BytesCopy(CMPP.IntToBytes4(Timestamp),super.bodybytes, 0, 3, off );
    	off += 4;
    	
    	return 0;
    }
  
	/**
	 * 
	 * @param addr
	 * @param secret
	 * @param timestamp
	 * @return
	 */
    private byte[] getAuthenticator(String addr, String secret, int timestamp) {
    	
    	String strTimestamp = Integer.toString(timestamp);
    	while( strTimestamp.length()<10 ) {
    		strTimestamp = "0" + strTimestamp;
    	}
    		
    	byte[] buffer = new byte[6 + 9 + secret.length() + 10];
    	Arrays.fill(buffer, (byte)0);
    	
    	int off = 0;
    	CMPP.BytesCopy(addr.getBytes(),  buffer, 0, 5, off ); 
    	off += 6;
    	off += 9;
    	CMPP.BytesCopy(secret.getBytes(), buffer, 0, secret.length()-1, off ); 
    	off += secret.length();
    	
    	CMPP.BytesCopy(strTimestamp.getBytes(), buffer, 0, strTimestamp.length()-1, off);
    	off += 10;
    	
    	return getMD5(buffer); 
    }
    
    /**
     * 
     * @return
     */
    public String toString() {
    	StringBuffer sb = new StringBuffer();

    	sb.append("SourceAddr=" + SourceAddr + "\n");
    	sb.append("AuthenticatorSource=" + AuthenticatorSource + "\n");
    	sb.append("Version=" + Version + "\n");
    	sb.append("Timestamp=" + Timestamp + "\n");
    	
    	return sb.toString();
    }
	public int getCommandId() {
		return commandId;
	}
	public int getCommandLength() {
		return commandLength;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -