Yine honeyd içinde olmazsa olmaz bir kütüphaneyi araştırma sonuçlarında bu libevent kodlarını sadece incelemekle kalmadım birazcık üzerinde denemeler de yaptım. Libevent bir dosya tanımlayıcısı üzerinde bir durumun gerçekleştiğinde ya da herhangi bir zaman aşımı olduğunda çalışması için geri çağrılan işlevleri çalıştırmayı sağlayan bir kütüphanedir. Neredeyse bütün işletim sistemlerinde derlenebilir. Çok farklı şekillerde durum kütüphanesini kullanmak mümkün. Nasıl mı? 1. Event notification : Her dosya tanımlayıcısını izlemek içindir. "event.h" * event_set() * event_add() * event_del() 2. I/O Buffers : tampon giriş çıkışlarını otomatikleştirir. "event.h" * evtimer_set() * evtimer_add() * evtimer_del() 3. Timers : belirli bir zaman süre sonra çalıştırılması için beklenen fonksiyonlar için özelleştirilmiştir. "event.h" * evtimer_set() * evtimer_add() * evtimer_del() 4. Timeouts : timers ile aynı şekilde çalışır. "event.h" * timeout_set() * timeout_add() * timeout_del() 5. Asynchronous DNS resolution : standart DNS çözümleme fonksiyonlarının yerine kullanılır. "evdns.h" * evdns_init() * evdns_resolve_ipv4() * evdns_resolve_reverse() 6. Event-driven HTTP servers : Uygulama içine basit bir olay-dayalı HTTP sunucusu sağlar. "evhttp.h" * evhttp_new() * evhttp_bind_socket() * evhttp_set_cb() * evhttp_set_gencb() 7. A framework for RPC servers and clients : RPC sunucu ve kullanıcı oluşturmak için bir iskelet oluşturur. "evrpc.h" 1. Durum Bildirimi ( Event Notification ) Fonksiyonları: struct event_base * event_init(); Bu fonksiyon event API sini kullanmadan önce gerekli olan fonksiyondur bir libevent çalışma mantığında event_init() ile başlar event_dispatch() ile son bulur. event_base_new() fonksiyonu ile birlikte yeni bir event_base yapısı oluşturur ve global "current_base" olarak bunu tutar. void event_set(struct event *ev, int fd, short event, void (*fn)(int, short, void *), void *arg); Bu fonksiyon event_add() ve even_del() fonksiyonlarının çağrılması için event yapısını hazırlar. parametre olarak gönderilen event yapısının içeriğini doldurur. event_init() ile oluşturulan current_base, parametre ile gönderilen fd, event, fn, arg parametreleri yapı içine atanır. EV_READ, EV_WRITE, EV_TIMEOUT, EV_SIGNAL durumları ile "fd" dosya tanımlayıcısını işaret eder. bu tanımlamalar event.h içerisinde sayısal değerleriyle belirtilmiştir.Bunların dışında EV_PERSIST event_add ile eklenir ve event_del ile karşılaşana kadar kalıcılığı sağlar. int event_add(struct event *ev, struct timeval *tv); ev durumu için eğer bir timeval yapısı ile zaman belirlenmişse bu zaman sonra event_set() ile atanan fn fonksiyonu çalışmasını sağlar. eğer bir timeval yerine NULL atanırsa bir giriş yapılmasını bekler ve event_set() içine yazdığımız "short event" bayraklarına göre davranışı değişir. timeval yapısı sys/time.h dosyasında bulunur ve içerisinde saniye ve mikrosaniye tutulur. int event_dispatch(void); süreçler döngüye girerler ve çalıştırılması için atanan fonksiyonlar istenilen tetikleme ile çalıştırılmaya hazır olurlar. ------------------------------------------------------------------------------------------------- ... #include " event.h" void callback1(int fd, short evtype, void *data)· { printf(" yaklaşık %d saniye sonra callback1 fonksiyonu çalıştı \n\n",(int)data); } void callback2(int fd, short evtype, void *data)· { printf(" yaklaşık %d saniye sonra callback2 fonksiyonunu çalıştı \n\n",(int)data); } int main() { struct event ev, ev2; int fd = open("/var/log/messages", O_RDONLY); struct timeval timevl,timevl2; // timevl.tv_sec =2; timevl.tv_usec=0; timevl2.tv_sec=5; timevl2.tv_usec=0; event_init(); event_set(&ev, 0, EV_READ | EV_PERSIST , callback1, timevl.tv_sec); event_set(&ev2, 0, EV_READ | EV_PERSIST , callback2, timevl2.tv_sec); event_add(&ev, &timevl); event_add(&ev2, &timevl2); event_dispatch(); return 0; } -------------------------------------------------------------------------------------------------- Burada çıktı timeval da verilen saniyeye göre belirlenir. timevl 2 sn timevl2 5 sn olarak belirlendiği için önce callback1 fonksiyonu daha sonra da callback2 fonksiyonu çalışır. callback1 program çalıştıktan 2 sn sonra çalışmaya başlar daha sonra 3 saniye sonra callback2 çalışmaya başlar. ayarlanan zaman ilk çalışma anına göre belirlenen zamandır. EV_READ girdi ile işlem EV_WRITE hemen işlem EV_TIMEOUT işlem yok EV_PERSIST işlem yok EV_READ | EV_TIMEOUT girdi ile işlem EV_WRITE | EV_PERSIST hemen işlem ve sonsuza kadar EV_READ | EV_PERSIST girdi ile sonsuza kadar işlem e-posta listesi: http://monkeymail.org/mailman/listinfo/libevent-users dökümanları : http://www.monkey.org/~provos/libevent/doxygen-1.4.3/index.html
17-18 Nisan da düzenlenen 8. Linux ve Özgür Yazılım Şenliiği İstanbul Bilgi Üniversitesi Dolapdere Kampüsündeydi. Biz de Çanakkale Onsekiz Mart Üniversitesi olarak COBIT' in katkılarıyla yaklaşık 40 kişi oradaydık.
Açılış Konuşması Chris Stephenson
Javascript: The Good Parts * Douglas Crockford
Linux Nasıl Savunulmaz ve Tanıtılmaz Enver Altın
Özgür Yazılımlar ile VoIP Denetimi Fatih Özavcı How Embracing Open Source Built Google * Jonathan Conradt OpenOffice.org Hakan Hamurcu, Mehmet Pekgenç Özgür Yazılım ve Çalışma Kültürü Chris Stephenson Özgür İnsan Kaynağı ve İş Hayatı Barış Şimşek Ağ Sunucusu Geliştirme Teknikleri Serdar Köylü diğer etkinlikler... Katıldığım bu etkinlikler de Douglas Crockford, Jonathan Conradt' ın yaptıkları sunumlar çok etkileyiciydi. Socket Programlama hakkında bilgiler veren Serdar Köylü' nün uzun sunumu da tam da zamanında verilmiş bir sunumdu. Bu aralar bitirme projesi için çalıştığım "socket" programlama için özel bir sunum oldu sanki bana ama maalesef Çanakkale' ye dönüş otobüsüne yetişmek zorunda olduğum için sunumun sonunu getiremedim. Özgür yazılıma gönül vermiş insanların bir arada bulunması ve bir kaygısı olmadan özveriyle birilerine birşeyler anlatan bütün konuşmacılara teşekkür ederim. Umarım zamanı geldiğinde ben de o konuşmacılar arasında olabilirim.

About

seruhatto