[MQTT / Mosca] Mqtt Packet 에 Command Type 추가하기 (for authentication) #1
[MQTT / Mosca] Mqtt Packet 에 Command Type 추가하기 (for authentication) #2
[MQTT / Mosca] Mqtt Packet 에 Command Type 추가하기 (for authentication) #3
[MQTT / Mosca] Mqtt Packet 에 Command Type 추가하기 (for authentication) #4
경축축 이제 진짜 드디어 마지막 글이다!!
이제 Command Type 을 추가하는 게 끝났다.
하지만 거기까지 해서는
Authentication 을 위한 Packet 흐름
1. Connect Packet (Device -> Server)
2. Authenticate Packet (Server -> Device)
3. Authenticate Packet (Device -> Server)
4. Connect ACK Packet (Server -> Device)
에서의 네번째 단계가 아마 안 될 거다...
#Connect ACK Packet 받기
세번째 글에서 stream.pipe 란 애를 요주의라고 했었다.
그니까!!
3단계까지 무사히 마쳤으니
Server 에서 authenticate packet 을 받아서 처리할 수 있는 상태가 되었다.
그래서 처리를 해주고, authentication 이 완료되면 Connect ACK Packet 을 device 에 보내줘야한다.
그래야 비로소 connection 이 완료되니까!
근데!!!!!! 지금 상태에선 Device 가 그놈의 Connect ACK Packet 을 못 받는다!!!!!
대체 왜인지 알기 위해 진짜 디버깅을 엄청 했다
Wire shark 도 켜서 막 패킷 캡쳐해보고... 별짓을 다했는데
확실해진 건 Server -> Device 로 가는 Connect ACK Packet 이 확실히 보내졌다는 거다.
그럼 문제가 뭘까?
Device 쪽 코드에서 받아서 뭔가 처리를 하는데 생긴 문제일텐데,
stream 에서 데이터를 아예 못받나? 싶어서
client 코드 들어가서
this.stream.on('data', function(data) {
console.log(data);
});
해봤더니 넘나 잘 나옴!!
심지어 Wire shark 에서 캡쳐한 Packet 이랑 byte array 도 일치한다 ㅠㅠ
그럼 뭐가 문제일까...
하다보니 문득 위의 this.stream 이 readable stream 이란 것과,
실제로 받은 packet 의 처리는 stream.pipe 에 destination 으로 설정됐던 writable stream 에서 한다는 생각이 스쳐갔다.
그럼 왜인지는 몰라도 저 pipe 가 한번만 동작하고 있는 건 아닐까?
싶어서 코드를 수정해봤다
/*
writable._write = function (buf, enc, done) {
completeParse = done;
parser.parse(buf);
process();
};
this.stream.pipe(writable);
*/
this.stream.on('data', function(buf) {
completeParse = function(err) {
if (err) {
console.log(err);
return;
}
};
parser.parse(buf);
process();
});
원래 있던 pipe 관련 코드들을 다 주석처리하고
저렇게 직접 readable stream 에서 읽은 data buffer 를 처리하도록 해줬더니.............
세상에 넘나 잘 된다
대체 왜 pipe 가 한번만 동작하고 막힌 건지는 모르겠다.
어딘가에서 막힌 것 같은데 그것까지 찾아볼 생각도 없고...
기나긴 삽질에 지쳐 그럴 자신도 없다 ㅠㅠ
그래도 이제 authentication 을 위한 모든 준비가 끝났다!
암호화만 하면 된다. ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
나말고 읽을 사람이 있을지 의문이지만
혹시 이 대장정을 다 읽으셨다면
수고하셨습니다!!
'Programming > Security' 카테고리의 다른 글
[MQTT / Mosca] Mqtt Packet 에 Command Type 추가하기 (for authentication) #4 (1) | 2017.10.21 |
---|---|
[MQTT / Mosca] Mqtt Packet 에 Command Type 추가하기 (for authentication) #3 (0) | 2017.10.20 |
[MQTT / Mosca] Mqtt Packet 에 Command Type 추가하기 (for authentication) #2 (0) | 2017.10.20 |
[MQTT / Mosca] Mqtt Packet 에 Command Type 추가하기 (for authentication) #1 (0) | 2017.10.19 |
대칭키와 비대칭키 (0) | 2017.09.13 |