PhoneRTC Signal and Turn servers Vs Asteriks server - cordova-plugins

REQUIREMENTS: I was looking at using PhoneRTC Cordova plugin to broadcast a message from an Android tablet to a speaker/microphone device, where both these devices are in a private network based on an Asteriks server.
So any message from tablet to speaker/microphone device must be routed through the Asteriks server.
QUESTION: The Cordova plugin 'PhoneRTC' requires a SIGNAL server as well as a TURN server. In my case there is only an Asteriks server, so what will be the SIGNAL server and TURN server in above sceanrio? Maybe the Asteriks server can act as both the SIGNAL and TURN server, but not sure.

The challenge is how you can change the PhoneRTC server for another one.
In my case, I would like to use PhoneRTC but I would like to use easyRTC server instead of PhoneRTC server.
Thanks

Related

Secure Signals between iOS and PC

I have a PC and an iOS device. the iOS device is using alljoyn 15.04 and the PC is using alljoyn 15.09. Both implement the same secure interface. We have secure signals as a part of this.
Our strategy includes joining a peer's session as soon as we discover them, then forcing authentication by calling a method on the remote device - using auth mechamism: ALLJOYN_ECDHE_PSK
This all works great!
Now, I can send a secure signal just fine from one ios device from another.
I can also send a secure signal from the iOS device to the PC just fine.
The PC can send a secure signal to another PC, but it cannot send a secure signal to the iOS client
We've compared everything - session options, interface names/options, bus connection options, etc. and everything is the same. Then I found this error in the alljoyn log on the iOS side:
145.449 ****** ERROR ALLJOYN iodisp2_2 .../src/Message_Parse.cc:1078 | Failed to read message on :wYxt8HAP.73: ER_OS_ERROR
I have no idea what to do about this. Can someone help?
I was hoping to not run into any lower level bugs like this with alljoyn. Dang.
Thanks for any help!
This error can occur if you are trying to send a secure signal out on session 0 (sessionless) instead of a valid hosted session. This is because the other end cannot decrypt the signal with your group key for the session. If you are hosting the session then try sending the signal out on ajn::SESSION_ID_ALL_HOSTED and see if that works.

How can we validate sufficient network connectivity to Apple's APNS servers for MobileFirst 7.0?

We are working with IBM MobileFirst Platform 7.0 and are trying to send push notifications through the Apple APNS server. We are not using a SOCKS proxy.
As far as we know, we have opened the relevant ports through an F5 load balancer from the MFP server(s) to the internet:
gateway.sandbox.push.apple.com:2195
feedback.sandbox.push.apple.com:2196
gateway.push.apple.com:2195
feedback.push.apple.com:2196
However, we are still seeing tracing errors when sending push notifications of this form:
[10/22/15 9:43:01:362 CEST] 00000153 ApnsConnectio I com.ibm.pushworks.server.notification.apns.ApnsConnectionImpl sendMessage Failed to send message Message(Id=7; Token=XXX; Payload={"aps":{"alert":{"body":"Test body","action-loc-key":null}},"payload":"{\"id\":\"XXX\",\"title\":\"Test body\",\"tag\":\"Push.ALL\"}"})... trying again after delay
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:208)
at java.net.SocketInputStream.read(SocketInputStream.java:134)
at com.ibm.jsse2.a.a(a.java:260)
at com.ibm.jsse2.a.a(a.java:204)
at com.ibm.jsse2.aq.a(aq.java:684)
at com.ibm.jsse2.aq.h(aq.java:790)
at com.ibm.jsse2.aq.a(aq.java:371)
at com.ibm.jsse2.h.write(h.java:20)
at java.io.OutputStream.write(OutputStream.java:87)
at com.ibm.pushworks.server.notification.apns.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:302)
at com.ibm.pushworks.server.notification.apns.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:292)
(I have redacted the token and the Id).
I would theorise that the network connectivity is not set up quite correctly, but it is possible to telnet to each of the above addresses on the above ports from the MFP server, so on a superficial level, connectivity seems to be working.
Is there a way we can verify more deeply whether we have sufficient network connectivity to those servers to send push notifications, ideally independently of MobileFirst? I understand a persistent connection is required ("...The provider connects with APNs through a persistent and secure channel..."), and perhaps this is where things are not set up correctly.
My answer would be a continuation of the answer to your other push-related question: Is 1-courier.push.apple.com needed for IBM MobileFirst APNS notifications? What is it for?
Did you try to also allow access for 1-courier.push.apple.com:5223 and observed if things do start working now? I think you should allow it.

IBM Worklight Hybrid App

I Exported Project as an .apk file and installed in My Android Mobile. When i am Using My Company WIFI In My App i am able check the entered user and update password if exist.
when i am connected to Mobile Network its not working.
Ex:- MyServer HostName:192.168.0.16. In My router I Done Portforwarding for 192.168.0.16 and 10080.. My LouterSystem IP Ex:-122.169.78.182.
I am Using SQL Adaptors to connect database.
Iam Getting Following error run app using android emulator:
03-03 04:16:32.358: D/HttpPostRequestSender(1135): WLHybridRequestSender.run in WLHybridRequestSender.java:47 :: Sending request http://122.169.182.78:10800/Infraeasy/apps/services/api/DefaultPassword/android/query
03-03 04:16:32.608: I/Choreographer(1135): Skipped 34 frames! The application may be doing too much work on its main thread.
03-03 04:16:32.718: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(1135): WLNativeXHRPlugin$NativeXHRPostListener.onException in WLNativeXHRPlugin.java:154 :: onException
03-03 04:16:32.718: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(1135): org.apache.http.conn.HttpHostConnectException: Connection to http://122.169.182.78:10800 refused
As in your duplicate question: https://stackoverflow.com/questions/28803423/ibm-mobilrfirst-server-issue
The computer that you use to host the server, must be able to accept incoming connections from the public Internet, otherwise the application will not be able to connect to the server.
When the mobile phone and the server are in the same network, then the app is able to connect. Hence, you must verify that:
The server is able to accept connections from the public Internet
That there is no firewall blocking any ports and traffic
If you're getting any errors in LogCat (when you connect the device using a USB cable to your computer), tha would help debugging

