diff --git a/README b/README index e516462a..706a1bd3 100644 --- a/README +++ b/README @@ -1,30 +1,29 @@ -Ncurses based Irssi inspired IM client. +Ncurses based Irssi inspired Jabber client. -Requires ncurses and libstrophe. +Requires ncurses. -To make: +Note +---- +Currently requires modified version of libstrophe +found at: + + git://github.com/boothj5/libstrophe.git - make - -To run: - - ./profanity - -WORKLIST: +WORKLIST +-------- Features: + Disable server tls with command line parameter + Trim domain/resourse from usernames in UI + Allow subscription management + Allow presence notification Dont start chat window when no such recipient - Handle resize terminal in X windows - Secure XMPP - Window buffers for scrolling, with page up and down + Handle resize terminal + Window buffers for scrolling Left right arrow keys whilst typing commands Up down arrow keys for command history - -Bugs: - Correctly handling string lengths - -One day: + Managing and storing user profiles Other IM protocols - Log chat history to file option + Support chat logging Tab completion on commands Tab completion on users diff --git a/roster.c b/roster.c deleted file mode 100644 index 5b42376a..00000000 --- a/roster.c +++ /dev/null @@ -1,182 +0,0 @@ -/* roster.c -** libstrophe XMPP client library -- handler example -** -** Copyright (C) 2005-2009 Collecta, Inc. -** -** This software is provided AS-IS with no warranty, either express -** or implied. -** -** This software is distributed under license and may not be copied, -** modified or distributed except as expressly authorized under the -** terms of the license contained in the file LICENSE.txt in this -** distribution. -*/ - -/* This example demonstrates basic handler functions by printing out -** the user's roster. -*/ - -#include -#include - -#include - -//#define DEFAULT_TIMEOUT 60000 - -/** @def FEATURES_TIMEOUT - * Time to wait for <stream:features/> stanza. - */ -//#define FEATURES_TIMEOUT 60000 /* 15 seconds */ - -/** @def BIND_TIMEOUT - * Time to wait for <bind/> stanza reply. - */ -//#define BIND_TIMEOUT 60000 /* 15 seconds */ - -/** @def SESSION_TIMEOUT - * Time to wait for <session/> stanza reply. - */ -//#define SESSION_TIMEOUT 60000 /* 15 seconds */ - -/** @def LEGACY_TIMEOUT - * Time to wait for legacy authentication to complete. - */ -//#define LEGACY_TIMEOUT 60000 /* 15 seconds */ - -/** @def DEFAULT_SEND_QUEUE_MAX - * The default maximum send queue size. This is currently unused. - */ -//#define DEFAULT_SEND_QUEUE_MAX 64 - -/** @def DISCONNECT_TIMEOUT - * The time to wait (in milliseconds) for graceful disconnection to - * complete before the connection is reset. The default is 2 seconds. - */ -//#define DISCONNECT_TIMEOUT 60000 /* 2 seconds */ - -/** @def CONNECT_TIMEOUT - * The time to wait (in milliseconds) for a connection attempt to succeed - * or error. The default is 5 seconds. - */ -//#define CONNECT_TIMEOUT 60000 /* 5 seconds */ - -int handle_reply(xmpp_conn_t * const conn, - xmpp_stanza_t * const stanza, - void * const userdata) -{ - xmpp_stanza_t *query, *item; - char *type, *name; - - type = xmpp_stanza_get_type(stanza); - if (strcmp(type, "error") == 0) - fprintf(stderr, "ERROR: query failed\n"); - else { - query = xmpp_stanza_get_child_by_name(stanza, "query"); - printf("Roster:\n"); - for (item = xmpp_stanza_get_children(query); item; - item = xmpp_stanza_get_next(item)) - if ((name = xmpp_stanza_get_attribute(item, "name"))) - printf("\t %s (%s) sub=%s\n", - name, - xmpp_stanza_get_attribute(item, "jid"), - xmpp_stanza_get_attribute(item, "subscription")); - else - printf("\t %s sub=%s\n", - xmpp_stanza_get_attribute(item, "jid"), - xmpp_stanza_get_attribute(item, "subscription")); - printf("END OF LIST\n"); - } - - /* disconnect */ - xmpp_disconnect(conn); - - return 0; -} - -void conn_handler(xmpp_conn_t * const conn, const xmpp_conn_event_t status, - const int error, xmpp_stream_error_t * const stream_error, - void * const userdata) -{ - xmpp_ctx_t *ctx = (xmpp_ctx_t *)userdata; - xmpp_stanza_t *iq, *query; - - if (status == XMPP_CONN_CONNECT) { - fprintf(stderr, "DEBUG: connected\n"); - - /* create iq stanza for request */ - iq = xmpp_stanza_new(ctx); - xmpp_stanza_set_name(iq, "iq"); - xmpp_stanza_set_type(iq, "get"); - xmpp_stanza_set_id(iq, "roster1"); - - query = xmpp_stanza_new(ctx); - xmpp_stanza_set_name(query, "query"); - xmpp_stanza_set_ns(query, XMPP_NS_ROSTER); - - xmpp_stanza_add_child(iq, query); - - /* we can release the stanza since it belongs to iq now */ - xmpp_stanza_release(query); - - /* set up reply handler */ - xmpp_id_handler_add(conn, handle_reply, "roster1", ctx); - - /* send out the stanza */ - xmpp_send(conn, iq); - - /* release the stanza */ - xmpp_stanza_release(iq); - } else { - fprintf(stderr, "DEBUG: disconnected\n"); - xmpp_stop(ctx); - } -} - -int main(int argc, char **argv) -{ - xmpp_ctx_t *ctx; - xmpp_conn_t *conn; - - if (argc != 3) { - fprintf(stderr, "Usage: roster \n\n"); - return 1; - } - - /* initialize lib */ - xmpp_initialize(); - - /* create a context */ - ctx = xmpp_ctx_new(NULL, xmpp_get_default_logger(XMPP_LEVEL_DEBUG)); - - /* create a connection */ - conn = xmpp_conn_new(ctx); - - /* setup authentication information */ - xmpp_conn_set_jid(conn, argv[1]); - xmpp_conn_set_pass(conn, argv[2]); - - /* initiate connection */ - char *domain = strchr(argv[1], '@'); - domain++; - - printf("Domain = %s\n", domain); - - if (strcmp(domain, "framework") == 0) - xmpp_conn_disable_tls(conn); - - xmpp_connect_client(conn, NULL, 0, conn_handler, ctx); - - printf("CONNECT CLIENT CALLED\n"); - - /* start the event loop */ - xmpp_run(ctx); - - /* release our connection and context */ - xmpp_conn_release(conn); - xmpp_ctx_free(ctx); - - /* shutdown lib */ - xmpp_shutdown(); - - return 0; -}