BAB II DASAR TEORI 2
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 Android Android 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 ,, 1
,, 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 Android Android 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: Arsitekt u r platfor m And r oi d [DOC08]
,, 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
,, 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 .
,, 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.
,, 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
,, 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
,, 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 IntentReceivernya 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.
,, 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.
,, 1 0 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
,, 1 1 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.
,, 1 2
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
,, 1 3 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
,, 1 4 dibahas pada sub bab 3.3.1. Struktur paket yang baru dapat dilihat pada Gambar 3.4.
Gambar 2.2 : Str uk t u r h ea d e r ge ne rik Yahoo! Mes se nger [YCB07]
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.
Gambar 2.3: Field d a t a Yahoo! Messe nger [YCB07]
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
,, 1 5 menunjukkan panjang pesan dalam satuan byte pada bagian data.
Gambar 2.4: Refere n si p a ke t Yahoo! Messe nge r [YCB07]
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 p a d a s aa t login [YCB07]
,, 1 6 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 d a ri client ke server [YCB07]
Gambar 2.7: Balasa n p a ket Yahoo_Verify d a ri server ke client [YCB07]
,, 1 7 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.
Gambar 2.8: Yahoo! A u t hori z ation d a ri client ke server [YCB07]
Gambar 2.9: Yahoo! A u t hori z ation d a ri server ke client [YCB07]
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,
,, 1 8 paket ini juga berisi data lain seperti username dan client version. Struktur paket dari Yahoo_AuthResp dapat dilihat pada Gambar 2.9.
Gambar 2.1 0 : Res p on s Yahoo! A ut hori z ation d a ri server [YCB07]
Dengan informasi ini, server akan melakukan otentikasi user tersebut. 2.2.1.3 Mekanisme Pengiriman Buddy List
Gambar 2.1 1 : Str uk t u r p a ke t Yahoo_List [YCB07]
,, 1 9 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.
,, 2 0 Paket ini dapat dilihat pada Gambar 2.13.
Gambar 2.1 2 : Paket IM dikiri m k a n ole h YUser 1 [YCB07]
Gambar 2.1 3 : Paket IM di teri m a oleh YUser2[YCB07]
2.3 Protokol TCP/IP TCP/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.
,, 2 1
Gambar 2.1 4 : Layer Prot okol TCP /IP [STE03]
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.