diff options
author | milo <milo@r0ot.me> | 2011-02-20 13:51:08 +0100 |
---|---|---|
committer | milo <milo@r0ot.me> | 2011-02-20 14:21:45 +0100 |
commit | a2634ceea8e121f141ecf6e283a04a9926933cc1 (patch) | |
tree | 02326d45be18d94edaad0ce680a2bed3d4b5ac78 /src | |
parent | ac8276c70e67e04ffbbcd68a9e7f69348a520fbd (diff) | |
download | libssh-a2634ceea8e121f141ecf6e283a04a9926933cc1.tar.gz libssh-a2634ceea8e121f141ecf6e283a04a9926933cc1.tar.xz libssh-a2634ceea8e121f141ecf6e283a04a9926933cc1.zip |
poll: Started to add a poll based event loop.
Diffstat (limited to 'src')
-rw-r--r-- | src/poll.c | 49 |
1 files changed, 49 insertions, 0 deletions
@@ -34,6 +34,11 @@ #include "libssh/poll.h" #include "libssh/socket.h" #include "libssh/session.h" +#ifdef WITH_SERVER +#include "libssh/server.h" +#include "libssh/misc.h" +#endif + #ifndef SSH_POLL_CTX_CHUNK #define SSH_POLL_CTX_CHUNK 5 @@ -678,6 +683,50 @@ ssh_poll_ctx ssh_poll_get_default_ctx(ssh_session session){ return session->default_poll_ctx; } +/* public event API */ + +struct ssh_event_struct { + ssh_poll_ctx ctx; +#ifdef WITH_SERVER + struct ssh_list *sessions; +#endif +}; + +/** + * @brief Create a new event context. It could be associated with many + * ssh_session objects and socket fd which are going to be polled at the + * same time as the event context. You would need a single event context + * per thread. + * + * @return The ssh_event object on success, NULL on failure. + */ +ssh_event ssh_event_new(void) { + ssh_event event; + + event = malloc(sizeof(struct ssh_event_struct)); + if (event == NULL) { + return NULL; + } + ZERO_STRUCTP(event); + + event->ctx = ssh_poll_ctx_new(2); + if(event->ctx == NULL) { + free(event); + return NULL; + } + +#ifdef WITH_SERVER + event->sessions = ssh_list_new(); + if(event->sessions == NULL) { + ssh_poll_ctx_free(event->ctx); + free(event); + return NULL; + } +#endif + + return event; +} + /** @} */ /* vim: set ts=4 sw=4 et cindent: */ |