Sygnalizacyjne ABC

Poniższy artykuł oparty jest na wspaniałej pozycji książkowej “System Sygnalizacji nr 7 G. Danielewicz, W.Kabaciński”. Gorąco zachęcam do lektury!!:)

Sterowanie

W wiekszości przypadków jeżeli coś działa dłużej niż okres potrzebny na zaparzenie herbaty to znaczy, że coś nim steruje. Podobnie jest w telekomunukacji, wszystko co dzieje sie w sieci wynika i jest oparte na przesyłaniu i wymianie informacji sterujących pomiędzu jej elementami. Siec telekomunikacyjna jest przykladem sieci zorientowanej polaczeniowo, tzn takiej w ktorej zanim dojdzie do wymiany danych, zarówno w fazie zestawiania jak i rozlaczania połaczenia, realizowana jest wymiana informacji sterujących. Proces za pomocą, którego przekazywane są informacje sterujące nazywamy sygnalizacja.

W telekomunikacji podstawowym zastosowaniem sygnalizacji jest zestawienie połaczenia pomiedzy dwoma abonentami. Nomenklatura nazywa abonenta inicjującego połacznie jako ‘abonenta wywołującego’ a abonenta do którego kierowanie jest połaczenie abonentem wywoływanym. Podobnie w przypadku central (punktów przyłaczenia do sieci) do których dołaczeni są abonenci, centrala wywołująca i wywoływaną. Nawiązanie połaczenia wymaga sygnalizacji pomiedzy:

  • abonentem wywołującym a cetrala wywołującą
  • abonentem wywoływanym a centralą wywoływaną
  • miedzy centrala wywołujacą i wywoływana bezpośrednio lub poprzez inne centrale

Funkcje i rodzaje sygnalizacji

Funkcje i rodzaje sygnalizacji zmieniały się na przestrzeni czasu wraz z rozwojem i ewolucja technologiczną. Niegdyś abonent chcąc nawiązać połaczenie podnosił sluchawke telefoniczną i krecił metalową korbką. To indukowało prąd, który powodował zapelenie się malej lampki w centrali ‘manualnej’ obsługiwanej przez grupę procesorów płci pięknej. Taka pani podłączała swoją sluchawkaę do drugiego konca przewodu i rozpoczynała “obsługę zgłoszenia w centrali”. Dowiadywała się od delikwenta gdzie chce się dodzwonić, po czym odłaczała swoją słuchawkę i za pomocą krótkiego drutu łaczyła dwa odpowiednie przewody.

Z pośród wielu różnych kryteriów za pomocą, których moglibyśmy sklasyfikować sygnalizacje dwa bezwątpienia najważniejsze to funkcje jakie realizuje w danym kontekscie oraz obszar ich zastosowania.

Funkcje

Sygnalizacja spełni trzy zasadnicze funckje:

  • adresową – jest odpowiedzialna za przekazywanie w sieci informacji adresowych dotyczących abonenta wywoływanego. Informacje adresowe zawierają wskazany przez abonenta wywołujacego identyfikator abonenta wywoływanego. Najcześciej identyfikator ten jest podstawą do kierowania sygnalizacji pomiedzy kolejnymi elementami w sieci.
  • nadzorczą – jest odpowiedzialna za kontrolowanie stanu łacza, wykrywa zmiany i przekazuje informacje z nimi związane
  • zarządzającą – jest odpowiedzialna za przesyłanie informacji służacej do zarządzania łączami

Obszar funkcjonowania

Z zależności od obaszaru funkcjonowania syganlizację dzieli się na:

  • abonencką – obejmuje wymianę informacji sterujących pomiędzy centralą i abonentem
  • międzycentrolową – obejmuje wymianę informacji sterujących pomiędzy centralami biorącymi udział w połaczeniu
  • wewnątrz centralowa – jest to wymiana informacji pomiędzy wewnętrznymi komponentami centrali

