Pengembangan Library Yahoo! Messenger pada Platform · PDF fileLibrary grafis 2D yang kaya dan...
Transcript of Pengembangan Library Yahoo! Messenger pada Platform · PDF fileLibrary grafis 2D yang kaya dan...
2 BAB II DASAR TEORI
Pada bab ini akan diuraikan beberapa hal penting berkenaan dengan dasar
perancangan dan pengembangan library Yahoo! Messenger pada platform Android.
Dasar teori yang diuraikan meliputi penjelasan mengenai platform Android,
pengembangan aplikasi dan library pada platform tersebut dan protokol Yahoo!
Messenger yang digunakan.
Semua dasar teori tentang Android diambil dari dokumentasi Android pada web
Google [DOC08], sedangkan dokumentasi tentang protokol Yahoo! Messenger
diambil dari [YCB07].
2.1 AndroidAndroid merupakan suatu software stack untuk mobile device. Di dalamnya terdapat
sistem operasi, middleware, dan key application. Aplikasi pada platform ini
dikembangkan dalam bahasa pemrograman java. Android sendiri memiliki banyak
fitur diantaranya adalah:
� Merupakan sebuah Application Framework sehingga programmer dapat
menggunakan beberapa fungsi yang telah disediakan.
� Dalvik virtual machine. Tiap aplikasi dalam Android memiliki instance
virtual machine yang dapat bekerja secara efisien dalam lingkungan memori
yang terbatas.
� Integrated browser. Web browser berbasis WebKit engine terdapat pada
browser default Android atau pun dapat diintegrasikan dengan aplikasi lain.
� Optimized graphics. Library grafis 2D yang kaya dan 3D berbasis OpenGL
II-1
II-2
ES 1.0 yang mendukung akselerasi hardware.
� SQLite. Basis data relasional yang ringan namun sangat powerful.
� Media Support. Mendukung berbagai format audio, video, dan gambar
(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
� GSM Telephony. Mendukung fungsi komunikasi GSM.
� Bluetooth, EDGE, 3G dan WiFi. Mendukung komunikasi pada jaringan
(tergantung hardware).
� Kamera, GPS, kompas dan accelerometer. Mendukung berbagai fitur yang
disediakan oleh hardware.
� Kakas pengembangan yang lengkap. Termasuk device emulator, tools untuk
debugging, profiling memori dan performa, plugin untuk Eclipse IDE.
2.1.1 Arsitektur AndroidAndroid terdiri dari beberapa stack software yang terdiri dari: Applications,
Application Framework, Libraries, Android Runtime dan Kernel Linux. Arsitektur
lengkap platform ini dapat dilihat pada Gambar 2.1.
Gambar 2.1: Arsitektur platfor m Android [DOC08]
II-3
2.1.1.1 Application
Application merupakan program yang langsung berhubungan dengan user. Baik
program yang merupakan bawaan dari Android sendiri maupun program yang dibuat
oleh developer menggunakan bahasa pemrograman java. Contoh program bawaan dari
platform Android sendiri adalah email client, program SMS, calendar, maps, web
browser, contact dan sebagainya.
2.1.1.2 Application Framework
Lapisan ini berisi sekumpulan API yang dapat digunakan oleh programmer maupun
core application dari Android. Lapisan ini dirancang untuk memudahkan penggunaan
komponen dari Android sendiri. Aplikasi manapun dalam Android dapat berbagi
fungsi sehingga aplikasi lain dapat memanfaatkannya.
Aplikasi pada Android disusun atas beberapa komponen:
� Sekumpulan Views. Digunakan untuk mengatur tampilan pada aplikasi.
Contohnya adalah lists, grids, text box, button, bahkan embeddable web
browser.
� Content providers. Komponen yang mengatur agar aplikasi dapat mengakses
resources dari aplikasi lain (seperti Contacts), atau berbagi data dengan
aplikasi lain.
� Resource Manager. Menyediakan akses ke pada resource non-code seperti
localized string, grafik dan file layout.
� Notification Manager. Memungkinkan agar suatu aplikasi dapat menampilkan
peringatan yang dapat di kostumasi pada status bar.
� Activity Manager. Mengatur siklus aplikasi dan navigasi antar aplikasi yang
II-4
sedang berjalan.
2.1.1.3 Libraries
Android mendukung beberapa library C/C++ yang digunakan pada berbagai
komponen Android. Kemampuan ini dapat diakses oleh developer melalui Android
application framework. Beberapa library diantaranya adalah:
� System C library. Implementasi library C standar (libc).
� Media Libraries. Mendukung berbagai format multimedia (termasuk MPEG4,
H.264, MP3, AAC, AMR, JPG, PNG).
� Surface Manager. Mengatur akses ke subsistem display.
� LibWebCore. Engine web browser modern.
� SGL. Engine grafis 2D.
� 3D Library. Implementasi OpenGL ES 1.0 yang mendukung akselerasi
hardware.
� FreeType. Rendering untuk bitmap dan vector font.
� SQLite. Basis data relasional yang kecil namun sangat ampuh.
2.1.1.4 Android Runtime
Tiap aplikasi pada Android memiliki proses-nya masing-masing. Tiap aplikasi
tersebut memiliki instans dari Dalvik virtual machine (VM). Dalvik virtual machine
dirancang agar suatu device dapat menjalankan beberapa VM secara efisien. Dalvik
VM mengeksekusi file dengan format Dalvik Executable format (.dex) yang dirancang
untuk meminimalkan memory footprint .
II-5
Dalvik VM berbasis register, dan dapat menjalankan kelas-kelas yang dikompilasi
dengan bahasa pemrograman java dan ditransformasikan menjadi format .dex. Dalvik
VM sendiri bergantung pada Kernel Linux untuk fungsi dasarnya, seperti threading
dan manajemen memori secara low-level.
2.1.1.5 Linux Kernel
Android menggunakan Kernel Linux versi 2.6 sebagai sistem utama. Fungsi kernel
yang digunakan antara lain untuk keamanan, manajemen memori, manajemen proses,
manajemen jaringan dan driver model. Kernel juga berfungsi sebagai layer abstrak
antara hardware dan lapisan lainnya pada software stack.
2.1.2 Anatomi Aplikasi Android
Terdapat empat building blocks pada aplikasi Android yaitu:
� Activity
� Intent Receiver
� Service
� Content Provider
Tidak semua aplikasi membutuhkan keempat blok ini, tetapi suatu aplikasi dibuat
menggunakan kombinasi beberapa blok ini. Setelah memutuskan blok komponen yang
akan digunakan, blok tersebut didaftarkan pada suatu file yang disebut dengan
AndroidManifest.xml. File XML ini digunakan untuk menyatakan komponen apa saja
yang dibutuhkan oleh sebuah aplikasi dan kemampuan serta kebutuhan aplikasi
tersebut.
II-6
2.1.2.1 Activity
Activity paling umum diantara keempat building block. Activity biasanya suatu
tampilan (screen) dalam suatu aplikasi. Tiap activity diimplementasikan sebagai satu
kelas yang meng-extend base class Activity. Kelas yang dibuat akan menampilkan
user interface yang terdiri dari beberapa views dan akan merespon suatu event.
Kebanyakan, aplikasi terdiri dari beberapa screen. Contohnya aplikasi pengiriman
pesan akan memiliki screen untuk mendaftarkan pesan yang masuk, menulis pesan
dan screen lainnya untuk melakukan pengaturan. Tiap screen pada contoh ini akan
diimplementasi sebagai suatu activity. Aplikasi dapat berpindah ke screen lain dengan
cara memulai suatu activity baru. Pada suatu kasus tertentu, activity akan
mengembalikan nilai kepada activity sebelumnya. Contohnya activity untuk memilih
foto akan mengembalikan foto yang dipilih pada activity yang memanggilnya.
Pada saat screen baru terbuka, screen sebelumnya akan dihentikan dan state nya akan
disimpan pada history stack. User dapat melakukan navigasi ke activity sebelumnya
melalui history tersebut. Screen akan di hapus dari history stack apabila sistem
memutuskan bahwa screen tersebut tidak layak untuk berada pada memori. Android
menyimpan history stack untuk setiap aplikasi yang dijalankan dari tampilan awal
(home screen).
2.1.2.2 Intent dan Intent Filter
Android menggunakan kelas khusus bernama intent untuk berpindah dari screen ke
screen lainnya. Sebuah intent mendeskripsikan apa yang ingin aplikasi penuhi. Bagian
struktur data dari intent yang paling penting adalah action dan data dari aksi yang
dilakukan. Nilai action yang biasanya adalah MAIN, VIEW, PICK, EDIT dan
II-7
sebagainya. Data diekspresikan sebagai URI. Sebagai contoh, untuk melihat informasi
suatu contact seseorang, kita membuat intent dengan action VIEW dan data sebagai
URI yang merepresentasikan orang tersebut.
Terdapat suatu kelas yang dinamakan IntentFilter. Apabila intent adalah suatu
permintaan untuk melakukan sesuatu, IntentFilter adalah deskripsi yang dapat
dilakukan oleh intent activity. Activity yang dapat menampilkan informasi contact dari
seseorang akan mempublikasikan IntentFilter yang menyatakan bahwa ia dapat
menangani action VIEW apabila dipakai pada data yang merepresentasikan
seseorang. Suatu aplikasi mempublikasikan IntentFilter pada file
AndroidManifest.xml.
Navigasi dari suatu screen ke screen lainnya dipenuhi dengan cara me-resolve intent.
Untuk melakukan navigasi ke depan, activity memanggil startActivity(myIntent).
Sistem akan mencari IntentFilter untuk semua aplikasi dan memilih activity yang
IntentFilter-nya yang paling mendekati dengan myIntent. activity baru akan mendapat
informasi tentang intent yang menyebabkan activity tersebut dijalankan. Proses
pencarian intent terjadi sewaktu runtime pada saat startActivity dipanggil. Hal
tersebut membawa keuntungan sebagai berikut:
� Activity dapat melakukan reuse functionality dari komponen lain dengan cara
melakukan permintaan dalam bentuk intent.
� Activity dapat di replace kapan pun dengan activity yang ekuivalen.
2.1.2.3 Intent Receiver
IntentReceiver dapat digunakan pada saat kita menginginkan kode kita dijalankan
akibat reaksi dari external event tertentu. Contohnya, pada saat telepon berbunyi, atau
II-8
pada saat ada data pada jaringan, atau pada suatu waktu tertentu. IntentReceiver tidak
menampilkan user interface, meskipun ia dapat menggunakan NotificationManager
untuk memperingatkan user apabila sesuatu terjadi. IntentReceiver didaftarkan pada
file AndroidManifest.xml, tetapi secara manual juga bisa ditambahkan dengan fungsi
Context.registerReceiver(). Suatu aplikasi tidak harus berjalan pada IntentReceiver-
nya agar bisa dipanggil, tetapi sistem yang akan menjalankan aplikasi tersebut.
Apabila diperlukan, pada saat IntentReceiver mendapat trigger, aplikasi juga dapat
mengirimkan intent broadcast kepada aplikasi lainnya dengan fungsi
Context.broadcastIntent().
2.1.2.4 Service
Service adalah sebuah kode yang hidup terus-menerus dan berjalan tanpa memiliki
tampilan. Contoh yang sederhana adalah suatu aplikasi media player yang sedang
memainkan lagu dari play list. Pada aplikasi media player, kemungkinan terdapat satu
atau lebih activity yang memperbolehkan user memilih lagu dan memainkannya.
Tetapi musik yang sedang diputar tidak boleh ditangani oleh activity karena user akan
menginginkan musik tetap diputar meskipun ia berpindah ke screen baru. Pada kasus
ini activity media player dapat menjalankan service menggunakan fungsi
Context.startService() untuk menjalankan service di background yang memutar
musik. Sistem akan tetap memutar musik sampai selesai. Selain itu activity dapat
terhubung dengan service menggunakan fungsi Context.bindService(). Pada saat
terhubung, aplikasi dapat berkomunikasi melalui interface yang diberikan oleh
service yang bersangkutan. Pada contoh media player, interface service akan
memberikan fungsi pause, rewind dan sebagainya.
II-9
2.1.2.5 Content Provider
Content provider digunakan untuk pertukaran data antara aplikasi. Data yang
dipertukarkan bersifat shared. Content provider adalah sebuah kelas yang berisi
method standar yang memungkinkan aplikasi lain dapat menyimpan dan mengambil
suatu data yang ditangani oleh content provider.
2.1.3 Life Cycle Aplikasi Android
Pada banyak kasus, tiap aplikasi pada Android masing-masing memiliki Linux proses.
Proses ini diciptakan untuk aplikasi tersebut pada saat kode program tersebut akan
dieksekusi, akan terus berjalan sampai tidak dibutuhkan lagi dan sistem memerlukan
memori untuk aplikasi lain.
Konsep dasar program Android adalah suatu proses pada aplikasi tidak langsung di
atur oleh aplikasi tersebut. Proses tersebut ditentukan oleh sistem melalui kombinasi:
informasi aplikasi bagi sistem, seberapa pentingnya aplikasi tersebut bagi user dan
ketersediaan memori.
Contoh kasus life-cycle bug adalah IntentReceiver yang menciptakan thread pada saat
menerima intent pada method onReceiveIntent() dan selesai dari fungsi tersebut.
Setelah fungsi tersebut selesai, sistem menganggap bahwa IntentReceiver tersebut
menjadi tidak aktif sehingga ia memiliki proses yang tidak dibutuhkan (kecuali
terdapat komponen aplikasi lain di dalamnya). Oleh karena itu, sistem dapat
menghapus proses tersebut kapanpun apabila dibutuhkan. Hal tersebut akan
menghapus semua thread yang berjalan pada proses tersebut. Solusi masalah ini
adalah memakai Service dari IntentReceiver, sehingga sistem mengetahui bahwa ada
suatu yang aktif dalam proses tersebut.
II-10
Sebagai programmer, kita harus mengetahui bagaimana cara yang tepat untuk
merancang aplikasi. Kesalahan pada perancangan akan membuat suatu aplikasi akan
dihentikan oleh sistem pada saat yang tidak diinginkan. Untuk menentukan proses
mana yang akan dihapus pada situasi low memory, Android memiliki “importance
hierarchy” berdasarkan komponen dan state yang sedang berjalan. Urutan berdasarkan
kepentingan tersebut adalah:
1. Foreground process. Adalah suatu proses yang dibutuhkan untuk berinteraksi
dengan user saat ini. Berbagai komponen suatu aplikasi dapat mengakibatkan
proses di dalamnya menjadi foreground proses. Suatu proses dikatakan
foreground apabila memenuhi kondisi sebagai berikut:
� Menjalankan Activity pada top screen yang sedang berinteraksi dengan
user (setelah method onResume() dipanggil).
� Mempunyai IntentReceiver yang sedang berjalan (method
IntentReceiver.onReceiveIntent() sedang dieksekusi).
� Memiliki Service yang fungsi callback-nya (Service.onCreate(),
Service.onStart() atau Service.onDestroy()) sedang dieksekusi.
Hanya akan terdapat beberapa proses seperti itu dalam sistem, proses ini hanya
akan dihapus apabila sistem tidak memiliki pilihan lain. Contohnya apabila
memori tinggal sedikit sehingga proses foreground tidak bisa lagi berjalan. Hal
ini diperlukan untuk menjaga user interface tetap interaktif dengan user.
2. Visible process. Adalah proses yang memegang Activity yang dapat dilihat
user pada layar tetapi tidak foreground (pada saat method onPause()
dipanggil). Hal ini dapat terjadi, sebagai contoh activity foreground muncul
II-11
dengan dialog sehingga activity sebelumnya terlihat di belakangnya. Proses ini
sangat penting dan tidak akan di hapus kecuali untuk menjaga aplikasi
foreground tetap berjalan.
3. Service process. Adalah proses yang memegang Service yang dimulai dengan
method startService(). Meskipun proses ini secara langsung tidak dapat
dilihat oleh user, biasanya proses ini menjalankan perintah dari user (seperti
memutar lagu, men-download data dari jaringan dan lain-lain). Sistem akan
tetap membiarkan proses ini berjalan selama proses foreground dan visible
masih bisa berjalan.
4. Background process. Adalah proses yang memegang Activity yang saat ini
tidak dapat dilihat oleh user (method onStop() sedang dipanggil). Proses ini
tidak secara langsung mempengaruhi user. Apabila activity life cycle telah
dipenuhi dengan benar, sistem dapat menghapus proses ini sewaktu-waktu
untuk memberikan memori tambahan. Biasanya banyak ditemukan proses
semacam ini, sehingga proses tersebut disimpan dalam LRU (Least Recently
Used) untuk menjaga agar proses yang baru saja dilihat oleh user akan dihapus
paling akhir pada kondisi low memory.
5. Empty Process. Adalah proses yang tidak memegang suatu komponen yang
sedang aktif. Alasan mengapa membiarkan proses semacam ini adalah untuk
melakukan cache sehingga proses startup menjadi lebih cepat apabila aplikasi
tersebut akan dijalankan kembali. Sistem seringkali menghapus proses
semacam ini untuk mencapai keseimbangan dari system resource antara
cached processes dan kernel caches.
II-12
2.2 Yahoo! Messenger
Yahoo! Messenger adalah produk gratis yang memberikan kesenangan dalam
berkomunikasi kepada teman dan keluarga di seluruh dunia [YAH08]. Dengan Yahoo!
Messenger kita dapat melakukan text chating secara real-time, menelepon PC ke PC,
mengirimkan SMS, berbagai file dan foto. Selain itu dengan Yahoo! Messenger kita
dapat memulai instant conversation dengan menggunakan emoticons,
mengekspresikan virtualisasi diri dengan avatar dan bermain game dengan teman,
mendengarkan musik dan banyak lagi.
Yahoo! Messenger memiliki arsitektur yang sama dengan kebanyakan instant
messenger lainnya, yaitu arsitektur central server [YCB07]. Untuk mengatur
komunikasi antara client dan server terdapat suatu protokol messaging proprietary
yang dikembangkan oleh Yahoo! Sendiri. Bagian ini akan membahas protokol Yahoo!
Messenger yang meliputi struktur paket data yang digunakan, daftar layanan, status
dan mekanisme protokol tersebut.
2.2.1 Protokol Yahoo! Messenger
Protokol merupakan kesepakatan antara pihak yang sedang melakukan komunikasi
tentang bagaimana cara mereka melakukan komunikasi tersebut [TAN03]. Bagian ini
akan menjelaskan bagaimana protokol, struktur data dan mekanisme komunikasi yang
digunakan dalam komunikasi Yahoo! Messenger.
Seperti yang telah dijelaskan sebelumnya bahwa arsitektur Yahoo! Messenger adalah
client-server. Pertama client Yahoo! Messenger masuk ke dalam server Yahoo!
dengan mengirimkan username dan password. Server lalu melakukan otentikasi user
II-13
tersebut dan menentukan apakah ia dapat menggunakan layanan ini. Dari sini, setiap
pesan yang dikirimkan kepada user lain akan di buffer terlebih dahulu. Pada saat
berhasil login ke server, client didaftarkan dengan status aktif. Server akan
mengirimkan daftar teman yang dimiliki client tersebut dan mengirimkan informasi
siapa saja yang aktif atau terhubung ke server. Metode ini memberikan tingkat
keamanan yang lebih tinggi karena pesan tidak dikirimkan point-to-point sehingga
user yang saling berkomunikasi masing-masing tidak perlu mengetahui IP
pasangannya.
Yahoo! Messenger telah berkembang menjadi beberapa versi. Versi 7 dikeluarkan
pada bulan November 2005 dan versi yang digunakan pada saat ini adalah versi 15.
Karena persaingan dengan perusahaan software lain, Yahoo! mengembangkan
protokol ini dalam bentuk proprietary. Oleh karena itu terdapat sedikit sekali
dokumentasi yang menjelaskan tentang protokol ini. Apabila ada, dokumentasi
tersebut tidak dikeluarkan oleh Yahoo! sendiri, melainkan programmer lain yang
melakukan reverse engineering terhadap protokol tersebut. Dokumentasi yang
tersedia saat ini adalah dokumentasi untuk versi 12 (YMSG12) [YCB07].
2.2.1.1 Struktur Paket Yahoo! Messenger
Semua komunikasi Yahoo! menggunakan komunikasi TCP/IP. Data yang
dipertukarkan terdapat dalam field data pada paket TCP. Yahoo! mengembangkan cara
pemakaian header yang umumnya digunakan pada TCP/IP dengan membuat
application level header format. Yahoo! Header memiliki panjang sebesar 20 byte.
Gambar 2.2 menunjukkan representasi grafik dari Yahoo! Header dan data.
Berdasarkan hasil penelitian yang dilakukan dalam Tugas Akhir ini, didapatkan
struktur paket yang berbeda dari Gambar 2.2. Perubahan yang ditemukan akan
II-14
dibahas pada sub bab 3.3.1. Struktur paket yang baru dapat dilihat pada Gambar 3.4.
Setiap paket dimulai oleh 4 byte pertama yang merupakan karakter ASCII YMSG.
Diikuti oleh versi protokol, panjang pesan, jenis service, status dan session ID. Bagian
data dari paket Yahoo! Messenger juga memiliki struktur sendiri. Setelah session ID,
data menyusul dengan format sebagai berikut: FIELD ID, FIELD SEPARATOR,
FIELD DATA dan FIELD SEPARATOR. FIELD ID merepresentasikan integer dalam
bentuk ASCII yang dapat disusun oleh beberapa karakter. FIELD SEPARATOR
merupakan karakter heksadesimal 0xc080. Gambar 2.3 menunjukkan bagaimana
struktur bagian data dalam paket Yahoo! Messenger.
pada umumnya paket-paket dalam melakukan komunikasi pada Yahoo! Messenger
memiliki struktur yang sama. Perbedaan hanya pada nilai beberapa field. Untuk
memudahkan penulisan, struktur paket akan disusun seperti Gambar 2.4. Referensi
nilai dari FIELD ID dapat ditemukan pada LAMPIRAN A.
Bagian Version dari header menunjukkan versi protokol yang digunakan.
Contohnya untuk versi 12 maka nilainya adalah 0x0c 0x00. Bagian Length
Gambar 2.2: Struktu r hea der generik Yahoo! Messenger [YCB07]
Gambar 2.3: Field da ta Yahoo! Messenger [YCB07]
II-15
menunjukkan panjang pesan dalam satuan byte pada bagian data.
Service Type merupakan jenis service yang merupakan kode yang menentukan
layanan apa yang di minta client pada server dan juga nilai balasan oleh server
sebagai respons-nya. Beberapa contoh layanan yang digunakan sekalian pengiriman
dan penerimaan pesan antara lain adalah layanan: buddies dan address book,
perubahan status, conference, file transfer, webcam dan sebagainya. Bagian Status
mengindikasikan status dari user yang dapat dilihat oleh user lain. Contoh status user
adalah YAHOO_STATUS_AVAILABLE (0x00000000) dan
YAHOO_STATUS_OFFLINE (0x5a55aa56). Bagian Session ID digunakan untuk
mengidentifikasi session yang didapat oleh user setelah mekanisme otentikasi terjadi.
2.2.1.2 Mekanisme Otentikasi ke Yahoo! Server
Gambar 2.5: Event pa da saa t login [YCB07]
Gambar 2.4: Referensi paket Yahoo! Messenger [YCB07]
II-16
Sebelum program apapun dapat menggunakan servis dari Yahoo!, client tersebut
harus melakukan otentikasi ke server Yahoo!. Mekanisme tersebut dinamakan sign-in.
Untuk melakukan sign-in terlebih dahulu user harus memiliki username dan
password yang didapat melalui proses registrasi pada website Yahoo!. Gambar 2.5
menampilkan bagaimana event yang terjadi pada saat terjadi proses sign-in. Tidak
semua event dalam gambar tersebut perlu dilakukan. Event yang opsional ditandai
dengan tanda “*”.
Langkah pertama pada proses sign-in adalah pengiriman paket Yahoo_Verify. Paket
ini digunakan untuk memeriksa apakah network path menuju server Yahoo! ada dan
bisa digunakan. Struktur paket Yahoo_Verify dapat dilihat pada Gambar 2.6 dan paket
balasan dari server Yahoo! dapat dilihat pada Gambar 2.7. Untuk paket Yahoo_Verify
dari client ke server, kode service yang digunakan adalah 0x76 dan field status
bernilai YAHOO_STATUS_AVAILABLE (0x00). Sedangkan dari server ke client,
status-nya bernilai YAHOO_STATUS_BRB (0x01).
Gambar 2.6: Paket Yahoo_Verify dari client ke server [YCB07]
Gambar 2.7: Balasan paket Yahoo_Verify dari server ke client [YCB07]
II-17
Setelah komunikasi telah diverifikasi, paket otorisasi Yahoo_Auth dikirimkan dari
client ke server. Paket ini berisi username dari user yang ingin login ke server
Yahoo!. Struktur paket tersebut dapat dilihat pada Gambar 2.8. Yahoo! Server akan
membalas paket tersebut dengan paket yang sama berisi: username, challenge string
dan Session ID. Session ID ini yang akan dipakai seterusnya selama
komunikasi sampai cilent dan server selesai berkomunikasi. Struktur paket
Yahoo_Auth dari server ke client dapat dilihat pada Gambar 2.9.
Setelah client menerima paket yang berisi challenge string, client akan melakukan
konkatenasi challenge string tersebut dengan password. Hasil konkatenasi string
tersebut lalu dihitung nilai hash nya dengan fungsi MD5. Kemudian nilai hash
tersebut akan dipecah menjadi dua filed data dengan FIELD ID 6 dan 96 lalu
dikirimkan ke server melalui paket Yahoo_AuthResp. Selain berisi nilai hash tersebut,
Gambar 2.8: Yahoo! A uthorization dari client ke server [YCB07]
Gambar 2.9: Yahoo! A uthorization dari server ke client [YCB07]
II-18
paket ini juga berisi data lain seperti username dan client version. Struktur paket dari
Yahoo_AuthResp dapat dilihat pada Gambar 2.9.
Dengan informasi ini, server akan melakukan otentikasi user tersebut.
2.2.1.3 Mekanisme Pengiriman Buddy List
Gambar 2.10: Respons Yahoo! A uthorization dari server [YCB07]
Gambar 2.11: Struktu r paket Yahoo_List [YCB07]
II-19
Setelah server melakukan otentikasi username dan password dari client, selanjutnya
server akan mulai mengirimkan daftar contact atau yang dikenal dengan nama buddy
list. Informasi buddy list tersebut dikirimkan melalui suatu paket bernama
Yahoo_List. Paket Yahoo_List merupakan paket pertama yang dapat berisi beberapa
YMSG header dan mungkin dikirimkan dalam beberapa paket. Hal tersebut
bergantung pada jumlah buddy dan jumlah ignored user yang dimiliki oleh suatu user.
Apabila dalam suatu paket terdapat beberapa YMSG header (multi header), maka
status dalam header tersebut diset sebagai YAHOO_STATUS_NOTINOFFICE
(0x00000004) sampai paket terakhir diterima. Beberapa kemungkinan bentuk struktur
paket Yahoo_List dapat dilihat pada Gambar 2.11. FIELD ID 87 digunakan untuk
mengirimkan buddy list dan FIELD ID 88 digunakan untuk mengirimkan ignored
user. Setelah buddy list selesai diterima, suatu paket lain menyusul diterima oleh
client. Paket ini adalah paket Yahoo_Ping yang berisi informasi buddy yang sedang
online dalam buddy list suatu user. Sebagaimana halnya paket Yahoo_List, paket
Yahoo_Ping juga dapat berisi multiple header, dalam beberapa paket atau mungkin
keduanya, tergantung dari jumlah user pada suatu buddy list.
2.2.1.4 Mekanisme Instant Messaging
Mekanisme instant messaging adalah service paling sederhana yang ditawarkan oleh
Yahoo!. Misalkan terdapat komunikasi antara user dengan username YUser1 dan
YUser2. Dilihat dari sudut pandang YUser1, ia mengirimkan paket seperti pada
Gambar 2.12. Paket ini berisi pengirim (sender), penerima (recipient), pesan
(message) dan informasi sistem yang lain. Karena sifat dari protokol Yahoo!
Messenger yang melakukan buffer pesan di server, YUser2 akan menerima paket
berbeda dari yang dikirimkan oleh YUser1. Paket tersebut disusun kembali dan
FIELD ID 5 akan berubah menjadi username yang mengirimkan pesan.
II-20
Paket ini dapat dilihat pada Gambar 2.13.
2.3 Protokol TCP/IPTCP/IP merupakan protokol komunikasi yang membuat komputer berbeda ukuran,
berbeda vendor dan menjalankan sistem operasi yang berbeda-beda untuk dapat saling
berkomunikasi [STE03]. TCP/IP merupakan open system yang berarti segala definisi
protokol dan implementasi dapat digunakan tanpa biaya. Protokol ini membentuk
basis dari apa yang kita kenal dengan worldwide Internet, Wide Area Network (WAN).
Protokol network biasanya dikembangkan dalam bentuk lapisan-lapisan (Layers).
Dimana tiap layer memiliki tanggung jawab khusus dalam komunikasi. Layer TCP/IP
memiliki 4 layer seperti yang ditunjukkan oleh Gambar 2.14.
Gambar 2.13: Paket IM di terima oleh YUser2[YCB07]
Gambar 2.12: Paket IM dikirimkan oleh YUser1 [YCB07]
II-21
Layer-layer pada TCP/IP tersebut adalah
1. Link layer, atau disebut juga dengan data-link layer. Biasanya terdapat dalam
driver dalam sistem operasi dan berkorespondensi dengan network interface
pada komputer tersebut. Layer ini bertanggung jawab untuk menangani
masalah hadrware dan layer fisik dari jaringan (kabel, radio dsb).
2. Network Layer, atau disebut dengan Internet Layer. Layer ini bertanggung
jawab untuk menangani masalah routing dari paket.
3. Transport Layer, Layer ini bertanggung jawab menangani aliran data diantara
dua host yang saling berkomunikasi.
4. Application layer. Menangani masalah detail dari aplikasi.
Protokol TCP/IP ini digunakan untuk mengirimkan paket-paket Yahoo! Messenger.
Gambar 2.14: Layer Protokol TCP /IP [STE03]