J'écris une application qui utilise libwireshark
, bien que les détails ne sont pas entièrement pertinents ici.Enveloppant l'appelant/callbacks dans une seule fonction
Je prépare un paquet pour la bibliothèque à disséquer et appelle donc epan_dissect_run(packet)
, qui à son tour dissèque le paquet donné et appelle donc une fonction de rappel que j'ai spécifiée - en utilisant register_tap_listener()
.
Ma question est: comment puis-je envelopper ce processus dans une seule fonction, dissected_information* MyDissectPacket(packet)
? Cela s'applique non seulement à libwireshark
comme je l'ai souligné, mais aux bibliothèques qui font un usage judicieux des rappels en général. La réponse dépend-elle du fait que le rappel est exécuté de manière asynchrone, sur un autre thread ou sur les 2? Si le callback est exécuté de façon synchrone sur le même thread, cela rend-il le code de retour plus simple?
Peut-être que c'est mon Google-fu qui est faible - je ne sais pas quels termes je devrais utiliser, car cette question a sûrement été posée plusieurs fois auparavant.
Dans ce cas particulier, le travail est effectué de manière synchrone. Je suppose que ce que je cherche est un moyen d'accéder aux résultats de la dissection à partir de la fonction qui a appelé la routine de dissection. Je sais que cela pourrait être fait en utilisant des variables globales, mais sûrement il doit y avoir un meilleur moyen? –
qui retourne le résultat? –