Install dan configure gammu di CentOS 6

Meskipun aplikasi SMS gateway gammu ini termasuk yang jadul, tapi terkadang dibutuhkan juga untuk broadcast sms atau membuat aplikasi yang mengirim sms menggunakan daemon pada sistem operasi seperti linux atau windows. Kali ini kebetulan saya install gammu pada CentOS 6.

Persiapan Environment

Dibutuhkan beberapa paket compiler. Install paket developer CentOS

yum groupinstall 'Development Tools'

Gammu memerlukan CMAKE untuk compiler nya. Untuk itu download terlebih dahulu cmake dari link berikut.

# tar -xzvf cmake-2.8.7.tar.gz
# cd cmake-2.8.7
# ./configure
# gmake

Tes cmake dengan command berikut

# cmake

Instalasi dan konfigurasi gammu

Instalasi perangkat keras

Sebelum melakukan konfigurasi, persiapkan terlebih dahulu modem GSM yang akan digunakan. Dalam kasus ini saya menggunakan modem GSM Wavecom fastrack di bawah.

http://www.satuportal.net/system/files/u349/Modem_Wavecom_Fastrack_1306B_Rs232_190410100430_ll.jpg.jpg

Kalau ingin bermain-main dengan 3G bisa pake wavecom supreme. Mungkin lain kali ngoprek2 dikit.

Karena koneksi menggunakan serial, maka konfigurasi gammu menggunakan tipe serial dengan model at.

Instalasi perangkat lunak gammu

Setelah environment selesai dipersiapkan, lanjut install gammu. Saya menggunakan source stable yang terbaru dari web gammu

# wget http://sourceforge.net/projects/gammu/files/gammu/1.31.0/gammu-1.31.0.tar.gz
# tar -xzvf gammu-1.31.0.tar.gz
# cd gammu-1.31.0
# ./configure
# make install

Jika tidak ada kesalahan, tes instasi dengan command :

# gammu

Jika terdapat kesalahan “gammu: error while loading shared libraries: libGammu.so.7: cannot open shared object file: No such file or directory” tinggal tambahkan libGammu di /usr/lib/

# ln -s /usr/local/lib/libGammu.so /usr/lib/libGammu.so.7
# ln -s /usr/local/lib/libgsmsd.so /usr/lib/libgsmsd.so.7

Konfigurasi gammurc

Konfigurasi gammu menggunakan gammurc. Untuk melakukan konfigurasi ini cukup mudah, tinggal masukan command :

# gammu-config

Konfigurasi seperti di bawah

│ P Port (/dev/ttyS0) │
│ C Connection (at115200) │
│ M Model (at) │
│ D Synchronize time (yes) │
│ F Log file (/var/log/gammu/gammurc) │
│ O Log format (textalldate) │
│ L Use locking () │
│ G Gammu localisation () │
│ H Help │
│ S Save

Buatlah file log :

# mkdir /var/log/gammu
# touch /var/log/gammu/gammurc

Tes konfigurasi :

# gammu --identify

Device : /dev/ttyS0
Manufacturer : Wavecom
Model : MULTIBAND 900E 1800 (MULTIBAND 900E 1800)
Firmware : 651b09gg.Q2406B 244 041410 13:45
IMEI : 351047880291824
SIM IMSI : 510080091331519

Jika keluar data di atas, maka konfigurasi berhasil.

Konfigurasi gammu-smsd

Daripada menggunakan gammurc, untuk mempermudah integrasi dengan aplikasi seperti web dan database, konfigurasi gammu-smsd lebih baik digunakan.

Buat file konfigurasi. Copy file konfigurasi minimal :

# cp /usr/src/gammu-1.31.0/docs/config/smsdrc /etc/gammu-smsdrc

Buat database sms, import database mysql kemudian konfigurasi gammu-smsdrc

# mysql -u root -p
> create database sms;
> \q

# nano /etc/gammu-smsdrc

[gammu]
device = /dev/ttyS0
model = at115200
connection = at

[smsd]
service = mysql
PIN = 1234
logfile = /var/log/gammu/smsdlog
debuglevel = 1
#runonreceive = /some/script
commtimeout = 30
sendtimeout = 30user = <user_database>
password = <password>
pc = localhost
database = sms

Import mysql :

# mysql -u root -p sms < /usr/src/gammu-1.31.0/docs/sql/mysql.sql

Jalankan daemon gammu-smsd dengan command :

# gammu-smsd --daemon
Log filename is "/var/log/gammu/smsdlog"

Cek log file :

# tail -f /var/log/gammu/smsdlog

Pastikan tidak ada error pada log tersebut.

Konfiguras kalkun sebagai web interface sms daemon

Salah satu kelebihan kalkun adalah menggunakan mysql yang dijalankan oleh daemon gammu-smsd.

Download kalkun dari http://sourceforge.net/projects/kalkun/files/kalkun/0.4/kalkun_0.4.tar.gz/download

Masukan ke web server apache di /var/www/html/sms

# mkdir /var/www/html/sms
# mv kalkun_0.4.tar.gz /var/www/html/sms
# tar -xzvf  kalkun_0.4.tar.gz
# chown -R apache.apache /var/www/html

Konfigurasi database kalkun :

# nano application/config/database.php

Setting database gammu

$db['default']['hostname'] = "localhost";
// MySQL
$db['default']['username'] = "";
$db['default']['password'] = "";
$db['default']['database'] = "sms";
$db['default']['dbdriver'] = "mysql";

Buka web browser, kemudian ketik http://<ip_addres(hostname)_server>/sms

Lakukan konfigurasi dengan next->next

Setelah selesai, hapus / rename folder install pada root web nya.

# mv install install_bak

Ubah settingan sms daemon agar menjalankan script saat mendapatkan sms masuk.

# nano /etc/gammu-smsdrc

runonreceive = /var/www/html/sms/scripts/daemon.sh

Edit file daemon tersebut beserta daemon.php pada folder scripts

# cd /var/www/html/sms/scripts
# nano daemon.sh
DAEMON=/var/www/html/sms/scripts/daemon.php
# nano daemon.php
$url = "http://<IP_Address/Hostname>/sms";

Restart daemon gammu-smsd dengan kill PID gammu-smsd, kemudian jalankan kembali gammu-smsd –daemon (solusi sementara)

Masuk ke aplikasi dengan user kalkun dan password kalkun

Silakan setting2 sendiri saja :)

Belajar mencari tahu

Manusia memang serba ingin tahu. Hanya saja ada yang berhasil menjadi orang yang serba tau dan ada juga yang tak tahu apa-apa. Kalau ingin serba tahu, ya harus tahu bagaimana cara mencari tahu. Terkadang kita tersesat kalau sedang belajar karena tak mengerti apa yang harus dilakukan sebelum ini dan setelah itu. Tetapi kalau kita mengerti langkah-langkah yang terbaik untuk dilakukan pasti proses pencarian keingintahuan akan lebih mudah.

Jadi bagaimana sebenarnya untuk belajar mencari tahu? Mencari step-by-step yang harus diambil, atau dalam bahasa pemrograman itu segala sesuatu dimulai dengan

“Hello World!”

Kalau tak tahu, ya cari tahu. Kalau tak mengerti ya coba cari jalan termudah dalam memulai. Karena di dunia ini cuma ada orang cerdas otaknya, dan orang yang pandai dalam mencari tahu.

Kembali dulu ke mode sabar

Setelah kemarin berniat untuk posting yang agak teknis, ternyata susah juga buat menulis secara baik. Campur-campur gak jelas jadinya. Jadi yasudah lah sepertinya style buat blog ini agak bebas. Tempat curhat, merenung, maupun menulis hal yang teknis dan ilmiah.

Sepertinya akhir-akhir ini ada saja ujian yang mengharuskan saya untuk masuk ke mode sabar. Permasalahan TA yang belum beres karena ini itu, masalah server, masalah listrik, Hardisk atau apa lah. Terus sekarang harus kehilangan Nexus S (yang dipake TA juga) yang cuma 1 bulan kemarin beli nya hasil dari nabung-nabung kecil-kecilan gara-gara kecopetan saat berangkat jumatan ke mesjid salman. Untung nomornya bisa diganti ke kartu baru di grapari, jadi gak usah ganti nomor (ini yang paling penting).

Terus dari kemarin ampe sekarang harus merawat mamah yang lagi terbaring sakit karena   harus dioperasi jempol kaki gara-gara abses. Luka kecil sih, cuma akibat gula yang gak normal berdampak buruk ke luka nya. Alhasil harus dioperasi di boromeus. Selepas operasi pun ternyata tak beres begitu saja, efek samping dari operasinya malah membuat sakit nya seakan menjadi-jadi ke seluruh tubuh. Tapi kalau dibayangkan kemarin gak sampai ke bandung buat cek ke dokter dan operasi, ntah seterus nya bakalan kayak gimana itu kaki. Bahaya nya diabetes memang mengerikan.

Hm .. mungkin saat ini kurang tepat kalau saya harus memprioritaskan diri sendiri akibat masalah-masalah itu. TA bisa dikerjakan lain waktu, server bisa diurus kapan-kapan, HP bisa dibeli lagi, bisa nabung lagi, pekerjaan2 dan proyek bisa ditunda dulu. Semua itu serasa tak ada artinya, mengurus mamah yang terbaring sakit seperti ini adalah kewajiban yang sangat  besar. Saat 1,5 tahun lalu saya kena DB dan Tipes sekaligus, cuma mamah yang ngurus di Rumah Sakit di Garut, sekarang saatnya saya yang harus berbakti untuk mengurusnya di Rumah Sakit di Bandung ini.

Kembali dulu ke mode sabar. Semoga yang maling tu HP dicerahkan hatinya sehingga syukur2 gak ada hujan gak ada angin ngebalikin lagi hp nya. Kalau enggak pun semoga barang haram itu menjadi manfaat buat orang lain. Tapi yang paling penting semoga mamah lekas sembuh dan tak harus mendapatkan tindakan dan perawatan macem-macem. Amin.

Load balancing dengan teknik interface bonding pada CentOS

Pada sistem operasi Linux turunan dari Red Hat Enterprise Linux (RHEL), multiple network interface dapat digabungkan ke dalam satu single interface menggunakan modul kernel bonding dan network interface khusus yang dinamakan dengan channel bonding interface. Dengan hal ini, kita dapat mengagregat beberapa port NIC ke dalam satu group interface yang dinamakan dengan bond. Dengan teknik bonding juga mengizinkan kita untuk membuat multi-gigabit pipes untuk mentransportkan trafik pada area traffic yang lebih tinggi di dalam jaringan kita. Contohnya, kita dapat mengagregat 3 Mb port ke dalam 3 Mb trunk port. Dengan hal tersebut, kita memiliki satu interface dengan kecepatan 3 MB.

Kita dapat menggunakan teknik ini saat kita membutuhkan link yang redundant, fault tolerance atau load balancing network. Hal ini merupakan cara yang paling baik untuk mendapatkan segmen jaringan dengan availability yang tinggi. Kondisi yang paling baik untuk menggunakan teknik ini adalah dengan implementasi pada koneksi dengan suport 802.1q (VLAN).

Diverse mode pada bonding

mode = 1 (Active Backup), Hanya satu slave pada bond yang aktif. Device slave yang lain akan aktif jika slave utama fail (mati). Pada mode ini, MAC address aktif untuk satu port interface bond.

mode = 2 (balance-xor), Mode ini memilih slave dengan korespondensi MAC address yang sesuai dengan yang dituju. Mode ini memberikan load balancing dan Fault tolerance.

mode = 3 (broadcast), Transmit ke seluruh interface slave. Mode ini untuk memberikan fault tolerance.

mode = 4 (802.3ad), Dynamic Link Aggregation. Membuat group agregat untuk menshare kecepatan yang sama dan seting duplex. Mengutilisasi semua slave pada aktif aggregator menurut spesifikasi 802.3ad.

mode = 5 (balance-tlb), Adaptive Transmit Load Balancing. Channel bonding yang tidak membutuhkan support switch yang khusus. Outgoing traffic didistribusikan berdasarkan current load (Perhitungan relatif terhadap kecepatan) pada setiap slave. Incoming traffic diterima oleh current slave. Jika slave tersebut gagal menerima (fail), slave yang lain akan men take over MAC address dari current  slave yang menerima tersebut.

mode = 6 (balance-alb), Adaptive Load Balancing. Termasuk balance-tlb ditambah dengan loadbalancing (rlb) untuk trafik IPv4, serta tidak membutuhkan suport switch khusus.

Load balancing dengan teknik interface bonding pada sistem operasi CentOS 6

Pada tutorial ini, diasumsikan RHEL6 kita telah terkoneksi dengan dua buah interface (NIC) dalam satu jaringan atau satu VLAN dengan nama interface eth0 dan eth1 dengan network 192.168.1.0/24 dan gateway 192.168.1.1 serta broadcast 192.168.255.255. Pada konfigurasi di bawah, dilakukan bonding dengan mode = 5 (balance-tlb)

Buatlah file /etc/modprobe.d/bonding.conf

# vi /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bond0 miimon=80 mode=5

Pada /etc/sysconfig/network-scripts/ buatlah file dengan nama ifcfg-bond0 dengan konfigurasi sebagai berikut :

DEVICE=bond0
IPADDR=192.168.1.5
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
GATEWAY=192.168.1.1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

Masih pada folder yang sama, ubah file ifcfg-eth0 menjadi :

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

Ubah pula ifcfg-eth1 menjadi :

DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

Restart konfigurasi network kita dengan command :

# service network restart

Kemudian cek apakah konfigurasi kita telah berhasil dengan perintah :

# ifconfig

Akan terdapat tiga buah interface dengan nama bond0 (dengan spesifikasi ip address dan network segmen nya) serta eth0 dan eth1 yang bertindak sebagai slave.

Jika berhasil, maka trunk kita telah berjalan dengan baik :)

Instalasi dan konfigurasi Asterisk dan FreePBX pada CentOS 6

Update base install CentOS. Saya menggunakan base install bawaan dari CentOS dengan konfigurasi proxy di dalam yum.conf nya (Jika server berada di bawah proxy)

yum -y update

Instalasi dependency utama

yum groupinstall core
yum groupinstall base

Dependency tambahan

yum install gcc gcc-c++ wget bison mysql-devel mysql-server php php-mysql php-pear php-pear-DB php-mbstring nano tftp-server httpd make ncurses-devel libtermcap-devel sendmail sendmail-cf caching-nameserver sox newt-devel libxml2-devel libtiff-devel php-gd audiofile-devel gtk2-devel subversion nano kernel-devel

Catatan pada RHEL 6
Pada RHEL v6 php-pear-DB tidak terdapat di dalam distribusi instalasi nya sehingga harus ditambahkan secara manual. Source ini diperlukan untuk instalasi FreePBX.

cd /usr/src
wget http://download.fedora.redhat.com/pub/epel/6/i386/php-pear-DB-1.7.13-3.el6.noarch.rpm
rpm -ivh php-pear-DB*

RHEL v6 menggunakan versi PHP terbaru. Pada versi ini, php-posix tidak lagi di dalam php-common, melainkan di dalam php-process. Untuk itu diperlukan instalasi php-process mengunakan source RHEL v6

yum -y install php-process

Secara default, firewall (iptables) aktif pada konfigurasi awal RHELv6. Untuk itu diperlukan konfigurasi firewall dengan mengizinkan service atau port yang dibutuhkan. Konfigurasi digunakan dengan menjalankan “system-config-firewall-tui”.

Konfigurasi minimum yang dibutuhkan untuk dibuka adalah

TCP 80 (www)
TCP 4445 (Flash Operator Panel)
UDP 5060-5061 (SIP)
UDP 10,000 - 20,000 (RTP)
UDP 4569 (IAX)

Alternatif lain, namun tidak direkomendasikan adalah dengan menutup service firewall dan disable untuk start saat reboot.

service iptables stop
chkconfig iptables off

SeLinux tidak dibutuhkan. Untuk itu service SELinux dinonaktifkan dan tidak diizinkan untuk berjalan sebagai serive.

nano /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.

SELINUXTYPE=targeted

# SETLOCALDEFS= Check local definition changes

SETLOCALDEFS=0

(Ctrl-x> y >Enter)

Pastikan SELinux tidak berjalan pada sesi ini dengan

setenforce 0

Jalankan TFTP server pada saat startup jika dibutuhkan (untuk konfigurasi phone)

nano /etc/xinetd.d/tftp
change “disable=yes” to “disable=no”

(Ctrl-X>y>ENTER)

System timezone
Buatlah symbolic link untuk set timezone yang sesuai pada /etc/localtime
contoh

ln -sf /usr/share/zoneinfo/Asia/Jakarta /etc/localtime

PHP timezone (Dibutuhkan pada PHP v5.3):

nano +946 /etc/php.ini

Uncomment (;) date.timezone = kemudian tambahkan time zone yang sesuai.

Restart apache untuk perubahan setting.

service httpd restart

Pada instalasi ini tidak dibutuhkan koneksi ke perangkat telephony (Phone Card) untuk koneksi ke PSTN. Sehingga tidak dibutuhkan instalasi Dahdi.

Download FreePBX dengan versi yang paling baru

cd /usr/src
wget http://mirror.freepbx.org/freepbx-2.9.0.tar.gz
tar zxvf freepbx-2.9.0.tar.gz

Download Asterisk v1.8.

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz
tar zxvf asterisk-1.8-current.tar.gz

Konfigurasi dan compile asterisk.

cd /usr/src/asterisk-1.8.x.x
make clean
./configure && make menuselect

Pilih semua addons. Hal ini direkomendasikan untuk konfigurasi FreePBX. Pilih base dan addon sounds. Disarankan untuk memilih ulaw karena memiliki kualitas yang lebih baik daripada gsm, terutama jika menggunakan ulau sebagai default codec. Jadi, pastikan untuk cek ulau sound dan addon sounds kemudian uncheck gsm. Pastikan memilih “save” setelah itu.

Saat memilih ‘format_mp3′ di atas sebagai addon, kita harus menjalakan script sebelum nya. Jika tidak proses instalasi akan gagal.

/usr/src/asterisk-1.8.x.x/contrib/scripts/get_mp3_source.sh

Command di atas diasumsikan kita telah menginstall source file pada /usr/src kemudian mereplace “x.x”

Sekarang install Asterisk. Catatan : Jika melakukan proses upgrade, jangan jalankan make samples.

make && make install && make samples

Buatlah user. Mungkin telah ada tetapi untuk memastikan jalankan command

useradd -c "Asterisk PBX" -d /var/lib/asterisk asterisk

Direktori berikut mungkin telah ada, tetapi untuk memastikan, buatlah directory

mkdir /var/run/asterisk

Set ownership dari folder Asterisk dan php

chown -R asterisk /var/run/asterisk
chown -R asterisk /var/log/asterisk
chown -R asterisk /var/lib/asterisk/moh
chown -R asterisk /var/lib/php/session

Music on Hold
Secara default direktori ‘moh’ adalah “/moh” dan pada freepbx, direktorinya adalah “/mohmp3″/ Sehingga buatlah symbolic link pada folder asterisk sebagai berikut

ln -s /var/lib/asterisk/moh /var/lib/asterisk/mohmp3

Default dari transcoding dari Asterisk dan FreePBX adalah menggunakan wav. Sehingga terdapat isu dengan mp3. Jadi kita install mpg123 untuk convert mp3 ke wav secara otomatis.

cd /usr/src
wget http://sourceforge.net/projects/mpg123/files/mpg123/1.13.3/mpg123-1.13.3.tar.bz2/download
tar -xjvf mpg123-1.13.3.tar.bz2

cd mpg123-1.13.3
./configure && make && make install

Script PHP dari FreePBX tidak dapat menemunkan mpg123 secara default sehingga kita membuat symbolic link

ln -s /usr/local/bin/mpg123 /usr/bin/mpg123

UBAH APACHE USER
Ubahlah user apache dan group apache ke user asterisk dan group asterisk

sed -i "s/User apache/User asterisk/" /etc/httpd/conf/httpd.conf
sed -i "s/Group apache/Group asterisk/" /etc/httpd/conf/httpd.conf

SETUP MYSQL
Sebelum melakukan apapun terhadap MySQL, kita pastikan MySQL telah berjalan

service mysqld start
Initializing MySQL database:                               [  OK  ]
Starting MySQL:                                            [  OK  ]

Sekarang, konfigurasi database untuk freePBX
Now, to configure the databases for freePBX:
Catatan : pada perintah di bawah, MySQL root belum diberikan password. Jika telah diberikan password, tambahkan -p dari setiap command

cd /usr/src/freepbx-2.9.0
mysqladmin create asterisk
mysqladmin create asteriskcdrdb
mysql asterisk > SQL/newinstall.sql
mysql asteriskcdrdb > SQL/cdr_mysql_table.sql

Buatlah user dan password untuk database asterisk. Secara default instalasi, user dan password untuk asterisk adalah asteriskuser:amp109.

$# mysql mysql> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY 'amp109'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY 'amp109'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> \q Bye

Tambahkan password untuk root

mysqladmin -u root password 'abcdef'

Install FreePBX

/usr/sbin/safe_asterisk

Akan terdapat warning, error dan notifikasi lain. Hiraukan saja.

cd /usr/src/freepbx-2.9.0
./install_amp

Default username is: admin
Default pw is: admin

Edit /etc/asterisk/cdr_mysql.conf kemudian tambahkan ‘loguniqueid=yes’ ke dalam global section yang akan memberikan setiap call record ke dalam nomor identifikasi yang unique.

nano /etc/asterisk/cdr_mysql.conf
loguniqueid=yes

set FreePBX untuk start on boot

echo /usr/local/sbin/amportal start >> /etc/rc.local

Enable Apache and mysql saat start on boot

chkconfig httpd on
chkconfig mysqld on

Saat ini dapat diakses FreePBX menggunakan browser dengan mengakses IP/Domain server. Terdapat error “symlink failed for /etc/asterisk/sip_notify.conf”. Jika hal ini terjadi, delete atau rename /etc/asterisk/sip_notify.conf. Kemudian “Apply Configuration Changes” pada FreePBX GUI setelah beberapa perubahan pada file. Setelah itu, error message akan menghilang.

Misc. optional settings

Ubah “upload_max_filesize” dari 2M ke 20M untuk mengizinkan file onhold yang besar.

nano +582 /etc/php.ini

logrotate setup
Set up konfigurasi to merotasi log files agar tidak menghasilkan file yang terlalu besar pada selang waktu tertentu.

nano /etc/logrotate.d/asterisk

Tambahkan konfigurasi di bawah ini

