/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package model; import static java.lang.Thread.sleep; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import java.util.logging.Logger; import javax.sip.RequestEvent; import javax.sip.SipException; import javax.sip.header.AllowEventsHeader; import javax.sip.header.AllowHeader; import javax.sip.header.CSeqHeader; import javax.sip.header.ContactHeader; import javax.sip.header.FromHeader; import javax.sip.header.HeaderFactory; import javax.sip.header.ToHeader; import javax.sip.header.ViaHeader; import javax.sip.message.MessageFactory; import javax.sip.message.Response; import logger.OhmLogger; /** * * @author Jan */ public class SIP180Ringing implements Runnable { private RequestEvent evtubergabe; private ExecutorService threadring; private boolean run; private Response responsering; private MessageFactory messageFactory; private HeaderFactory headerFactory; private String myTag; private String proxyTag; public static final Logger lg = OhmLogger.getLogger(); //private SubmissionPublisher publisherZahl; public SIP180Ringing(RequestEvent evtubergabe, String myTag, ContactHeader contact) { this.evtubergabe = evtubergabe; threadring = Executors.newSingleThreadExecutor(); try { responsering = this.messageFactory.createResponse(180, evtubergabe.getRequest()); responsering.addHeader((ViaHeader) evtubergabe.getRequest().getHeader("Via")); responsering.addHeader((FromHeader) evtubergabe.getRequest().getHeader("From")); AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE"); //Bei Ringing muss persönlicher Tag ergänzt werden ToHeader temptoring = (ToHeader) evtubergabe.getRequest().getHeader("To"); proxyTag = temptoring.getTag(); temptoring.setTag(String.valueOf(this.myTag)); responsering.addHeader(temptoring); long cSequenz = ((CSeqHeader) evtubergabe.getRequest().getHeader("Cseq")).getSeqNumber(); responsering.addHeader((CSeqHeader) evtubergabe.getRequest().getHeader("Cseq")); responsering.addHeader(contact); responsering.addHeader(allow); AllowEventsHeader allowevent = this.headerFactory.createAllowEventsHeader("talk,hold,refer,call-info");// für was gebraucht responsering.addHeader(allowevent); lg.info("Ringing Header erfolgreich erstellt"); } catch (Exception ex) { lg.info("Fehler bei erstellen des Ringing Headers"); lg.getLogger(SIPmodel.class.getName()).log(Level.SEVERE, null, ex); } } public void start() { run = true; threadring.submit(this); } public void stop() { run = false; } @Override public void run() { while (run) { try { this.sipProvider.sendResponse(responsering); } catch (SipException ex) { Logger.getLogger(SIP180Ringing.class.getName()).log(Level.SEVERE, null, ex); } try { sleep(1000); } catch (Exception e) { } } } }