Please login or register to access secure site features.

Note: By continuing to use DevConnect Program Services you agree to our latest Registered Member Terms.

Sign in using DevConnect ID

Forgot password?

Trouble logging in?

Submit a ticket for Registration Support.

I have an SSO ID

?
sign in

Don't have a DevConnect or SSO ID ?

Create a DevConnect account or join the program.

register now
^
Messages posted by: SteVio
Forum Index » Profile for SteVio » Messages posted by SteVio
Message
Hi Martin,

Thanks a lot!

With your help, I was able to convert the code to Java and JTAPI (the interessing part with the bytes are almost the same code ;) ) and also test it successfully.

If anyone needs the example in java and with jtapi:

LucentV11Address address = (LucentV11Address) lucentV11Provider.getAddress("CalleeHere");
        LucentV5Terminal terminal = (LucentV5Terminal) lucentV11Provider.getTerminal("CalleeHere");
        LucentV15Call call = (LucentV15Call) lucentV11Provider.createCall();

        byte presentation = 1;
        byte numberType = 0x21;
        byte pd = 0x10;
        String newNumber = "NewNumberHere";
        byte[] uui = new byte[]{0x31, 0x32, 0x33};

        int numberLen = newNumber.length();
        int uuiLen = uui.length;
        int byteLen = 7 + numberLen + uuiLen;
        int ieLen = 5 + numberLen + uuiLen;
        int numSectionLen = 2 + numberLen;

        byte[] ba = new byte[byteLen];
        int count = 0;
        ba[count++] = 0x7E;
        ba[count++] = (byte) ieLen;
        ba[count++] = pd;
        ba[count++] = (byte) numSectionLen;
        ba[count++] = presentation;
        ba[count++] = numberType;

        for (int i = 0; i < numberLen; i++) {
            ba[count++] = (byte) newNumber.charAt(i);
        }

        ba[count++] = (byte) uuiLen;
        for (int i = 0; i < uuiLen; i++) {
            ba[count++] = uui[i];
        }
        UserToUserInfo userToUserInfo = new UserToUserInfo(ba);

        call.connect(terminal, address, "calledNumberHere", false, userToUserInfo);


Regards

Stefan
I test different UUI's as string and byte with the help of the faq respectively that what I am understand from that, but with no success.

Could you give me a working example for the Jtapi or DMCC SDK?

Stefan
Hi Martin,

thanks for the answer.

The special application is activ and also the SM Patch descripted in:

https://support.avaya.com/ext/index?page=content&id=SOLN305982

is installed.

But it does not work. We see the UUI in the sip trace but it is not used to set the "from" field in SIP.

With our old ISDN trunk something like this:


LucentV11Address address = (LucentV11Address) provider.getAddress("xxx");
LucentV5Terminal terminal = (LucentV5Terminal) provider.getTerminal("xxx");
UserToUserInfo uui = new UserToUserInfo("*!xxxxxx");
LucentV7Call call = (LucentV7Call) provider.createCall();
call.connect(terminal, address, "yyy", false, uui);



Works.

Sould this also works with SIP?


Regards

Stefan
Hello All,

I have a question regarding the manipulation of the caller number with outgoing calls.
With our old ISDN trunk it was possible with an uui starting with "*!" followed by the number send to the callee.

I test the same code with our new SIP Trunk and it does not work.

Is this feature not supported with SIP?

Regards

Stefan
Thanks for the information. I already thought of something like that. We will discuss the next steps with the customer and compare the possibilities he has.

Thank you and greetings

Stefan
Hi,

Thanks for the fast resposne. I have looked at some documents. But although it is listed under Breeze, I don't find anything in the documents about a SnapIn for Breeze.

Only Avaya Mobile Video Media Broker and Avaya Mobile Video Gateway would be added as new servers.

Is this correct or are the documents out of date?
Hello everyone,

I have a question about WebRTC. The customer wants to establish a video connection to the end customer if required.

There is always an audio connection between employees and the end customer via telephone (mobile phone or landline), which must also remain during the video connection.

A softphone based on the BreezeClientSDK (latest version) is used as the endpoint for the employees.

The customer must not have to download any further software.

We have the following ideas for this:

1) The end customer calls up a website and connects via WebRTC to the employee in the current conversation. The employee accepts the video call directly on the softphone. Video reception from the customer's browser and audio remains over the telephone.

2) The employee goes to a website and generates a PIN. The end customer goes to a website and enters the PIN and the video connection is established directly browser to browser.

Can both or one of the described use-cases be implemented with the WebRTC SnapIn?

Is the WebRTC SnapIn at all necessary for the 2nd case or can a separate SnapIn be created, which controls the signaling between the clients via websockets and the SBC for STUN / TURN.


Greetings

Stefan
Yes its the management address.
Hello,

Thanks for the answer. The Breeze instances are registered in the DNS server and can also be resolved by the SMGR.

image

Does the DNS have to contain the management address, the SIP entity IP address or both?

I can not edit the /etc/hosts file because I no longer have root privileges with System Manager 7.1.2.0.

greetings

Stefan
Hello,

I have 2 problems setting up our Breeze instances.

First, I have a problem with the HelloWorld SnapIn.

The SnapIn works only partially. I call from my extension 139 each:

1. Our AAC with number 777

For this call, the Hello World SnapIn responds and changes the display name.

