|  |  |  | 
|---|
|  |  |  | import java.util.concurrent.TimeUnit; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.sip.*; | 
|---|
|  |  |  | import javax.sip.header.CallIdHeader; | 
|---|
|  |  |  | import javax.sip.message.Response; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; | 
|---|
|  |  |  | import org.slf4j.Logger; | 
|---|
|  |  |  | import org.slf4j.LoggerFactory; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SIPProcessorFactory processorFactory; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SipSubscribe sipSubscribe; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private SipStack sipStack; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void processRequest(RequestEvent evt) { | 
|---|
|  |  |  | //      logger.debug(evt.getRequest().toString()); | 
|---|
|  |  |  | // 由于jainsip是单线程程序,为提高性能并发处理 | 
|---|
|  |  |  | processThreadPool.execute(() -> { | 
|---|
|  |  |  | processorFactory.createRequestProcessor(evt).process(); | 
|---|
|  |  |  | if (processorFactory != null) { | 
|---|
|  |  |  | processorFactory.createRequestProcessor(evt).process(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void processResponse(ResponseEvent evt) { | 
|---|
|  |  |  | Response response = evt.getResponse(); | 
|---|
|  |  |  | //      logger.debug(evt.getResponse().toString()); | 
|---|
|  |  |  | int status = response.getStatusCode(); | 
|---|
|  |  |  | if ((status >= 200) && (status < 300)) { // Success! | 
|---|
|  |  |  | if (((status >= 200) && (status < 300)) || status == 401) { // Success! | 
|---|
|  |  |  | ISIPResponseProcessor processor = processorFactory.createResponseProcessor(evt); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | processor.process(evt, this, sipConfig); | 
|---|
|  |  |  | 
|---|
|  |  |  | // TODO Auto-generated catch block | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // } else if (status == Response.TRYING) { | 
|---|
|  |  |  | // trying不会回复 | 
|---|
|  |  |  | if (evt.getResponse() != null && sipSubscribe.getOkSubscribesSize() > 0 ) { | 
|---|
|  |  |  | CallIdHeader callIdHeader = (CallIdHeader)evt.getResponse().getHeader(CallIdHeader.NAME); | 
|---|
|  |  |  | if (callIdHeader != null) { | 
|---|
|  |  |  | SipSubscribe.Event subscribe = sipSubscribe.getOkSubscribe(callIdHeader.getCallId()); | 
|---|
|  |  |  | if (subscribe != null) { | 
|---|
|  |  |  | subscribe.response(evt); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if ((status >= 100) && (status < 200)) { | 
|---|
|  |  |  | // 增加其它无需回复的响应,如101、180等 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | logger.warn("接收到失败的response响应!status:" + status + ",message:" + response.getReasonPhrase()/* .getContent().toString()*/); | 
|---|
|  |  |  | if (evt.getResponse() != null && sipSubscribe.getErrorSubscribesSize() > 0 ) { | 
|---|
|  |  |  | CallIdHeader callIdHeader = (CallIdHeader)evt.getResponse().getHeader(CallIdHeader.NAME); | 
|---|
|  |  |  | if (callIdHeader != null) { | 
|---|
|  |  |  | SipSubscribe.Event subscribe = sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()); | 
|---|
|  |  |  | if (subscribe != null) { | 
|---|
|  |  |  | subscribe.response(evt); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // trying不会回复 | 
|---|
|  |  |  | // if (status == Response.TRYING) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|