android CDMA 문자 pdu 패키지 분석

4356 단어
문자 발송 과정에서 문자 내용, 발송 시간 등 정보는'숫자'문자열로 압축된다. 이 문자열은 우리의 pdu 패키지이고 이 과정을 pdu의 패키지라고도 부른다.pdu 패키지는 AT 명령의 도움으로 모뎀에 도착하고 모뎀에서 이를 이동 기지국에 보낸 다음에 기지국을 통해 수신자의 휴대전화로 전송한다. 수신자는 pdu 패키지를 받은 후 압축된 반과정에 따라 해석해야 한다. 즉, pdu 패키지를 해제하고 최종적으로 단색 편지 데이터베이스에 도착하여 사용자에게 보여줘야 한다.
pdu 압축 패키지와 압축 해제는 대체적으로 유사하고 정반 과정이기 때문에 그 중의 한 과정만 이해할 수 있다.
다음은 pdu 해석 과정에 대한 설명입니다.
cdma 문자 pdu 패키지 분석:
문자 내용: 국가는 모두 경축하고, 나라는 두 나라가 함께 모인다.
캡처된 pdu 패키지:
00      00 02 10 02      02 04 01 46 AA 8406 01 0C 08 2F 00 03 11 11 C0 01 1A 20 62 B7 EA DD B4 FA 82 A062 F4 30 01 62 DD B2 B7 EA 71 22 B7 12 B8 30 01 08 03 06 12 10 11 1538 37 08 01 40 0A 01 40
BearerData.java
while (inStream.available() > 0) {
                boolean decodeSuccess = false;
                int subparamId = inStream.read(8);
                int subparamIdBit = 1 << subparamId;//  1   ,   8 
                if ((foundSubparamMask & subparamIdBit) != 0) {
                    throw new CodingException("illegal duplicate subparameter (" +
                                              subparamId + ")");
                }
.......//         ,Mask        ,               
}

첫 번째 필드:
00: 메시지 타입, 메시지 ID 등을 받습니다.
private static boolean decodeMessageId(BearerData bData, BitwiseInputStream inStream)
        throws BitwiseInputStream.AccessException, CodingException
    {
        final int EXPECTED_PARAM_SIZE = 3 * 8;
        boolean decodeSuccess = false;
        int paramBits = inStream.read(8) * 8;
        if (paramBits >= EXPECTED_PARAM_SIZE) {
            paramBits -= EXPECTED_PARAM_SIZE;
            decodeSuccess = true;
            bData.messageType = inStream.read(4);
            bData.messageId = inStream.read(8) << 8;
            bData.messageId |= inStream.read(8);
            bData.hasUserDataHeader = (inStream.read(1) == 1);
            inStream.skip(3);
        }
        if ((! decodeSuccess) || (paramBits > 0)) {
            Log.d(LOG_TAG, "MESSAGE_IDENTIFIER decode " +
                      (decodeSuccess ? "succeeded" : "failed") +
                      " (extra bits = " + paramBits + ")");
        }
        inStream.skip(paramBits);
        return decodeSuccess;
    }

두 번째 필드:
0002 10 02: 문자 메시지의 teleservice, 그 값은 (16진법) 1002 즉 4098.
첫 번째 필드:
02 04 01 46 AA 84: 문자 발송 주소.내용: 0146 AA 84
00000001 0100 0110 1010 1010 1000 0100
1위: 0: 대표 모드
2위: 0: 디지털 모드
다음 8개의 비트는 길이를 나타냅니다. 여기서 0000 01 01은 5,5*4=20이고 앞으로 20자리는 전화번호입니다.
4
  • 1010 1010 1010 00 01) 즉 10001.해석이 끝났습니다.

  • 첫 번째 필드:
    0601 0C: SMSTL_BEARER_RPLY_OPT
    첫 번째 필드:
    082F00 03 11 11 C0 01 1A 20 62 B7 EA DDB4 FA 82 A0 62 F4 30 01 62 DD B2 B7 EA 71 22 B7 12 B8 30 01 08 03 0612 10 11 15 38 37 08 01 40 0A 01 40
    08: 메시지 내용 표시
    2F: 필드 길이.47
    부분 1
    0003 11 11 C0:
    00:MessageId
    1111 C0:00010001 0001 0001 1100 0000
    0001: DELIVER 메시지 표시
    00010001 0001 1100: 메시지 id
    0: HEADERIND.
    부분 2
    011A      20 62 B7 EA DD B4
    FA82 A0 62 F4 30
    01 62 DD B2 B7 EA
    71 22 B7 12 B8 30
    01 08
    01: 필드 유형.
    20 62 B7 EA DD B4 FA 82 A0 62 F4 30 01 62 DD B2 B7 EA 71 22 B7 12 B8 3001 08
    바이너리 표현은 다음과 같습니다.
    0010 0000 0110 0010 1011 0111 1110 1010 1101 1101 1011 0100 1111 1010 1000 0010 1010 0000 0110 0010 1111 0100 0011 0000
    0000 0001 0110 0010 1101 1101 1011 0010 1011 0111 1110 1010
    0111 0001 0010 0010 1011 0111 0001 0010 1011 1000 0011 0000
    0000 0001 0000 1000
    (
    2062 B7 EA DD B4 FA 82 A0 62 F4 30 01 62 DD B2 B7 EA 71 22 B7 12 B8 3001 08
    바이너리 표현은 다음과 같습니다.
    00100000 0110 0010 1011 0111 1110 1010 1101 1101 1011 0100 1111 1010 1000 0010 1010 0000 0110 0010 1111 0100 0011 0000
    0000 0001 0110 0010 1101 1101 1011 0010 1011 0111 1110 1010
    0111 0001 0010 0010 1011 0111 0001 0010 1011 1000 0011 0000
    0000 0001 0000 1000
    )
    20: 상위 5비트: 00100 즉 4, 인코딩 방식: 유니버설
    20:의 3위, 62의 5위는 00001100은 10으로 10개의 유니버설이 있음을 나타낸다.
    62의 뒤 3개의 유니세드와 B7의 8bit, EA의 앞 5개의 bit를 더하면 다음과 같다.
    010110 1111 110 1 56fd 유니코드 코드를 보면 나라
    0101 1011 1011 0110 5bb6 유니코드 코드를 보면 집임을 알 수 있습니다.
    부분 1
    0306 12 10 11 15 38 37
    시간 스탬프 12년 10월 11일 15시 38분 37초
    08 01 40 0A 01 40

    좋은 웹페이지 즐겨찾기