JAIN-SIP 1.2 для Android: отсутствует свойство javax.sip.STACK_NAME

Я пытаюсь запустить JAIN-SIP Stack на Android-устройстве (4.0.2). Мне удалось перепаковать необходимые jar-файлы (jain-sip-api-1.2-src.jar, jain-sip-src-1.2.1111.jar, concurrent.jar, log4j-1.2.8.jar).

Это мой файл build.xml, который я использовал:

    <!-- Converts this project's .class files into .dex files -->
  <target name="-jarjar" depends="-compile"> 
        <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
                 classpath="buildtools/jarjar-1.4.jar"/>
        <jarjar jarfile="${out.absolute.dir}/JainSipApi1.2_re.jar">
            <zipgroupfileset dir="mylib" includes="jain-sip-api-1.2-src.jar" />
            <rule pattern="javax.sip.**" result="sipper.sip.@1"/>
        </jarjar>
         <jarjar jarfile="${out.absolute.dir}/JainSipRi1.2_re.jar">
            <zipgroupfileset dir="mylib" includes="jain-sip-src-1.2.1111.jar" />
            <rule pattern="gov.nist.**" result="sipper.nist.@1"/>
        </jarjar>
         <jarjar jarfile="${out.absolute.dir}/concurrent_re.jar">
            <zipgroupfileset dir="mylib" includes="concurrent.jar" />
            <rule pattern="EDU.**" result="sipper.EDU.@1"/>
        </jarjar>
         <jarjar jarfile="${out.absolute.dir}/log4j-1.2.8_re.jar">
            <zipgroupfileset dir="mylib" includes="log4j-1.2.8.jar" />
            <rule pattern="org.apache.log4j.**" result="sipper.org.apache.log4j.@1"/>
        </jarjar>
     </target>

И это пример кода, где я попытался протестировать переупакованный файл в среде без Android:

import sipper.sip.SipFactory;
...
sipFactory = SipFactory.getInstance();

sipFactory.setPathName("sipper.nist");
Properties properties = new Properties();
properties.setProperty("javax.sip.STACK_NAME", "Sipper");
properties.setProperty("javax.sip.IP_ADDRESS", "127.0.0.1");

sipStack = sipFactory.createSipStack(properties);

При попытке запустить этот код я получил следующую ошибку:

 Problem initializing the SIP stack.

sipper.sip.PeerUnavailableException: Missing javax.sip.STACK_NAME property
    at sipper.sip.SipFactory.createSipStack(SipFactory.java:144)
    at SipLayer.<init>(SipLayer.java:86)
    at SipperClient.main(SipperClient.java:51)

Насколько я понял, я только что изменил название пакетов, но кажется, что это не работает для "interna" некоторых пакетов. Вот почему я заглянул в источник и увидел там несколько жестко закодированных строк:

if (name == null ) throw new PeerUnavailableException("Missing javax.sip.STACK_NAME property");

Теперь у меня вопрос, есть ли подходящие способы / решения, чтобы JAIN-SIP под Android работал?

Заранее спасибо за помощь:-)

Даниил

2 ответа

Теперь есть поддерживаемый порт Android JAIN SIP, созданный людьми, написавшими большую часть оригинального стека JAIN SIP:

http://www.telestax.com/jain-sip-stack-for-android/

Я только что увидел этот пост и столкнулся с той же проблемой.

Через несколько минут я успешно перенес стек jain sip на Nexus 7 Android 4.1.

Основной причиной вашей проблемы является имя пакета "Jar". Поскольку Android не поддерживает импорт библиотек из имени пакета "javax.*", Первое задание по переносу jsip на платформу Android состоит в изменении имени пакета импорта.

И вы изменили одно из имен пакетов javax.sip на sipper.sip с помощью следующего сценария.

<rule pattern="javax.sip.**" result="sipper.sip.@1"/>

Это заставит jsip создать исключение, которое вы только что упомянули выше.

Пожалуйста, сначала проверьте полный исходный код по этой ссылке (строки 551~552). Вы увидите следующий код.

String name = configurationProperties.getProperty("javax.sip.STACK_NAME");

Так что jsip просто находит свойство, чтобы получить имя стека sip. И наконец, ответ на этот вопрос. Пожалуйста, добавьте этот код в ваше приложение jsip.

Properties properties = new Properties();
properties.setProperty("sipper.sip.STACK_NAME", "stack");

Надеюсь, что это может помочь вам и зрителю из Интернета!

Другие вопросы по тегам