DLNA vs (RTSP & UPNP & Webservices) for a media server implementation - web-services

Hello I'm a little confused about DLNA which seems a very complex thing
against one solution like putting together RTSP & UPNP & Webservices( for implementing a Content directory service)...why DLNA is still in use?

DLNA is not a technology, it's a set of guidelines, certification infrastructure and a test suite for UPnP A/V products. So DLNA is in use because manufacturers want to certify that e.g. their ContentDirectory service works like it should. It is in a way an admission that the UPnP spec and test suite were woefully inadequate for ensuring UPnP A/V interoperability.

Related

TDD on a client-server application

I’m having problem to grasp how to do TDD when building a client-server system.
The simple katas (Fizzbuzz etc) are easy to understand, but when my client needs to send the server a file using TCP sockets and get a response back from the server I’m getting confused regarding how to test that.
I had a project building a file-sync system. The client will monitor a folder and every time a change happens (new file, file deletion etc.) the server should update automatically.
The client can have many devices, for example I can have a copy of the folder in two different computers and they all should sync perfectly.
I started the project with tests, but once I reached the part of speaking with the server I got stuck and didn’t understand how to implement tests.
Most of the things I find regarding TDD are the simple stuff. I would love your advice on this slightly more complex application.
I’m having problem to grasp how to do TDD when building a client-server system.
The reference you want is Growing Object Oriented Software, Guided by Tests
I started the project with tests, but once I reached the part of speaking with the server I got stuck and didn’t understand how to implement tests.
Basic idea: you are trying to work towards a design where you can separate the complicated code from the code that is hard/expensive to test.
This often means three "modules"
A really simple module that knows how to talk to the network
A complicated module that knows how to prepare messages for the network, and how to interpret the responses (and timeouts)
A module that can coordinate the interaction of the two modules above.
The first module, you "test" using code review, acceptance testing, and taking advantage of the fact that it doesn't change very often (because it is so simple).
The second module, you use lots of programmer tests to make sure that the logic correctly handles all of the different messages that can pass through it
The third module, you concentrate on testing the protocol. Here, we'll often use a substitute implementation (aka a mock or some other flavor of test double) for one or both of the first two modules.
In a language with types like Java or C#, the need for substitutes will often mean that the first two modules will need to implement some interface, and the third module will depend on those interfaces rather than having direct dependencies on the implementations.
You'll likely also need some code in your composition root that wires together the actual implementations.
For a good take on separating the networking client from the networking logic/protocol, see Cory Benfield 2016.
It might also be useful to review:
Boundaries, by Gary Bernhardt
At the Boundaries, Applications Aren't Object Oriented by Mark Seemann
Put the client code that is working with the socket into a separate class that can be injected in the "business code". For your tests inject a mock instead, verifying that the API of the "client socket adapter" is called in the apropriate way. Mocking libraries make this easy.
Put the server code that is working with the socket into a separate class and design an internal API for the "business code" that the "server socket adapter" is calling. Ignore the adapter in your tests and call the API of the business code directly.
You might want to read about the Ports & Adapter architecture (sometimes also called the "Hexagonal Model").

Program interacting with web

How or what do I need to know programming wise in order to interact with the web using c++. For instance i want to wrote a program that automatically sends invites to players on yahoo chess. How would i go about doing this?
You'll need to understand the basics of TCP/IP and HTTP, possibly UDP, and the protocols involved with Yahoo's chess systems or posses a tool to work around them (A brief search leads me to believe there are few if any). You'll probably need a network API, I'd suggest looking at:
QtNetwork Module
Boost.Asio
Where Qt is easy to use, Asio is more powerful, and more 'C++' in nature. Qt has some nice webkit components, and I've used it to build a small web server, which was a lot of fun. You can accomplish quite a lot with it.
This page says they've added a captcha system to prevent certain people from interacting with their systems. I'm not familiar with Yahoo games and what the result of this has on what you'd want to do, however it suggests to me they'd rather you didn't write code to interact with their systems.
For this you need to use network APIs and use server side script like PHP/ASP to communicate with the web and C using message queue.

