diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2006-09-20 21:42:27 +0200 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2006-09-20 21:42:27 +0200 |
commit | 21167d2d14c333d67445546bb69dd52dd295287d (patch) | |
tree | 50c010702a3487c666ad8e614b25879de258d9cf /protocols/jabber/jabber.c | |
parent | f06894d8f55b50b632c1d81ad878f8581273ba66 (diff) |
It can send a valid (pre-XMPP) login packet. Lots of work to do, still...
Diffstat (limited to 'protocols/jabber/jabber.c')
-rw-r--r-- | protocols/jabber/jabber.c | 69 |
1 files changed, 46 insertions, 23 deletions
diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c index 0a091b06..9732d6eb 100644 --- a/protocols/jabber/jabber.c +++ b/protocols/jabber/jabber.c @@ -27,6 +27,7 @@ #include <ctype.h> #include <stdio.h> +#include "ssl_client.h" #include "xmltree.h" #include "bitlbee.h" #include "jabber.h" @@ -54,14 +55,58 @@ static void jabber_acc_init( account_t *acc ) static void jabber_login( account_t *acc ) { + struct gaim_connection *gc = new_gaim_conn( acc ); + struct jabber_data *jd = g_new0( struct jabber_data, 1 ); + + jd->gc = gc; + gc->proto_data = jd; + + jd->username = g_strdup( acc->user ); + jd->server = strchr( jd->username, '@' ); + + if( jd->server == NULL ) + { + hide_login_progress( gc, "Incomplete account name (format it like <username@jabberserver.name>)" ); + signoff( gc ); + return; + } + + /* So don't think of free()ing jd->server.. :-) */ + *jd->server = 0; + jd->server ++; + + if( set_getbool( &acc->set, "ssl" ) ) + { + signoff( gc ); + /* TODO! */ + } + else + { + jd->fd = proxy_connect( jd->server, set_getint( &acc->set, "port" ), jabber_connected_plain, gc ); + } } static void jabber_close( struct gaim_connection *gc ) { + struct jabber_data *jd = gc->proto_data; + + if( jd->r_inpa >= 0 ) + b_event_remove( jd->r_inpa ); + if( jd->w_inpa >= 0 ) + b_event_remove( jd->w_inpa ); + + if( jd->ssl ) + ssl_disconnect( jd->ssl ); + if( jd->fd >= 0 ) + closesocket( jd->fd ); + + g_free( jd->username ); + g_free( jd ); } static int jabber_send_im( struct gaim_connection *gc, char *who, char *message, int len, int away ) { + return 0; } void jabber_init() @@ -95,28 +140,6 @@ void jabber_init() register_protocol(ret); } -static xt_status jabber_end_of_stream( struct xt_node *node, gpointer data ) -{ - return XT_ABORT; -} - -static xt_status jabber_pkt_misc( struct xt_node *node, gpointer data ) -{ - printf( "Received unknown packet:\n" ); - xt_print( node ); - - return XT_HANDLED; -} - -static const struct xt_handler_entry jabber_handlers[] = { - { "stream:stream", "<root>", jabber_end_of_stream }, - { "iq", "stream:stream", jabber_pkt_iq }, - { "message", "stream:stream", jabber_pkt_message }, - { "presence", "stream:stream", jabber_pkt_presence }, - { NULL, "stream:stream", jabber_pkt_misc }, - { NULL, NULL, NULL } -}; - #if 0 int main( int argc, char *argv[] ) { @@ -144,4 +167,4 @@ int main( int argc, char *argv[] ) xt_free( xt ); } -#endif
\ No newline at end of file +#endif |