JAIN-SIP注册

import gov.nist.javax.sip.SipStackExt;
import gov.nist.javax.sip.clientauthutils.AuthenticationHelper;
import gov.nist.javax.sip.clientauthutils.UserCredentials;
import gov.nist.javax.sip.stack.NioMessageProcessorFactory;

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.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;


public class RegisterTest implements SipListener {

    private  SipFactory sipFactory=null;
    private  SipStack sipStack=null;
    private HeaderFactory headerFactory=null;
    private  SipProvider sipProvider=null;
    private AddressFactory addressFactory=null;
    private MessageFactory messageFactory=null;
    private  ClientTransaction clientTransaction=null;

    private  String username=null;
    private  String localIP;
    private  int localPort;
    private  Long cesq=1L;
    public static void main(String[] args) throws Exception {
        RegisterTest registerTest=new RegisterTest("10.74.152.214",8090);
        registerTest.sendRegister();
    }
    public  RegisterTest(String localIP,int localPort )throws  Exception{
        //setUsername(username);
        sipFactory = SipFactory.getInstance();
        sipFactory.setPathName("gov.nist");
        Properties properties = new Properties();
        properties.setProperty("javax.sip.STACK_NAME", "RegisterTest");
        properties.setProperty("javax.sip.IP_ADDRESS", localIP);

        // DEBUGGING: Information will go to files
        // textclient.log and textclientdebug.log
        properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "32");
        properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "textclient.txt");
        properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "textclientdebug.log");

        sipStack = sipFactory.createSipStack(properties);
        headerFactory = sipFactory.createHeaderFactory();
        addressFactory = sipFactory.createAddressFactory();
        messageFactory = sipFactory.createMessageFactory();

        ListeningPoint udp = sipStack.createListeningPoint(localIP,localPort, "udp");

        sipProvider = sipStack.createSipProvider(udp);
        sipProvider.addSipListener(this);
    }


    public void sendRegister() throws SipException, ParseException, InvalidArgumentException {
        String username="111";
        String serverIP="100.100.121.245";

        SipURI fromAddress = addressFactory.createSipURI(username,serverIP);
        Address fromNameAddress = addressFactory.createAddress(fromAddress);
        fromNameAddress.setDisplayName("111");
        FromHeader fromHeader = headerFactory.createFromHeader(fromNameAddress,"8u5pX9jr9fZkN-2fGCe1gJsIXQw6lyEI");

        SipURI toSip=addressFactory.createSipURI(username,serverIP);
        Address toAddress=addressFactory.createAddress(toSip);
        ToHeader toHeader=headerFactory.createToHeader(toAddress,null);

        // create Request URI
        SipURI requestURI = addressFactory.createSipURI(username, serverIP);


        // Create ViaHeaders
        List<ViaHeader> viaHeaders = new ArrayList<>();
        ViaHeader viaHeader = headerFactory.createViaHeader("10.74.152.214",
                8090, "udp",
                "z9hG4bKPjpugnxlzkPZvDW2MFDvLBVCDe2JtXD1sa");
        // add via headers
        viaHeaders.add(viaHeader);

        // Create ContentTypeHeader
        ContentTypeHeader contentTypeHeader = headerFactory
                .createContentTypeHeader("application", "sdp");

        // Create a new CallId header
        CallIdHeader callIdHeader = sipProvider.getNewCallId();
        callIdHeader.setCallId("vVMzatGWEahXAaEpi4ZH-KEy7bx7JNBy");

        // Create a new Cseq header
        CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(cesq,Request.REGISTER);

        // Create a new MaxForwardsHeader
        MaxForwardsHeader maxForwards = headerFactory.createMaxForwardsHeader(70);

        // Create the request.
        Request request = messageFactory.createRequest(requestURI,
                Request.REGISTER, callIdHeader, cSeqHeader, fromHeader, toHeader,
                viaHeaders, maxForwards);

        ExpiresHeader expiresHeader=headerFactory.createExpiresHeader(300);
        request.addHeader(expiresHeader);

        AllowHeader allowHeader=headerFactory.createAllowHeader("PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS");
        request.addHeader(allowHeader);

        // Create the contact name address.
        SipURI contactURI = addressFactory.createSipURI("111", "10.74.152.214");
        contactURI.setPort(8090);
        Address contactAddress = addressFactory.createAddress(contactURI);
        ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress);
        request.addHeader(contactHeader);


        clientTransaction=sipProvider.getNewClientTransaction(request);
        clientTransaction.sendRequest();
        cesq++;
    }

    @Override
    public void processRequest(RequestEvent requestEvent) {
        System.out.println("RequestEvent "+requestEvent.getServerTransaction().getDialog());
    }

    @Override
    public void processResponse(ResponseEvent responseEvent) {
        ClientTransaction clientTransactionTmp = responseEvent.getClientTransaction();
        System.out.println("responseEvent.getResponse()" + responseEvent.getResponse()+"\n\n");
        Response response=responseEvent.getResponse();

        int  statusCode=response.getStatusCode();
        if (clientTransaction==null){
            System.out.println("clientTransaction is null");
            return;
        }
        if(statusCode == Response.UNAUTHORIZED || statusCode==Response.PROXY_AUTHENTICATION_REQUIRED){
            System.out.println(statusCode);
            AuthenticationHelper authenticationHelper =
                    ((SipStackExt) sipStack).getAuthenticationHelper(new AccountManagerImpl(), headerFactory);

            try {
                clientTransaction = authenticationHelper.handleChallenge(response, clientTransactionTmp, sipProvider, 5);
                clientTransaction.sendRequest();
            } catch (SipException e) {
                e.printStackTrace();
            }

        }
    }

    @Override
    public void processTimeout(TimeoutEvent timeoutEvent) {
        Transaction transaction;
        if (timeoutEvent.isServerTransaction()) {
            transaction = timeoutEvent.getServerTransaction();
        } else {
            transaction = timeoutEvent.getClientTransaction();
            System.out.println(timeoutEvent.getTimeout().getValue());


        }
        System.out.println("state = " + transaction.getState());
        System.out.println("dialog = " + transaction.getDialog());
        System.out.println("Transaction Time out");
    }

    @Override
    public void processIOException(IOExceptionEvent exceptionEvent) {
        System.out.println("Expcetion occured "+exceptionEvent.getPort());
    }

    @Override
    public void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) {
        if (transactionTerminatedEvent.isServerTransaction())
            System.out.println("Transaction terminated event recieved"
                    + transactionTerminatedEvent.getServerTransaction());
        else {
            System.out.println("Transaction terminated "
                    + transactionTerminatedEvent.getClientTransaction());
        }
    }

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




}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
JAIN-SIP-RI(Java API for Integrated Networks - Session Initiation Protocol Reference Implementation)是一个基于 Java 的开源 SIP(Session Initiation Protocol)协议的参考实现。它提供了一套 Java API,用于开发基于 SIP 的通信应用程序。 JAIN-SIP-RI 是 JAINJava API for Integrated Networks)项目的一部分,旨在为开发人员提供一个标准化的、可扩展的 SIP 协议栈来构建 VoIP(Voice over IP)和实时通信应用程序。它实现了 SIP 协议中的核心功能,如建立、修改和终止会话,以及处理 SIP 消息。 JAIN-SIP-RI 提供了一些关键的组件和功能,包括: 1. SIP 协议栈:JAIN-SIP-RI 实现了 SIP 协议的各个层级,包括请求和响应的解析、序列化、路由和事务管理等。 2. SIP 呼叫控制:JAIN-SIP-RI 提供了呼叫控制的功能,包括呼叫建立、呼叫转移、媒体协商等。 3. 事件和监听器:JAIN-SIP-RI 使用事件和监听器模型,可以通过注册监听器来处理 SIP 消息和状态变化。 4. 事务管理:JAIN-SIP-RI 支持事务管理,可以处理 SIP 请求和响应的事务性操作。 5. SDP(Session Description Protocol)支持:JAIN-SIP-RI 提供了对 SDP 协议的支持,用于描述会话中的媒体流和参数。 使用 JAIN-SIP-RI,开发人员可以构建基于 SIP 的应用程序,如 VoIP 客户端、呼叫中心应用程序、实时音视频通信应用程序等。它提供了一套标准化的 API,使开发人员能够更轻松地处理 SIP 协议和相关的通信功能。 您可以在 JAIN-SIP-RI 的官方网站(https://github.com/RestComm/jain-sip)上找到更多关于 JAIN-SIP-RI 的详细信息、文档和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值