On Sun, Sep 02, 2012 at 04:28:04PM +0200, Tomasz Wasilczyk wrote:
> Napisałem prototyp wspomnianego bufora, do odczytywania pakietów
> GG11 - nazwa robocza "safe const buffer". Działa to w ten sposób, że
> sobie odczytujemy z takiego bufora po kolei co chcemy, a on sam
> pamięta w którym miejscu jest oraz czy nie wychodzimy poza bufor.
> Poprawność odczytu można sprawdzić jednorazowo, na samym końcu. W
> rezultacie, zamiast kodu, możemy uzyskać kod.
> 
> Co o tym myślicie? Mogę to spokojnie implementować i opierać obsługę
> gg11 o to narzędzie? To mi bardzo ułatwi pracę i poprawi jakość kodu.

Ja raczej byłbym za stworzeniem funkcji podobnych do pack/unpack[1][2].

Przykładzik:
#v+
struct {
  uint8_t magic1; /* 0x08 */
  uint8_t magic2; /* 0x00 */
  uint8_t magic3; /* 0x10 */
  uint16_t seq;
  uint8_t magic4;  /* 0x1a */   
  char *data;
} pkt = { };

ptr = gg_unpack(ptr, &len, "CCCvCZ", &pkt.magic1, &pkt.magic2, &pkt.magic3, 
&pkt.seq, &pkt.magic4, &pkt.data);
if (ptr == NULL || pkt.magic1 != 0x08 || pkt.magic2 != 0x0 || pkt.magic != 0x10 
|| pkt.magic3 != 0x1a) {
  free(pkt.data);
  return -1;
}

ge->event.xml_event.data = pkt.data;
return gg_ack_gg11(gs, GG_ACK110_MPA, pkt.seq, ge);
#v-

(gg_unpack() zwraca wskaźnik na koniec przetworzonego bufora, aktualizując 
*len, 
 lub zwraca NULL w przypadku błędu [np. wyjście za bufor]).

Nie upieram się zarówno przy zwracanej wartości (endptr może być parametrem, a 
f. może zwracać 0/-1) ani 
przy formacie "CCCvCZ". 
Możemy stosować dowolnie inne literki, lub nawet cyferki ('1' [uint8], '2' 
[uint16], '4' [uint32]).

Dla zainteresowanych formaty w d-bus[3] i pythonie[4], modułu icq w ekg2[5]

Pozdr,
 Kuba.

[1] http://perldoc.perl.org/functions/pack.html
[2] http://www.perlmonks.org/?node_id=224666
[3] http://dbus.freedesktop.org/doc/dbus-specification.html#type-system
[4] http://docs.python.org/library/struct.html#format-characters
[5] https://github.com/leafnode/ekg2/blob/master/plugins/icq/misc.c 
(/icq_unpack_common)
_______________________________________________
libgadu-devel mailing list
libgadu-devel@lists.ziew.org
http://lists.ziew.org/mailman/listinfo/libgadu-devel

Reply via email to