SIP.js λΌμ΄λΈλ¬λ¦¬λ₯Ό 0.7.5μμ 0.9.1λ‘ μ λ°μ΄νΈνλ €κ³ ν©λλ€.
ν΅ν μ€ λΉλμ€λ₯Ό μΆκ°νκΈ° μν΄ Reinviteλ₯Ό λ§λ€ λ λ¬Έμ κ° μμ΅λλ€. λ¬Έμ λ Kamailio μλ²κ° reINVITE νΈμΆμμ Record-Route ν€λλ₯Ό 보λ΄μ§ μλλ€λ κ²μ λλ€. SIP RFCμ λ°λ₯΄λ©΄ μ΄ Kamailio λμμ μ μμ λλ€.
https://tools.ietf.org/html/rfc3261#section -12.1.2
κ²½λ‘ μΈνΈλ μλ΅μ Record-Route ν€λ νλμ μλ URI λͺ©λ‘μΌλ‘ μ€μ λμ΄μΌ νλ©° μμμΌλ‘ μ·¨ν΄μ§λ©° λͺ¨λ URI 맀κ°λ³μλ₯Ό 보쑴ν΄μΌ ν©λλ€. μλ΅μ Record-Route ν€λ νλκ° μμΌλ©΄ κ²½λ‘ μΈνΈλ₯Ό λΉ μΈνΈλ‘ μ€μ ν΄μΌ ν©λλ€(MUST). μ΄ κ²½λ‘ μ§ν©μ λΉμ΄ μλλΌλ μ΄ λν μμμ ν₯ν μμ²μ λν΄ κΈ°μ‘΄ κ²½λ‘ μ§ν©μ μ¬μ μν©λλ€. μ격 λμμ μλ΅μ Contact ν€λ νλμμ URIλ‘ μ€μ λμ΄μΌ ν©λλ€(MUST).
https://tools.ietf.org/html/rfc3261#section -12.2
λν λ΄μ μμ²μλ Record-Route λ° Contact ν€λ νλκ° ν¬ν¨λ μ μμ΅λλ€(MAY). κ·Έλ¬λ μ΄λ¬ν μμ²μΌλ‘ μΈν΄ λν μμμ κ²½λ‘ μ§ν©μ΄ μμ λμ§λ μμ§λ§ μ격 λμ URIλ μμ ν μ μμ΅λλ€.
sip.js λ²μ 0.7.5μμ λ³Ό μ μλ―μ΄ Route ν€λλ νμ request(this.request)μμ κ°μ Έμμ§λ§ sip.js λ²μ 0.9.1μμλ λ§μ§λ§ μλ΅(this.response)μμ κ°μ Έμ΅λλ€. t λ μ½λ κ²½λ‘ ν€λκ° μμ΅λλ€.
λ²μ κ°μ μ°¨μ΄μ μ λ€μκ³Ό κ°μ΅λλ€.
0.7.5) https://www.dropbox.com/s/jo055zsn9286q17/Screenshot%202018-01-17%2013.40.41.png?dl=0
0.9.1) https://www.dropbox.com/s/u41kh91h3kzvt27/Screenshot%202018-01-17%2013.42.13.png?dl=0
κ·Έλμ λ΄κ° ν μΌμ 0.9.1 μ½λλ₯Ό μ½κ° λ³κ²½νμ΅λλ€. μλ΅μ Record-Route ν€λκ° μμΌλ©΄ ACKμ μΆκ°ν©λλ€. μ΄μ μμ²μμ κ°μ Έμ€λ €κ³ νμ§ μμ΅λκΉ? Routeκ° μλ€λ©΄ κ·Έλ₯ λΉμλ κ²μ λλ€.
https://www.dropbox.com/s/1rrhyfnxe9sa88a/Screenshot%202018-01-17%2013.50.11.png?dl=0
μ νλμ λ°κΎΈμ ¨λμ§ μκ³ μΆμ΅λλ€. λ΄ λλ λΉμ μ μ€μκ° μμ΅λκΉ?
μ°Ύκ³ μλ μΉμ μ μ€μ λ‘ μΉμ 14μ λλ€.
https://tools.ietf.org/html/rfc3261#section -14
μ΄ κ²½μ° μΉμ 12κ° μ μ©λμ§ μμΌλ―λ‘ ν΄λΉ μΉμ μ λν΄ μ½λμ κΈ°λ₯μ νμΈνμμμ€. μΌλ°μ μΌλ‘ reINVITE μ§μμ 0.7.xμμ μ§μλλ κ²μΌλ‘ κ°μ£Όλ λ§νΌ μμ μ μ΄μ§ μμμ§λ§ μ§μμ 0.8.xμμ μ¬μμ λ§κ² ꡬ체νλμμ΅λλ€.
μΉμ 14λ₯Ό μ² μ ν νμΈνλλ° "λΌμ°ν μΈνΈ"μ μ¬μ©/μμ μ λν΄ μ무 λ§λ νμ§ μμ΅λλ€.
κ·Έλ¬λ μΉμ
12λ‘ λμκ°μ "κ²½λ‘ μ§ν©"μ μ΄κΈ° INVITE μ²λ¦¬ μ€μ νμ±λμ΄μΌ νλ©° λν μμ λ΄ λ©μμ§ μ²λ¦¬ μ€μ μμ μμ΄ μ¬μ¬μ©λμ΄μΌ ν©λλ€.
RFCμ μ μ ν λΆλΆμ λν μΈμ©μ μμ λμ μμ΅λλ€.
μ§κΈ μ§λ¬Έμ "κ²½λ‘ μΈνΈ"κ° λν μμμμ μμ λ μ΄μ μ λλ€(sip.js λ²μ 0.9.1μ λ§μ§λ§ μλ΅ this.responseμμ κ°μ Έμ΄). μ΄λ RFCλ₯Ό μ€μνμ§ μκΈ° λλ¬Έμ λλ€.
μ΄λ΄ Denis, λλ μ΄κ²μ μ‘°μ¬νκ³ Jamesμ κ·Έκ²μ λν΄ μ΄μΌκΈ°νμ΅λλ€.
μ΄κ²μ λ²κ·Έμ΄μ§λ§ λν λ΄μμ κ²½λ‘ μΈνΈλ₯Ό μ λ°μ΄νΈν μ μλλ‘ νλ€λ μ μμ μλ λμλ μ¬λ°λ₯΄μ§ μμ κ²μΌλ‘ 보μ λλ€.
https://tools.ietf.org/html/rfc3261#section -12.1.1 μ μ€λͺ λ λν νμ± μμ²μ μλ΅ν λ UAS λμμ λ μ½λ κ²½λ‘ ν€λλ₯Ό 볡μ¬νκ³ , μ΄λ₯Ό λ°λλ‘ ν λ€μ λν μμμ μ μ₯νλ κ²μ΄μ΄μΌ ν©λλ€. λ²μ λ³μλ₯Ό κ²½λ‘ μΈνΈλ‘ μ¬μ©ν©λλ€.
λν λ΄μμ μμ²μ μλ΅ν λ https://tools.ietf.org/html/rfc3261#section -12.2μ μ€λͺ λ λλ‘ UAS λμμ λν λ΄μμ λ²μκ° μ§μ λ κΈ°μ‘΄ κ²½λ‘ μΈνΈλ₯Ό μ¬μ¬μ©ν΄μΌ ν©λλ€.
λΌμ°νΈ μΈνΈλ₯Ό λ€μ μμ±νκΈ° μν λν λ΄μ μμ²μ λν λ μ½λ λΌμ°νΈ ν€λμ μ‘΄μ¬ μ¬λΆμ λ°λ₯Έ νμ¬ λμμ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.
λ€μ 릴리μ€μμ μ΄ λ¬Έμ λ₯Ό μμ ν κ²μ΄μ§λ§ κ·Έ λμ λͺ¨λ μμ²(μ΄κΈ° λ° μμ°¨)μ λν΄ record_route()λ₯Ό νΈμΆνμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμΌλ―λ‘ λ μ½λ κ²½λ‘ ν€λκ° https://tools.ietf μ κ°μ μμ°¨μ μμ²μ μκ² λ©λλ€
λμΌν λ¬Έμ κ° λ°μν©λλ€. λ¬Έμ κ° μ€μ λ‘ ν΄κ²°λμ§ μμ μνμμ μ΄ λ¬Έμ κ° μ’
λ£λ μ΄μ λ 무μμ
λκΉ?
λν μμλ₯Ό μ°Ύκ³ κ±°κΈ°μμ 볡μ¬νμ¬ ν€λλ₯Ό μ»μ μ μμμ΅λλ€.
diff --git a/src/SIPMessage.ts b/src/SIPMessage.ts
index a95e8ee..3226160 100644
--- a/src/SIPMessage.ts
+++ b/src/SIPMessage.ts
@@ -755,6 +755,9 @@ export class IncomingResponse extends IncomingMessage implements IncomingRespons
if (!contact || !contact.uri) {
throw new Error("Failed to parse contact header.");
}
+
+ const dialog = this.ua.dialogs[this.callId + this.fromTag + this.toTag];
+
const ruri = contact.uri;
const request = new OutgoingRequest(
C.ACK,
@@ -767,7 +770,7 @@ export class IncomingResponse extends IncomingMessage implements IncomingRespons
fromTag: this.fromTag,
toUri: this.to.uri,
toTag: this.toTag,
- routeSet: this.getHeaders("record-route").reverse()
+ routeSet: (dialog ? dialog.routeSet : this.getHeaders("record-route").reverse())
},
options ? options.extraHeaders : undefined,
options ? options.body : undefined
μ κ° μκ°νλ μ€νμΌμ 0μ μ΄μ§λ§ ν΄κ²° λ°©λ²μ μ΄κ²κ³Ό λΉμ·νμ§ μμκΉ μκ°ν©λλ€.
μλ κΈ°μκ° λ¬Έμ λ₯Ό λ«μ κ² κ°μ΅λλ€. λλ κ·Έκ²μ λ€μ μ΄μκ³ μ°λ¦¬λ μ΄ μ½λλ₯Ό μ κ·Ήμ μΌλ‘ μ΄ν΄λ³΄κ³ μμ΅λλ€.
@egreenmachine κ°μ¬ν©λλ€. μ΄λ 보λ₯/보λ₯ ν΄μ (μ¬μ΄λ)μλ μν₯μ λ―ΈμΉ©λλ€.
μ°λ¦¬κ° κ°μ§ κ²½μ°λ 보λ₯ μ¬μ΄λ ν μ¬λ°λ₯Έ κ²½λ‘κ° μλ BYE ν¨ν·μ΄μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μ΄λ΄ Denis, λλ μ΄κ²μ μ‘°μ¬νκ³ Jamesμ κ·Έκ²μ λν΄ μ΄μΌκΈ°νμ΅λλ€.
μ΄κ²μ λ²κ·Έμ΄μ§λ§ λν λ΄μμ κ²½λ‘ μΈνΈλ₯Ό μ λ°μ΄νΈν μ μλλ‘ νλ€λ μ μμ μλ λμλ μ¬λ°λ₯΄μ§ μμ κ²μΌλ‘ 보μ λλ€.
https://tools.ietf.org/html/rfc3261#section -12.1.1 μ μ€λͺ λ λν νμ± μμ²μ μλ΅ν λ UAS λμμ λ μ½λ κ²½λ‘ ν€λλ₯Ό 볡μ¬νκ³ , μ΄λ₯Ό λ°λλ‘ ν λ€μ λν μμμ μ μ₯νλ κ²μ΄μ΄μΌ ν©λλ€. λ²μ λ³μλ₯Ό κ²½λ‘ μΈνΈλ‘ μ¬μ©ν©λλ€.
λν λ΄μμ μμ²μ μλ΅ν λ https://tools.ietf.org/html/rfc3261#section -12.2μ μ€λͺ λ λλ‘ UAS λμμ λν λ΄μμ λ²μκ° μ§μ λ κΈ°μ‘΄ κ²½λ‘ μΈνΈλ₯Ό μ¬μ¬μ©ν΄μΌ ν©λλ€.
λΌμ°νΈ μΈνΈλ₯Ό λ€μ μμ±νκΈ° μν λν λ΄μ μμ²μ λν λ μ½λ λΌμ°νΈ ν€λμ μ‘΄μ¬ μ¬λΆμ λ°λ₯Έ νμ¬ λμμ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.
λ€μ 릴리μ€μμ μ΄ λ¬Έμ λ₯Ό μμ ν κ²μ΄μ§λ§ κ·Έ λμ λͺ¨λ μμ²(μ΄κΈ° λ° μμ°¨)μ λν΄ record_route()λ₯Ό νΈμΆνμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμΌλ―λ‘ λ μ½λ κ²½λ‘ ν€λκ° https://tools.ietf μ κ°μ μμ°¨μ μμ²μ μκ² λ©λλ€