BlueCove Client Doesn't Recognize PyBlueZ Service - bluetooth

I have a bluetooth server running on my Ubuntu desktop written using PyBlueZ. That server is advertising a certain service via UUID. I have tested this server thoroughly using a client I also wrote with PyBlueZ.
Now I am attempting to implement a Java client using BlueCove. My BlueCove client can successfully locate my desktop (I checked by printing out the "user friendly name"). However, when I do a service search on my desktop for the advertised UUID, no services are found. I do not get an error or anything, I simply do not get any callbacks for services discovered.
Is there anything unusual that might be going on when connecting these two systems? The UUIDs are identical, although I have noticed that the PyBlueZ format asks for dashes "-" in the UUID, whereas BlueCove expects one continuous string of hex digits. I assume this is a purely presentational issue.
Finally, in an unrelated matter, are there any BlueCove communities out there? I have been coming up with an extreme shortage of resources to find answers to my BlueCove questions...

The mistake I made was that I did not realize searchServices() was an asynchronous method which required as much time as device discovery to execute. I was not sleep()'ing to give it a chance to find services.
Now that I'm giving searchServices() time to complete, it is at least invoking the serviceDiscovered callback.

Related

Issues Getting Started with Restcomm

I've been trying to get started with programming with Restcomm for a few weeks now, and I'm having trouble figuring what I need in order to get myself set up with all of the services.
So far, I have gotten myself situated with the Restcomm software via the AWS Marketplace; I am able to log into the software, but have failed to register a phone number yet. Whenever I select a number from the page by clicking "Register Number," a message comes up saying that registration "failed" without any additional information.
Additionally, I have downloaded and unzipped the folders for Mobicents (which I have not read much about the use of on my desktop yet) and the Telscale USSD Gateway (which I have read most of the background documentation for, but am yet to get in motion with because of my inability to utilize Restcomm).
I have really been trying to make sense of all of these pieces on my own, but I'm at a point of frustration. Could I get some guidance just walking me through what I need in order to get started with using Restcomm and having functions through telephones correspond with a simple database?
Thanks!
If you have been able to log into Restcomm AMI, you should be able to use the pre-packaged demo apps. Here is the documentation explaining how to test the demo apps. http://docs.telestax.com/restcomm-testing-default-demos/

VoIP Integration in App & Web

