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

📄 cmpp.java

📁 使用华为cmpp2.0网关
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                break;
            case COMMAND_CMPP_DELIVER:
                CMPPDeliverMessage back=new CMPPDeliverMessage();
                stat = getDeliverMessage(back,msg);
                CMPPDeliverMessageResp resp = new CMPPDeliverMessageResp();
                resp.nMsgId=back.msgID;
                resp.nSequenceID=head.nSequenceID;
                resp.nMsgSize=21;
                resp.nResult=stat;
                byte[] send = new byte[9];
                System.arraycopy(Tools.long2byte(resp.nMsgId),0,send,0,8);
                send[8]=(byte)resp.nResult;
                try {
                    sendPacket(resp,send);
                }
                catch (IOException ex) {
                    throw ex;
                }
                back.stat=stat;
                backMsg=back;
                break;
            case COMMAND_CMPP_SUBMIT_RESP:
                CMPPSubmitMessageResp sResp = new CMPPSubmitMessageResp();
                if(msg==null) stat=SUBMIT_MSG_NULL_ERROR;
                else{
                    try {
                        byte id[]= new byte[8];
                        System.arraycopy(msg,0,id,0,8);
                        sResp.setMsgID(id);
                        sResp.nResult= msg[8];
                        stat=msg[8];
                    }
                    catch (Exception ex) {
                        stat=SUBMIT_MSG_FORMAT_ERROR;
                    }
                }
                sResp.stat=stat;
                backMsg=sResp;
                break;
            case COMMAND_CMPP_ACTIVE_TEST:
                CMPPActiveTestMessageResp respMsg=new CMPPActiveTestMessageResp();
                respMsg.nSequenceID=head.nSequenceID;
                try {
                    sendHead(respMsg);
                }
                catch (IOException ex) {
                    throw ex;
                }
                break;
            case COMMAND_CMPP_ACTIVE_TEST_REP:
                break;
            case COMMAND_CMPP_TERMINATE:
                CMPPHead out= new CMPPHead();
                out.nMsgSize=12;
                out.nCommandID=COMMAND_CMPP_TERMINATE_RESP;
                out.nSequenceID=head.nSequenceID;
                try {
                    sendHead(out);
                }
                catch (IOException ex) {
                    throw ex;
                }
                break;
            case COMMAND_CMPP_TERMINATE_RESP:
                break;
            default:
                stat=CMPP_UNKNOWN_PACKAGE_ERROR;
        }
        backMsg.nCommandID=head.nCommandID;
        backMsg.nMsgSize=head.nMsgSize;
        backMsg.nSequenceID=head.nSequenceID;
        backMsg.stat=stat;
        return backMsg;
    }
    //收取网关下发信息

    public void deliver()throws IOException{
        try {
            if(!activeTest("auto"))
                throw new IOException();
            CMPPHead back = Deliver();
            if(back.nCommandID==this.COMMAND_CMPP_DELIVER){
                deliverMsgList.addElement(((CMPPDeliverMessage)back).getDeliverMsg());
                return;
            }
            if(back.nCommandID==this.COMMAND_CMPP_TERMINATE){
                close();
                throw new IOException();
            }
        }
        catch (IOException ex) {
            close();
            throw ex;
        }
    }
    private CMPPHead Deliver()throws IOException{
        CMPPHead head = new CMPPHead();
        byte[] bMsg=null;
        int i=0;
        while(true){
            try {
                bMsg=read(head);
                head.stat=CMPP_SUCCESS;
            }
            catch (InterruptedIOException ex) {
                if(i==3){
                    head.stat=DELIVER_MSG_TIME_OUT;//由于没有消息而退出--stat=1
                    break;
                }else{
                    i++;
                     continue;
                }
            }
            catch (IOException ex) {
                throw ex;
            }
            try {
                head = dealMsg(head,bMsg);
            }
            catch(IOException ex){
                throw ex;
            }
            catch (Exception ex) {
                Log.printBytes(bMsg,logFile);
                Log.printError(ex,"",logFile);
            }
            if(head.nCommandID==this.COMMAND_CMPP_ACTIVE_TEST){
                continue;
            }
            break;
        }
        return head;
    }

    //向网关查询信息流量
    public CMPPQueryMessageResp Query(){
        CMPPQueryMessage queryMessage = new CMPPQueryMessage();
        CMPPQueryMessageResp queryResp = new CMPPQueryMessageResp();

        return queryResp;
    }

    //发送测试信息

    private boolean activeTest(String flag)throws IOException{
        boolean testFlag=false;
        if(flag==null||(int)(System.currentTimeMillis()/1000)-checkTime>10)
            testFlag=true;
        if(testFlag){
            CMPPActiveTestMessage test = new CMPPActiveTestMessage();
            sendOut=test.setSequenceID(sendOut);
            test.nMsgSize=12;
            try {
                sendHead(test);
            }
            catch(IOException e){
                sendOut--;
                return false;
            }
            try {
                while(true){
                    CMPPHead back = Deliver();
                    if(back.nCommandID==this.COMMAND_CMPP_DELIVER){
                        deliverMsgList.addElement(((CMPPDeliverMessage)back).getDeliverMsg());
                        continue;
                    }
                    if(back.stat==this.DELIVER_MSG_TIME_OUT){
                        throw new IOException();
                    }
                    if(back.nCommandID==this.COMMAND_CMPP_ACTIVE_TEST_REP){
                        checkTime=(int)(System.currentTimeMillis()/1000);
                        break;
                    }
                }
            }
            catch (IOException ex) {
                return false;
            }
            return true;
        }
        return true;
    }
    public boolean activeTest()throws IOException{
        return activeTest(null);
    }
    private int getDeliverMessage(CMPPDeliverMessage msg,byte[] content)throws Exception{
        if(msg==null)
            return DELIVER_MSG_NULL_ERROR;
        int stat=CMPP_SUCCESS;
        //把content解析成所需信息
        byte msgID[] = new byte[8];
        byte sDestTermID[] = new byte[21];
        byte sServiceID[] = new byte[10];
        byte cTpPid=0;
        byte cTpUdhi=0;
        byte nMsgFormat=0;
        byte sSrcTermID[] = new byte[21];
        byte nIsReply=0;
        byte nMsgLen=0;
        byte sMsgContent[]=null;
        try {
            System.arraycopy(content,0,msgID,0,8);
            System.arraycopy(content,8,sDestTermID,0,21);
            System.arraycopy(content,29,sServiceID,0,10);
            cTpPid = content[39];
            cTpUdhi = content[40];
            nMsgFormat = content[41];
            System.arraycopy(content,42,sSrcTermID,0,21);
            nIsReply = content[63];
            nMsgLen = content[64];
            if(nMsgLen< 0)
                nMsgLen += 256;
            sMsgContent= new byte[nMsgLen];
            System.arraycopy(content,65,sMsgContent,0,nMsgLen);
        }
        catch (Exception ex) {
            return DELIVER_MSG_FORMAT_ERROR;
        }
        /////////////////////////////////////////封装正常消息
        msg.setMsgID(msgID);
        msg.msgID=Tools.byte2long(msgID);
        msg.nIsDelivery=nIsReply;
        msg.nMsgFormat=nMsgFormat;
        msg.nMsgLength=nMsgLen;
        msg.nTPpid=cTpPid;
        msg.nTPudhi=cTpUdhi;
        msg.sDestId=new String(sDestTermID).trim();
        if (msg.sDestId.startsWith(spNum)) {
          msg.sDestId = rpSPNum + msg.sDestId.substring(spNum.length());
          msg.sDestId=msg.sDestId.trim();
        }

        msg.sServiceId=new String(sServiceID).trim();
        msg.sSrcTerminalId=new String(sSrcTermID).trim();
        try {
            if(nIsReply==0){
                if(nMsgFormat == 8){//ucs2编码格式
                    msg.sMsgContent = new String(sMsgContent,"iso-10646-ucs-2");

                }else{
                    msg.sMsgContent=new String(sMsgContent,"gb2312");
                }
            }
        }
        catch (Exception ex) {
            return DELIVER_MSG_FORMAT_DECODE_ERROR;
        }
        /////////////////////////////状态报告中所需字段
        if(nIsReply==1){
            try {
                byte msgReportID[]=new byte[8];
                System.arraycopy(sMsgContent,0,msgReportID,0,8);
                msg.setReportMsgId(msgReportID);
                //msg.nReportMsgId=Tools.byte2long(sMsgContent,0);
                msg.sStat=new String(sMsgContent,8,7).trim();
                msg.sSubmitTime=new String(sMsgContent,15,10).trim();
                msg.sDoneTime=new String(sMsgContent,25,10).trim();
                msg.sDestTerminalId=new String(sMsgContent,35,21).trim();
                msg.nSMSCSequence=Tools.byte2int(sMsgContent,56);
            }
            catch (Exception ex) {
                stat=DELIVER_MSG_FORMAT_REPORT_ERROR;
            }
        }
        return stat;
    }



    private void sendHead(CMPPHead head)throws IOException{
        byte[] send = new byte[12];
        System.arraycopy(Tools.int2byte(head.nMsgSize),0,send,0,4);
        System.arraycopy(Tools.int2byte(head.nCommandID),0,send,4,4);
        System.arraycopy(Tools.int2byte(head.nSequenceID),0,send,8,4);
        send(send);
    }
    private void sendPacket(CMPPHead head,byte[] msg)throws IOException{
        byte[] send = new byte[12+msg.length];
        head.nMsgSize=12+msg.length;
        System.arraycopy(Tools.int2byte(head.nMsgSize),0,send,0,4);
        System.arraycopy(Tools.int2byte(head.nCommandID),0,send,4,4);
        System.arraycopy(Tools.int2byte(head.nSequenceID),0,send,8,4);
        System.arraycopy(msg,0,send,12,msg.length);
        send(send);
    }
    private void send(byte[] msg)throws IOException{
        DataOutputStream out = creatOutputStream();
        out.write(msg);
        out.flush();
    }

    private byte[] read(CMPPHead head)throws InterruptedIOException,IOException{
        DataInputStream in =creatInputStream();
        head.nMsgSize=in.readInt();
        head.nCommandID=in.readInt();
        head.nSequenceID=in.readInt();
        byte[] resp = null;
        if(head.nMsgSize<=12){
            return null;
        }else{
            resp=new byte[head.nMsgSize-12];
            in.read(resp,0,head.nMsgSize-12);
        }
        return resp;
    }
    private DataInputStream creatInputStream()throws IOException{
        return new DataInputStream(s.getInputStream());
    }
    private DataOutputStream creatOutputStream()throws IOException{
        return new DataOutputStream(s.getOutputStream());
    }
    public void close(){
        spm.freeSocket();
        s=null;
    }

    private static final int CMPP_SUCCESS=0;
    private static final int CMPP_UNKNOWN_PACKAGE_ERROR=-9;
    private static final int CMPP_LOGOUT_HAPPEND=-2;

    private static final int SUBMIT_MSG_NULL_ERROR=-4;
    private static final int SUBMIT_MSG_FORMAT_ERROR=-5;
    private static final int SUBMIT_MSG_TIME_OUT=-6;

    private static final int DELIVER_MSG_FORMAT_REPORT_ERROR=-7;
    private static final int DELIVER_MSG_NULL_ERROR=-8;
    private static final int DELIVER_MSG_TIME_OUT=-9;
    private static final int DELIVER_MSG_FORMAT_ERROR=-10;
    private static final int DELIVER_MSG_FORMAT_DECODE_ERROR=-11;

    private static final int CONNECT_MSG_NULL_ERROR=-12;
    private static final int CONNECT_MSG_RESP_NOT_FOUNT_ERROR=-13;
    private static final int CONNECT_MSG_FORMAT_ERROR=-14;
    private static final int CONNECT_INIT_ERROR=-15;

    private static final int CONNECT_HEAD_LEN = 12;
    private static final int CONNECT_PACKET_LEN = 27;
    private static final int QUERY_PACKET_LEN = 27;
    private static final int COMMAND_CMPP_SUBMIT = 4;
    private static final int COMMAND_CMPP_QUERY = 6;
    private static final int COMMAND_CMPP_TERMINATE = 2;
    private static final int COMMAND_CMPP_TERMINATE_RESP = 0x80000002;
    private static final int COMMAND_CMPP_QUERY_RESP = 0x80000006;
    private static final int COMMAND_CMPP_SUBMIT_RESP = 0x80000004;
    private static final int COMMAND_CMPP_CONNECT = 1;
    private static final int COMMAND_CMPP_CONNECT_RESP = 0x80000001;
    private static final int COMMAND_CMPP_ACTIVE_TEST = 8;
    private static final int COMMAND_CMPP_ACTIVE_TEST_REP = 0x80000008;
    private static final int COMMAND_CMPP_DELIVER = 5;
    private static final int COMMAND_CMPP_NACK_RESP = 0x80000000;
    private static final int COMMAND_CMPP_DELIVER_RESP = 0x80000005;
    private static final int COMMAND_CMPP_SET_KEY = 4098;
    private static final int COMMAND_CMPP_SET_KEY_RESP = 0x80001002;

}

⌨️ 快捷键说明

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