try {
// 发送100 Trying
serverTransactionId = requestEvent.getServerTransaction();
if (serverTransactionId == null)
{
serverTransactionId = sipProvider.getNewServerTransaction(request);
callerDialog = serverTransactionId.getDialog();
Response response = msgFactory.createResponse(Response.TRYING, request);
serverTransactionId.sendResponse(response);
}
//查询目标地址
URI reqUri = request.getRequestURI(); URI contactURI = currUser.get(reqUri);
System.out.println(\
callerVia.getBranch()+\
// FIXME 需要测试是否能够通过设置VIA头域来修改VIA头域值
cliReq.removeHeader(Via.NAME);
cliReq.addHeader(via);
// 更新contact的地址
ContactHeader contactHeader = headerFactory.createContactHeader(); Address address = addressFactory.createAddress(\
port);
contactHeader.setAddress(address); contactHeader.setExpires(3600); cliReq.setHeader(contactHeader);
clientTransactionId = sipProvider.getNewClientTransaction(cliReq);
clientTransactionId.sendRequest();
System.out.println(\
clientTransactionId.toString());
System.out.println(\
}
catch (TransactionUnavailableException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (SipException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ParseException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
} } /**
* 处理SUBSCRIBE请求 * @param request 请求消息
*/
private void processSubscribe(Request request)
{
if (null == request)
{
System.out.println(\
return;
}
ServerTransaction serverTransactionId = null;
try {
serverTransactionId = sipProvider.getNewServerTransaction(request);
}
catch (TransactionAlreadyExistsException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (TransactionUnavailableException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} try {
Response response = null;
response = msgFactory.createResponse(200, request);
if (response != null)
{
ExpiresHeader expireHeader = headerFactory.createExpiresHeader(30);
response.setExpires(expireHeader);
}
System.out.println(\
if(serverTransactionId != null)
{
serverTransactionId.sendResponse(response);
serverTransactionId.terminate();
} 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();
} } /**
* 处理BYE请求 * @param request 请求消息
*/
private void processBye(Request request, RequestEvent requestEvent)
{
if (null == request || null == requestEvent)
{
System.out.println(\
return;
}
Request byeReq = null;
Dialog dialog = requestEvent.getDialog();
System.out.println(\ System.out.println(\
try {
if (dialog.equals(calleeDialog))
{
byeReq = callerDialog.createRequest(request.getMethod());
ClientTransaction clientTran = sipProvider.getNewClientTransaction(byeReq);
callerDialog.sendRequest(clientTran);
calleeDialog.setApplicationData(requestEvent.getServerTransaction());
}
else if (dialog.equals(callerDialog))
{
byeReq = calleeDialog.createRequest(request.getMethod());
ClientTransaction clientTran = sipProvider.getNewClientTransaction(byeReq);
calleeDialog.sendRequest(clientTran);
callerDialog.setApplicationData(requestEvent.getServerTransaction());
} else {
System.out.println(\
}
System.out.println(\
}
catch (SipException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} } /**
* 处理CANCEL请求 * @param request 请求消息
*/
private void processCancel(Request request)
{
if (null == request)