{
System.out.println(\
return;
} } /**
* 处理INFO请求 * @param request 请求消息
*/
private void processInfo(Request request)
{
if (null == request)
{
System.out.println(\
return;
} } /**
* 处理ACK请求 * @param request 请求消息
*/
private void processAck(Request request, RequestEvent requestEvent)
{
if (null == request)
{
System.out.println(\
return;
} try {
Request ackRequest = null;
CSeq csReq = (CSeq)request.getHeader(CSeq.NAME); ackRequest = calleeDialog.createAck(csReq.getSeqNumber());
calleeDialog.sendAck(ackRequest);
System.out.println(\
}
catch (SipException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvalidArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} } /**
* 处理CANCEL消息 * @param request * @param requestEvent
*/
private void processCancel(Request request, RequestEvent requestEvent)
{
// 判断参数是否有效
if (request == null || requestEvent == null)
{
System.out.println(\
return;
} try {
// 发送CANCEL 200 OK消息
Response response = msgFactory.createResponse(Response.OK, request); ServerTransaction cancelServTran = requestEvent.getServerTransaction();
if (cancelServTran == null)
{
cancelServTran = sipProvider.getNewServerTransaction(request);
}
cancelServTran.sendResponse(response);
// 向对端发送CANCEL消息 Request cancelReq = null;
Request inviteReq = clientTransactionId.getRequest();
List list = new ArrayList();
Via viaHeader = (Via)inviteReq.getHeader(Via.NAME);
list.add(viaHeader);
CSeq cseq = (CSeq)inviteReq.getHeader(CSeq.NAME);
CSeq cancelCSeq = (CSeq)headerFactory.createCSeqHeader(cseq.getSeqNumber(),
Request.CANCEL);
cancelReq = msgFactory.createRequest(inviteReq.getRequestURI(),
inviteReq.getMethod(),
(CallIdHeader)inviteReq.getHeader(CallIdHeader.NAME),
cancelCSeq,
(FromHeader)inviteReq.getHeader(From.NAME), (ToHeader)inviteReq.getHeader(ToHeader.NAME),
list,
(MaxForwardsHeader)inviteReq.getHeader(MaxForwardsHeader.NAME));
ClientTransaction cancelClientTran = sipProvider.getNewClientTransaction(cancelReq);
cancelClientTran.sendRequest();
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (TransactionAlreadyExistsException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (TransactionUnavailableException 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();
} }
private ServerTransaction serverTransactionId = null;
/* (non-Javadoc)
* @see javax.sip.SipListener#processRequest(javax.sip.RequestEvent)
*/
public void processRequest(RequestEvent arg0)
{
Request request = arg0.getRequest();
if (null == request)
{
System.out.println(\
return;
}
System.out.println(\
if (Request.INVITE.equals(request.getMethod()))
{
processInvite(request, arg0);
}
else if (Request.REGISTER.equals(request.getMethod()))
{
processRegister(request, arg0);
}
else if (Request.SUBSCRIBE.equals(request.getMethod()))
{
processSubscribe(request);
}
else if (Request.ACK.equalsIgnoreCase(request.getMethod()))
{
processAck(request, arg0);
}
else if (Request.BYE.equalsIgnoreCase(request.getMethod()))
{
processBye(request, arg0);
}
else if (Request.CANCEL.equalsIgnoreCase(request.getMethod()))
{
processCancel(request, arg0);
} else {
System.out.println(\
} } /** * 主叫对话
*/