GENEL BAKIŞ
RADIUS SUNUCU ile Haberleşme Bir RADIUS sunucu ile bağlantı kurarak AAA(Authentication, Authorization, Accounting) işlemlerini gerçekleştirmek oldukça kolaydır. Standart attribute tipleri ile ilişkili veriler doğrudan aktarılabilir. Örn: AddRadiusAttr(31, "05327654321"); // RADIUS paketine "Arayan Numara" bilgisinin eklenmesi AddRadiusAttr(30, "02127654321"); // RADIUS paketine "Aranan Numara" bilgisinin eklenmesi SendRadiusRequest(1, "192.168.1.10", 1812); // Authorization paketi olarak gönderilmesi Örnek authorization paketi gönerimi: FUNCTION bool AuthorizeUser()
{
// Standart attributelerin authorization packetine eklenmesi
AddRadiusAttr(1, "MyUserName"); // User
AddRadiusAttr(2, "MyPassword"); // Password
AddRadiusAttr(4, "192.168.1.5"); // Nas Ip Address
AddRadiusAttr(5, i2str(_SESSION_ID_)); // Nas Port
AddRadiusAttr(61, "0"); // Nas Port Type
AddRadiusAttr(31, "05327654321"); // Calling Id
AddRadiusAttr(30, "02127654321"); // Called Id
AddRadiusAttr(44, i2str(_SESSION_ID_)); // Acct Session Id
// VSA'ların authorization packetine eklenmesi
AddRadiusVSAAttr(24, "h323-conf-id=" + g_strh323confid, 9);
// RADIUS paketinin Server'a gönderilmesi
bool bRet = FALSE;
int iRet = SendRadiusRequest(1, "192.168.1.10", 1812);
if (iRet == 0) { // ACCESS_ACCEPT
// VSA(103) atribute sonuc bilgisini veriyor
string strReturnCode = GetRadiusVSAAttrValue(103);
if (str2i(strReturnCode) > 0) {
bRet = FALSE;
}
else {
// Sonuc basarılı, geri dönen diğer parametrelerin elde edilmesi
string strCreditTime = GetRadiusVSAAttrValue(102);
string strBillingModel = GetRadiusVSAAttrValue(109);
bRet = TRUE;
}
}
if (iRet == 1) { // ACCESS_REJECT
string strReturnCode = GetRadiusVSAAttrValue(103);
LOG("Radius reject");
}
if (iRet == 2) { // PACKET_SEND_PROBLEM
LOG("Technical problem occured when sending radius packet!");
}
ResetRadius();
return bRet;
}
WEB Tabanli Bir Uygulama İle Haberleşme
Oturum parametrelerini dış sunucular ile paylaşmanın en kolay yolu, asp/aspx, php, jsp gibi web sayfalarına doğrudan HTTP POST yapılmasıdır. Bu amaçla HTTP arayüzü XML tabanlı veriyi yaratır ve web server üzerindeki sayfaya gönderir. Bu sayede sınırsız sayıda parametrenin dış sunuculara aktarılması ve sonuçlarının alınarak buna göre çağrı akışının yönlendirilmesi sağlanabilir.
FUNCTION FindDuration()
{
AddXMLParam("Origination", "MyUserName");
AddXMLParam("Destination", "MyPassword");
AddXMLParam("SessionID", i2str(_SESSION_ID_));
// Send the parameters to web page running on 192.168.1.15
bool bRet = PostHttpXML("192.168.1.15", "/MyServlet.aspx");
if (bRet != TRUE) {
LOG("PostHttpXML Failed. Error Description:" +
GetLastRuntimeErrorMessage());
}
// MyServlet.aspx sayfasından çağrı süresini veren bir parametre dönüyor
string strDuration = GetXMLParamValue("MaxCallDuration");
// Bu değer global bir değişkene atanarak çağrı akışına devam edilebilir
g_nDuration = str2i(strDuration);
ResetXML();
}
Script Derleyici
Script derleyicisi tüm scriptleri derleyerek yeni çağrı akışının aktif duruma geçmesine sağlar. Derleyici, derleme sırasında oluşabilecek tanımlama(definition), tip uyumsuzluğu (type mismatch), fonksiyon veya anahtar kelime(keyword) yazım hatalarını bularak, hatanın oluştuğu script satır numarası ve hata nedeni ile ekrana raporlama yapar. Böylece scripti yazan programcı hemen hatayı düzeltebilir.
FUNCTION QueryDestination()
{
string strMaxCallDuration;
g_strest = g_strDigits;
// g_strest hatalı yazıldı. g_strDest olarak yazılmalıydı
LOG("Everything is ok. Starting the call to " + strDestination);
StartCall(_LEG_A_, g_strDest);
// Eksik parametre girildi
// Doğru kullanım: StartCall(_LEG_A_, _LEG_B_, g_strDest);
LOG("Calling " + g_strDigits);
RunScript("Ringing.ccs");
}
Bu fonksiyon bloğunda 2 hata bulunmaktadır, Derleyici çıktısını görmek için tıklayın.
Script Fonksiyonları ve Olayların Listesi
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

