Thread Hilfe bei Code analyse
(5 answers)
Opened by stefan at 2010-09-06 21:42
Hallo,
was der Code genau macht, kann ich Dir auch nicht sagen, weil Du hier nur kleine Bruchstücke des Codes gepostet hast. Vermutlich ist die Aufgabe für so ein Forum auch zu komplex. (Zudem kenne ich mich mit den Net::UDAP-Modulen nicht aus.) Aber ein paar (hoffentlich hilfreiche) Hinweise kann ich Dir doch geben: Fangen wir bei MessageOut->packed() an. $str .= $self->method; hängt einfach das Ergebnis der jeweiligen Methode des Objekts an den Ergebnis-String $str dran, der zum Schluss zurückgegeben wird, als letztes $self->ucp_method. Anschließend gibt es noch einen großen SWITCH-Block, bei dem der String in Abhängigkeit von ucp_method() noch um einige Felder erweitert wird. Falls ucp_method() gleich der Konstante UCP_METHOD_DISCOVER ist, wird nichts drangehängt sondern gleich aus dem SWITCH-Block wieder rausgesprungen (do {last SWITCH;};). Was die einzelnen Methoden $self->dst_broadcast() etc. machen, kann ich Dir nicht sagen, da Du den Code, mit dem sie angelegt/definiert werden, nicht gepostet hast. Vielleicht - das ist eine reine Vermutung - gibt es eine AUTOLOAD-Funktion, mit der die Methoden automatisch definiert werden und die auf die gleichnamigen Werte des MessageOut zu Grunde liegenden Hashes zurückgreift. new($arg_ref) legt ein Hash mit den Defaultwerten aus %fields_default an. Diese werden dann ggf. durch die entsprechenden Werte aus einem Hash, das mit $arg_ref übergeben wird, überschrieben. Anschließend gibt es wieder ein SWITCH. Für $arg_ref->{ucp_method} eq UCP_METHOD_DISCOVER werden hier die Felder dst_broadcast und dst_mac zu BROADCAST_ON bzw. MAC_ZERO gesetzt und eine Fehlermeldung ausgegeben falls das Feld src_ip leer, 0 oder sonstwie false ergibt. Dieser Hash wird dann mit bless zu einem Objekt veredelt. send_msg() legt auf ähnliche Weise ein Hash %$msg_args an, dass dann als Argument $arg_ref an Net::UDAP::MessageOut->new() übergeben wird. Heraus kommt das Objekt in $msg_ref, dessen Methode packed() später aufegrufen wird. Last edited: 2010-09-08 11:27:43 +0200 (CEST) |