이 태스크 정보
B2BUA는 SIP 호출 중간에 사용되는 SIP(Session Initiation Protocol) 애플리케이션이고,
둘 이상의 SIP 대화 상자 사이에서 요청과 응답을 전달합니다. 일반적인 B2BUA
애플리케이션은 두 사용자 에이전트 간에 SIP 세션을 관리합니다. 하지만 B2BUA
애플리케이션은 다운스트림 분할의 여러 분기에서 응답을 관리해야 하는 더
복잡한 시나리오를 처리할 수도 있습니다. 요청이 여러 분기로 분할되고
메시지가 사용자 에이전트 클라이언트에서 사용자 에이전트 서버로 전달될 때
다운스트림 분할이 이루어집니다.
B2buaHelper 클래스에는
이와 같은 B2BUA 애플리케이션 작성에 필요한 모든 메소드가
포함됩니다.
B2buaHelper 클래스 동작 및 새 요청 작성에
사용되는 규칙은 JSR289 스펙, 12.2절에 정의되어 있습니다. SIP
B2BUA(Back-to-Back User Agent) 호출의 두 개의 다리(수신 호출
다리와 발신 호출 다리)를 링크하는 데
B2buaHelper
클래스 함수를 사용할 수 있습니다.
- SipServletRequest.getB2buaHelper() 메소드를 호출하여
B2buaHelper 인스턴스를 검색하십시오.
- 이 인스턴스를 검색한 후 B2buaHelper.createRequest()를 호출하여 새 SIP 요청을 작성할 수 있습니다.
private void doInvite(SipServletRequest req) {
B2buaHelper b2buaHelper = req.getB2buaHelper();
SipServletRequest newRequest = b2buaHelper.createRequest(req, true, headerMap);
}
작성된 newRequest는 이 메소드의 첫 번째 매개변수에 원래 요청으로 제공되는
SipServletRequest req와 동일합니다. Boolean
매개변수는 원래 요청 req와 newRequest가 링크되는지
여부를 표시합니다. headerMap은 newRequest에서 대체할
비시스템 헤더 맵을 제공합니다.
- 두 개의 다리가 링크되어 있는지 확인하십시오. false 속성을
포함한 createRequest 메소드를 호출한 경우 다음을 호출하여
SIP 세션을 명시적으로 링크할 수 있습니다.
B2buaHelper.linkSipSessions(session1, session2)
- SIP 세션과 SIP 요청이 링크되면 다음을 호출하여 링크된 세션을 검색할 수 있습니다.
SipSession linkedSession = B2buaHelper.getLinkedSession(req.getSession());
참고: B2BUA 분할 시나리오에서 애플리케이션은 둘 이상의 SIP 요청을 작성하므로 모든 SIP
세션이 링크되지는 않습니다. 세션은 명시적으로 링크해야 합니다.
- 사용자 에이전트 서버(UAS)에서 응답을 수신하면 해당 다리에 대한 응답을 작성하십시오.
응답에 링크된 세션이 있는지 여부를 판별하고 세션이 있으면 링크된 요청을 사용하여
사용자 에이전트 클라이언트(UAC)에 대한 응답을 작성하십시오.
SipServletRequest linked = b2bHelper.getLinkedSipServletRequest(resp.getRequest());
linked.createResponse(resp.getStatus(),resp.getReasonPhrase()).send();
응답과 연관된 링크된 세션이 없으면 애플리케이션은
B2buaHelper.createResponseToOriginalRequest를 호출하고 파생된 새 세션을 작성해야 합니다.
이 세션은 원래 요청과 연관된 SipSession의 사본입니다.
참고: JSR289 스펙, 12.5절은 원래 요청에 대한 둘 이상의 성공적인 응답을
작성하는 방법을 제공합니다. 원래 INVITE 메시지와
연관된 둘 이상의 SipSession이 있고 INVITE 메시지에
대한 둘 이상의 응답을 보내야 하는 경우 B2buaHelper.createResponseToOriginalRequest
메소드를 사용하십시오.
- createResponseToOriginalRequest 메소드를 사용하는 경우 두 개의 다리가
링크되어 있는지 확인하십시오. 애플리케이션은 해당 쌍 세션에 파생된 새 세션을
링크하므로 후속 응답을 보내기 위해 링크된 세션을 검색할 수 있습니다.