java实现SIP一个例子.docx

上传人:b****6 文档编号:12902399 上传时间:2023-06-09 格式:DOCX 页数:28 大小:19.09KB
下载 相关 举报
java实现SIP一个例子.docx_第1页
第1页 / 共28页
java实现SIP一个例子.docx_第2页
第2页 / 共28页
java实现SIP一个例子.docx_第3页
第3页 / 共28页
java实现SIP一个例子.docx_第4页
第4页 / 共28页
java实现SIP一个例子.docx_第5页
第5页 / 共28页
java实现SIP一个例子.docx_第6页
第6页 / 共28页
java实现SIP一个例子.docx_第7页
第7页 / 共28页
java实现SIP一个例子.docx_第8页
第8页 / 共28页
java实现SIP一个例子.docx_第9页
第9页 / 共28页
java实现SIP一个例子.docx_第10页
第10页 / 共28页
java实现SIP一个例子.docx_第11页
第11页 / 共28页
java实现SIP一个例子.docx_第12页
第12页 / 共28页
java实现SIP一个例子.docx_第13页
第13页 / 共28页
java实现SIP一个例子.docx_第14页
第14页 / 共28页
java实现SIP一个例子.docx_第15页
第15页 / 共28页
java实现SIP一个例子.docx_第16页
第16页 / 共28页
java实现SIP一个例子.docx_第17页
第17页 / 共28页
java实现SIP一个例子.docx_第18页
第18页 / 共28页
java实现SIP一个例子.docx_第19页
第19页 / 共28页
java实现SIP一个例子.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java实现SIP一个例子.docx

《java实现SIP一个例子.docx》由会员分享,可在线阅读,更多相关《java实现SIP一个例子.docx(28页珍藏版)》请在冰点文库上搜索。

java实现SIP一个例子.docx

java实现SIP一个例子

java实现SIP一个例子