Here is a picture of the TraceSM from SessionManager:

image

Here is a picture of TraceCE vom Breeze:

image

2. Another SIP participant 131

The snap-in does not respond to this call

Here is a picture of the TraceSM from SessionManager:

image

Here is a picture of TraceCE vom Breeze:

image

The Breeze instance is configured as an application and application sequence in the SessionManager with the pattern 1xx.
The service profile in Breeze is configured with the pattern 1xx.

The user (139)has as Explide Sequence our CallManager.

Second problem with my Breeze installation is that in the cluster overview the data-replication is
displayed as faulty, even though in the replication overview everything is displayed is green.

image

image

Has anybody a hint for me?

Regards

Stefan
Could you tell me how you solved this?

I did not use reflection so much.
I had a similar problem with a Spring-Boot application. I was only able to fix the problem using an older maven plugin from Spring Boot (1.3.8.RELEASE). From Intellji I could always start the application without any problems. Only the jar created by Spring could no longer be executed or the DMCC connection did not work.

With Spring-Boot it works with Tomcat as long I package it with the old maven plugin. The xml files are located in the resources folder.

Stefan
I change my code to use one listener for each monitor.


The code that you posted seems to assume that there is only one MonitorID associated with a listener object.


As I have already written, behind each listener is a list of Strings which can theoretically have several monitorID's.

I do not know where you got the source code


I get the source code via debugging with IntelliJ to see what happends with my listeners.

assuming it is from the DMCC SDK

It is from the package com.avaya.mvap.svcproxy.MonitoringServicesProxy in proxy.jar Version 7.0.0.0.0.288


However I could find a solution to work around the problem. Maybe this helps other to make not the same mistake.


Thanks for support.

Stefan
Hi Martin,

I can not imagine that.

1. Each monitor is stored in a Map<EventListener, List ><String>.
Why is a list of strings behind each EventListener instance? The strings store the CrossRefIds. If only one monitor per instance is allowed, then a map <EventListener, String> would be enough.

2. Why does call the addCallControlListener function not override the existing monitor?
If I call this function two times from the same listener instances there are also 2 CrossRefIds in the list. One for each call.

3. If I remove the monitor points in the same sequence as I've added it works.

4. Why I have to parse the connectionId into the removeCallControlListener when the parameter is not used?


public void removeCallControlListener(ConnectionID connectionId, CallControlListener listener) throws CstaException {
if (connectionId == null) {
throw new CstaException("ConnectionID argument is null, listener not removed");
} else if (listener == null) {
throw new CstaException("CallControlListener argument is null, listener not removed");
} else {
this.removeEventListener(listener, this.callControlListenerMap);
}
}


I will customize the way to use the listener to make it Work with this.

Is the forum read by someone who is also involved in the implementation of the Java DMCC API?

Regards

Stefan
Hello,

I have a new problem with the DMCC - Java API 7.0.0.0.0.288.

The following Senario:

A calls B
B parks A
Our controller sets a monitor for this parked call.

Features.getMonitoringServices().AddCallControlListener(callId, this);

CallId = ConnectionID for the parked call from A

Then

C calls B
B parks C
Our controller sets a monitor for this parked call.

Features.getMonitoringServices().AddCallControlListener(callId, this);

CallId = ConnectionID for the parked call from C

C finish the call while parked
CallCleared is called.
The controller removes the monitor for this call.
Features.getMonitoringServices().RemoveCallControlListener(event.getClearedCall(), this);


A finish the call while parked
CallCleared is not called

In debug I see that the class com.avaya.mvap.svcproxy.MonitoringServicesProxy handles this call.

In the called function, the ConnectionId is required but only checked to null and then not considered further.

It only calls the removeEventListener function.

protected void removeEventListener(EventListener listener, Map<EventListener, List><String>> listenerMap) throws CstaException {
        if (listener == null) {
            throw new IllegalArgumentException("The listener cannot be null");
        } else {
            List<String> list = (List)listenerMap.get(listener);
            if (list != null && list.size() != 0) {
                if (list.size() == 1) {
                    listenerMap.remove(listener);
                }

                String monitor = (String)list.remove(0); //This does not remove the correct element.
                EventListener listener2 = (EventListener)this.monitorMap.remove(monitor);
                if (!listener.equals(listener2)) {
                    log.warning("Expected " + listener + " found " + listener2);
                }

                MonitorStop request = MonitorFilters.getMonitorStop(monitor);
                this.marshallRequest(request);
                if (log.isLoggable(Level.FINE)) {
                    log.fine("Removed " + listener + ", monitor=" + monitor);
                }

            } else {
                if (log.isLoggable(Level.FINE)) {
                    log.fine("Can't find listener " + listener + " to remove");
                }

            }
        }
}


There is only one instance of the controller that monitors the parked calls. Therefore a list with several monitors is found in the listenerMap.

List<String> list = (List)listenerMap.get(listener);


Listener here is our controller instance

However, it is not checked which call should not be monitored anymore. It allways removes the first entry of the given monitor instance, not the monitor for the requested call.

String monitor = (String)list.remove(0);


The removed element is here the monitor for the call from A instead of C.

If A finish the call before C it works.

Is this a bug in the API or do I use it wrong?


Greetings

Stefan
 
Forum Index » Profile for SteVio » Messages posted by SteVio
Go to: