private Dialog calleeDialog = null;
/** * 被叫对话
*/
private Dialog callerDialog = null;
/** * */
ClientTransaction clientTransactionId = null;
/**
* 处理BYE响应消息 * @param reponseEvent
*/
private void doByeResponse(Response response, ResponseEvent responseEvent)
{
Dialog dialog = responseEvent.getDialog();
try {
Response byeResp = null; if (callerDialog.equals(dialog))
{
ServerTransaction servTran =
(ServerTransaction)calleeDialog.getApplicationData();
byeResp = msgFactory.createResponse(response.getStatusCode(),
servTran.getRequest());
servTran.sendResponse(byeResp);
}
else if (calleeDialog.equals(dialog))
{
ServerTransaction servTran =
(ServerTransaction)callerDialog.getApplicationData();
byeResp = msgFactory.createResponse(response.getStatusCode(),
servTran.getRequest());
servTran.sendResponse(byeResp);
} else { }
System.out.println(\
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace(); } catch (SipException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} }
/* (non-Javadoc)
* @see javax.sip.SipListener#processResponse(javax.sip.ResponseEvent)
* */
public void processResponse(ResponseEvent arg0)
{
// FIXME 需要判断各个响应对应的是什么请求 Response response = arg0.getResponse();
System.out.println(\
System.out.println(\
arg0.getClientTransaction().getRequest());
if (response.getStatusCode() == Response.TRYING)
{
System.out.println(\
return;
} try {
ClientTransaction clientTran = (ClientTransaction)
arg0.getClientTransaction();
if (Request.INVITE.equalsIgnoreCase(clientTran.getRequest().getMethod()))
{
int statusCode = response.getStatusCode();
Response callerResp = null;
callerResp = msgFactory.createResponse(statusCode,
serverTransactionId.getRequest());
// 更新contact头域值,因为后面的消息是根据该URI来路由的 ContactHeader contactHeader = headerFactory.createContactHeader();
Address address =
addressFactory.createAddress(\
contactHeader.setAddress(address); contactHeader.setExpires(3600); callerResp.addHeader(contactHeader);
// 拷贝to头域
ToHeader toHeader = (ToHeader)response.getHeader(ToHeader.NAME);
callerResp.setHeader(toHeader);
// 拷贝相应的消息体
ContentLength contentLen = (ContentLength)response.getContentLength();
if (contentLen != null && contentLen.getContentLength() != 0)
{
ContentType contentType =
(ContentType)response.getHeader(ContentType.NAME);
System.out.println(\
callerResp.setContentLength(contentLen); //callerResp.addHeader(contentType);
callerResp.setContent(response.getContent(), contentType);
} else {
System.out.println(\
}
if (serverTransactionId != null)
{
callerDialog = serverTransactionId.getDialog();
calleeDialog = clientTran.getDialog(); serverTransactionId.sendResponse(callerResp); System.out.println(\ System.out.println(\
serverTransactionId.getBranchId());
} else {
System.out.println(\
}
System.out.println(\
}
else if (Request.BYE.equalsIgnoreCase(clientTran.getRequest().getMethod()))
{
doByeResponse(response, arg0);
} else if
(Request.CANCEL.equalsIgnoreCase(clientTran.getRequest().getMethod()))
{
//doCancelResponse(response, arg0);
} else { } }
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SipException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvalidArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception ex)
{
ex.printStackTrace();
} }
private void doCancelResponse(Response response, ResponseEvent responseEvent)
{