XCode iDevice app - How to listen for message/request from server?

I have a project where I need to be able to send messages from a server running a web service to a specific iDevice. I have no idea how to do this, so any help is very appreciated.
The scenario: I have a web service which receives some message from an iDevice (could also be a Mac or PC, even an Android device). Depending on the content of this message I need to be able to send a message from the web service to another iDevice (I know the IP-address of the specific iDevice). I know how to use URLRequests to send a message from an iDevice to a server and collect the response from the server. In principle I could every 10 seconds send a request to the server asking if the server has any new messages to the sender (the iDevice sending the request), but I am pretty sure this is not the correct way to do it. Is there a way to have an iDevice listen for server communication on a specific port, so that the iDevice only does something active when it receives a message from the server to do something, e.g. display a message in the app listening for the server communication?
I guess I need to use something similar to the technology used for iMessage, but how is this done?
I am using XCode 4.6.2, iOS 6.1.
EDIT: Just to clarify my needs a bit more: The APNS seems to be TOO unreliable (at least that is what I have read in other threads regarding APN) as the web service in some cases can have the need for sending 2 distinct message to an iDevice within 1 minute (in some cases seconds), and as far as I have read in other threads this will simply not be possible because of how Apple's server handles ASPNS.
The app i am developing only needs to receive messages from the server when the app is active - is there any way, not using APNs, to do this, e.g. making the app listen for communication on a specific port?
Your scenario seems pretty similar to APPLE PUSH NOTIFICATIONs (APNs).
Ideally your server side should write a code in such a way that if there is any change on server side & need to be informed to all associated devices.
Then your server should post notification Apple server which will then send a notification to all the associated devices.
Refer this link
You already have but can use this code to identify the iOS/Mac deivce
NSString *identifierString = [[NSUserDefaults standardUserDefaults] objectForKey:#"myID"];
if (!identifierString) {
CFUUIDRef identifier = CFUUIDCreate(NULL);
identifierString = (NSString*)CFUUIDCreateString(NULL, identifier);
[[NSUserDefaults standardUserDefaults] setObject:identifierString forKey:#"myID"];
}
NSLog(#"%#",identifierString);
this code works till the lifetime of the app only.
After some search I have decided not to use the APNS, because it seems like people are having all sort of experience with it. I cannot use APNS because my project needs 100 % reliability and instant communication with the server.
I have decided to use tcp communication since my project only will be used in a local network. This will obviously mean more power consumption on the iDevices, but reliability is more crucial to the project.

How do I get an Indy HTTP Server in Delphi to receive connections in an iOS application?

I am writing a multi-platform application that is a sort of 'proxy', designed to field HTTP requests and pass some of them to a remote server and respond to others directly. So it acts as both an HTTP client and an HTTP server.
I have been using the Indy 10 components in both Delphi and Lazarus, and they work well on desktop platforms. I have ported the project successfully to Windows, Linux, and MacOS using Lazarus. Now I am attempting to do the same to iOS, using Delphi XE4. I am currently running the project in the iOS Simulator on a Mac running OSX 10.8.2; later I will be targeting an iPad device.
But I'm finding that I can't get the TIdHTTPServer component to create a connection to an incoming request on iOS. I bind the server to an IP address and port and activate it; this starts the listener thread. But when I try to send a GET request to the server it raises the exception EIdIPVersionUnsupported, with the message "The requested IPVersion / Address family is not supported." This error happens whether I try to route the GET request from within the application itself, or externally from a browser running on another machine.
I normally bind the HTTP Server to the localhost IP address, as the proxy is intended to run as a background process fielding requests from the browser running in the foreground. For the external browser test, I bound it instead to the Mac's own IP address.
The majority of Indy components, including TIdHTTPServer, work exactly the same way in iOS as they do on other platforms. The only thing that changed in Indy to support iOS was implementing the low-level socket API function calls (via the TIdStackVCLPosix class), and updating Indy's internal coding to support the new Embarcadero mobile compilers (ARC, etc).
TIdHTTPServer should work on iOS, as long as it has permissions to open a TCP/IP listening socket. An EIdIPVersionUnsupported exception means that a low-level socket API call was attempted using an IP version that TIdStackVCLPosix does not support for that particular API call. All of the TIdStackVCLPosix methods support IPv4 and IPv6. So, without seeing the actual stack trace leading up to the exception, I can only guess that maybe Posix's accept() function is reporting that the connected client is using a socket address type other than IPv4 or IPv6.
With that said, I did just fix a minor bug in TIdStackVCLPosix.Accept() where it was not initializing the size of its address storage before calling POSIX's accept() function, so that may or may not be a contributing factor. Grab the latest Indy 10 SVN release (which has other bug fixes that did not make it into the XE4 release) and try again.

Resources