2013-05-14 2 views
0

역 바이트 순서를 사용하여 맞춤 sipdroid 클라이언트를 만들고 싶습니다. 나는 다른 Voip 클라이언트가 이러한 데이터를 디코딩 할 수 없게 만든다고 생각합니다.sipdroid 데이터 암호화가 실패했습니다.

그래서 SipDroid의 코드를 읽었습니다. 나는 RTP 데이터가이 길을 간다 발견 1. AudioRecord.read (originalPCM) 2. 인코딩 (originalPCM, encodedData) 3. rtp_socket.send (rtp_packet는) // encodeData는 rtp_packet의 데이터 부분

그리고 다른입니다 측면은 다음과 같습니다 1. rtp_receive (rtp_packet) 2. 디코드 (encodeData, PCMData가) // encodeData가 rtp_packet의 데이터 부분 3. AudioTrack.write (PCMData)

그래서 나는 SipdroidSocket 클래스를 수정합니다. send 메소드에서 처음에 다음 코드를 추가합니다.

byte[] b = pack.getData(); 
reverse(b); 
pack.setData(b); 

수신 방법 끝 부분에 다음 코드를 추가하십시오.

byte[] b = pack.getData(); 
    reverse(b); 
    pack.setData(b); 

이렇게 생각하면 두 클라이언트가 평소대로 작동 할 수 있습니다. 그러나 실패했습니다. 그리고 그 이유를 모르겠습니다. 이유를 찾아 내도록 도와주세요. 감사.

+0

전송할 때 데이터를 암호화하려는 것처럼 들리지만 바이트 순서를 뒤집 으면 이러한 보호가 제공되지 않습니다. 표시하는 코드에 문제가 없어야합니다. 수정하지 않고이 프로그램을 실행하려 했습니까? 이 경우 작동 했습니까? – Flipbed

+0

나는 데이터를 충분히 보호하지 않을 것이라는 것을 알고있다. 나는 이것을 시험으로 사용한다. 작동하는 경우 reverse() 메서드를 데이터를 암호화하는 유용한 방법으로 변경합니다. – Fakebear

+0

수정을 취소하면. 두 클라이언트가 잘 작동합니다. 그러나 나의 수정으로, 단지 소음이있다. 이 두 가지 방법으로 로그를 인쇄합니다. 한 번만 호출되는 send 메소드를 찾았습니다. 프로세스에서 일부 데이터 검사가 있어야합니다. 그래서 성공하지 못한다. – Fakebear

답변

0

한 번에 2,4,8 바이트를받지 않으면 구멍 버퍼를 뒤집어서는 안됩니다. 데이터는 의 저장 방법에 따라 2,4,8 바이트의 요소로 처리해야합니다. 여기에 표시되는 코드는 작동하지 않습니다. 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08 바이트의 데이터 바이트 버퍼가 0x04030201-0x08070605의 4 바이트 요소로 저장되어 있다고 가정합니다. 구멍 버퍼를 반대로하면 0x05060708-0x04030201 으로 끝나기 때문에 홀 버퍼를 뒤집 으면 0x0860x07,0x06,0x05,0x04,0x03,0x02,0x01 이됩니다. 이는 한 번에 하나의 요소 (4 바이트)를 뒤집을 경우 발생합니다. 요소의 크기는 값 저장 방법에 따라 달라집니다.

관련 문제