MAVEN 导入 

<dependency>
    <groupId>javax.sip</groupId>
    <artifactId>jain-sip-api</artifactId>
    <version>1.2.1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.sip/jain-sip-ri -->
<dependency>
    <groupId>javax.sip</groupId>
    <artifactId>jain-sip-ri</artifactId>
    <version>1.2.344</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>javax.sip</groupId>
    <artifactId>jain-sip-ri</artifactId>
    <version>1.3.0-91</version>
</dependency>

JAVA 类 代码

package MyTestClass;

import javax.sip.*;
import javax.sip.address.Address;
import javax.sip.address.AddressFactory;
import javax.sip.address.SipURI;
import javax.sip.header.*;
import javax.sip.message.MessageFactory;
import javax.sip.message.Request;
import javax.sip.message.Response;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class MySipTest {
    public static void main(String[] args) {
        String username = "local";
        String ip = "192.168.0.92";
        int port = 5060;

        try {
            Properties prop = new Properties();
            prop.setProperty("javax.sip.STACK_NAME", "100");
            prop.setProperty("javax.sip.IP_ADDRESS", ip);
            prop.setProperty("javax.sip.OUTBOUND_PROXY", ip + ":" + port + "/udp");
            prop.setProperty("javax.sip.HEADER_EXTENSIONS", "Supported");

            SipFactory sipFactory = SipFactory.getInstance();
            //sipFactory.setPathName("gov.nist");

            SipStack sipStack = sipFactory.createSipStack(prop);
            HeaderFactory headerFactory = sipFactory.createHeaderFactory();
            AddressFactory addressFactory = sipFactory.createAddressFactory();
            MessageFactory messageFactory = sipFactory.createMessageFactory();
            ListeningPoint listeningPoint_udp = sipStack.createListeningPoint(5061, "udp");
            SipProvider sipProvider = sipStack.createSipProvider(listeningPoint_udp);
            ClientListener listener = new ClientListener(addressFactory, headerFactory, messageFactory, sipProvider);
            sipProvider.addSipListener(listener);
            //requestURI
            SipURI requestSipURI = addressFactory.createSipURI(username, ip + ":" + port);
            requestSipURI.setTransportParam("udp");
            SipURI localUrl = addressFactory.createSipURI(username, ip + ":" + port);
            SipURI serverUrl = addressFactory.createSipURI(username, ip + ":" + port);
            //from
            FromHeader fromHeader = headerFactory.createFromHeader(addressFactory.createAddress(localUrl), "caller");
            //to
            ToHeader toHeader = headerFactory.createToHeader(addressFactory.createAddress(serverUrl), null);
            //via
            ViaHeader viaHeader = headerFactory.createViaHeader(ip, port, "udp", "branchingbranching");
            //List
            List<ViaHeader> viaHeaderList = new ArrayList<ViaHeader>();
            viaHeaderList.add(viaHeader);
            //callid,cseq,maxforwards
            CallIdHeader callIdHeader = sipProvider.getNewCallId();
            CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(1L, Request.INVITE);
            MaxForwardsHeader maxForwardsHeader = headerFactory.createMaxForwardsHeader(70);
            Request request = messageFactory.createRequest(requestSipURI, Request.INVITE, callIdHeader, cSeqHeader,
                    fromHeader, toHeader, viaHeaderList, maxForwardsHeader);
            //contact
            SipURI contactURI = addressFactory.createSipURI("100", ip + ":" + port);
            contactURI.setPort(port);
            Address contactAddress = addressFactory.createAddress(contactURI);
            contactAddress.setDisplayName("100");
            ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress);
            request.addHeader(contactHeader);
            // expires
            ExpiresHeader expiresHeader = headerFactory.createExpiresHeader(3600);
            request.addHeader(expiresHeader);
            sipProvider.sendRequest(request);
        } catch (Exception ex) {
            System.out.println(ex);
        }


    }
}
class ClientListener implements SipListener {
    private AddressFactory addressFactory;

    private HeaderFactory headerFactory;

    private MessageFactory messageFactory;

    private SipProvider sipProvider;

    public ClientListener(AddressFactory addressFactory, HeaderFactory headerFactory, MessageFactory messageFactory,
                          SipProvider sipProvider) {
        super();
        this.addressFactory = addressFactory;
        this.headerFactory = headerFactory;
        this.messageFactory = messageFactory;
        this.sipProvider = sipProvider;
    }

    @Override
    public void processRequest(RequestEvent requestEvent) {
        System.out.println("processRequest执行");
        Request request = requestEvent.getRequest();
        if(null == request) {
            System.out.println("requestEvent.getRequest() is null.");
            return ;
        }

        System.out.println("request内容是\n"+request);
    }

    @Override
    public void processResponse(ResponseEvent responseEvent) {
        System.out.println("processResponse执行");
        Response response = responseEvent.getResponse();
        if(null == response) {
            System.out.println("response is null.");
            return ;
        }
        System.out.println("返回码:"+response.getStatusCode());
        System.out.println("返回的数据 :"+response);
    }

    @Override
    public void processTimeout(TimeoutEvent timeoutEvent) {

    }

    @Override
    public void processIOException(IOExceptionEvent ioExceptionEvent) {

    }

    @Override
    public void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) {
        System.out.println("processTransactionTerminated执行");
    }

    @Override
    public void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) {
        System.out.println("processDialogTerminated执行");
    }
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