aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2015-07-24 16:09:48 +0200
committerAris Adamantiadis <aris@0xbadc0de.be>2017-06-08 10:45:53 +0200
commitf68f59c71a3d2ab7dd146489f81b0e9876b2cbe9 (patch)
tree556a1634eef27cdc32be787f3031ba244a2718b9
parent0cffb88b80b1e8b7e292646b955e9b9ca02315c4 (diff)
downloadlibssh-f68f59c71a3d2ab7dd146489f81b0e9876b2cbe9.tar.gz
libssh-f68f59c71a3d2ab7dd146489f81b0e9876b2cbe9.tar.xz
libssh-f68f59c71a3d2ab7dd146489f81b0e9876b2cbe9.zip
packets: allow removal of callbacks
-rw-r--r--include/libssh/packet.h1
-rw-r--r--src/packet.c11
2 files changed, 12 insertions, 0 deletions
diff --git a/include/libssh/packet.h b/include/libssh/packet.h
index 3a84eb70..30fbbc15 100644
--- a/include/libssh/packet.h
+++ b/include/libssh/packet.h
@@ -74,6 +74,7 @@ int ssh_packet_parse_type(ssh_session session);
int ssh_packet_socket_callback(const void *data, size_t len, void *user);
void ssh_packet_register_socket_callback(ssh_session session, struct ssh_socket_struct *s);
void ssh_packet_set_callbacks(ssh_session session, ssh_packet_callbacks callbacks);
+void ssh_packet_remove_callbacks(ssh_session session, ssh_packet_callbacks callbacks);
void ssh_packet_set_default_callbacks(ssh_session session);
void ssh_packet_process(ssh_session session, uint8_t type);
diff --git a/src/packet.c b/src/packet.c
index 33943aef..634bf3b3 100644
--- a/src/packet.c
+++ b/src/packet.c
@@ -405,6 +405,17 @@ void ssh_packet_set_callbacks(ssh_session session, ssh_packet_callbacks callback
}
/** @internal
+ * @brief remove the callbacks from the packet layer
+ */
+void ssh_packet_remove_callbacks(ssh_session session, ssh_packet_callbacks callbacks){
+ struct ssh_iterator *it;
+ it = ssh_list_find(session->packet_callbacks, callbacks);
+ if (it != NULL){
+ ssh_list_remove(session->packet_callbacks, it);
+ }
+}
+
+/** @internal
* @brief sets the default packet handlers
*/
void ssh_packet_set_default_callbacks(ssh_session session){