Zarówno sygnalizacja abonencka jak i między centralowa są objęte przez procesy standaryzacyjne na poziomie międzynarodowym i krajowym, natomiast sygnalizacja wewnątrz centralowa jest niezależnym rozwiązanie danego producenta.

Typy sygnalizacji

Biorąc pod uwagę inne aspekty sygnalizacji związane z jej własciwościami fizycznymi można dokonać ponownej klasyfikacji za pomocą dwóch kryteriów, rodzaju syganału oraz zależności pomiedzy informacjami sterujacymi a danymi.

Rodzaj sygnału

W zależności od tego kryterium możemy wyróżnić dwa rodzaje sygnałów analogowe i cyfrowe.

Sygnały analogowe do przesyłania informacji wykorzystują sygnał analogowy, który może być prądem stałym lub przemiennym o określonej czestotliowśći lub złożonym z większej liczby sygnałów o danych częstotliwościach. W przypadku sygnalizacji prądem stałym informacja może być przesyłana w postaci obecności lub braku prądu oraz poprzez kierunek jego przepływu. W przypadku sygnalizacji prądem przemiennym informacje mogą być przekazywane za pomocą obecności lub braku sygnału oraz jako jego częstotliwość lub kombinacja zbioru częstotliwości. Jeśli częstotliwość sygnalizacji mieści sie w pasmie sygnału danych to jest to tak zwana sygnalizacja w pasmie jeśli nie to poza pasmem.

W przypadku gdy sygnalizacja przyjmuje postać cyfrową jest ona przesyłana w postaci ciągów bitów. O systemach w których informacje przesyłane są w postaci cyfrowej mówimy systemy transmisji cyfrowej. W takich systemach dane transmitowane są w  określonej szczelinie czasowej, w której w zależności od szybkości łacza umieszczane są paczki bitów. Taka przydzieloną szczelinę nazywamy kanałem. Jeśli w ramach takiej szczeliny określona liczba bitów zarezerwowana jest dla informacji sygnalizacyjnych to mamy do czynienia z sygnalizacją w szczelinie natomiast jesli na potrzebę sygnalizacji rezerowana jest niezależna szczelina to mowimy o sygnalizacji poza szczeliną.

Media

Kluczowym aspektem sygnalizacji jest powiązanie pomiędzy przesyłanymi informacjami sygnalizacyjnymi a mediami czyli danymi.  Przesyłanie informacji sygnalizacyjnych może być skojarzone z łaczem danych lub nie. W zależności od charakterystyki skojarzenia sygnalizację dzielimy na skojarzona z kanałem lub we wspólnym kanale. W sygnalizacji skojarzonej z kanałem dla każdego kanału przydzielane są zasoby transmisyjne do przesyłania informacji sterujących związanych wyłacznie z tym łaczem. W sygnalizacji ze wspólnym kanałem zasoby dla informacji sygnalizacyjnych są współdzielone przez wiele kanałów danych. W przypadku gdy mamy do czynienia z całkowitym oddzieleniem sygnalizacji od danych mowimy, że sieć jest podzialona na dwie niezależne warstwy sterująca i transportu danych.

CD..?

W kolejnych postach dokładniej opisze poszczególne formy sygnalizacji ze względu na obszar funckjonowania.

You May Also Like

Need to make a quick json fixes – JSONPath for rescue

From time to time I have a need to do some fixes in my json data. In a world of flat files I do this with grep/sed/awk tool chain. How to handle it for JSON? Searching for a solution I came across the JSONPath. It quite mature tool (from 2007) but I haven't hear about it so I decided to share my experience with others.

First of all you can try it without pain online: http://jsonpath.curiousconcept.com/. Full syntax is described at http://goessner.net/articles/JsonPath/



But also you can download python binding and run it from command line:
$ sudo apt-get install python-jsonpath-rw
$ sudo apt-get install python-setuptools
$ sudo easy_install -U jsonpath