I have a very general question on how to implement VoIP for our current mobile & Web App. (we have an Android+iOS App and a Web Application based on AngularJS/NodeJS).
What we want to achieve
In the first step we want to achieve inter Application Voice and Video Calls. Later on we might expand into outbound calls into the normal telephone network. But this post is mainly for getting info on how to implement only our first step.
general thoughts
We had some experiences with Asterisk before which turned out to be far from easy. So for this project we wanted to get some feedback before actually implementing anything.
thoughts on technology
At first I thought it might be a good idea to use WebRTC, but since it's only supported on Chrome, FF and Opera for the moment and pretty much is unsupported for native mobile Apps we think that WebRTC is probably out of the picture for now. (or do you think otherwise?)
After searching the web a bit more we found this: http://www.webrtc.org/native-code
Has anyone experience with this libs? It seems to us, that this could be the best solution for a modern voip solution (and also would allow us to skip the asterisk server)
The second idea would be to setup an Asterisk Server for ourselves. Every time a user logs into the App we would connect him as a SIP Client to the asterisk. If one user calls the other one we think we should be able to make the call for example with the node package Asterisk Manager API (https://github.com/pipobscure/NodeJS-AsteriskManager).
The third idea would be to use a SIP Provider, but at the moment I'm not sure if that's really the best idea.
Since we're no VoIP experts, are there any other possibilities for VoIP integration into our apps?
Any thoughts on that subject would be very appreciated! Thank you!
The main factor is the network configuration that you app will be working with. Given you're using mobile clients and web apps it's almost certain that you're using the internet and also likely that you'll have 3G and 4G mobile networks in the mix (3G/4G cause a lot more problems for VoIP than WiFi).
Given the above assumption holds the biggest challenge your app will have is establishing media (audio and/or video) connections between mobile clients which are behind different NATs and in a lot of cases multiple NATs. There is almost no chance you'd be able to get by without a server here. The server will be needed to act as a relay point for the media streams for the mobile clients. You will use the RTP protocol for the media and working out how to get it reliably from client A to client B is your biggest obstacle. The signalling side - whether it be SIP, web sockets or something else - will be secondary (note both SIP and WebRTC use RTP to carry the media).
If I were in your shoes the steps I'd take would be:
Install and try out some softphones (blink, bria, zoiper et al) on your own mobile devices, find a SIP provider that supports video calls and get some experience with calls. It may not be the experience you anticipated...
Once you are comfortable with the softphone experience you would then need to make two decisions:
Whether to deploy your own server or use an existing provider,
Whether to write your own client, find an existing one or something in between.
I can answer the deploy your own server question. You don't want to do that unless the VoIP part of your app is going to be something you charge for and make a good margin off. Running a VoIP server and all the security and network considerations that go along with it is a full time job. It may start out being easy but once a few customers start connecting and the fraudsters come along it will take on a life of its own. In the decade I've been messing around with SIP I'd estimate 75% of providers have gone out of business and it was their full time job.
Besides all that I'd be surprised if there wasn't a SIP provider that suited your needs. These days there are highly sophisticated services available that led you control every aspect of your call flow with your own code (anveo, tropo, twilio) right down to free services (sip2sip, sipbroker) that may be all you need to get started.
For the client software there are various SIP SDK's you'll be able to leverage (pjsip).

Is it possible to send skype chat messages from a linux server without X?

I'm willing to send skype messages (each to a single user) from a linux server without GUI using PHP or node.js. It seems like a lot of information online is out of date since SkypeKit is no longer working for Skype and projects like this are broken.
According to the docs here Skype URIs are now the preferred way to send chat messages programmatically, but that same page states a copy of Skype must be running on the same server. However I don't have X server installed so I can't install normal Skype client.
So is it possible to send messages without Skype, or is it possible to install Skype and use on a server with command line only, or I must run another dedicated server with GUI to do this?
You want to send messages from your backend. Your linked reference (and proposed URI solution) is for frontends. This does not fit.
Meanwhile there does not seem to exist a server API for Skype.
I cannot think of any fancy solution to your problem. You could try to set up a Jabber server (which provides an API) with a Skype bridge, but I am not sure if this try will succeed. Skype was always buttoned up concerning their protocol and usage by other clients. I doubt this has gotten any better since the acquisition by Microsoft. This acquisition might have also lead to changes in the protocol, which will run all previous bridge solutions useless. (Maybe instead an MSN bridge works...)
To sum it up: I hardly believe you will be able to create any solution at all, and if there even exists one, the necessary work will likely outrun the result you want to achieve.
Unfortunately Skype doesn't support running headless, one option is to run a virtual X server (like xvfb) on that host, and run skype under it.

Validating client binaries in client/server handshake

I am building a client-side program that connects to a server. This client-side program needs to have the source code available to the users as part of the licencing (not an option). However, I need to ensure that when a user connects to the server with that client-side program, it's running with the original code and hasn't been altered and re-compiled.
Is there any way to check during connection to the server that they're using an unaltered version of the program?
No, there's really no way to do that.
You're basically encountering the "Trusted Client" problem. The client code runs on the user's PC, and the user has full control over that PC. He can change the bytes of the program on disk, or even in memory. If you were to try to perform a hash or checksum against the code, he could simply change the code that did that verification and make it return "unmodified".
You could try to make things a little harder on a malicious user but there's no practical way to achieve what you're hoping.
What you have described is a issue that the video game industry has been fighting for the last decade and a half. In short, how to prevent the user from modifying the client (in their case, generally to prevent cheating, though also for copyright reasons). If that effort has taught us anything, it's that preventing modifications to the client is a constant arms race that you will never decisively win. In light of that, don't even try.
Follow the standard client-server assumption that the client is in the hands of the enemy and cannot be trusted. Build your server side defensively based on that assumption and you'll be alright.
It's very very difficult and probably not worth it. But if you are interested in pursuing it you'd have to develop something that has been code signed and monitored by the Windows kernal.
A couple topics that will orient you to the scope of the problem:
Protected media path
Driver signing
Both media devices and device drivers are digitally signed by the manufacturer and continuously monitored by Windows. If anything goes out of whack, it gets shut down (that'ts the technical term). Seems very daunting. And I don't know if the technology is available for desktop software that isn't a device driver and isn't related to DRM.
Good luck!

IBM iSeries Frontend Development

I'm sure many of you are familiar with the IBM i5 series emulator (looks like this poop)
My company uses this religiously and there is no Biz logic in it so anytime somone in our finance dpt makes a human error it accepts it and adds it to the database. Not to mention its ugly, hard to use, not intuitive, etc....
I would like to create a frontend for this interface so that we can control the logic before its submitted to the system (we dont control the system itself) so in effect I need to make my own emulator app.
However I cant seem to find any information on how to interface with the i series, namely login, send commands, and view or gather data from the screens it would normally send back.
Any suggestions?
The problem is not the iSeries but the software package your company is running on it.
There ARE advantages to use green screens: it's fast and it's almost unbeatable at data entry, provided you get used to it.
But to answer your question, the iSeries is a J2EE enabled machine: a HTTP server comes installed and depending of the version of the iSeries, WebSphere might be already installed, or are entitled to install it. Then you can use JT400, which is the java toolkit for the os400 containing the jdbc drivers to connect the database and the necessary classes for calling programs.
If you prefer php, there is a flavor of the Zend framework made to work on the iSeries but I never tried it.
I'd recommend that you take a look at both the Attachmate Verastream Host Integrator (VHI) and IBM's Host Access Transformation Services (HATS) products. They effectively just screen scrape the green screen terminals to allow you to pull and push data and provide macro recording and editing tools to automate the process. App integration can be achieved via web services or html/jsp/servlet programming (plus .Net for VHI and EJB's for HATS). They do come with enterprise pricing however which may be an obstacle for some. They do have free trial offerings for evaluation purposes to help determine if they are an appropriate solution to your problem.
What software packages are they using? Most programs that I use in the 5250 emulator has some business logic that error checks the data before adding it to the database. Can you get us some more information so we can direct you in a better direction.
There are vendors that sell products that screen-scrape the 5250 data stream and produces a web front-end. Or you can write your own front-end in the language of your choice and just do SQL calls to the database.
THere's got to be some source code. Start by looking at the menu and menu option your users are accessing and figure that's running behind them.
Use command STRPDM to look for source code - look in different libraries (they are like folders)
You might have source code in a "member" called something like xxxMNUSRC xxxRPGSRC (rpg program source) or xxxCLSRC (cl programs), xxxDDSSRC (display/screen source, physical/logical file source)
Objects a "compiled" objects such as files (tables), screens, priter files (reports)
Stay away from Qxxx and #xxx libraries - those are system libraries.
http://systeminetwork.com/ is a good resource for iSeries related questions.

Resources