السبت، 13 يونيو 2015

اليوم سوف نقوم بتنصيب  kamailio sip proxy من git مع إضافة websocket
حتى تواصل خطوات التنصيب بدون مشاكل يجب أن تكون root , أولا نحتا ج لتنصيب الأدوات التالية
yum install git gcc flex bison mysql-devel make openssl-devel libcurl-devel libxml2-devel pcre-devel libunistring flex libunistring-devel


بالنسبة libunistring فهي غير ضرورية إذا لم تكن تريد تنصيب إضافة websocket
الخطوة الأولى
ألان عليك إنشاء ملف لتحمل عليه السورس كود من git
mkdir -p /usr/local/src/kamailio-4.0
cd /usr/local/src/kamailio-4.0
وألان نقوم بتحميل السوسر من git
git clone --depth 1 --no-single-branch git://git.sip-router.org/sip-router kamailio
cd kamailio
git checkout -b 4.0 origin/4.0
إذا كان إصدار git لا يدعم --no-single-branch  قم بحذفها


إعداد التنصيب
وألان نقوم بإعداد السوسر للتنصيب
make cfg
الخطوة التالي هي إضافة المكتبات التي نريد إضافتها kamailio
وهنا سنختار mysql وwebsocket   طبعا mysql  لاغنا عنها أما websocket فسنستخدها لاحقا في تطبيقات الويب وإذا لم تكن تريد العمل على مشروع ويب فهي غير ضرورية
nano -w modules.lst
سيفتح لنا محرر النصوص وألان قم بتغير قيمةinclude_modules  للتالي
include_modules= db_mysql websocket
أو يمكنك القيام بذالك من دون فتح أي ملف من خلال الأمر التالي
make include_modules="db_mysql websocket" cfg
وبعد ذالك ننصب البرنامج بشكل طبيعي
make all
make install


ولان تم تنصيب ملفات التنفيذ في المسار التالي
/usr/local/sbin
وهي
Kamailio وهو سيرفر الكمائيليو
Kamdbctlسيكريبت التحكم في قواعد البيانات
Kamctl سيكربت التحكم في سيرفرر كمائيليو
Sercmd سطر أوامر الكمائيليو
المكتبات والأدوات في موجود في المسار التالي
32-Bit
/usr/local/lib/kamailio/modules/
/usr/local/lib/kamailio/modules_k/
64-Bit
/usr/local/lib64/kamailio/modules/
/usr/local/lib64/kamailio/modules_k/


ملف الإعداد
/usr/local/etc/kamailio/kamailio.cfg


وألان نأتي لتنصيب قاعدة البيانات عن طريق تعديل ملف kamctlrc
nano -w /usr/local/etc/kamailio/kamctlrc
قم بتغير قيمة DBENGINE إلىmysql
DBENGINE=MYSQL
وألان يمكنك إنشاء قاعدة البيانات الخاصة kamailio من خلال الأمر التالي
/usr/local/sbin/kamdbctl create
وألان نقوم بالتعديل على ملف الإعداد ليتوافق مع الإضافات التي تم تنصيبها
/usr/local/etc/kamailio/kamailio.cfg
أضف ألا سطر التالية إلى ملف الإعداد إذا لم تجدها فيه
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
وألان أبحث عن قسم with defined وقم بإضافة الأسطر التالية
#!substdef "!MY_IP_ADDR!<SERVER_IP>!g"
#!substdef "!MY_DOMAIN!<SERVER_IP>!g"
#!substdef "!MY_WS_PORT!8080!g"
#!substdef "!MY_WSS_PORT!4443!g"
#!substdef "!MY_WS_ADDR!tcp:MY_IP_ADDR:MY_WS_PORT!g"
#!substdef "!MY_WSS_ADDR!tls:MY_IP_ADDR:MY_WSS_PORT!g"


#!define WITH_WEBSOCKETS


أستبدل <server_ip> بالايبي تبع الخادم
أبحث عن القسم  global parameters وأضف الأسطر التالية
listen=MY_IP_ADDR
#!ifdef WITH_WEBSOCKETS
listen=MY_WS_ADDR
#!ifdef WITH_TLS
listen=MY_WSS_ADDR
#!endif
#!endif


tcp_connection_lifetime=3604
tcp_accept_no_cl=yes
tcp_rd_buf_size=16384
And comment line:
#tcp_connection_lifetime=3605


أبحث عن القسم ويب modules وأضف الأسطر التالية
#!ifdef WITH_WEBSOCKETS
loadmodule "xhttp.so"
loadmodule "websocket.so"
loadmodule "nathelper.so"
#!endif