(如果你贴子有附件,请一定按照下面模板发贴,否则贴子会被立刻删除,谢谢合作!

【资料名称】:

【作者】:

【语言】:

【页数】:

【格式】:

【发表时间】:

【摘要或目录】:

(请根据需要,保留上面的相应选项)

packagecom.voip.sipphone;

importgov.nist.javax.sip.address.SipUri;

importgov.nist.javax.sip.header.CSeq;

importgov.nist.javax.sip.header.Contact;

importgov.nist.javax.sip.header.ContentLength;

importgov.nist.javax.sip.header.ContentType;

importgov.nist.javax.sip.header.From;

importgov.nist.javax.sip.header.Via;

importjava.text.ParseException;

importjava.util.ArrayList;

importjava.util.Hashtable;

importjava.util.List;

importjava.util.Properties;

importjava.util.Timer;

importjavax.sip.*;

importjavax.sip.address.Address;

importjavax.sip.address.AddressFactory;

importjavax.sip.address.URI;

importjavax.sip.header.CallIdHeader;

importjavax.sip.header.ContactHeader;

importjavax.sip.header.ExpiresHeader;

importjavax.sip.header.FromHeader;

importjavax.sip.header.Header;

importjavax.sip.header.HeaderFactory;

importjavax.sip.header.MaxForwardsHeader;

importjavax.sip.header.RecordRouteHeader;

importjavax.sip.header.ToHeader;

importjavax.sip.header.ViaHeader;

importjavax.sip.message.MessageFactory;

importjavax.sip.message.Request;

importjavax.sip.message.Response;

publicclassSipPhoneimplementsSipListener

{

publicvoidprocessDialogTerminated(DialogTerminatedEventarg0){

  //TODOAuto-generatedmethodstub

  System.out.println("processDialogTerminated"+arg0.toString());

}

publicvoidprocessIOException(IOExceptionEventarg0){

  //TODOAuto-generatedmethodstub

  System.out.println("processIOException"+arg0.toString());

}

/**

  *保存当前注册的用户

  */

privatestaticHashtablecurrUser=newHashtable();

 

/**

  *@authorsoftware

  *注册定时器

  */

classTimerTaskextendsTimer

{

  /**

  *defaultconstructor

  */

  publicTimerTask()

  {

  

  }

  

  /**

  *  如果定时任务到,则删除该用户的注册信息

  */

  publicvoidrun()

  {

  

  }

}

 

/**

  *服务器侦听IP地址

  */

privateStringipAddr="192.168.0.20";

 

/**

  *服务器侦听端口

  */

privateintport=5060;

/**

  *处理register请求

  *@paramrequest请求消息

  */

privatevoidprocessRegister(Requestrequest,RequestEventrequestEvent)

{

  if(null==request)

  {

  System.out.println("processInviterequestisnull.");

  return;

  }

  //System.out.println("Request"+request.toString());

  ServerTransactionserverTransactionId=requestEvent.getServerTransaction();

  

  try

  {

  Responseresponse=null;

  ToHeaderhead=(ToHeader)request.getHeader(ToHeader.NAME);

  AddresstoAddress=head.getAddress();

  URItoURI=toAddress.getURI();

  ContactHeadercontactHeader=(ContactHeader)request.getHeader("Contact");

  AddresscontactAddr=contactHeader.getAddress();

  URIcontactURI=contactAddr.getURI();

  System.out.println("processRegisterfrom:

"+toURI+"requeststr:

"+contactURI);

  intexpires=request.getExpires().getExpires();

  //如果expires不等于0,则为注册,否则为注销。

  if(expires!

=0||contactHeader.getExpires()!

=0)

  {

  currUser.put(toURI,contactURI);

  System.out.println("registeruser"+toURI);

  }

  else

  {  

  currUser.remove(toURI);

  System.out.println("unregisteruser"+toURI);

  }

  

  response=msgFactory.createResponse(200,request);

  System.out.println("sendregisterresponse  :

"+response.toString());  

  

  if(serverTransactionId==null)

  {

  serverTransactionId=sipProvider.getNewServerTransaction(request);

  serverTransactionId.sendResponse(response);

  //serverTransactionId.terminate();

  System.out.println("registerserverTransaction:

"+serverTransactionId);

  }

  else

  {

  System.out.println("processRequestserverTransactionIdisnull.");

  }

  

  }

  catch(ParseExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }

  catch(SipExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }

  catch(InvalidArgumentExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }

}

/**

  *处理invite请求

  *@paramrequest请求消息

  */

privatevoidprocessInvite(Requestrequest,RequestEventrequestEvent)

{

  if(null==request)

  {

  System.out.println("processInviterequestisnull.");

  return;

  }

  try

  {

  //发送100Trying

  serverTransactionId=requestEvent.getServerTransaction();

  if(serverTransactionId==null)

  {

  serverTransactionId=sipProvider.getNewServerTransaction(request);

  callerDialog=serverTransactionId.getDialog();

  Responseresponse=msgFactory.createResponse(Response.TRYING,request);

  serverTransactionId.sendResponse(response);

  }

  //查询目标地址

  URIreqUri=request.getRequestURI();

  URIcontactURI=currUser.get(reqUri);

  

  System.out.println("processInviterqStr="+reqUri+"cUDP",callerVia.getBranch()+"sipphone");

  

  //FIXME需要测试是否能够通过设置VIA头域来修改VIA头域值

  cliReq.removeHeader(Via.NAME);

  cliReq.addHeader(via);

  

  //更新contact的地址

  ContactHeadercontactHeader=headerFactory.createContactHeader();

  Addressaddress=addressFactory.createAddress("sip:

sipsoft@"+ipAddr+":

"+port);

  contactHeader.setAddress(address);

  contactHeader.setExpires(3600);

  cliReq.setHeader(contactHeader);

  

  clientTransactionId=sipProvider.getNewClientTransaction(cliReq);

  clientTransactionId.sendRequest();

  

  System.out.println("processInviteclientTransactionId="+clientTransactionId.toString());

  

  System.out.println("sendinvitetocallee:

"+cliReq);    

  }

  catch(TransactionUnavailableExceptione1)

  {

  //TODOAuto-generatedcatchblock

  e1.printStackTrace();

  }

  catch(SipExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }

  catch(ParseExceptione)

  {

  e.printStackTrace();

  }

  catch(Exceptione)

  {

  e.printStackTrace();

  }

}

/**

  *处理SUBSCRIBE请求

  *@paramrequest请求消息

  */

privatevoidprocessSubscribe(Requestrequest)

{

  if(null==request)

  {

  System.out.println("processSubscriberequestisnull.");

  return;

  }

  ServerTransactionserverTransactionId=null;

  try

  {

  serverTransactionId=sipProvider.getNewServerTransaction(request);

  }

  catch(TransactionAlreadyExistsExceptione1)

  {

  //TODOAuto-generatedcatchblock

  e1.printStackTrace();

  }catch(TransactionUnavailableExceptione1)

  {

  //TODOAuto-generatedcatchblock

  e1.printStackTrace();

  }

  

  try

  {

  Responseresponse=null;

  response=msgFactory.createResponse(200,request);

  if(response!

=null)

  {

  ExpiresHeaderexpireHeader=headerFactory.createExpiresHeader(30);

  response.setExpires(expireHeader);

  }

  System.out.println("response:

"+response.toString());

  

  if(serverTransactionId!

=null)

  {

  serverTransactionId.sendResponse(response);

  serverTransactionId.terminate();    

  }

  else

  {

  System.out.println("processRequestserverTransactionIdisnull.");

  }

  

  }

  catch(ParseExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }

  catch(SipExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }

  catch(InvalidArgumentExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }

}

/**

  *处理BYE请求

  *@paramrequest请求消息

  */

privatevoidprocessBye(Requestrequest,RequestEventrequestEvent)

{

  if(null==request||null==requestEvent)

  {

  System.out.println("processByerequestisnull.");

  return;

  }

  RequestbyeReq=null;

  Dialogdialog=requestEvent.getDialog();

  System.out.println("calleeDialog:

"+calleeDialog);

  System.out.println("callerDialog:

"+callerDialog);

  try

  {

  if(dialog.equals(calleeDialog))

  {

  byeReq=callerDialog.createRequest(request.getMethod());

  ClientTransactionclientTran=sipProvider.getNewClientTransaction(byeReq);

  callerDialog.sendRequest(clientTran);

  calleeDialog.setApplicationData(requestEvent.getServerTransaction());

  }

  elseif(dialog.equals(callerDialog))

  {

  byeReq=calleeDialog.createRequest(request.getMethod());

  ClientTransactionclientTran=sipProvider.getNewClientTransaction(byeReq);

  calleeDialog.sendRequest(clientTran);

  callerDialog.setApplicationData(requestEvent.getServerTransaction());

  }

  else

  {

  System.out.println("");

  }

  

  System.out.println("sendbyetopeer:

"+byeReq.toString());

  }

  catch(SipExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }  

  

}

/**

  *处理CANCEL请求

  *@paramrequest请求消息

  */

privatevoidprocessCancel(Requestrequest)

{

  if(null==request)

  {

  System.out.println("processCancelrequestisnull.");

  return;

  }

}

/**

  *处理INFO请求

  *@paramrequest请求消息

  */

privatevoidprocessInfo(Requestrequest)

{

  if(null==request)

  {

  System.out.println("processInforequestisnull.");

  return;

  }

}

 

/**

  *处理ACK请求

  *@paramrequest请求消息

  */

privatevoidprocessAck(Requestrequest,RequestEventrequestEvent)

{

  if(null==request)

  {

  System.out.println("processAckrequestisnull.");

  return;

  }

  

  try

  {

  RequestackRequest=null;

  CSeqcsReq=(CSeq)request.getHeader(CSeq.NAME);  

  ackRequest=calleeDialog.createAck(csReq.getSeqNumber());

  calleeDialog.sendAck(ackRequest);  

  System.out.println("sendacktocallee:

"+ackRequest.toString());

  }

  catch(SipExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }

  catch(InvalidArgumentExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }

  

  

}

/**

  *处理CANCEL消息

  *@paramrequest

  *@param

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2