/var/log/asterisk/messages /var/log/asterisk/*log /var/log/asterisk/full {
missingok
notifempty
sharedscripts
create 0640 asterisk asterisk
postrotate
/usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null
endscript
}

<strong>MySQL performance tuning untuk low memory</strong>
Hal ini akan mereduksi penggunaaan memory secara signifikan tanpa memberikan efek terhadap performace.

nano /etc/my.cnf
[mysqld]
.
.
.
skip-innodb

(Ctl-x > y > ENTER)

Restar mysqld

service mysqld restart

Setelah semua nya berhasil dijalankan, maka Asterisk dan FreePBX telah dapat digunakan.

Pengenalan “Session Initiation Protocol (SIP)”

Session Initiation Protocol

Session Initiation Protocol (SIP) merupakan standar protocol yang dipublikasikan oleh Internet Engineering Task Force (IETF) sebagai RFC3261. SIP didesain untuk konektifitas antara user dan perangkat dimanapun dan kapanpun mereka dalam pertukaran informasi. Saat ini HTTP dan SMTP merupakan dua protokol yang paling banyak digunakan dalam proses pertukaran informasi, tetapi kedua protokol ini tidak dibuat untuk memprovide aktifitas manusia secara esensial, hanya sebagai protokol yang mensupport kegiatan tersebut. SIP menggabungkan kedua protokol tersebut ke dalam satu kesatuan yaitu menggunakan pola pertukaran informasi (message exchange) dari HTTP, format message, dan encoding serta penggunaan skema URI (user@domain) seperti SMTP.

Entitas

SIP environtment terdiri dari beberapa entitas yang saling terkoneksi yaitu:

  • User Agent (UA) : Entitas yang merepresentasikan end user seperti pada device pada user. Terdapat dua entitas yaitu User Agent Client (UAC) dan User Agent Server (UAS)
  • Proxy Server : Bekerja sebagai routing SIP message ke end point yang sesuai.
  • Redirect Server : Memberikan alamat baru atau route path yang berbeda kepada penerima.
  • Registrar : Bertindak sebagai repository saat ini dari attachment client terhadap network.

Message

SIP Message terdri dari dua macam yaitu :

  • Request : Dikirim dari client ke server dan mendifinisikan operasi yang dibutuhkan oleh client.
  • Response : Dikirim dari server ke client serta memberikan status dari request yang dikirim client.

Figure 1 SIP Message

Anatomy of a Message

Setiap SIP message dimulai dengan sebuah Start-Line, diikuti dengan sekuens dari header, dan dipisahkan dari message body menggunakan carriage-return line-feed sequence (CRLF).

  • Start-Line: Memiliki format Request-Line for Requests, atau Status-Line for Reponses.
  • Headers: Dinamakan atribut yang memberikan informasi tambahan tentang message.
  • Separator Line: Pemisah antara header and body.
  • Body: binary atau textural payload. Biasanya berupa Session Description Protocol (SDP) atau message text.

Start Line, setiap line header, dan line separator diterminasi menggunakan sebuah sekuens CRLF.

SIP Request Message

Contoh request message adalah sebagai berikut


INVITE sip:bob@897s.aarhus.comSIP/2.0
Via: SIP/2.0/UDP 124.191.8.8:11506
Max-Forwards: 70
To: Bob <sip:bob@897s.aarhus.com>
From: Alice <sip:alice@odense.com>;tag=769122
Call-ID: afh7989asdfhf@ml99.odense.com
CSeq: 3434534 INVITE
Contact: <sip:alice2@vejle.com>
Content-Type: application/sdp
Content-Length: 136

SIP Response Message

Hasil dari response message terhadap request message berupa


SIP/2.0 200 OK
Via: SIP/2.0/UDP 124.191.8.8:11506
To: Bob <sip:bob@897s.aarhus.com>;tag=abgj67
From: Alice <sip:alice@odense.com>;tag=769122
Call-ID: afh7989asdfhf@mel99.odense.com
CSeq: 3434534 INVITE
Contact: <sip:bob2@vejle.com>
Content-Type: application/sdp
Content-Length: 132

Contoh Call Flow

Pada kasus di bawah ini terjadi sesi anara Alice dan Bob mengganak SIP User Agents yang berbeda. Proses pembangunan koneksi adalah sebagai berikut

Session Setup

  • UA Alice mengirim INVITE message ke alamat SIP Bob (contoh ‘sip:bob@example.com’). Konten dari message berupa SDP yang mendeskripsikan media yang ditukarkan.
  • UA Bob menerima INVITE dan memberikan respon dengan 100 Trying Message.
  • UA kemudian berinteraksi dengan memberikan 180 Ringing ke Alice.
  • Bob memberikan response 200 OK message. Respon ini terdiri dari message SDP Bob yang telah disetujui.
  • Akhirnya Alice memberikan acknowledgement dengan ACK request.
  • Media stream tersambung secara langsung antara alice dan bob berupa protokol lain seperti RTP.

Sessino Tear Down

Pada akhir call, SIP digunakan untuk mengakhiri (tear down) sesi. Jika bob yang mengakhiri sesi, maka

  • Bob menutup dan UA nya menginisisasi terminasi dengan mengirim BYE request kepada alice
  • UA Alice memberikan response dengan 200 OK.

Basic setup dan tear down tersebut dapat digunakan dalam konektifitas media baik berupa voice, video, stream, Instant Messaging, maupun conference.

Teknologi Informasi

Setelah kejadian TA kemarin yang kehilangan dokumentasi dan server yang di telkom, maka diputuskan untuk satu bulan kedepan postingan hanya berlaku untuk kategori Teknologi Informasi.

Sepertinya kebanyakan yang berhubungan dengan Tugas Akhir saya yang ada kaitan nya dengan Linux, Apache, MySQL, PHP, IMS, Asterisk, CodeIgniter, FreePBX, Android, dan Java.

Jadi untuk sementara saya akan sering menggunakan bahasa-bahasa Geek di blog ini.

Selamat menikmati. Bagi yang tidak tertarik dan tidak faham, apalagi yang sudah master di bidang Network, Server, IP Multimedia Subsystem dan IP Telephony, silakan tutup halaman ini. Terima kasih.

Salam berdokumentasi. :)