في قسم  setting module-specific parameters اضف الاسطر التالية
#!ifdef WITH_WEBSOCKETS
# ----- nathelper params -----#
modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")
# Note: leaving NAT pings turned off here as nathelper is _only_ being used for
# WebSocket connections. NAT pings are not needed as WebSockets have
# their own keep-alives.
#!endif


في قسم routing-logic داخل جز ء  request_route we  أضف الأسطر التالية
request_route {


# per request initial checks
route(REQINIT);


#!ifdef WITH_WEBSOCKETS
if (nat_uac_test(64)) {
# Do NAT traversal stuff for requests from a WebSocket
# connection - even if it is not behind a NAT!
# This won't be needed in the future if Kamailio and the
# WebSocket client support Outbound and Path.
force_rport();
if (is_method("REGISTER")) {
fix_nated_register();
} else {
fix_nated_contact();
if (!add_contact_alias()) {
xlog("L_ERR", "Error aliasing contact <$ct>\n");
sl_send_reply("400", "Bad Request");
exit;
}
}
}
#!endif
....
نضيف الأسطر التالية لقسم route[WITHINDLG]
route[WITHINDLG] {
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
#!ifdef WITH_WEBSOCKETS
if ($du == "") {
if (!handle_ruri_alias()) {
xlog("L_ERR", "Bad alias <$ru>\n");
sl_send_reply("400", "Bad Request");
exit;
}
}
#!endif
....
وفي نهاية ملف الإعداد نضيف
#!ifdef WITH_WEBSOCKETS
onreply_route {
if ((($Rp == MY_WS_PORT || $Rp == MY_WSS_PORT)
&& !(proto == WS || proto == WSS))) {
xlog("L_WARN", "SIP response received on $Rp\n");
drop;
exit;
}


if (nat_uac_test(64)) {
# Do NAT traversal stuff for replies to a WebSocket connection
# - even if it is not behind a NAT!
# This won't be needed in the future if Kamailio and the
# WebSocket client support Outbound and Path.
add_contact_alias();
}
}


event_route[xhttp:request] {
set_reply_close();
set_reply_no_connect();


if ($Rp != MY_WS_PORT
#!ifdef WITH_TLS
&& $Rp != MY_WSS_PORT
#!endif
) {
xlog("L_WARN", "HTTP request received on $Rp\n");
xhttp_reply("403", "Forbidden", "", "");
exit;
}


xlog("L_DBG", "HTTP Request Received\n");




if ($hdr(Upgrade)=~"websocket"
&& $hdr(Connection)=~"Upgrade"
&& $rm=~"GET") {


# Validate Host - make sure the client is using the correct
# alias for WebSockets
if ($hdr(Host) == $null || !is_myself("sip:" + $hdr(Host))) {
xlog("L_WARN", "Bad host $hdr(Host)\n");
xhttp_reply("403", "Forbidden", "", "");
exit;
}


# Optional... validate Origin - make sure the client is from an
# authorised website. For example,
#
# if ($hdr(Origin) != "http://communicator.MY_DOMAIN"
# && $hdr(Origin) != "https://communicator.MY_DOMAIN") {
# xlog("L_WARN", "Unauthorised client $hdr(Origin)\n");
# xhttp_reply("403", "Forbidden", "", "");
# exit;
# }


# Optional... perform HTTP authentication


# ws_handle_handshake() exits (no further configuration file
# processing of the request) when complete.
if (ws_handle_handshake())
{
# Optional... cache some information about the
# successful connection
exit;
}
}


xhttp_reply("404", "Not Found", "", "");
}


event_route[websocket:closed] {
xlog("L_INFO", "WebSocket connection from $si:$sp has closed\n");
}
#!endif
ولان قم بحفظ الملف وقم بكتبة السطر الاتي للتاكد من عدم وجود اخطاء في الملف
kamailio -c kamailio.cfg
إذا لم تحدث أخطاء يمكننا ألان تشغيل kamailio
بواسطة الأمر kamactl start

إذا حدثة معك الكثير من الاخطاء وﻻ يهمك حمل الملف جاهز من الرابط التالي وﻻكن بشرط ان ﻻتنسى تغير الservice ip

kamailio.cfg
إذا كان كل شيء على ما يرام ستكون النتيجة كالتالي
Listening on
udp: 192.168.1.13:5060
tcp: 192.168.1.13:5060
tcp: 192.168.1.13:8080
Aliases:
tcp: debi.local:8080
tcp: debi.local:5060
udp: debi.local:5060




تهانينا لقد قمة بتنصيب kamailio بنجاح

0 التعليقات