In den folgenden Abschnitten beschreiben wir die Funktionen der IsdnLib.
Dabei werden die Funktionen einzeln in der Art von Manualpages beschrieben.
ZWECK
Initialisiert die IsdnLib
SYNTAX |
#include <IsdnLib.h>
int IsdnInitialize (void (*callback)());
BESCHREIBUNG |
IsdnInitialize wird benutzt um die IsdnLib zu initialisieren
und den Q.931 Stack mit dem DLPI Interface zu verbinden.
Sie muß vor allen anderen Funktionen der Library aufgerufen werden, oder
diese liefern einen Fehler.
callback ist eine Callback Funktion, die die Applikation angeben
muß. Sobald eine Q.931 Nachricht eingeht, die für die Applikation
von Interesse sein könnte, wird diese Funktion aufgerufen.
Nachdem die Library initialisiert wurde, können andere IsdnLib
Funktionen benutzt werden, um das ISDN zu benutzen.
Bevor die Applikation terminiert, sollte diese IsdnFini() aufrufen,
um alle belegten Ressourcen wieder freizugeben.
DEBUGGING |
Es existiert ein Debugging Support, falls dieser bei der Generierung
der Library nicht ausgeschaltet wurde.
Durch Setzen der Environment Variablen ISDN_DEBUG kann angegeben
werden, welche Informationen ausgegeben werden sollen. Der angegebene
Wert spezifiziert eine Bitmaske, die durch Angabe des Prefixes 0x
auch als Hexadezimalwert angegeben werden. Folgende Werte sind
definiert:
0x0001 Ausgabe von Informationen des Schedullers
0x0002 Ausgabe der IsdnLib CallId
0x0008 Ausgabe von Timerinformationen
0x0010 Anzeige der ein- und ausgehenden Q.931 Nachrichten
0x0020 Anzeige der ein- und ausgehenden Q.921 Nachrichten
0x0040 Anzeige interner Q.931 Requests und Indikationen
0x1000 Trace des Beenden einer Funktion
0x2000 Trace jedes Funktionsaufrufs
0x4000 Ausgabe der Warnungen
0x8000 Ausgabe der Fehler
RÜCKGABEWERT |
IsdnInitialize liefert 0 wenn die Initialisierung erfolgreich war,
-1 anderenfalls. Der Fehler wird dann in der Variablen IsdnErrno
gespeichert.
FEHLER |
EISDN_SYSCALL |
Der Aufruf eines Systemcalls lieferte einen unerwarteten Fehler.
BEISPIEL |
#include <IsdnLib.h>
void (*IsdnCallback) (tIsdnInd *ind);
main ()
/* initalize the application */
if (IsdnInitialize (IsdnCallback)) < 0)
/* handle error */
exit (1);
IsdnMainLoop ();
...
IsdnFini ();
exit (0);
T>
D.2. IsdnFini
ZWECK |
Freigabe aller Ressourcen, die von der IsdnLib benutzt wurden
SYNTAX |
#include <IsdnLib.h>
void IsdnFini ();
BESCHREIBUNG |
IsdnFini beendet die IsdnLib und gibt alle belegten
Ressourcen wieder frei.
D.3. IsdnMainLoop
ZWECK |
Startet die Mainloop der IsdnLib
SYNTAX |
#include <IsdnLib.h>
int IsdnMainLoop ();
BESCHREIBUNG |
IsdnMainLoop wird verwendet, um die Mainloop der IsdnLib
zu starten. Bevor diese nicht gestartet wurde ist es nicht möglich,
Q.931 Nachrichten zu empfangen oder ordnungsgemäß zu versenden.
Da jederzeit, nachdem das ISDN Device aktiviert wurde, Q.931 Nachrichten
eintreffen können, sollte IsdnMainLoop relativ schnell nach
IsdnInitialize aufgerufen werden. Anderenfalls kann es passieren,
das noch alte, nicht behandelte Nachrichten in der Queue stehen, die
dann zu Verwirrungen führen könnten.
Der Aufruf von IsdnMainLoop kehrt erst zurück, wenn dies
ausdrücklich durch Setzen der globalen Variable schedulerStop
auf einen Wert ungleich 0.
RÜCKGABEWERT |
IsdnInitialize liefert 0 wenn die Mainloop erfolgreich gestartet
werden konnte, -1 anderenfalls.
Der Fehler wird dann in der Variablen IsdnErrno gespeichert.
BEISPIEL |
#include <IsdnLib.h>
void (*IsdnCallback) (tIsdnInd *ind);
main ()
...
IsdnInitialize (IsdnCallback);
IsdnMainLoop ();
IsdnFini ();
exit (0);
T>
D.4. IsdnError
ZWECK |
Formatierte Ausgabe des Wertes der Variable isdnErrno
SYNTAX |
#include <IsdnLib.h>
void IsdnError (const char *str, ...);
BESCHREIBUNG |
IsdnError gibt den Wert der globalen Fehlervariablen
isdnErrno formatiert auf stderr aus. Als Parameter
erwartet die Funktion eine variable Anzahl von Argumenten, analog
zu printf.
BEISPIEL |
...
IsdnError ("Error occured at
...
ZWECK |
Registriert einen Filehandler
SYNTAX |
#include <IsdnLib.h>
void cb (int mode, void *data);
int IsdnCreateFileHandler (int fd, int mode, void (*cb) (), void *data);
BESCHREIBUNG |
Mit IsdnCreateFileHandler registriert die Applikation einen
Filehandler (cb) für den angegebenen Filedescriptor fd.
Dieser wird aufgerufen, sobald einer der in mode angegebenen
Ereignisse eintrifft. Folgende Ereignisse können spezifiziert werden:
ISDN_READABLE
ISDN_WRITABLE
ISDN_EXCEPTION
Ein installierter Filehandler kann mit IsdnDeleteFileHandler
jederzeit wieder gelöscht werden.
RÜCKGABEWERT |
IsdnInitialize liefert 0 wenn der Filehandler erfolgreich installiert
werden konnte, -1 anderenfalls.
Der Fehler wird dann in der Variablen IsdnErrno gespeichert.
BEISPIEL |
#include <IsdnLib.h>
Echo (void *data, int mode)
...
T>
main ()
...
IsdnCreateFileHandler (0, ISDNREADABLE, Echo, NULL);
...
D.6. IsdnDeleteFileHandler
ZWECK |
Löscht einen zuvor installierten Filehandler
SYNTAX |
#include <IsdnLib.h>
void IsdnDeleteFileHandler (int fd);
BESCHREIBUNG |
IsdnDeleteFileHandler löscht den zuvor für den Filedescriptor
fd installierten Filehandler.
BEISPIEL |
#include <IsdnLib.h>
Echo (void *data, int mode)
...
T>
main ()
...
IsdnCreateFileHandler (0, ISDNREADABLE, Echo, NULL);
...
IsdnDeleteFileHandler (0);
D.7. IsdnCreateTimerHandler
ZWECK |
Startet einen Timer und installiert einen Timerhandler
SYNTAX |
#include <IsdnLib.h>
void cb (int mode, void *data);
int IsdnCreateTimerHandler (int ms, void (*cb) (), void *data);
BESCHREIBUNG |
IsdnCreateTimerHandler startet einen Timer mit ms
Millisekunden. Sollte der Timer ablaufen, so wird der registrierte
Callback cb aufgerufen.
Ein gestarteter Timer und der installierte Timerhandler können mit
IsdnDeleteTimerHandler jederzeit wieder gelöscht werden.
RÜCKGABEWERT |
Wurde der Timer erfolgreich installiert, liefert
IsdnCreateTimerHandler eine TimerId für den Timer, dessen Wert
größer 0 ist,
-1 anderenfalls.
Der Fehler wird dann in der Variablen IsdnErrno gespeichert.
BEISPIEL |
#include <IsdnLib.h>
Beep (void *data, int mode)
...
T>
main ()
...
/* create timer for one second ***/
IsdnCreateTimerHandler (1000, Echo, NULL);
...
D.8. IsdnDeleteTimerHandler
ZWECK |
Stoppt einen Timer und den installierten Timerhandler
SYNTAX |
#include <IsdnLib.h>
void IsdnDeleteTimerHandler (int timerId);
BESCHREIBUNG |
IsdnDeleteTimerHandler stoppt einen zuvor gestarteten
Timer timerId und löscht den installierten TimerHandler.
BEISPIEL |
#include <IsdnLib.h>
void Cb ();
main ()
...
/* create timer for one second ***/
timerId = IsdnCreateTimerHandler (1000, Cb, NULL);
...
IsdnDeleteTimerHandler (timerId);
...
T>
D.9. IsdnAlertingReq
ZWECK |
Signalisierung der Bereitschaft, den eingehenden Anruf entgegenzunehmen.
SYNTAX |
#include <IsdnLib.h>
int IsdnAlertingReq (const t_IsdnAlertingReq *ireq)
BESCHREIBUNG |
Die IsdnLib signalisiert einen eingehenden Anruf durch eine
IsdnCallInd. Durch Aufruf von IsdnAlertingReq signalisiert
die Applikation ihre Bereitschaft, den Anruf eventuell entgegenzunehmen.
Handelt es sich um einen Telefonanruf, wird beim Anrufer hierdurch das
Klingelzeichen generiert.
Der Parameter ireq definiert weitere Parameter für den Request:
typedef struct
int callId; /* req. */
T>IsdnAlertingReq;
callId |
Referenziert die logische Verbindung.
Wenn die Applikation den Anruf nicht behandeln möchte, sollte sie
den Anruf mit einem IsdnReleaseReq beenden.
Wird auf einen eingehenden Anruf nicht innerhalb von 8 Sekunden
reagiert, generiert die IsdnLib selbst eine IsdnReleaseInd.
RÜCKGABEWERT |
IsdnAlertingReq liefert 0 wenn der Request erfolgreich bearbeitet
wurde,
-1 anderenfalls.
Der Fehler wird dann in der Variablen IsdnErrno gespeichert.
FEHLER |
EISDN_INV_CALLID |
Die in ireq angegebene callId konnte keiner logischen
Verbindung zugeordnet werden.
EISDN_Q931 |
Es wurde eine unerwartete Q.931 Nachricht empfangen, die nicht
der Protokollspezifikation entspricht.
BEISPIEL |
HandleIncommingCall (int callId)
tIsdnAlertingReq req;
... /* check the incomming call */
req.callId = callId;
if (IsdnAlertingReq ( | req))
IsdnError ("Error in IncommingCall");
else
... /* ok */
T>
D.10. IsdnCallReq
ZWECK |
Initiiert einen ausgehenden Anruf
SYNTAX |
#include <IsdnLib.h>
int IsdnCallReq (t_IsdnCallReq *req)
BESCHREIBUNG |
IsdnCallReq wird benutzt um einen ausgehenden Anruf zu initiieren.
Die IsdnLib erzeugt eine neue Q.931 CallReference
Value und versucht den Anruf zu tätigen.
Der Parameter ireq definiert weitere Parameter für den Request:
typedef struct
int callId; /* n/a */
tCalledPartyNo calledNo; /* opt. no to be called */
tCalledPartySubAddr calledSubAddr; /* opt. subAddr to be called */
tCallingPartyNo callingNo; /* opt. calling no */
tCallingPartySubAddr callingSubAddr; /* opt. calling subAddr */
tIsdnService service; /* opt. complete service */
tBearerCap bearerCap[2]; /* opt. bearer cap */
tHighLayerComp highLayerComp[4]; /* opt. HLC */
tLowLayerComp lowLayerComp[4]; /* opt. LLC */
T>IsdnCallReq;
Bedeutung der Felder:
callId |
Hat beim Aufruf keine Bedeutung. Wenn der Request erfolgreich
bearbeitet wurde, enthält dieses Feld die callId für diese
logische Verbindung, die von der IsdnLib vergeben wurde.
calledNo |
Spezifiziert die anzurufende Nummer. Wurde die Nummer nicht
angegeben, so kann die Applikation im Overlap Sending
Modus die Nummer auch mit Hilfe von IsdnDialReq
Nachrichten angegeben.
calledSubAddr |
Spezifiziert die Subadresse der angerufenen Nummer.
callingNo |
Spezifiziert die Nummer des Anrufers, falls angegeben.
In vielen Fällen kommt es vor, daß das zwischenliegende
Netz diese überprüft und gegebenenfalls ändert.
callingSubAddr |
Spezifiziert die Subadresse des Anrufers, falls angegeben.
service |
Definiert den Dienst, mit der der Anruf initiiert werden soll,
falls angegeben. Mit diesem Feld ist es möglich, den Dienst
auf einfache Art zu definieren:
ISDN_S_VOICE_ALAW |
Telefonie mit 3.1 kHz, PCM A-law kodiert
ISDN_S_VOICE_MULAW |
Telefonie mit 3.1 kHz, PCM µ-law kodiert
Wurde dieses Feld nicht angegeben, so muß der Dienst mit
Hilfe der folgenden Felder spezifiziert werden. Anderenfalls
haben diese Felder keine Bedeutung.
bearerCap |
Definiert die zu verwenden Bearer Capability,
analog zu Q.931.
highLayerComp |
Definiert die zu verwenden High Layer
Compatibility, analog zu Q.931.
lowLayerComp |
Definiert die zu verwenden Low Layer
Compatibility, analog zu Q.931.
Die erfolgreiche Benutzung dieses Requests bedeutet nicht, daß
hierdurch eine Verbindung aufgebaut wurde, der Aufbau wurde nur
initiiert. Die Verbindung ist erst dann vollständig aufgebaut,
wenn die IsdnLib eine IsdnConnectInd generiert.
Der initiierte Anruf kann jederzeit durch Verwendung von
IsdnReleaseReq abgebrochen werden.
RÜCKGABEWERT |
IsdnCallReq liefert 0 wenn der Request erfolgreich bearbeitet
wurde,
-1 anderenfalls.
Der Fehler wird dann in der Variablen IsdnErrno gespeichert.
BEISPIEL |
InitiateCall ()
tIsdnCallReq req;
memset ( | req, '', sizeof (req));
strcpy (req.calledNo.number, "+493025499203");
strcpy (req.callingNo.number, "+4930999888777");
req.service = ISDNSVOICEALAW;
if (IsdnCallReq ( | req))
IsdnError ("Error in InitiateCall");
else
return req.callId; /* return the callId */
T>
D.11. IsdnConnectReq
ZWECK |
Annahme eines eingehenden Anrufes.
SYNTAX |
#include <IsdnLib.h>
int IsdnConnectReq (const t_IsdnConnectReq *ireq)
BESCHREIBUNG |
IsdnConnectReq nimmt einen eingegangenen Anruf entgegen. Bevor der
Anruf entgegengenommen werden kann, muß die Applikation die Bereitschaft
zur Annahme mit IsdnAlertingReq signalisiert haben..
Der Parameter ireq definiert weitere Parameter für den Request:
typedef struct /* connect to incomming call */
int callId; /* req. */
tIsdnService service; /* opt. short cut service */
tBearerCap bearerCap; /* opt. selected bearer cap */
tHighLayerComp highLayerComp; /* opt. selected HLC */
tLowLayerComp lowLayerComp; /* opt. selected LLC */
T>IsdnConnectReq;
Bedeutung der Felder:
callId |
Identifiziert die logische Verbindung.
service |
Definiert den angenommenen Dienst, falls angegeben. Im ISDN ist
es möglich, daß der Anrufer mehrere mögliche Dienste
angibt. Der Angerufene muß aus dieser Liste einen auswählen,
den er am besten behandeln kann. Ist dieser Parameter nicht
angegeben, so muß der ausgewählte Dienst über die folgenden
Felder spezifiziert werden. Ansonsten haben diese keine
Bedeutung.
bearerCap |
Definiert die zu verwenden Bearer Capability,
analog zu Q.931.
highLayerComp |
Definiert die zu verwenden High Layer
Compatibility, analog zu Q.931.
lowLayerComp |
Definiert die zu verwenden Low Layer
Compatibility, analog zu Q.931.
Auch nach erfolgreicher Benutzung dieses Requests ist die Verbindung
noch nicht hergestellt! Erst nachdem die IsdnLib eine
IsdnConnectInd signalisiert, wurde die Verbindung aufgebaut.
RÜCKGABEWERT |
IsdnCallReq liefert 0 wenn der Request erfolgreich bearbeitet
wurde,
-1 anderenfalls.
Der Fehler wird dann in der Variablen IsdnErrno gespeichert.
BEISPIEL |
ConnectToCaller (int callId, int service)
tIsdnConnectReq req;
memset ( | req, '', sizeof (req));
req.callId = callId;
req.service = service;
if (IsdnConnectReq ( | req))
IsdnError ("Error in ConnectToCaller");
else
... /* ok */
T>
D.12. IsdnDialReq
ZWECK |
Angabe der zu wählenden Nummer bei Overlap Sending.
SYNTAX |
#include <IsdnLib.h>
int IsdnDialReq (const t_IsdnDialReq *req)
BESCHREIBUNG |
IsdnDialReq überträgt Wählinformationen im Overlap
Sending Modus. Es ist somit möglich, wie bei einem normalen
Telefon zu wählen (Abnahme des Höhrers, Warten auf das Freizeichen,
Wählen).
Der Parameter ireq definiert weitere Parameter für den Request:
typedef struct
int callId; /* req. */
tCalledPartyNo calledPartyNo; /* req. */
T>IsdnDialReq;
Bedeutung der Felder:
callId |
Identifiziert die logische Verbindung.
calledPartyNo |
Gibt die zu übermittelnde Wählinformation an.
RÜCKGABEWERT |
IsdnDialReq liefert 0 wenn der Request erfolgreich bearbeitet
wurde,
-1 anderenfalls.
Der Fehler wird dann in der Variablen IsdnErrno gespeichert.
BEISPIEL |
Dial (int callId, char *number)
tIsdnDialReq req;
memset ( | req, '', sizeof (req));
req.callId = callId;
strcpy (req.calledPartyNo.number, number);
if (IsdnCallReq ( | req))
IsdnError ("Error in Dial");
else
... /* OK */
T>
D.13. IsdnKeypadReq
ZWECK |
Übermittlung von Zusatzinformationen nach Q.932 [itu9303:Q.932]
SYNTAX |
#include <IsdnLib.h>
int IsdnKeypadReq (const t_IsdnKeypadReq *req)
BESCHREIBUNG |
IsdnKeypadReq übermittelt Zusatzinformationen, mit deren Hilfe
weitere Features im ISDN realisiert werden können (z.B. Markeln).
Nicht alle Netzwerkbetreiber unterstützen dieses Feature.
Der Parameter ireq definiert weitere Parameter für den Request:
typedef struct
int callId; /* req. */
char keypad[20+1]; /* req. 1..20 chars, terminated */
T>IsdnKeypadReq;
Bedeutung der Felder:
callId |
Identifiziert die logische Verbindung.
keypad |
Gibt zu übermittelnde Informationen an. Die Bedeutung dieser
liegt außerhalb der Q.931 Protokollspezifikation. Der
Benutzer muß sich daher beim ISDN Dienstanbieter nach den
unterstützten Features erkundigen.
RÜCKGABEWERT |
IsdnKeypadReq liefert 0 wenn der Request erfolgreich bearbeitet
wurde,
-1 anderenfalls.
Der Fehler wird dann in der Variablen IsdnErrno gespeichert.
BEISPIEL |
SendKeypad (int callId, char *keypad)
tIsdnKeypadReq req;
memset ( | req, '', sizeof (req));
req.callId = callId;
strcpy (req.keypad, keypad);
if (IsdnKeypadReq ( | req))
IsdnError ("Error in SendKeypad");
else
... /* OK */
T>
D.14. IsdnReleaseReq
ZWECK |
Beendet eine logische Verbindung
SYNTAX |
#include <IsdnLib.h>
int IsdnReleaseReq (const t_IsdnReleaseReq *req)
BESCHREIBUNG |
IsdnReleaseReq initiiert den Abbruch einer bestehenden oder im
Aufbau befindlichen Verbindung.
Der Parameter ireq definiert weitere Parameter für den Request:
typedef struct
int callId; /* req. */
tCause cause; /* opt. reason */
T>IsdnReleaseReq;
Bedeutung der Felder:
callId |
Identifiziert die logische Verbindung.
cause |
Spezifiziert einen Grund für den Verbindungsabbruch. Die Bedeutung
der verschieden Werte sind der ITU Empfehlung
Q.850 [itu9303:Q.850] zu entnehmen.
Es ist zu beachten, daß die Verbindung erst dann vollständig beendet
ist, wenn die IsdnLib eine IsdnReleaseInd generiert.
RÜCKGABEWERT |
IsdnReleaseReq liefert 0 wenn der Request erfolgreich bearbeitet
wurde,
-1 anderenfalls.
Der Fehler wird dann in der Variablen IsdnErrno gespeichert.
BEISPIEL |
Disconnect (int callId, int cause)
tIsdnReleaseReq req;
memset ( | req, '', sizeof (req));
req.callId = callId;
req.cause.value = cause;
req.cause.location = CALUSER;
if (IsdnReleaseReq ( | req))
IsdnError ("Error in Disconnect");
else
... /* OK */
T>
D.15. IsdnAlertInd
ZWECK |
Signalisiert, daß der Anrufer prinzipiell bereit ist, den Anruf
entgegenzunehmen
SYNTAX |
#include <IsdnLib.h>
IsdnCallback (t_IsdnInd *ind);
BESCHREIBUNG |
Die registrierte Callback Funktion wird mit einer IsdnAlertInd
Indikation von der IsdnLib aufgerufen, wenn der zuvor Angerufene
bereit ist, den Anruf entgegenzunehmen. Sie ersetzt somit das
"Klingelzeichen" beim alten Telefon.
Der Parameter t_IsdnAlertInd liefert weitere Informationen
über die Indikation:
typedef struct /* alerting indication */
tIsdnIndType indType; /* type of inication */
int callId; /* unique ID of the call */
T>IsdnAlertInd;
Bedeutung der Felder:
indType |
ISDN_ALERT_IND
callId |
Identifiziert die logische Verbindung, für die das Klingeln
signalisiert wird.
BEISPIEL |
IsdnCallback (tIsdnInd *ind)
tIsdnAlertInd *alert = (tIsdnAlertInd*)ind;
if (ind->indType == ISDNALERTIND)
printf ("Alerting for
T>
D.16. IsdnCallInd
ZWECK |
Signalisiert einen eingehenden Anruf
SYNTAX |
#include <IsdnLib.h>
IsdnCallback (t_IsdnInd *ind);
BESCHREIBUNG |
Die registrierte Callback Funktion wird mit einer IsdnCallInd
Indikation von der IsdnLib aufgerufen, wenn ein neuer Anruf
eingegangen ist. Die Applikation muß dann entscheiden, ob sie bereit
ist, diesen zu empfangen. Falls ja, sollte sie mit dies mit Hilfer
eines IsdnAlertingReq signalisieren. Ansonsten sollte der
Anruf mit IsdnReleaseReq abgelehnt werden.
Der Parameter t_IsdnCallInd liefert weitere Informationen
über die Indikation:
typedef struct
tIsdnIndType indType; /* type of inication */
int callId; /* unique ID of the call */
tCalledPartyNo calledPartyNo;
tCalledPartySubAddr calledPartySubAddr;
tCallingPartyNo callingPartyNo;
tCallingPartySubAddr callingPartySubAddr;
tChannelId channelId; /* identifies the B* channels */
tBearerCap bearerCap[2];
tHighLayerComp highLayerComp[4];
tLowLayerComp lowLayerComp[4];
T>IsdnCallInd;
Bedeutung der Felder:
indType |
ISDN_CALL_IND
callId |
Identifiziert die logische Verbindung für diesen neuen Anruf.
calledPartyNo |
Gibt die angerufene Nummer an.
calledPartySubAddr |
Gibt die angerufene Subadresse an.
callingPartyNo |
Gibt die Nummer des Anrufer an, falls diese übertragen wurde.
callingPartySubAddr |
Gibt die Subadresse des Anrufer an, falls diese übertragen wurde.
channelId |
Gibt die zu verwendenden ISDN Kanäle an, die für diese
Verbindung reserviert wurden.
bearerCap |
Gibt die angebotenen Bearer Capabilities des
Anrufers an.
highLayerComp |
Gibt die High Layer Compatibility an, falls
vorhanden.
lowLayerComp |
Gibt die Low Layer Compatibility an, falls
vorhanden.
BEISPIEL |
IsdnCallback (tIsdnInd *ind)
tIsdnCallInd *call = (tIsdnCallInd*)ind;
if (ind->indType == ISDNCALLIND)
printf ("Incomming CALL for
printf (" called no =
printf (" calling no =
...
T>
D.17. IsdnChannelInd
ZWECK |
Signalisiert, daß ein ISDN Datenkanal für die Verbindung bereitgestellt
wurde
SYNTAX |
#include <IsdnLib.h>
IsdnCallback (t_IsdnInd *ind);
BESCHREIBUNG |
Die registrierte Callback Funktion wird mit einer IsdnChannelInd
Indikation von der IsdnLib aufgerufen, um der Applikation
Zugriff auf den zugewiesenen Datenkanal zu geben. Von diesem
Zeitpunkt an, können Daten von diesem logischen Kanal empfangen
und gesendet werden.
Der Parameter t_IsdnAlertInd liefert weitere Informationen
über die Indikation:
typedef struct /* indicates the available channel(s) */
tIsdnIndType indType; /* type of inication */
int callId; /* unique ID of the call */
tChannelId channelId; /* the ID of the selected channel(s) */
int fd; /* fd for the selected channel */
T>IsdnChannelInd;
Bedeutung der Felder:
indType |
ISDN_CHANNEL_IND
callId |
Identifiziert die logische Verbindung.
channelId |
Gibt die verwendeten ISDN Kanäle an.
fd |
Der Filedescriptor, mit dem auf den logischen Kanal zugegriffen
werden kann.
BEISPIEL |
void DataCb();
IsdnCallback (tIsdnInd *ind)
tIsdnChannelInd *channel = (tIsdnChannelInd*)ind;
if (ind->indType == ISDNCHANNELIND)
printf ("Channel got for
IsdnCreateFileHandler (channel->fd, DataCb, ISDNREADABLE, NULL);
...
T>
D.18. IsdnChargeInd
ZWECK |
Übertragung von Gebühreninformationen
SYNTAX |
#include <IsdnLib.h>
IsdnCallback (t_IsdnInd *ind);
BESCHREIBUNG |
Die registrierte Callback Funktion wird mit einer IsdnChargeInd
Indikation von der IsdnLib aufgerufen, wenn Gebühreninformationen
aus dem ISDN Netz empfangen wurden (vgl. Q.956 [itu9510:Q.956]).
Der Parameter t_IsdnChargeInd liefert weitere Informationen
über die Indikation:
typedef struct
tIsdnIndType indType; /* type of inication */
int callId; /* unique ID of the call */
int units; /* # of charge units */
T>IsdnChargeInd;
Bedeutung der Felder:
indType |
ISDN_CHARGE_IND
callId |
Identifiziert die logische Verbindung.
units |
Anzahl der Gebühreneinheiten.
BEISPIEL |
IsdnCallback (tIsdnInd *ind)
tIsdnChargeInd *alert = (tIsdnChargeInd*)ind;
if (ind->indType == ISDNCHARGEIND)
printf ("Charging for
printf ("the call costs
T>
D.19. IsdnConnectInd
ZWECK |
Signalisiert, daß die Verbindung mit der Gegenstelle aufgebaut ist
SYNTAX |
#include <IsdnLib.h>
IsdnCallback (t_IsdnInd *ind);
BESCHREIBUNG |
Die registrierte Callback Funktion wird mit einer IsdnConnectInd
Indikation von der IsdnLib aufgerufen, wenn die Verbindung mit
der Gegenstelle aufgebaut ist. Von diesen Zeitpunkt an können Daten
zwischen den beiden Stationen über den Filedescriptor ausgetauscht
werden, der zuvor durch die IsdnChannelInd mitgeteilt wurde.
Der Parameter t_IsdnConnectInd liefert weitere Informationen
über die Indikation:
typedef struct /* indicates that the call is connected (active) now */
tIsdnIndType indType; /* type of inication */
int callId; /* unique ID of the call */
T>IsdnConnectInd;
Bedeutung der Felder:
indType |
ISDN_CONNECT_IND
callId |
Identifiziert die logische Verbindung.
BEISPIEL |
IsdnCallback (tIsdnInd *ind)
tIsdnConnectInd *alert = (tIsdnConnectInd*)ind;
if (ind->indType == ISDNCONNECTIND)
printf ("Call
T>
D.20. IsdnDisconnectInd
ZWECK |
Signalisiert, daß die Verbindung beendet wurde
SYNTAX |
#include <IsdnLib.h>
IsdnCallback (t_IsdnInd *ind);
BESCHREIBUNG |
Die registrierte Callback Funktion wird mit einer IsdnDisconnectInd
Indikation von der IsdnLib aufgerufen, wenn die Verbindung
zwischen zwei Stationen getrennt wurde.
Der Parameter t_IsdnDisconnectInd liefert weitere Informationen
über die Indikation:
typedef struct
tIsdnIndType indType; /* type of inication */
int callId; /* unique ID of the call */
tCause cause;
T>IsdnDisconnectInd;
Bedeutung der Felder:
indType |
ISDN_DISCONNECT_IND
callId |
Identifiziert die logische Verbindung.
cause |
Gibt den Grund an, weshalb die Verbindung getrennt wurde.
Zur Bedeutung siehe Q.850 [itu9303:Q.850].
Die Applikation sollte in Folge dieser Indikation den Datenkanal
schließen, und die Verbindung durch ein IsdnReleaseReq
terminieren. Wenn sie das nicht innerhalb von ca. 15 Sekunden
macht, wird dies durch die Vermittlungsstelle initiiert.
BEISPIEL |
IsdnCallback (tIsdnInd *ind)
tIsdnDisconnectInd *disc = (tIsdnDisconnectInd*)ind;
if (ind->indType == ISDNDISCONNECTIND)
printf ("%d disconnected", disc->callId);
printf ("Cause:");
DumpCause (stdout, | disc->cause);
T>
D.21. IsdnReleaseInd
ZWECK |
Signalisiert, daß die logische Verbindung beendet ist.
SYNTAX |
#include <IsdnLib.h>
IsdnCallback (t_IsdnInd *ind);
BESCHREIBUNG |
Die registrierte Callback Funktion wird mit einer IsdnReleaseInd
Indikation von der IsdnLib aufgerufen, um der Applikation
mitzuteilen, daß die logische Verbindung beendet ist.
Der Parameter t_IsdnReleaseInd liefert weitere Informationen
über die Indikation:
typedef struct
tIsdnIndType indType; /* type of inication */
int callId; /* unique ID of the call */
tCause cause;
T>IsdnReleaseInd;
Bedeutung der Felder:
indType |
ISDN_ALERT_IND
callId |
Identifiziert die logische Verbindung.
cause |
Gibt den Grund an, weshalb die Verbindung getrennt wurde.
Zur Bedeutung siehe Q.850 [itu9303:Q.850].
Spätestens nach dem Erhalt dieser Nachricht hat die Applikation den
Filedescriptor für den Datenkanal zu schließen, falls dieser noch
geöffnet ist. Nach dieser Indikation darf die Applikation keine
weiteren Nachrichten für diese callId mehr initiieren, oder
es wird ein Fehler gemeldet. Von der IsdnLib sind nach dieser
Indikation ebenfalls keine weiteren Nachrichten für diese
callId zu erwarten.
Es ist zu beachten, daß diese Nachricht zu jeder Zeit für eine
gültige callId gesendet werden kann.
BEISPIEL |
IsdnCallback (tIsdnInd *ind)
tIsdnReleaseInd *rel = (tIsdnReleaseInd*)ind;
if (ind->indType == ISDNRELEASEIND)
printf ("%d released now", disc->callId);
printf ("Cause:");
DumpCause (stdout, | disc->cause);
T>
File was created Wed Feb 26 17:43:12 1997 by tex2html
|