After that you can use inside python or with simple cli wrapper:
#!/usr/bin/python
import sys, json, jsonpath

path = sys.argv[
1]

result = jsonpath.jsonpath(json.load(sys.stdin), path)
print json.dumps(result, indent=2)

… you can use it in your shell e.g. for json:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}

You can print only book nodes with price lower than 10 by:
$ jsonpath '$..book[?(@.price 

Result:
[
{
"category": "reference",
"price": 8.95,
"title": "Sayings of the Century",
"author": "Nigel Rees"
},
{
"category": "fiction",
"price": 8.99,
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"author": "Herman Melville"
}
]

Have a nice JSON hacking!From time to time I have a need to do some fixes in my json data. In a world of flat files I do this with grep/sed/awk tool chain. How to handle it for JSON? Searching for a solution I came across the JSONPath. It quite mature tool (from 2007) but I haven't hear about it so I decided to share my experience with others.

Phonegap / Cordova and cross domain ssl request problem on android.

In one app I have participated, there was a use case:
  • User fill up a form.
  • User submit the form.
  • System send data via https to server and show a response.
During development there wasn’t any problem, but when we were going to release production version then some unsuspected situation occurred. I prepare the production version accordingly with standard flow for Android environment:
  • ant release
  • align
  • signing
During conduct tests on that version, every time I try to submit the form, a connection error appear. In that situation, at the first you should check whitelist in cordova settings. Every URL you want to connect to, must be explicit type in:
res/xml/cordova.xml
If whitelist looks fine, the error is most likely caused by inner implementation of Android System. The Android WebView does not allow by default self-signed SSL certs. When app is debug-signed the SSL error is ignored, but if app is release-signed connection to untrusted services is blocked.



Workaround


You have to remember that secure connection to service with self-signed certificate is risky and unrecommended. But if you know what you are doing there is some workaround of the security problem. Behavior of method
CordovaWebViewClient.onReceivedSslError
must be changed.


Thus add new class extended CordovaWebViewClient and override ‘onReceivedSslError’. I strongly suggest to implement custom onReceiveSslError as secure as possible. I know that the problem occours when app try connect to example.domain.com and in spite of self signed certificate the domain is trusted, so only for that case the SslError is ignored.

public class MyWebViewClient extends CordovaWebViewClient {

   private static final String TAG = MyWebViewClient.class.getName();
   private static final String AVAILABLE_SLL_CN
= "example.domain.com";

   public MyWebViewClient(DroidGap ctx) {
       super(ctx);
   }

   @Override
   public void onReceivedSslError(WebView view,
SslErrorHandler handler,
android.net.http.SslError error) {

String errorSourceCName = error.getCertificate().
getIssuedTo().getCName();

       if( AVAILABLE_SLL_CN.equals(errorSourceCName) ) {
           Log.i(TAG, "Detect ssl connection error: " +
error.toString() +
„ so the error is ignored”);

           handler.proceed();
           return;
       }

       super.onReceivedSslError(view, handler, error);
   }
}
Next step is forcing yours app to  use custom implementation of WebViewClient.

public class Start extends DroidGap
{
   private static final String TAG = Start.class.getName();

   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       super.setIntegerProperty("splashscreen", R.drawable.splash);
       super.init();

       MyWebViewClient myWebViewClient = new MyWebViewClient(this);
       myWebViewClient.setWebView(this.appView);

       this.appView.setWebViewClient(myWebViewClient);
       
// yours code

   }
}
That is all ypu have to do if minSdk of yours app is greater or equals 8. In older version of Android there is no class
android.net.http.SslError
So in class MyCordovaWebViewClient class there are errors because compliator doesn’t see SslError class. Fortunately Android is(was) open source, so it is easy to find source of the class. There is no inpediments to ‘upgrade’ app and just add the file to project. I suggest to keep original packages. Thus after all operations the source tree looks like:

Class SslError placed in source tree. 
 Now the app created in release mode can connect via https to services with self-signed SSl certificates.