Using Kerberos authentication for Server/Client application

In c++ I am trying to build a portable server running on Linux and Windows and client running in Windows that will use MS Active Directory for authentication. After some research I decided that best way to go is use Kerberos. I decided to use MIT Kerberos v5 library due to BSD style licence.
But my problem is that I am completely unable to find good resource on working in Kerberos in C++. All examples that I found are just simple code snippets that fail to explain in enough details what input parameters to functions are and reference manuals (doxygen style) that briefly explains the function in question but does not provide enough information to understand the context where to use it.
In short, can you recommend good resource for C++ programmer that two weeks ago did not even know what Kerberos is?
The best place to start is the sample simple client and simple server in the MIT code distribution found here: https://github.com/krb5/krb5/tree/master/src/appl/sample
This shows you how to use GSSAPI to do mutual auth
I am not sure if you already have seen this, but the MIT Kerberos V5 API documentation looks pretty exhaustive.

Which acceptance testing frameworks are better for backend development?

By backend I mean software systems that consume data, process files or communicate using machine interfaces (REST, SOAP, CORBA, etc...). No fancy web or UI testing is necessary. I have in mind Cucumber and Robotframework but I don't know how well suited they are in the task at hand.
There isn't an easy answer to this question.
Sounds like you got your domain right... because if you were trying to test UI/Web components acceptance testing frameworks make not be the right tool for the job.
You have a few options
SpecFlow
Cucumber
StoryTeller
FitNesse
mSpec
a few others.
I'm partial to StoryTeller & mSpec.. but each of these tools have their pros/cons.
Questions you should be asking yourself (and your team are)
Who is going to be writing/maintaining the tests?
Are self documenting acceptance tests provide value for your organization?
Which technology would integrate most easily with your current build process?
I have used Cucumber to test a batch application written in perl and plsql, an informatica transformation, and am currently using it to test a telephony ivr/queueing system. Ruby provided the gems I needed to drive the system and it was very easy for the testers to learn the language/syntax.
If it comes to Robot Framework I have an experience with bad support in Intellij for this. I'm using IntelliBot plugin. In many cases you will know your mistake like wrong syntax, cannot find keyword etc. late in test runtime.
Problems with finding imported libraries, no debug, no simple refactor like rename keyword across a project.

A better C++ HTTP client library

We are looking for a better C++ HTTP client library, and we're willing to pay for it.
The product we want needs to be a statically linked, and to work on these platforms:
Windows XP, Vista, 7
OS X 10.4, 10.5, and 10.6
We want it to do the following tasks really well:
1. Make HTTP GET and POST requests
2. Handle meta refresh and http redirection responses automatically
3. Automatically use proxy settings from 'Internet Options', 'ProxyCfg', or 'preferences.plist', if present
4. Optionally utilize user-supplied proxy settings
5. Efficiently provide http and proxy authentication handling if required
6. Implement proxy auto-config and WPAD
There are a few free libraries that provide some of these requirements: boost.asio, curl, winhttp, Qt/wxWidgets, udrl, ultimate tcp/ip, but we haven't found any that satisfy all our requirements. We currently use libcurl to do much of this stuff in our current product, but we're not network programmers, and we'd like to replace our code with a better solution written by experts.
Is there a commercial product that would fill our needs?
Also, it would be really nice if there were a product that provided filter-recognition capability for HTTP responses. This would be really cool, and it would save us from having to write up a bunch of parsing code for filter detection. We already detect a few popular filters such as Websense, DeepNines, LightSpeed, Network Composer, Dans Guardian, SonicWALL, Privoxy, Bsecure, and SmartFilter. But it would be great if someone else did it for us, more completely and more up-to-date.
Has anyone heard of such a product?
Have you looked at NEON? It has pretty much everything you need.
I know it's not C++ specific, but it's C so you could integrate it very easily in your C++ project.
These guys have been around forever and are very well known to provide good networking SDK's: /n software